Sha256: 98868d09875a75fcf94966d269eca366e615b1616e6457cd06cb17653afb3985

Contents?: true

Size: 1.03 KB

Versions: 1

Compression:

Stored size: 1.03 KB

Contents

module ModelMacros
  # Create a new Encore entity
  def spawn_entity(klass_name, &block)
    spawn_klass klass_name, Object do
      include Encore::Entity
      instance_exec(&block) if block
    end
  end

  # Create a new ActiveRecord model
  def spawn_model(klass_name, &block)
    spawn_klass klass_name, ActiveRecord::Base  do
      instance_exec(&block) if block
    end
  end

  # Create a new OpenStruct struct
  def spawn_struct(klass_name, &block)
    spawn_klass klass_name, OpenStruct do
      instance_exec(&block) if block
    end
  end

  # Create a new ActionPack controller
  def spawn_controller(klass_name, &block)
    spawn_klass klass_name, ActionController::Base do
      instance_exec(&block) if block
    end
  end

  protected

  # Create a new class
  def spawn_klass(klass_name, parent_klass, &block)
    Object.instance_eval { remove_const klass_name } if Object.const_defined?(klass_name)
    Object.const_set(klass_name, Class.new(parent_klass))
    Object.const_get(klass_name).class_eval(&block) if block_given?
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
encore-0.0.3 spec/support/macros/model_macros.rb