Module: ClassX::Pluggable::ClassMethods

Public Instance Methods


component_class_get (type, name, options={})

     # File lib/classx/pluggable.rb, line 178
178:       def component_class_get type, name, options={}
179:         case name
180:         when ::Class
181:           return name
182:         else
183:           mod_name = nil
184:           target_name = nil
185:           if name =~ /\A\+([\w:]+)\z/
186:             target_name = $1
187:             mod_name = [ self, type.capitalize, target_name ].join("::")
188:           else
189:             mod_name = name
190:           end
191:           begin
192:             return nested_const_get(mod_name)
193:           rescue NameError => e
194:             begin
195:               if options[:plugin_dir]
196:                 options[:plugin_dir].each do |path|
197:                   begin
198:                     begin
199:                       self.const_get(type.capitalize).autoload(name, File.expand_path(File.join(path, module2path(target_name))))
200:                     rescue LoadError => e
201:                       raise ::ClassX::Pluggable::PluginLoadError, "class: #{mod_name} is not found"
202:                     end
203:                     return nested_const_get(mod_name)
204:                   rescue NameError => e
205:                     next
206:                   end
207:                   raise NameError, "must not happened unless your code is something wrong!!"
208:                 end
209:               else
210:                 nested_autoload(mod_name, module2path(mod_name))
211:                 nested_const_get mod_name
212:               end
213:             rescue LoadError => e
214:               raise ::ClassX::Pluggable::PluginLoadError, "class: #{mod_name} is not found."
215:             end
216:           end
217:         end
218:       end