class Entitize::Classifier

Public Class Methods

base_class() click to toggle source
# File lib/entitize/classifier.rb, line 71
def base_class
  Entitize.base_class
end
build(data) click to toggle source
# File lib/entitize/classifier.rb, line 59
def build(data)
  Class.new(Entitize::Entity) do
    def initialize(data)
      Entitize::Classifier.define_methods(data, self)
    end
  end
end
create_one(class_name, object) click to toggle source
# File lib/entitize/classifier.rb, line 55
def create_one(class_name, object)
  generate(object, get_class_name(class_name))
end
create_set(class_name, dataset) click to toggle source
# File lib/entitize/classifier.rb, line 49
def create_set(class_name, dataset)
  dataset.map do |object|
    Entitize::Classifier.create_one(class_name, object)
  end
end
define_methods(data, target) click to toggle source

QUESTION: why singleton?

# File lib/entitize/classifier.rb, line 14
def define_methods(data, target)
  classifier = self
  data.each do |key, value|
    target.define_singleton_method key do
      # TODO: Test case where first value is a primitive vs. Hash
      if value.is_a?(Array) && value.first.is_a?(Hash)
        classifier.create_set(key, value)
      elsif value.is_a? Hash
        classifier.create_one(key, value)
      else
        value
      end
    end
  end
end
generate(data, class_name) click to toggle source
# File lib/entitize/classifier.rb, line 5
def generate(data, class_name)
  if data.is_a? Array
    get_classes(class_name, data)
  else
    get_class(class_name, data)
  end
end
get_class(class_name, data) click to toggle source
# File lib/entitize/classifier.rb, line 30
def get_class(class_name, data)

  if base_class.const_defined?(class_name)

    klass = base_class.const_get(class_name)
    if klass.to_s.include?("#{Entitize.base_class.to_s}::")
      klass
    else
      base_class.const_set(class_name, build(data))
    end
  else
    base_class.const_set(class_name, build(data))
  end.auto_new(data)
end
get_class_name(base) click to toggle source
# File lib/entitize/classifier.rb, line 67
def get_class_name(base)
  base.to_s.camelize.singularize
end
get_classes(class_name, data) click to toggle source
# File lib/entitize/classifier.rb, line 45
def get_classes(class_name, data)
  data.map { |d| get_class(class_name, d) }
end
initialize(data) click to toggle source
# File lib/entitize/classifier.rb, line 61
def initialize(data)
  Entitize::Classifier.define_methods(data, self)
end