hydra_attribute 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +20 -0
- data/.rspec +2 -0
- data/Appraisals +7 -0
- data/CHANGELOG.md +6 -0
- data/Gemfile +3 -0
- data/LICENSE +22 -0
- data/README.md +122 -0
- data/Rakefile +12 -0
- data/features/attribute_methods.feature +151 -0
- data/features/define_attributes.feature +61 -0
- data/features/load_associations.feature +45 -0
- data/features/order_conditions.feature +93 -0
- data/features/select_attributes.feature +56 -0
- data/features/step_definitions/class_steps.rb +32 -0
- data/features/step_definitions/model_steps.rb +31 -0
- data/features/step_definitions/record_steps.rb +103 -0
- data/features/support/env.rb +24 -0
- data/features/support/schema.rb +51 -0
- data/features/support/world.rb +31 -0
- data/features/typecast_attributes.feature +29 -0
- data/features/where_conditions.feature +77 -0
- data/gemfiles/3.1.gemfile +7 -0
- data/gemfiles/3.1.gemfile.lock +60 -0
- data/gemfiles/3.2.gemfile +7 -0
- data/gemfiles/3.2.gemfile.lock +60 -0
- data/hydra_attribute.gemspec +24 -0
- data/lib/generators/hydra_attribute/install/USAGE +8 -0
- data/lib/generators/hydra_attribute/install/install_generator.rb +11 -0
- data/lib/generators/hydra_attribute/install/templates/hydra_attribute.txt +11 -0
- data/lib/hydra_attribute.rb +31 -0
- data/lib/hydra_attribute/active_record.rb +7 -0
- data/lib/hydra_attribute/active_record/attribute_methods.rb +72 -0
- data/lib/hydra_attribute/active_record/attribute_methods/before_type_cast.rb +16 -0
- data/lib/hydra_attribute/active_record/attribute_methods/read.rb +13 -0
- data/lib/hydra_attribute/active_record/relation.rb +44 -0
- data/lib/hydra_attribute/active_record/relation/query_methods.rb +162 -0
- data/lib/hydra_attribute/active_record/scoping.rb +15 -0
- data/lib/hydra_attribute/association_builder.rb +40 -0
- data/lib/hydra_attribute/attribute_builder.rb +57 -0
- data/lib/hydra_attribute/attribute_proxy.rb +16 -0
- data/lib/hydra_attribute/builder.rb +25 -0
- data/lib/hydra_attribute/configuration.rb +47 -0
- data/lib/hydra_attribute/migration.rb +27 -0
- data/lib/hydra_attribute/railtie.rb +9 -0
- data/lib/hydra_attribute/version.rb +3 -0
- data/spec/hydra_attribute/active_record/relation/query_methods_spec.rb +286 -0
- data/spec/hydra_attribute/active_record/relation_spec.rb +93 -0
- data/spec/hydra_attribute/active_record/scoping_spec.rb +19 -0
- data/spec/hydra_attribute/active_record_spec.rb +20 -0
- data/spec/hydra_attribute/association_builder_spec.rb +95 -0
- data/spec/hydra_attribute/attribute_builder_spec.rb +70 -0
- data/spec/hydra_attribute/attribute_helpers_spec.rb +70 -0
- data/spec/hydra_attribute/builder_spec.rb +39 -0
- data/spec/hydra_attribute/configuration_spec.rb +96 -0
- data/spec/hydra_attribute_spec.rb +20 -0
- data/spec/spec_helper.rb +17 -0
- metadata +196 -0
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe HydraAttribute::ActiveRecord::Relation do
|
4
|
+
def record_class(loaded_associations = false)
|
5
|
+
Class.new do
|
6
|
+
|
7
|
+
@hydra_attributes = {'code' => :string}
|
8
|
+
define_singleton_method :hydra_attribute_types do
|
9
|
+
[:string]
|
10
|
+
end
|
11
|
+
|
12
|
+
define_singleton_method :hydra_attribute_names do
|
13
|
+
['code']
|
14
|
+
end
|
15
|
+
|
16
|
+
define_singleton_method :hydra_attributes do
|
17
|
+
@hydra_attributes
|
18
|
+
end
|
19
|
+
|
20
|
+
define_method :association do |_|
|
21
|
+
Class.new do
|
22
|
+
define_singleton_method :loaded? do
|
23
|
+
loaded_associations
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def relation_function(records)
|
31
|
+
Module.new do
|
32
|
+
define_method :loaded? do
|
33
|
+
false
|
34
|
+
end
|
35
|
+
|
36
|
+
define_method :select_values do
|
37
|
+
[]
|
38
|
+
end
|
39
|
+
|
40
|
+
define_method :hydra_select_values do
|
41
|
+
[]
|
42
|
+
end
|
43
|
+
|
44
|
+
define_method HydraAttribute.config.relation_execute_method do
|
45
|
+
records
|
46
|
+
end
|
47
|
+
|
48
|
+
define_method :klass do
|
49
|
+
records.first.class
|
50
|
+
end
|
51
|
+
|
52
|
+
define_method :where do |*|
|
53
|
+
self
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
let(:records) { [record_class.new] }
|
59
|
+
let(:ancestor) { relation_function(records) }
|
60
|
+
let(:klass) { Class.new.extend(ancestor).extend(HydraAttribute::ActiveRecord::Relation) }
|
61
|
+
|
62
|
+
describe "##{HydraAttribute.config.relation_execute_method}" do
|
63
|
+
describe 'parent method return one record' do
|
64
|
+
it 'should return one record' do
|
65
|
+
klass.send(HydraAttribute.config.relation_execute_method).should have(1).record
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe 'parent method returns two records' do
|
70
|
+
let(:records) { [record_class(loaded_associations).new, record_class(loaded_associations).new] }
|
71
|
+
|
72
|
+
describe 'association models are already loaded' do
|
73
|
+
let(:loaded_associations) { true }
|
74
|
+
|
75
|
+
it 'should return two record' do
|
76
|
+
klass.send(HydraAttribute.config.relation_execute_method).should have(2).records
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe 'association models are not yet loaded' do
|
81
|
+
let(:loaded_associations) { false }
|
82
|
+
|
83
|
+
before do
|
84
|
+
::ActiveRecord::Associations::Preloader.should_receive(:new).with(records, :hydra_string_attributes).and_return(mock(run: records))
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'should return two record' do
|
88
|
+
klass.send(HydraAttribute.config.relation_execute_method).should have(2).records
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe HydraAttribute::ActiveRecord::Scoping do
|
4
|
+
describe '#scoped' do
|
5
|
+
let(:ancestor) do
|
6
|
+
Module.new do
|
7
|
+
def scoped(*) self end
|
8
|
+
def where(*) self end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
let(:klass) { Class.new.extend(ancestor) }
|
13
|
+
|
14
|
+
it 'should return ActiveRecord::Relation object with extended HydraAttribute::ActiveRecord::Relation module' do
|
15
|
+
klass.send :include, HydraAttribute::ActiveRecord::Scoping
|
16
|
+
klass.scoped.singleton_class.ancestors.should include(HydraAttribute::ActiveRecord::Relation)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe HydraAttribute::ActiveRecord do
|
4
|
+
let(:klass) { Class.new.extend(HydraAttribute::ActiveRecord) }
|
5
|
+
|
6
|
+
describe '#define_hydra_attributes' do
|
7
|
+
let(:builder) { @builder }
|
8
|
+
before { klass.define_hydra_attributes { |b| @builder = b } }
|
9
|
+
|
10
|
+
it 'should yield block with preconfigured current class' do
|
11
|
+
builder.should be_an_instance_of(HydraAttribute::Builder)
|
12
|
+
builder.klass.should be_equal(klass)
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should include HydraAttribute::ActiveRecord::Scoping to class' do
|
17
|
+
klass.should include(HydraAttribute::ActiveRecord::Scoping)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe HydraAttribute::AssociationBuilder do
|
4
|
+
def remove_association
|
5
|
+
[::HydraAttribute, ::Object].each do |klass|
|
6
|
+
klass.send(:remove_const, :StringAttribute) if klass.constants.include?(:StringAttribute)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
after(:each) { remove_association }
|
11
|
+
|
12
|
+
let(:klass) do
|
13
|
+
Class.new do
|
14
|
+
@reflection = {}
|
15
|
+
define_singleton_method :reflect_on_association do |assoc|
|
16
|
+
@reflection[assoc]
|
17
|
+
end
|
18
|
+
define_singleton_method :has_many do |assoc, options|
|
19
|
+
@reflection[assoc] = options
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
let(:type) { :string }
|
25
|
+
let(:association) { HydraAttribute::AssociationBuilder.new(klass, type) }
|
26
|
+
|
27
|
+
describe '#buld' do
|
28
|
+
it 'should call #build_associated_model and build_association' do
|
29
|
+
association.should_receive(:create_associated_model)
|
30
|
+
association.should_receive(:add_association_for_class)
|
31
|
+
association.build
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe '#create_associated_model' do
|
36
|
+
describe 'use namespace for associated models' do
|
37
|
+
it 'should create new model' do
|
38
|
+
association.send(:create_associated_model)
|
39
|
+
HydraAttribute.should be_const_defined(:StringAttribute)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe 'should not use namespace for associated models' do
|
44
|
+
before { HydraAttribute.config.use_module_for_associated_models = false }
|
45
|
+
after { HydraAttribute.config.use_module_for_associated_models = true }
|
46
|
+
|
47
|
+
it 'should create new model' do
|
48
|
+
association.send(:create_associated_model)
|
49
|
+
Object.should be_const_defined(:StringAttribute)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe 'do not try to create twice the same class' do
|
54
|
+
it 'should not warn "already initialized constant"' do
|
55
|
+
association.send(:create_associated_model)
|
56
|
+
HydraAttribute.should_not_receive(:const_set)
|
57
|
+
association.send(:create_associated_model)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe 'set correct table name' do
|
62
|
+
it 'should be :hydra_string_attributes' do
|
63
|
+
association.send(:create_associated_model)
|
64
|
+
HydraAttribute::StringAttribute.table_name.should == 'hydra_string_attributes'
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe 'set correct belongs_to' do
|
69
|
+
it 'should be polymorphic association' do
|
70
|
+
association.send(:create_associated_model)
|
71
|
+
reflection = HydraAttribute::StringAttribute.reflect_on_association(:entity)
|
72
|
+
reflection.macro.should == :belongs_to
|
73
|
+
reflection.options[:polymorphic].should be_true
|
74
|
+
reflection.options[:touch].should be_true
|
75
|
+
reflection.options[:autosave].should be_true
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe '#add_association_for_class' do
|
81
|
+
it 'should add has_many association for class' do
|
82
|
+
association.send(:add_association_for_class)
|
83
|
+
reflection = klass.reflect_on_association(:hydra_string_attributes)
|
84
|
+
reflection[:as].should == :entity
|
85
|
+
reflection[:class_name].should == 'HydraAttribute::StringAttribute'
|
86
|
+
reflection[:autosave].should be_true
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'should not add twice the same has_many association' do
|
90
|
+
association.send(:add_association_for_class)
|
91
|
+
klass.should_not_receive(:has_many)
|
92
|
+
association.send(:add_association_for_class)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe HydraAttribute::AttributeBuilder do
|
4
|
+
let(:klass) { Class.new }
|
5
|
+
let(:attribute) { HydraAttribute::AttributeBuilder.new(klass, :name, :string) }
|
6
|
+
|
7
|
+
describe '#build' do
|
8
|
+
it 'should call required methods' do
|
9
|
+
attribute.should_receive(:define_attribute_methods)
|
10
|
+
attribute.should_receive(:save_attribute)
|
11
|
+
attribute.build
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#define_attribute_methods' do
|
16
|
+
let(:matcher_get) do
|
17
|
+
mock_matcher = mock
|
18
|
+
mock_matcher.stub(:method_name) { |value| value.to_s }
|
19
|
+
mock_matcher
|
20
|
+
end
|
21
|
+
|
22
|
+
let(:matcher_set) do
|
23
|
+
mock_matcher = mock
|
24
|
+
mock_matcher.stub(:method_name) { |value| "#{value}=" }
|
25
|
+
mock_matcher
|
26
|
+
end
|
27
|
+
|
28
|
+
let(:matcher_query) do
|
29
|
+
mock_matcher = mock
|
30
|
+
mock_matcher.stub(:method_name) { |value| "#{value}?" }
|
31
|
+
mock_matcher
|
32
|
+
end
|
33
|
+
|
34
|
+
before do
|
35
|
+
klass.stub(attribute_method_matchers: [matcher_get, matcher_set, matcher_query])
|
36
|
+
attribute.send(:define_attribute_methods)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'should respond to #name' do
|
40
|
+
klass.new.should respond_to(:name)
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should respond to #name=' do
|
44
|
+
klass.new.should respond_to(:name=)
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'should respond to #name?' do
|
48
|
+
klass.new.should respond_to(:name?)
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'should define all methods in module' do
|
52
|
+
[:name, :name=, :name?].each do |method|
|
53
|
+
klass.new.method(method).owner.class.should == Module
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe '#store_attribute' do
|
59
|
+
before do
|
60
|
+
attribute.instance_variable_set(:@name, :name)
|
61
|
+
attribute.instance_variable_set(:@type, :type)
|
62
|
+
klass.instance_variable_set(:@hydra_attributes, {})
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'should save attribute name and type in @hydra_attributes' do
|
66
|
+
attribute.send(:save_attribute)
|
67
|
+
klass.instance_variable_get(:@hydra_attributes)[:name].should == :type
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
__END__
|
3
|
+
describe HydraAttribute::AttributeHelpers do
|
4
|
+
let(:klass) { Class.new { include HydraAttribute::AttributeHelpers } }
|
5
|
+
|
6
|
+
describe '.inherited' do
|
7
|
+
it 'should clone @hydra_attributes to base class' do
|
8
|
+
klass.instance_variable_set(:@hydra_attributes, {a: 1, b: 2})
|
9
|
+
sub_class = Class.new(klass)
|
10
|
+
sub_class.instance_variable_get(:@hydra_attributes).should == {a: 1, b: 2}
|
11
|
+
sub_class.instance_variable_get(:@hydra_attributes).should_not equal(klass.instance_variable_get(:@hydra_attributes))
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '.hydra_attributes' do
|
16
|
+
it 'should return hash of attributes' do
|
17
|
+
klass.hydra_attributes.should == {}
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should return cloned hash' do
|
21
|
+
klass.hydra_attributes.should_not equal(klass.hydra_attributes)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '.hydra_attribute_names' do
|
26
|
+
it 'should return hash keys' do
|
27
|
+
klass.instance_variable_set(:@hydra_attributes, {a: 1, b: 2})
|
28
|
+
klass.hydra_attribute_names.should == [:a, :b]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '.hydra_attribute_types' do
|
33
|
+
it 'should return hash values' do
|
34
|
+
klass.instance_variable_set(:@hydra_attributes, {a: 1, b: 2})
|
35
|
+
klass.hydra_attribute_types.should == [1, 2]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe '#hydra_attribute_model' do
|
40
|
+
let(:code_model) { mock(name: :code) }
|
41
|
+
let(:title_model) { mock(name: :title) }
|
42
|
+
let(:collection) { [code_model, title_model] }
|
43
|
+
|
44
|
+
before do
|
45
|
+
HydraAttribute.config.should_receive(:association).with(:string).and_return(:string_association)
|
46
|
+
klass.any_instance.should_receive(:string_association).and_return(collection)
|
47
|
+
end
|
48
|
+
|
49
|
+
describe 'type collection has built model' do
|
50
|
+
let(:name) { :code }
|
51
|
+
|
52
|
+
it 'should return model' do
|
53
|
+
klass.new.hydra_attribute_model(name, :string).should == code_model
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe 'type collection has not built model' do
|
58
|
+
let(:name) { :price }
|
59
|
+
let(:built) { mock(:built) }
|
60
|
+
|
61
|
+
before do
|
62
|
+
collection.should_receive(:build).with(name: :price).and_return(built)
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'should build model' do
|
66
|
+
klass.new.hydra_attribute_model(name, :string).should == built
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe HydraAttribute::Builder do
|
4
|
+
|
5
|
+
let(:klass) { Class.new }
|
6
|
+
let!(:builder) { HydraAttribute::Builder.new(klass) }
|
7
|
+
|
8
|
+
describe '#initialzie' do
|
9
|
+
it 'should include HydraAttribute::ActiveRecord::Scoping to class' do
|
10
|
+
klass.should include(HydraAttribute::ActiveRecord::Scoping)
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should include HydraAttribute::ActiveRecord::AttributeMethods to class' do
|
14
|
+
klass.should include(HydraAttribute::ActiveRecord::AttributeMethods)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should respond to all supported types' do
|
18
|
+
HydraAttribute::SUPPORT_TYPES.each do |type|
|
19
|
+
builder.should respond_to(type)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '#string' do
|
25
|
+
let(:association_instance) { mock(:association_instance) }
|
26
|
+
let(:attribute_instance) { mock(:attribute_instance) }
|
27
|
+
|
28
|
+
before do
|
29
|
+
HydraAttribute::AssociationBuilder.should_receive(:new).with(klass, :string).and_return(association_instance)
|
30
|
+
HydraAttribute::AttributeBuilder.should_receive(:new).with(klass, :name, :string).and_return(attribute_instance)
|
31
|
+
|
32
|
+
[association_instance, attribute_instance].each { |instance| instance.should_receive(:build) }
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should build association' do
|
36
|
+
builder.string :name
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe HydraAttribute::Configuration do
|
4
|
+
let(:config) { HydraAttribute::Configuration.new }
|
5
|
+
|
6
|
+
describe '#table_name' do
|
7
|
+
describe 'with table prefix' do
|
8
|
+
before { config.table_prefix = 'table_' }
|
9
|
+
|
10
|
+
it 'should return table name' do
|
11
|
+
config.table_name(:string).should == :table_string_attributes
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'without table prefix' do
|
16
|
+
before { config.table_prefix = '' }
|
17
|
+
|
18
|
+
it 'should return table name' do
|
19
|
+
config.table_name(:string).should == :string_attributes
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '#association' do
|
25
|
+
describe 'with association prefix' do
|
26
|
+
before { config.association_prefix = 'assoc_' }
|
27
|
+
|
28
|
+
it 'should return association name' do
|
29
|
+
config.association(:string).should == :assoc_string_attributes
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe 'without association prefix' do
|
34
|
+
before { config.association_prefix = '' }
|
35
|
+
|
36
|
+
it 'should return association name' do
|
37
|
+
config.association(:string).should == :string_attributes
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe '#associated_model_name' do
|
43
|
+
describe 'use module wrapper' do
|
44
|
+
before { config.use_module_for_associated_models = true }
|
45
|
+
|
46
|
+
it 'should return associated model name' do
|
47
|
+
config.associated_model_name(:string).should == 'HydraAttribute::StringAttribute'
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe 'don not use module wrapper' do
|
52
|
+
before { config.use_module_for_associated_models = false }
|
53
|
+
|
54
|
+
it 'should return associated model name' do
|
55
|
+
config.associated_model_name(:string).should == 'StringAttribute'
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe '#associated_const_name' do
|
61
|
+
it 'should return constant name for new model' do
|
62
|
+
config.associated_const_name(:string).should == :StringAttribute
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe '#relation_execute_method' do
|
67
|
+
after do
|
68
|
+
::ActiveRecord::VERSION.send(:remove_const, :MINOR)
|
69
|
+
::ActiveRecord::VERSION.const_set(:MINOR, @old_value)
|
70
|
+
end
|
71
|
+
|
72
|
+
describe 'ActiveRecord::VERSION::MINOR is great than 1' do
|
73
|
+
before do
|
74
|
+
@old_value = ::ActiveRecord::VERSION::MINOR
|
75
|
+
::ActiveRecord::VERSION.send(:remove_const, :MINOR)
|
76
|
+
::ActiveRecord::VERSION.const_set(:MINOR, 2)
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'should return :exec_queries' do
|
80
|
+
config.relation_execute_method.should == :exec_queries
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
describe 'ActiveRecord::VERSION::MINOR is less than or equal 1' do
|
85
|
+
before do
|
86
|
+
@old_value = ::ActiveRecord::VERSION::MINOR
|
87
|
+
::ActiveRecord::VERSION.send(:remove_const, :MINOR)
|
88
|
+
::ActiveRecord::VERSION.const_set(:MINOR, 1)
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'should return :to_a' do
|
92
|
+
config.relation_execute_method.should == :to_a
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|