Class: NinjaModel::Associations::ActiveRecordProxy

Inherits:
Object
  • Object
show all
Defined in:
lib/ninja_model/rails_ext/active_record.rb

Instance Method Summary collapse

Constructor Details

#initialize(ninja_model) ⇒ ActiveRecordProxy

Returns a new instance of ActiveRecordProxy.



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/ninja_model/rails_ext/active_record.rb', line 103

def initialize(ninja_model)
  @klass = ninja_model
  @klass.class_eval do
    def proxy
      @proxy ||= begin
        self.class.proxy.instance(self)
      end
      @proxy.attributes = self.attributes #.delete_if { |k,v| k.eql?('id') }
      @proxy.id = self.id
      @proxy
    end
  end

  @proxy_klass = ninja_model.parent.const_set("#{@klass.model_name.gsub(/[^a-zA-Z]/, '')}Proxy", Class.new(ActiveRecord::Base))
  @proxy_klass.class_eval do
    cattr_accessor :columns
    self.columns = []
    def self.column(name, sql_type = nil, default = nil)
      self.columns << ActiveRecord::ConnectionAdapters::Column.new(name, nil, sql_type.to_s, default)
    end
  end

  @klass.model_attributes.each do |attr|
    @proxy_klass.send :column, attr.name, attr.type, attr.default
  end
end

Instance Method Details

#handle_association(macro, association_id, options) ⇒ Object



136
137
138
139
140
141
142
143
# File 'lib/ninja_model/rails_ext/active_record.rb', line 136

def handle_association(macro, association_id, options)
  unless macro.eql?(:belongs_to)
    options = {:foreign_key => derive_foreign_key}.merge(options)
  end

  @proxy = nil
  @proxy_klass.send macro, association_id, options
end

#instance(obj) ⇒ Object



130
131
132
133
134
# File 'lib/ninja_model/rails_ext/active_record.rb', line 130

def instance(obj)
  proxy = @proxy_klass.new
  proxy.send :init_with, {'attributes' => obj.attributes}
  proxy
end