module Datamappify::Data::Provider::CommonProvider::ModuleMethods

Public Instance Methods

class_name() click to toggle source

Non-namespaced class name

@return [String]

# File lib/datamappify/data/provider/common_provider.rb, line 22
def class_name
  @class_name ||= name.demodulize
end
find_or_build_record_class(source_class_name) click to toggle source

Finds or builds a data record class from the data provider

@param source_class_name [String]

@return [Class]

the data record class
# File lib/datamappify/data/provider/common_provider.rb, line 37
def find_or_build_record_class(source_class_name)
  namespace    = build_or_return_namespace(source_class_name)
  record_class = source_class_name.safe_constantize

  # check for existing record class
  if record_class && !entity_class?(source_class_name)
    record_class

  # check for existing record class in the Datamappify::Data::Record::Provider namespace
  elsif namespace.const_defined?(source_class_name.demodulize, false)
    namespace.const_get(source_class_name.demodulize)

  # no existing record class is found, let's build it
  else
    build_record_class(source_class_name)
  end
end
load_criterias() click to toggle source

Loads all the criteria files from the data provider

@return [void]

# File lib/datamappify/data/provider/common_provider.rb, line 15
def load_criterias
  Dir[Datamappify.root.join("data/criteria/#{path_name}/*.rb")].each { |file| require file }
end
path_name() click to toggle source

@return [String]

# File lib/datamappify/data/provider/common_provider.rb, line 27
def path_name
  @path_name ||= class_name.underscore
end

Private Instance Methods

build_or_return_namespace(source_class_name) click to toggle source

Builds or returns the namespace for the source class

@param source_class_name [String]

@return [Module]

# File lib/datamappify/data/provider/common_provider.rb, line 67
def build_or_return_namespace(source_class_name)
  source_class_name.deconstantize.split('::').inject(records_namespace) do |namespaces, namespace|
    if namespaces.const_defined?(namespace, false)
      namespaces.const_get(namespace)
    else
      namespaces.const_set(namespace, Module.new)
    end
  end
end
entity_class?(source_class_name) click to toggle source

@return [Boolean]

# File lib/datamappify/data/provider/common_provider.rb, line 58
def entity_class?(source_class_name)
  source_class_name.constantize.ancestors.include?(Datamappify::Entity)
end
records_namespace() click to toggle source

The namespace for the data records, e.g. Datamappify::Data::Record::ActiveRecord

@return [Module]

# File lib/datamappify/data/provider/common_provider.rb, line 80
def records_namespace
  @records_namespace ||= Data::Record.const_set(class_name, Module.new)
end