Module: Rubydora::Ext::ModelLoader::ModelLoaderMixin

Defined in:
lib/rubydora/ext/model_loader.rb

Class Method Summary collapse

Class Method Details

.extended(document) ⇒ Object

Parameters:

  • base (Class)


22
23
24
25
26
27
28
29
30
31
32
# File 'lib/rubydora/ext/model_loader.rb', line 22

def self.extended(document)
  self.module_names(document).each do |model|
    document.class.extension_parameters[:ModelLoaderMixin][:namespaces].each do |ns|
      begin
        mod = self.string_to_constant [ns, model].compact.map { |x| x.to_s }.join("/")
        document.send(:extend, mod)
      rescue NameError, LoadError
      end
    end
  end
end

.string_to_constant(lower_case_and_underscored_word) ⇒ Module

convert a model string to a Ruby class (see ActiveSupport::Inflector#constantize)

Parameters:

  • lower_case_and_underscored_word (String)

Returns:

  • (Module)


37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/rubydora/ext/model_loader.rb', line 37

def self.string_to_constant lower_case_and_underscored_word
  camel_cased_word = lower_case_and_underscored_word.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }

  names = camel_cased_word.split('::')
  names.shift if names.empty? || names.first.empty?

  constant = Object
  names.each do |name|
    if Module.method(:const_get).arity == 1
    constant = constant.const_defined?(name) ? constant.const_get(name) : constant.const_missing(name)
    else
    constant = constant.const_defined?(name,false) ? constant.const_get(name) : constant.const_missing(name)
    end
  end
  constant
end