module Objectify::ClassMethods

Public Instance Methods

object(name, attrs:[]) click to toggle source
# File lib/objectify.rb, line 22
    def object(name, attrs:[])
      klass = Class.new Object
      className = String(name).camelize
      nameString = String(name)

      attrs.each do |attr|
        if attr.is_a? Hash
          klass.class_eval <<-EOS
            def #{attr.keys.first.to_s}
              instance_eval #{attr.values.first}
            end
          EOS
        else
          klass.class_eval <<-EOS
            attr_reader :#{attr}
            attr_accessor :#{attr}
          EOS
        end
      end
      
      self.class_eval <<-EOS
        class << self
          def #{nameString}(#{attrs.map{ |a| "#{String(a)}: nil" }.join(', ')})
            item = #{className}.new(#{attrs.map{ |a| "#{String(a)}: #{String(a)}" }.join(', ')})
            Objectify.#{nameString.pluralize}.push(item)
            item
          end
        end
      EOS

      self.const_set className, klass
      Objectify::register_object name
    end