ardm 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. checksums.yaml +5 -13
  2. data/Gemfile +1 -2
  3. data/LICENSE +2 -2
  4. data/README.md +72 -16
  5. data/ardm.gemspec +1 -0
  6. data/lib/ardm.rb +2 -1
  7. data/lib/ardm/active_record.rb +8 -1
  8. data/lib/ardm/active_record/associations.rb +33 -4
  9. data/lib/ardm/active_record/base.rb +2 -0
  10. data/lib/ardm/active_record/collection.rb +5 -0
  11. data/lib/ardm/active_record/data_mapper_constant.rb +1 -0
  12. data/lib/ardm/active_record/data_mapper_constant_proxy.rb +24 -0
  13. data/lib/ardm/active_record/finalize.rb +18 -0
  14. data/lib/ardm/active_record/predicate_builder/array_handler.rb +10 -16
  15. data/lib/ardm/active_record/predicate_builder/rails3.rb +42 -15
  16. data/lib/ardm/active_record/predicate_builder/rails4.rb +39 -13
  17. data/lib/ardm/active_record/property.rb +24 -12
  18. data/lib/ardm/active_record/query.rb +9 -18
  19. data/lib/ardm/active_record/record.rb +54 -11
  20. data/lib/ardm/active_record/relation.rb +36 -6
  21. data/lib/ardm/active_record/repository.rb +6 -2
  22. data/lib/ardm/data_mapper.rb +2 -0
  23. data/lib/ardm/data_mapper/record.rb +3 -9
  24. data/lib/ardm/version.rb +1 -1
  25. data/spec/ardm/datamapper_constants_spec.rb +31 -0
  26. data/spec/fixtures/article.rb +2 -0
  27. data/spec/integration/api_key_spec.rb +3 -3
  28. data/spec/integration/bcrypt_hash_spec.rb +7 -7
  29. data/spec/integration/comma_separated_list_spec.rb +11 -11
  30. data/spec/integration/dirty_minder_spec.rb +23 -39
  31. data/spec/integration/enum_spec.rb +11 -11
  32. data/spec/integration/epoch_time_spec.rb +6 -6
  33. data/spec/integration/file_path_spec.rb +23 -23
  34. data/spec/integration/flag_spec.rb +11 -13
  35. data/spec/integration/ip_address_spec.rb +15 -15
  36. data/spec/integration/json_spec.rb +7 -7
  37. data/spec/integration/slug_spec.rb +6 -6
  38. data/spec/integration/uri_spec.rb +11 -11
  39. data/spec/integration/uuid_spec.rb +16 -16
  40. data/spec/integration/yaml_spec.rb +8 -8
  41. data/spec/public/model_spec.rb +193 -0
  42. data/spec/public/property/binary_spec.rb +4 -4
  43. data/spec/public/property/boolean_spec.rb +3 -3
  44. data/spec/public/property/class_spec.rb +2 -2
  45. data/spec/public/property/date_spec.rb +2 -2
  46. data/spec/public/property/date_time_spec.rb +2 -2
  47. data/spec/public/property/decimal_spec.rb +2 -2
  48. data/spec/public/property/discriminator_spec.rb +21 -20
  49. data/spec/public/property/float_spec.rb +2 -2
  50. data/spec/public/property/integer_spec.rb +2 -2
  51. data/spec/public/property/object_spec.rb +14 -13
  52. data/spec/public/property/serial_spec.rb +2 -2
  53. data/spec/public/property/string_spec.rb +2 -2
  54. data/spec/public/property/text_spec.rb +2 -2
  55. data/spec/public/property/time_spec.rb +2 -2
  56. data/spec/public/property_spec.rb +44 -48
  57. data/spec/public/resource_spec.rb +278 -0
  58. data/spec/schema.rb +33 -4
  59. data/spec/semipublic/property/boolean_spec.rb +5 -5
  60. data/spec/semipublic/property/class_spec.rb +3 -3
  61. data/spec/semipublic/property/date_spec.rb +8 -8
  62. data/spec/semipublic/property/date_time_spec.rb +9 -9
  63. data/spec/semipublic/property/decimal_spec.rb +16 -16
  64. data/spec/semipublic/property/float_spec.rb +16 -16
  65. data/spec/semipublic/property/integer_spec.rb +16 -16
  66. data/spec/semipublic/property/lookup_spec.rb +4 -4
  67. data/spec/semipublic/property/text_spec.rb +2 -2
  68. data/spec/semipublic/property/time_spec.rb +10 -10
  69. data/spec/semipublic/property_spec.rb +4 -4
  70. data/spec/shared/finder_shared_spec.rb +1151 -0
  71. data/spec/shared/flags_shared_spec.rb +6 -6
  72. data/spec/shared/identity_function_group.rb +1 -1
  73. data/spec/shared/public_property_spec.rb +26 -25
  74. data/spec/shared/resource_spec.rb +1218 -0
  75. data/spec/shared/semipublic_property_spec.rb +23 -22
  76. data/spec/spec_helper.rb +17 -0
  77. data/spec/unit/bcrypt_hash_spec.rb +15 -15
  78. data/spec/unit/csv_spec.rb +11 -11
  79. data/spec/unit/dirty_minder_spec.rb +3 -5
  80. data/spec/unit/enum_spec.rb +17 -17
  81. data/spec/unit/epoch_time_spec.rb +8 -8
  82. data/spec/unit/file_path_spec.rb +9 -9
  83. data/spec/unit/flag_spec.rb +9 -9
  84. data/spec/unit/ip_address_spec.rb +9 -9
  85. data/spec/unit/json_spec.rb +11 -11
  86. data/spec/unit/paranoid_boolean_spec.rb +19 -17
  87. data/spec/unit/paranoid_datetime_spec.rb +21 -19
  88. data/spec/unit/regexp_spec.rb +4 -4
  89. data/spec/unit/uri_spec.rb +8 -8
  90. data/spec/unit/yaml_spec.rb +9 -9
  91. metadata +35 -27
  92. data/lib/ardm/active_record/not_found.rb +0 -7
  93. data/lib/ardm/data_mapper/not_found.rb +0 -5
@@ -0,0 +1,193 @@
1
+ require 'spec_helper'
2
+
3
+ module ::ModelBlog
4
+ # FIXME: load order in tests is being problematic
5
+ class ArticlePublication < Ardm::Record
6
+ end
7
+
8
+ class Article < Ardm::Record
9
+ self.table_name = "articles"
10
+
11
+ property :id, Serial
12
+ property :title, String, :required => true, :default => 'Default Title'
13
+ property :body, Text
14
+ timestamps :at
15
+
16
+ belongs_to :original, self, :required => false
17
+ has n, :revisions, self, :child_key => [ :original_id ]
18
+ has 1, :previous, self, :child_key => [ :original_id ], :order => [ :id.desc ]
19
+ has n, :article_publications, model: ::ModelBlog::ArticlePublication
20
+ has n, :publications, :through => :article_publications
21
+ end
22
+
23
+ class Publication < Ardm::Record
24
+ self.table_name = "api_users" # same set of fields, so even though it's a little weird, I'm going to reuse for now.
25
+
26
+ property :id, Serial
27
+ property :name, String
28
+
29
+ has n, :article_publications, model: ::ModelBlog::ArticlePublication
30
+ has n, :acticles, :through => :article_publications
31
+ end
32
+
33
+ class ArticlePublication < Ardm::Record
34
+ self.table_name = "article_publications"
35
+
36
+ belongs_to :acticle, model: '::ModelBlog::Article'
37
+ belongs_to :publication, model: '::ModelBlog::Publication'
38
+ end
39
+ end
40
+
41
+ describe 'Ardm::Record' do
42
+ before do
43
+ @article_model = ModelBlog::Article
44
+ @publication_model = ModelBlog::Publication
45
+ end
46
+
47
+ def model?; true end
48
+
49
+ before do
50
+ @articles = @article_model
51
+
52
+ @original = @articles.create(:title => 'Original Article')
53
+ @article = @articles.create(:title => 'Sample Article', :body => 'Sample', :original => @original)
54
+ @other = @articles.create(:title => 'Other Article', :body => 'Other')
55
+ end
56
+
57
+ describe '#new' do
58
+ subject { model.new(*args) }
59
+
60
+ let(:model) { @article_model }
61
+
62
+ context 'with no arguments' do
63
+ let(:args) { [] }
64
+
65
+ it { is_expected.to be_instance_of(model) }
66
+
67
+ it { expect(subject.title).to eq('Default Title') }
68
+ end
69
+
70
+ context 'with an empty Hash' do
71
+ let(:args) { [ {} ] }
72
+
73
+ it { is_expected.to be_instance_of(model) }
74
+
75
+ it { expect(subject.title).to eq('Default Title') }
76
+ end
77
+
78
+ context 'with a non-empty Hash' do
79
+ let(:attributes) { { :title => 'A Title' } }
80
+ let(:args) { [ attributes ] }
81
+
82
+ it { is_expected.to be_instance_of(model) }
83
+
84
+ it { expect(subject.title).to eq('A Title') }
85
+ end
86
+
87
+ context 'with nil' do
88
+ let(:args) { [ nil ] }
89
+
90
+ it { is_expected.to be_instance_of(model) }
91
+
92
+ it { expect(subject.title).to eq('Default Title') }
93
+ end
94
+ end
95
+
96
+ [ :create, :create! ].each do |method|
97
+ describe "##{method}" do
98
+ subject { model.send(method, *args) }
99
+
100
+ let(:model) { @article_model }
101
+
102
+ context 'with no arguments' do
103
+ let(:args) { [] }
104
+
105
+ it { is_expected.to be_instance_of(model) }
106
+
107
+ it { is_expected.to be_saved }
108
+ end
109
+
110
+ context 'with an empty Hash' do
111
+ let(:args) { [ {} ] }
112
+
113
+ it { is_expected.to be_instance_of(model) }
114
+
115
+ it { is_expected.to be_saved }
116
+ end
117
+
118
+ context 'with a non-empty Hash' do
119
+ let(:attributes) { { :title => 'A Title' } }
120
+ let(:args) { [ attributes ] }
121
+
122
+ it { is_expected.to be_instance_of(model) }
123
+
124
+ it { is_expected.to be_saved }
125
+
126
+ it { expect(subject.title).to eq attributes[:title] }
127
+ end
128
+
129
+ context 'with nil' do
130
+ let(:args) { [ nil ] }
131
+
132
+ it { is_expected.to be_instance_of(model) }
133
+
134
+ it { is_expected.to be_saved }
135
+ end
136
+ end
137
+ end
138
+
139
+ [ :destroy, :destroy! ].each do |method|
140
+ describe "##{method}" do
141
+ it 'should remove all resources', pending: true do
142
+ expect { @article_model.send(method) }.to change { @article_model.any? }.from(true).to(false)
143
+ end
144
+ end
145
+ end
146
+
147
+ [ :update, :update! ].each do |method|
148
+ describe "##{method}" do
149
+ subject { model.send(method, *args) }
150
+
151
+ let(:model) { @article_model }
152
+
153
+ context 'with attributes' do
154
+ let(:attributes) { { :title => 'Updated Title' } }
155
+ let(:args) { [ attributes ] }
156
+
157
+ it { is_expected.to be(true) }
158
+
159
+ it 'should persist the changes' do
160
+ subject
161
+ expect(model.all(:fields => [ :title ]).map { |resource| resource.title }.uniq).to eq([ attributes[:title] ])
162
+ end
163
+ end
164
+
165
+ context 'with attributes where one is a parent association' do
166
+ let(:attributes) { { :original => @other } }
167
+ let(:args) { [ attributes ] }
168
+
169
+ it { is_expected.to be(true) }
170
+
171
+ it 'should persist the changes' do
172
+ subject
173
+ expect(model.all(:fields => [ :original_id ]).map { |resource| resource.original }.uniq).to eq([ attributes[:original] ])
174
+ end
175
+ end
176
+
177
+ context 'with attributes where a required property is nil' do
178
+ let(:attributes) { { :title => nil } }
179
+ let(:args) { [ attributes ] }
180
+
181
+ it 'should raise InvalidValueError' do
182
+ expect { subject }.to(raise_error(Ardm::Property::InvalidValueError) do |error|
183
+ expect(error.property).to eq(model.properties[:title])
184
+ end)
185
+ end
186
+ end
187
+ end
188
+ end
189
+
190
+ # FIXME: these are very broken right now
191
+ #it_should_behave_like 'Finder Interface'
192
+
193
+ end
@@ -15,9 +15,9 @@ describe Ardm::Property::Binary do
15
15
  describe '.options' do
16
16
  subject { described_class.options }
17
17
 
18
- it { should be_kind_of(Hash) }
18
+ it { is_expected.to be_kind_of(Hash) }
19
19
 
20
- it { should eql(:load_as => @load_as, :dump_as => @load_as, :coercion_method => :to_string, :length => 50) }
20
+ it { is_expected.to eql(:load_as => @load_as, :dump_as => @load_as, :coercion_method => :to_string, :length => 50) }
21
21
  end
22
22
 
23
23
  if RUBY_VERSION >= "1.9"
@@ -30,11 +30,11 @@ describe Ardm::Property::Binary do
30
30
  end
31
31
 
32
32
  it 'should always dump with BINARY' do
33
- model.properties[:bin_data].dump("foo".freeze).encoding.names.should include("BINARY")
33
+ expect(model.properties[:bin_data].dump("foo".freeze).encoding.names).to include("BINARY")
34
34
  end
35
35
 
36
36
  it 'should always load with BINARY' do
37
- model.properties[:bin_data].load("foo".freeze).encoding.names.should include("BINARY")
37
+ expect(model.properties[:bin_data].load("foo".freeze).encoding.names).to include("BINARY")
38
38
  end
39
39
  end
40
40
  end
@@ -16,15 +16,15 @@ describe Ardm::Property::Boolean do
16
16
  describe '.options' do
17
17
  subject { described_class.options }
18
18
 
19
- it { should be_kind_of(Hash) }
19
+ it { is_expected.to be_kind_of(Hash) }
20
20
 
21
- it { should eql(:load_as => @load_as, :dump_as => @load_as, :coercion_method => :to_boolean) }
21
+ it { is_expected.to eql(:load_as => @load_as, :dump_as => @load_as, :coercion_method => :to_boolean) }
22
22
  end
23
23
 
24
24
  describe "default" do
25
25
  it "should set has_picture to the default (booleans are specifically weird in rails because presence validation fails for false)" do
26
26
  tshirt = Ardm::Fixtures::TShirt.create!
27
- tshirt.should_not have_picture
27
+ expect(tshirt).not_to have_picture
28
28
  end
29
29
  end
30
30
  end
@@ -21,8 +21,8 @@ describe Ardm::Property::Class do
21
21
  describe '.options' do
22
22
  subject { described_class.options }
23
23
 
24
- it { should be_kind_of(Hash) }
24
+ it { is_expected.to be_kind_of(Hash) }
25
25
 
26
- it { should eql(:load_as => @load_as, :dump_as => @load_as, :coercion_method => :to_constant) }
26
+ it { is_expected.to eql(:load_as => @load_as, :dump_as => @load_as, :coercion_method => :to_constant) }
27
27
  end
28
28
  end
@@ -15,8 +15,8 @@ describe Ardm::Property::Date do
15
15
  describe '.options' do
16
16
  subject { described_class.options }
17
17
 
18
- it { should be_kind_of(Hash) }
18
+ it { is_expected.to be_kind_of(Hash) }
19
19
 
20
- it { should eql(:load_as => @load_as, :dump_as => @load_as, :coercion_method => :to_date) }
20
+ it { is_expected.to eql(:load_as => @load_as, :dump_as => @load_as, :coercion_method => :to_date) }
21
21
  end
22
22
  end
@@ -15,8 +15,8 @@ describe Ardm::Property::DateTime do
15
15
  describe '.options' do
16
16
  subject { described_class.options }
17
17
 
18
- it { should be_kind_of(Hash) }
18
+ it { is_expected.to be_kind_of(Hash) }
19
19
 
20
- it { should eql(:load_as => @load_as, :dump_as => @load_as, :coercion_method => :to_datetime) }
20
+ it { is_expected.to eql(:load_as => @load_as, :dump_as => @load_as, :coercion_method => :to_datetime) }
21
21
  end
22
22
  end
@@ -16,8 +16,8 @@ describe Ardm::Property::Decimal do
16
16
  describe '.options' do
17
17
  subject { described_class.options }
18
18
 
19
- it { should be_kind_of(Hash) }
19
+ it { is_expected.to be_kind_of(Hash) }
20
20
 
21
- it { should eql(:load_as => @load_as, :dump_as => @load_as, :coercion_method => :to_decimal, :precision => 10, :scale => 0) }
21
+ it { is_expected.to eql(:load_as => @load_as, :dump_as => @load_as, :coercion_method => :to_decimal, :precision => 10, :scale => 0) }
22
22
  end
23
23
  end
@@ -7,6 +7,7 @@ module ::DiscBlog
7
7
  property :id, Serial
8
8
  property :title, String, :required => true
9
9
  property :type, Discriminator, :field => "slug"
10
+ timestamps :at
10
11
  end
11
12
 
12
13
  class Article < Content; end
@@ -26,13 +27,13 @@ describe Ardm::Property::Discriminator do
26
27
  describe '.options' do
27
28
  subject { described_class.options }
28
29
 
29
- it { should be_kind_of(Hash) }
30
+ it { is_expected.to be_kind_of(Hash) }
30
31
 
31
- it { should include(:load_as => Class, :required => true) }
32
+ it { is_expected.to include(:load_as => Class, :required => true) }
32
33
  end
33
34
 
34
35
  it 'should typecast to a Model' do
35
- @article_model.properties[:type].typecast('DiscBlog::Release').should equal(@release_model)
36
+ expect(@article_model.properties[:type].typecast('DiscBlog::Release')).to equal(@release_model)
36
37
  end
37
38
 
38
39
  describe 'Model#new' do
@@ -42,11 +43,11 @@ describe Ardm::Property::Discriminator do
42
43
  end
43
44
 
44
45
  it 'should return a Resource' do
45
- @resource.should be_kind_of(Ardm::Record)
46
+ expect(@resource).to be_kind_of(Ardm::Record)
46
47
  end
47
48
 
48
49
  it 'should be an descendant instance' do
49
- @resource.should be_instance_of(DiscBlog::Release)
50
+ expect(@resource).to be_instance_of(DiscBlog::Release)
50
51
  end
51
52
  end
52
53
 
@@ -56,11 +57,11 @@ describe Ardm::Property::Discriminator do
56
57
  end
57
58
 
58
59
  it 'should return a Resource' do
59
- @resource.should be_kind_of(Ardm::Record)
60
+ expect(@resource).to be_kind_of(Ardm::Record)
60
61
  end
61
62
 
62
63
  it 'should be an descendant instance' do
63
- @resource.should be_instance_of(DiscBlog::Release)
64
+ expect(@resource).to be_instance_of(DiscBlog::Release)
64
65
  end
65
66
  end
66
67
 
@@ -70,44 +71,44 @@ describe Ardm::Property::Discriminator do
70
71
  end
71
72
 
72
73
  it 'should return a Resource' do
73
- @resource.should be_kind_of(Ardm::Record)
74
+ expect(@resource).to be_kind_of(Ardm::Record)
74
75
  end
75
76
 
76
77
  it 'should be a base model instance' do
77
- @resource.should be_instance_of(@article_model)
78
+ expect(@resource).to be_instance_of(@article_model)
78
79
  end
79
80
  end
80
81
  end
81
82
 
82
83
  describe 'Model#descendants' do
83
84
  it 'should set the descendants for the grandparent model' do
84
- @article_model.descendants.to_a.should =~ [ @announcement_model, @release_model ]
85
+ expect(@article_model.descendants.to_a).to match_array([ @announcement_model, @release_model ])
85
86
  end
86
87
 
87
88
  it 'should set the descendants for the parent model' do
88
- @announcement_model.descendants.to_a.should == [ @release_model ]
89
+ expect(@announcement_model.descendants.to_a).to eq([ @release_model ])
89
90
  end
90
91
 
91
92
  it 'should set the descendants for the child model' do
92
- @release_model.descendants.to_a.should == []
93
+ expect(@release_model.descendants.to_a).to eq([])
93
94
  end
94
95
  end
95
96
 
96
97
  describe 'Model#default_scope', :pending => "I don't understand the intention of these" do
97
98
  it 'should have no default scope for the top level model' do
98
- @content_model.default_scope[:type].should be_nil
99
+ expect(@content_model.default_scope[:type]).to be_nil
99
100
  end
100
101
 
101
102
  it 'should set the default scope for the grandparent model' do
102
- @article_model.default_scope[:type].to_a.should =~ [ @article_model, @announcement_model, @release_model ]
103
+ expect(@article_model.default_scope[:type].to_a).to match_array([ @article_model, @announcement_model, @release_model ])
103
104
  end
104
105
 
105
106
  it 'should set the default scope for the parent model' do
106
- @announcement_model.default_scope[:type].to_a.should =~ [ @announcement_model, @release_model ]
107
+ expect(@announcement_model.default_scope[:type].to_a).to match_array([ @announcement_model, @release_model ])
107
108
  end
108
109
 
109
110
  it 'should set the default scope for the child model' do
110
- @release_model.default_scope[:type].to_a.should == [ @release_model ]
111
+ expect(@release_model.default_scope[:type].to_a).to eq([ @release_model ])
111
112
  end
112
113
  end
113
114
 
@@ -116,18 +117,18 @@ describe Ardm::Property::Discriminator do
116
117
  end
117
118
 
118
119
  it 'should persist the type' do
119
- @announcement.class.find(*@announcement.key).type.should equal(@announcement_model)
120
+ expect(@announcement.class.find(*@announcement.key).type).to equal(@announcement_model)
120
121
  end
121
122
 
122
123
  it 'should be retrieved as an instance of the correct class' do
123
- @announcement.class.find(*@announcement.key).should be_instance_of(@announcement_model)
124
+ expect(@announcement.class.find(*@announcement.key)).to be_instance_of(@announcement_model)
124
125
  end
125
126
 
126
127
  it 'should include descendants in finders' do
127
- @article_model.first.should eql(@announcement)
128
+ expect(@article_model.first).to eql(@announcement)
128
129
  end
129
130
 
130
131
  it 'should not include ancestors' do
131
- @release_model.first.should be_nil
132
+ expect(@release_model.first).to be_nil
132
133
  end
133
134
  end
@@ -15,8 +15,8 @@ describe Ardm::Property::Float do
15
15
  describe '.options' do
16
16
  subject { described_class.options }
17
17
 
18
- it { should be_kind_of(Hash) }
18
+ it { is_expected.to be_kind_of(Hash) }
19
19
 
20
- it { should eql(:load_as => @load_as, :dump_as => @load_as, :coercion_method => :to_float, :precision => 10, :scale => nil) }
20
+ it { is_expected.to eql(:load_as => @load_as, :dump_as => @load_as, :coercion_method => :to_float, :precision => 10, :scale => nil) }
21
21
  end
22
22
  end
@@ -15,8 +15,8 @@ describe Ardm::Property::Integer do
15
15
  describe '.options' do
16
16
  subject { described_class.options }
17
17
 
18
- it { should be_kind_of(Hash) }
18
+ it { is_expected.to be_kind_of(Hash) }
19
19
 
20
- it { should eql(:load_as => @load_as, :dump_as => @load_as, :coercion_method => :to_integer) }
20
+ it { is_expected.to eql(:load_as => @load_as, :dump_as => @load_as, :coercion_method => :to_integer) }
21
21
  end
22
22
  end
@@ -8,6 +8,7 @@ describe Ardm::Property, 'Object type' do
8
8
  property :id, Serial
9
9
  property :title, String
10
10
  property :meta, Object, :required => true, :field => 'body'
11
+ timestamps :at
11
12
  end
12
13
  end
13
14
 
@@ -20,12 +21,12 @@ describe Ardm::Property, 'Object type' do
20
21
  describe '.options' do
21
22
  subject { described_class.options }
22
23
 
23
- it { should be_kind_of(Hash) }
24
+ it { is_expected.to be_kind_of(Hash) }
24
25
 
25
- it { should be_empty }
26
+ it { is_expected.to be_empty }
26
27
  end
27
28
 
28
- it { should respond_to(:typecast) }
29
+ it { is_expected.to respond_to(:typecast) }
29
30
 
30
31
  describe '#typecast' do
31
32
  before do
@@ -34,10 +35,10 @@ describe Ardm::Property, 'Object type' do
34
35
 
35
36
  subject { @property.typecast(@value) }
36
37
 
37
- it { should equal(@value) }
38
+ it { is_expected.to equal(@value) }
38
39
  end
39
40
 
40
- it { should respond_to(:dump) }
41
+ it { is_expected.to respond_to(:dump) }
41
42
 
42
43
  describe '#dump' do
43
44
  describe 'with a value' do
@@ -47,23 +48,23 @@ describe Ardm::Property, 'Object type' do
47
48
 
48
49
  subject { @property.dump(@value) }
49
50
 
50
- it { @property.load(subject).should == @value }
51
+ it { expect(@property.load(subject)).to eq(@value) }
51
52
  end
52
53
 
53
54
  describe 'with nil' do
54
55
  subject { @property.dump(nil) }
55
56
 
56
- it { should be_nil }
57
+ it { is_expected.to be_nil }
57
58
  end
58
59
  end
59
60
 
60
- it { should respond_to(:valid?) }
61
+ it { is_expected.to respond_to(:valid?) }
61
62
 
62
63
  describe '#valid?' do
63
64
  describe 'with a valid load_as' do
64
65
  subject { @property.valid?('lang' => 'en_CA') }
65
66
 
66
- it { should be(true) }
67
+ it { is_expected.to be(true) }
67
68
  end
68
69
 
69
70
  describe 'with nil and property is not required' do
@@ -73,19 +74,19 @@ describe Ardm::Property, 'Object type' do
73
74
 
74
75
  subject { @property.valid?(nil) }
75
76
 
76
- it { should be(true) }
77
+ it { is_expected.to be(true) }
77
78
  end
78
79
 
79
80
  describe 'with nil and property is required' do
80
81
  subject { @property.valid?(nil) }
81
82
 
82
- it { should be(false) }
83
+ it { is_expected.to be(false) }
83
84
  end
84
85
 
85
86
  describe 'with nil and property is required, but validity is negated' do
86
87
  subject { @property.valid?(nil, true) }
87
88
 
88
- it { should be(true) }
89
+ it { is_expected.to be(true) }
89
90
  end
90
91
  end
91
92
 
@@ -97,7 +98,7 @@ describe Ardm::Property, 'Object type' do
97
98
  subject { @resource.reload.meta }
98
99
 
99
100
  it 'should load the correct value' do
100
- should == { 'lang' => 'en_CA' }
101
+ is_expected.to eq({ 'lang' => 'en_CA' })
101
102
  end
102
103
  end
103
104
  end