module ObjectableJSON::KlassCreator
Attributes
name_space[RW]
Public Class Methods
create_klass(klass_name, attribute_names)
click to toggle source
create class @param klass_name [String] class name @param attribute_names [Hash] attributes_hash is set as class instance attribute_names named key @return [Class] created class object
# File lib/objectable_json/klass_creator.rb, line 9 def create_klass(klass_name, attribute_names) full_klass_name = full_klass_name(klass_name) define_klass(name_space.constantize, klass_name) define_attributes(full_klass_name, attribute_names) full_klass_name.constantize end
name_space=(name_space)
click to toggle source
set name space. define this name space class on callback @param name_space
[String] top name space
# File lib/objectable_json/klass_creator.rb, line 18 def name_space=(name_space) @name_space = name_space.camelize define_klass(Object, name_space) end
Private Class Methods
define_attributes(klass_name, attributes_names)
click to toggle source
define new attributes to class @param klass_name [String] @param attributes_names [Array] array of attribute names @return nil
# File lib/objectable_json/klass_creator.rb, line 40 def define_attributes(klass_name, attributes_names) klass_name.constantize.class_eval do attr_accessor(* attributes_names) def initialize(attributes) attributes.each do |k, v| instance_variable_set("@#{k}", v) end end end end
define_klass(name_space, klass_name)
click to toggle source
define empty class @param name_space
[Class] @param klass_name [String] @return nil
# File lib/objectable_json/klass_creator.rb, line 29 def define_klass(name_space, klass_name) unless const_defined? full_klass_name(klass_name) klass_obj = Class.new(Object) {} name_space.const_set(klass_name.camelize, klass_obj) end end
full_klass_name(klass_name)
click to toggle source
get full class name @param klass_name [String] @return [String] full class name
# File lib/objectable_json/klass_creator.rb, line 55 def full_klass_name(klass_name) return klass_name if klass_name == name_space name_space + "::" + klass_name.camelize end
initialize(attributes)
click to toggle source
# File lib/objectable_json/klass_creator.rb, line 44 def initialize(attributes) attributes.each do |k, v| instance_variable_set("@#{k}", v) end end