module Utusemi::Core::Base

用途

モデル向けカラムマッパとインスタンス向けカラムマッパの共通処理

役割

モデル向けカラムマッパ => Utusemi::Core::ActiveRecord
インスタンス向けカラムマッパ => Utusemi::Core::InstanceMethods

備考

utusemiメソッドの第2引数は、任意のオプションをHashで指定する。
ただしoptions[:times]は予約済みで、指定した回数分だけmapメソッドを
繰り返し、options[:index]にイテレート中のカウントを返す。
また、その結果から複数のwhere条件を構築する。

Public Instance Methods

utusemi(obj = nil, options = {}) click to toggle source
# File lib/utusemi/core.rb, line 23
def utusemi(obj = nil, options = {})
  clone.utusemi!(obj, options)
end
utusemi!(obj = nil, options = {}) click to toggle source
# File lib/utusemi/core.rb, line 27
def utusemi!(obj = nil, options = {})
  obj = true if obj.nil?
  @utusemi_values ||= {}
  @utusemi_values[:flag] = obj ? true : false
  @utusemi_values[:type] = obj.to_sym if obj.class.in? [Symbol, String]
  @utusemi_values[:type] ||= default_utusemi_type
  @utusemi_values[:options] = options
  warning_checker unless Rails.env.production?
  self
end
utusemi_values() click to toggle source
# File lib/utusemi/core.rb, line 17
def utusemi_values
  utusemi_values = @utusemi_values || {}
  utusemi_values = klass_utusemi_values unless utusemi_values[:flag]
  utusemi_values
end

Private Instance Methods

class_for_default_utusemi_type() click to toggle source
# File lib/utusemi/core.rb, line 66
def class_for_default_utusemi_type
  case self
  when ActiveRecord::Relation
    @klass
  when ActiveRecord::Base
    self.class
  else
    self
  end
end
default_utusemi_type() click to toggle source
# File lib/utusemi/core.rb, line 62
def default_utusemi_type
  class_for_default_utusemi_type.model_name.singular.to_sym
end
klass_utusemi_values() click to toggle source
# File lib/utusemi/core.rb, line 77
def klass_utusemi_values
  return {} unless @klass
  utusemi_values = @klass.instance_variable_get(:@utusemi_values) || {}
  return {} unless utusemi_values[:flag]
  utusemi_values
end
mapped_utusemi_column_name(column_name, index = nil) click to toggle source
# File lib/utusemi/core.rb, line 47
def mapped_utusemi_column_name(column_name, index = nil)
  utusemi_column_names(index)[column_name.to_sym] || column_name
end
unmapped_utusemi_column_name(column_name, index = nil) click to toggle source
# File lib/utusemi/core.rb, line 51
def unmapped_utusemi_column_name(column_name, index = nil)
  utusemi_column_names(index).invert[column_name.to_sym] || column_name
end
utusemi_column_names(index = nil) click to toggle source
# File lib/utusemi/core.rb, line 40
def utusemi_column_names(index = nil)
  return {} unless utusemi_values[:flag]
  options = utusemi_values[:options] || {}
  options.update(index: index)
  Utusemi.config.map(utusemi_values[:type], options).attributes
end
warning_checker() click to toggle source
# File lib/utusemi/core.rb, line 55
def warning_checker
  utusemi_column_names.each do |new_column_name, origin_column_name|
    return if new_column_name != origin_column_name
    Rails.logger.warn "[Utusemi:WARNING] \"#{new_column_name}\" is duplicated in map(:#{utusemi_values[:type]})."
  end
end