From fd185a6792d0f8c4d8cf5ed5ec7f40c6c3c29a8e Mon Sep 17 00:00:00 2001 From: YOSHIDA Hiroki Date: Wed, 16 Jul 2014 23:26:34 +0900 Subject: [PATCH] Add tests for warnings --- lib/utusemi/core.rb | 30 ++++++++++++++---------------- spec/lib/utusemi/core_spec.rb | 28 ++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 16 deletions(-) diff --git a/lib/utusemi/core.rb b/lib/utusemi/core.rb index 04ed163..d935567 100644 --- a/lib/utusemi/core.rb +++ b/lib/utusemi/core.rb @@ -27,6 +27,7 @@ def utusemi!(obj = nil, options = {}) utusemi_values[:flag] = obj ? true : false utusemi_values[:type] = obj.to_sym if obj.class.in? [Symbol, String] utusemi_values[:options] = options + warning_checker unless Rails.env.production? self end @@ -50,6 +51,13 @@ def unmapped_utusemi_column_name(column_name, index = nil) def eigenclass class << self; self; end end + + 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 end # 用途 @@ -78,12 +86,13 @@ def utusemi!(obj = nil, options = {}) end def utusemi_columns_mapper - utusemi_column_names.keys.each do |column_name| + utusemi_column_names.each_pair do |new_column_name, origin_column_name| + next if new_column_name == origin_column_name # alias_attributeと同じことを、対象カラム名を動的に変更して行う - define_getter_method(column_name) - define_setter_method(column_name) - define_predicate_method(column_name) - define_was_method(column_name) + define_getter_method(new_column_name) + define_setter_method(new_column_name) + define_predicate_method(new_column_name) + define_was_method(new_column_name) end end @@ -148,10 +157,6 @@ module ClassMethods module QueryMethods include Utusemi::Core::Base - def utusemi!(obj = nil, options = {}) - super.tap { warning_checker unless Rails.env.production? } - end - def build_where(opts = :chain, *rest) return super unless utusemi_values[:flag] if utusemi_values[:options][:times] @@ -192,13 +197,6 @@ def mapped_column_names_for_string(string, index = nil) end string end - - def warning_checker - utusemi_column_names.each do |old_column_name, new_column_name| - return if old_column_name != new_column_name - Rails.logger.warn "[Utusemi:WARNING] #{old_column_name} is duplicated in Utusemi::Engine.config.#{utusemi_values[:type]}_columns." - end - end end # Rails 3.x で scope に対してのカラムマッピングが正常に動作するようにするためのもの diff --git a/spec/lib/utusemi/core_spec.rb b/spec/lib/utusemi/core_spec.rb index 5e3b147..227cdb6 100644 --- a/spec/lib/utusemi/core_spec.rb +++ b/spec/lib/utusemi/core_spec.rb @@ -1,4 +1,32 @@ describe Utusemi::Core do + describe Utusemi::Core::Base do + describe '#warning_checker' do + let(:warning_message) { '[Utusemi:WARNING] "title" is duplicated in map(:product).' } + + before do + Utusemi.configure do + map(:product) { title :title } + end + end + + context 'alias is duplicated in ::utusemi' do + let!(:product) { FactoryGirl.create(:product, :with_stock) } + it 'output warning' do + expect(Rails.logger).to receive(:warn).with(warning_message) + Product.utusemi(:product) + end + end + + context 'alias is duplicated in #utusemi' do + let(:product) { FactoryGirl.build(:product, :with_stock) } + it 'output warning' do + expect(Rails.logger).to receive(:warn).with(warning_message) + product.utusemi(:product) + end + end + end + end + # TODO: Implement the new syntax # # map(:sample_one) { ... }