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