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