Module: Utusemi::Core::ActiveRecord::Base

Defined in:
lib/utusemi/core.rb,
lib/utusemi/core.rb

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Instance Method Details

#association(name) ⇒ Object

用途

association_cacheの影響でAssociation#ownerでclone前のインスタンスしか取得できないため
別経路から実際の呼び出し元インスタンスを参照できるようにし、utusemi_valuesを取り出せるようにする


313
314
315
316
317
318
# File 'lib/utusemi/core.rb', line 313

def association(name)
  truthly_owner = self
  association = super
  association.singleton_class.send(:define_method, :truthly_owner) { truthly_owner }
  association
end

#initialize(*args, &block) ⇒ Object

用途

utusemiメソッドを利用後にレコードを作成した場合は
Utusemi::Core#utusemiを個別呼び出さなくても済むようになる

使用例

product = Product.utusemi(:product).new(name: 'test')
product.name
#=> 'test' (= products.title)


289
290
291
292
293
294
295
296
297
298
299
300
# File 'lib/utusemi/core.rb', line 289

def initialize(*args, &block)
  case Rails::VERSION::MAJOR
  when 4
    current_scope = self.class.current_scope
  when 3
    current_scope = self.class.scoped
  end
  utusemi_values = current_scope.try(:utusemi_values) || {}
  utusemi_values = self.class.utusemi_values unless utusemi_values[:flag]
  utusemi!(utusemi_values[:type], utusemi_values[:options]) if utusemi_values[:flag]
  super
end

#initialize_copy(original_obj) ⇒ Object

用途

cloneでは浅いコピーしか行われず@utusemi_valuesの内容が
書き変わってしまうので、これを解決するために@utusemi_valuesもdupする


305
306
307
308
# File 'lib/utusemi/core.rb', line 305

def initialize_copy(original_obj)
  @utusemi_values = original_obj.utusemi_values.dup
  super
end