| Class | ActiveLdap::GetText::Parser |
| In: |
lib/active_ldap/get_text/parser.rb
|
| Parent: | Object |
# File lib/active_ldap/get_text/parser.rb, line 9
9: def initialize(configuration=nil)
10: configuration = ensure_configuration(configuration)
11: configuration = default_configuration.merge(configuration)
12:
13: configuration = extract_options(configuration)
14: ActiveLdap::Base.setup_connection(configuration)
15: end
# File lib/active_ldap/get_text/parser.rb, line 37
37: def extract_all_in_schema(targets=[])
38: extract(targets) do
39: schema = ActiveLdap::Base.schema
40: schema.object_classes.each do |object_class|
41: register_object_class(object_class, "-")
42: end
43: schema.attributes.each do |attribute|
44: register_attribute(attribute, "-")
45: end
46: schema.ldap_syntaxes.each do |syntax|
47: register_syntax(syntax, "-")
48: end
49: end
50: end
# File lib/active_ldap/get_text/parser.rb, line 17
17: def parse(file, targets=[])
18: targets = RubyParser.parse(file, targets) if RubyParser.target?(file)
19: extract(targets) do
20: load_constants(file).each do |name|
21: klass = name.constantize
22: next unless klass.is_a?(Class)
23: next unless klass < ActiveLdap::Base
24: register(klass.name.singularize.underscore.gsub(/_/, " "), file)
25: next unless @extract_schema
26: klass.classes.each do |object_class|
27: register_object_class(object_class, file)
28: end
29: end
30: end
31: end
# File lib/active_ldap/get_text/parser.rb, line 33
33: def target?(file)
34: @classes_re.match(File.read(file))
35: end
# File lib/active_ldap/get_text/parser.rb, line 61
61: def default_configuration
62: {
63: :host => "127.0.0.1",
64: :allow_anonymous => true,
65: :extract_schema => false,
66: }
67: end
# File lib/active_ldap/get_text/parser.rb, line 69
69: def ensure_configuration(configuration)
70: configuration ||= ENV["RAILS_ENV"] || {}
71: if configuration.is_a?(String)
72: if File.exists?(configuration)
73: require 'erb'
74: require 'yaml'
75: erb = ERB.new(File.read(configuration))
76: erb.filename = configuration
77: configuration = YAML.load(erb.result)
78: else
79: ENV["RAILS_ENV"] = configuration
80: require 'config/environment'
81: configuration = ActiveLdap::Base.configurations[configuration]
82: end
83: end
84: if Object.const_defined?(:RAILS_ENV)
85: rails_configuration = ActiveLdap::Base.configurations[RAILS_ENV]
86: configuration = rails_configuration.merge(configuration)
87: end
88: configuration = configuration.symbolize_keys
89: end
# File lib/active_ldap/get_text/parser.rb, line 103
103: def extract(targets)
104: @targets = {}
105: targets.each do |id, *file_infos|
106: @targets[id] = file_infos
107: end
108: yield
109: @targets.collect do |id, file_infos|
110: [id, *file_infos.uniq]
111: end.sort_by do |id,|
112: id
113: end
114: end
# File lib/active_ldap/get_text/parser.rb, line 53
53: def extract_options(configuration)
54: configuration = configuration.dup
55: classes = configuration.delete(:classes) || ["ActiveLdap::Base"]
56: @classes_re = /class.*#{Regexp.union(*classes)}/ #
57: @extract_schema = configuration.delete(:extract_schema)
58: configuration
59: end
# File lib/active_ldap/get_text/parser.rb, line 91
91: def load_constants(file)
92: old_constants = Object.constants
93: begin
94: eval(File.read(file), TOPLEVEL_BINDING, file)
95: rescue
96: format = _("Ignored '%{file}'. Solve dependencies first.")
97: $stderr.puts(format % {:file => file})
98: $stderr.puts($!)
99: end
100: Object.constants - old_constants
101: end
# File lib/active_ldap/get_text/parser.rb, line 116
116: def register(id, file)
117: file_info = "#{file}:-"
118: @targets[id] ||= []
119: @targets[id] << file_info
120: end
# File lib/active_ldap/get_text/parser.rb, line 139
139: def register_attribute(attribute, file)
140: [attribute.name, *attribute.aliases].each do |name|
141: msgid = ActiveLdap::Base.human_attribute_name_msgid(name)
142: register(msgid, file) if msgid
143: end
144: if attribute.description
145: msgid = ActiveLdap::Base.human_attribute_description_msgid(attribute)
146: register(msgid, file)
147: end
148: end
# File lib/active_ldap/get_text/parser.rb, line 122
122: def register_object_class(object_class, file)
123: [object_class.name, *object_class.aliases].each do |name|
124: register(ActiveLdap::Base.human_object_class_name_msgid(name), file)
125: end
126: if object_class.description
127: msgid =
128: ActiveLdap::Base.human_object_class_description_msgid(object_class)
129: register(msgid, file)
130: end
131: (object_class.must(false) + object_class.may(false)).each do |attribute|
132: register_attribute(attribute, file)
133: end
134: object_class.super_classes.each do |super_class|
135: register_object_class(super_class, file)
136: end
137: end
# File lib/active_ldap/get_text/parser.rb, line 150
150: def register_syntax(syntax, file)
151: msgid = ActiveLdap::Base.human_syntax_name_msgid(syntax)
152: register(msgid, file)
153:
154: if syntax.description
155: msgid = ActiveLdap::Base.human_syntax_description_msgid(syntax)
156: register(msgid, file)
157: end
158: end