ardm 0.0.1
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.
- checksums.yaml +15 -0
- data/.gitignore +35 -0
- data/Gemfile +13 -0
- data/LICENSE +21 -0
- data/README.md +70 -0
- data/Rakefile +4 -0
- data/ardm.gemspec +29 -0
- data/db/.gitignore +1 -0
- data/lib/ardm/active_record/associations.rb +80 -0
- data/lib/ardm/active_record/base.rb +49 -0
- data/lib/ardm/active_record/dirty.rb +25 -0
- data/lib/ardm/active_record/hooks.rb +31 -0
- data/lib/ardm/active_record/inheritance.rb +37 -0
- data/lib/ardm/active_record/is/state_machine.rb +21 -0
- data/lib/ardm/active_record/is.rb +22 -0
- data/lib/ardm/active_record/not_found.rb +7 -0
- data/lib/ardm/active_record/predicate_builder/array_handler.rb +31 -0
- data/lib/ardm/active_record/predicate_builder/rails3.rb +147 -0
- data/lib/ardm/active_record/predicate_builder/rails4.rb +139 -0
- data/lib/ardm/active_record/predicate_builder/relation_handler.rb +15 -0
- data/lib/ardm/active_record/predicate_builder.rb +19 -0
- data/lib/ardm/active_record/property.rb +357 -0
- data/lib/ardm/active_record/query.rb +108 -0
- data/lib/ardm/active_record/record.rb +70 -0
- data/lib/ardm/active_record/relation.rb +83 -0
- data/lib/ardm/active_record/repository.rb +38 -0
- data/lib/ardm/active_record/serialization.rb +164 -0
- data/lib/ardm/active_record/storage_names.rb +28 -0
- data/lib/ardm/active_record/validations.rb +111 -0
- data/lib/ardm/active_record.rb +43 -0
- data/lib/ardm/data_mapper/not_found.rb +5 -0
- data/lib/ardm/data_mapper/record.rb +41 -0
- data/lib/ardm/data_mapper.rb +5 -0
- data/lib/ardm/env.rb +5 -0
- data/lib/ardm/property/api_key.rb +30 -0
- data/lib/ardm/property/bcrypt_hash.rb +31 -0
- data/lib/ardm/property/binary.rb +23 -0
- data/lib/ardm/property/boolean.rb +29 -0
- data/lib/ardm/property/class.rb +19 -0
- data/lib/ardm/property/comma_separated_list.rb +28 -0
- data/lib/ardm/property/csv.rb +35 -0
- data/lib/ardm/property/date.rb +12 -0
- data/lib/ardm/property/datetime.rb +12 -0
- data/lib/ardm/property/decimal.rb +38 -0
- data/lib/ardm/property/discriminator.rb +65 -0
- data/lib/ardm/property/enum.rb +51 -0
- data/lib/ardm/property/epoch_time.rb +38 -0
- data/lib/ardm/property/file_path.rb +25 -0
- data/lib/ardm/property/flag.rb +65 -0
- data/lib/ardm/property/float.rb +18 -0
- data/lib/ardm/property/integer.rb +24 -0
- data/lib/ardm/property/invalid_value_error.rb +22 -0
- data/lib/ardm/property/ip_address.rb +35 -0
- data/lib/ardm/property/json.rb +49 -0
- data/lib/ardm/property/lookup.rb +29 -0
- data/lib/ardm/property/numeric.rb +40 -0
- data/lib/ardm/property/object.rb +36 -0
- data/lib/ardm/property/paranoid_boolean.rb +18 -0
- data/lib/ardm/property/paranoid_datetime.rb +17 -0
- data/lib/ardm/property/regexp.rb +22 -0
- data/lib/ardm/property/serial.rb +16 -0
- data/lib/ardm/property/slug.rb +29 -0
- data/lib/ardm/property/string.rb +40 -0
- data/lib/ardm/property/support/dirty_minder.rb +169 -0
- data/lib/ardm/property/support/flags.rb +41 -0
- data/lib/ardm/property/support/paranoid_base.rb +78 -0
- data/lib/ardm/property/text.rb +11 -0
- data/lib/ardm/property/time.rb +12 -0
- data/lib/ardm/property/uri.rb +27 -0
- data/lib/ardm/property/uuid.rb +65 -0
- data/lib/ardm/property/validation.rb +208 -0
- data/lib/ardm/property/yaml.rb +38 -0
- data/lib/ardm/property.rb +891 -0
- data/lib/ardm/property_set.rb +152 -0
- data/lib/ardm/query/expression.rb +85 -0
- data/lib/ardm/query/ext/symbol.rb +37 -0
- data/lib/ardm/query/operator.rb +64 -0
- data/lib/ardm/record.rb +1 -0
- data/lib/ardm/support/assertions.rb +8 -0
- data/lib/ardm/support/deprecate.rb +12 -0
- data/lib/ardm/support/descendant_set.rb +89 -0
- data/lib/ardm/support/equalizer.rb +48 -0
- data/lib/ardm/support/ext/array.rb +22 -0
- data/lib/ardm/support/ext/blank.rb +25 -0
- data/lib/ardm/support/ext/hash.rb +67 -0
- data/lib/ardm/support/ext/module.rb +47 -0
- data/lib/ardm/support/ext/object.rb +57 -0
- data/lib/ardm/support/ext/string.rb +24 -0
- data/lib/ardm/support/ext/try_dup.rb +12 -0
- data/lib/ardm/support/hook.rb +405 -0
- data/lib/ardm/support/lazy_array.rb +451 -0
- data/lib/ardm/support/local_object_space.rb +13 -0
- data/lib/ardm/support/logger.rb +201 -0
- data/lib/ardm/support/mash.rb +176 -0
- data/lib/ardm/support/naming_conventions.rb +90 -0
- data/lib/ardm/support/ordered_set.rb +380 -0
- data/lib/ardm/support/subject.rb +33 -0
- data/lib/ardm/support/subject_set.rb +250 -0
- data/lib/ardm/version.rb +3 -0
- data/lib/ardm.rb +56 -0
- data/spec/fixtures/api_user.rb +11 -0
- data/spec/fixtures/article.rb +22 -0
- data/spec/fixtures/bookmark.rb +14 -0
- data/spec/fixtures/invention.rb +5 -0
- data/spec/fixtures/network_node.rb +23 -0
- data/spec/fixtures/person.rb +17 -0
- data/spec/fixtures/software_package.rb +22 -0
- data/spec/fixtures/ticket.rb +12 -0
- data/spec/fixtures/tshirt.rb +15 -0
- data/spec/integration/api_key_spec.rb +25 -0
- data/spec/integration/bcrypt_hash_spec.rb +45 -0
- data/spec/integration/comma_separated_list_spec.rb +85 -0
- data/spec/integration/dirty_minder_spec.rb +197 -0
- data/spec/integration/enum_spec.rb +79 -0
- data/spec/integration/epoch_time_spec.rb +59 -0
- data/spec/integration/file_path_spec.rb +158 -0
- data/spec/integration/flag_spec.rb +72 -0
- data/spec/integration/ip_address_spec.rb +151 -0
- data/spec/integration/json_spec.rb +70 -0
- data/spec/integration/slug_spec.rb +65 -0
- data/spec/integration/uri_spec.rb +136 -0
- data/spec/integration/uuid_spec.rb +102 -0
- data/spec/integration/yaml_spec.rb +85 -0
- data/spec/public/property/binary_spec.rb +41 -0
- data/spec/public/property/boolean_spec.rb +30 -0
- data/spec/public/property/class_spec.rb +28 -0
- data/spec/public/property/date_spec.rb +22 -0
- data/spec/public/property/date_time_spec.rb +22 -0
- data/spec/public/property/decimal_spec.rb +23 -0
- data/spec/public/property/discriminator_spec.rb +133 -0
- data/spec/public/property/float_spec.rb +22 -0
- data/spec/public/property/integer_spec.rb +22 -0
- data/spec/public/property/object_spec.rb +103 -0
- data/spec/public/property/serial_spec.rb +22 -0
- data/spec/public/property/string_spec.rb +22 -0
- data/spec/public/property/text_spec.rb +23 -0
- data/spec/public/property/time_spec.rb +22 -0
- data/spec/public/property_spec.rb +316 -0
- data/spec/rcov.opts +6 -0
- data/spec/schema.rb +86 -0
- data/spec/semipublic/property/binary_spec.rb +14 -0
- data/spec/semipublic/property/boolean_spec.rb +48 -0
- data/spec/semipublic/property/class_spec.rb +36 -0
- data/spec/semipublic/property/date_spec.rb +44 -0
- data/spec/semipublic/property/date_time_spec.rb +47 -0
- data/spec/semipublic/property/decimal_spec.rb +83 -0
- data/spec/semipublic/property/discriminator_spec.rb +22 -0
- data/spec/semipublic/property/float_spec.rb +83 -0
- data/spec/semipublic/property/integer_spec.rb +83 -0
- data/spec/semipublic/property/lookup_spec.rb +27 -0
- data/spec/semipublic/property/serial_spec.rb +14 -0
- data/spec/semipublic/property/string_spec.rb +14 -0
- data/spec/semipublic/property/text_spec.rb +30 -0
- data/spec/semipublic/property/time_spec.rb +49 -0
- data/spec/semipublic/property_spec.rb +51 -0
- data/spec/shared/flags_shared_spec.rb +36 -0
- data/spec/shared/identity_function_group.rb +5 -0
- data/spec/shared/public_property_spec.rb +229 -0
- data/spec/shared/semipublic_property_spec.rb +159 -0
- data/spec/spec.opts +4 -0
- data/spec/spec_helper.rb +58 -0
- data/spec/unit/bcrypt_hash_spec.rb +154 -0
- data/spec/unit/csv_spec.rb +139 -0
- data/spec/unit/dirty_minder_spec.rb +64 -0
- data/spec/unit/enum_spec.rb +125 -0
- data/spec/unit/epoch_time_spec.rb +72 -0
- data/spec/unit/file_path_spec.rb +75 -0
- data/spec/unit/flag_spec.rb +114 -0
- data/spec/unit/ip_address_spec.rb +109 -0
- data/spec/unit/json_spec.rb +127 -0
- data/spec/unit/paranoid_boolean_spec.rb +142 -0
- data/spec/unit/paranoid_datetime_spec.rb +149 -0
- data/spec/unit/regexp_spec.rb +62 -0
- data/spec/unit/uri_spec.rb +64 -0
- data/spec/unit/yaml_spec.rb +111 -0
- data/tasks/spec.rake +40 -0
- data/tasks/yard.rake +9 -0
- data/tasks/yardstick.rake +19 -0
- metadata +350 -0
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
try_spec do
|
|
4
|
+
|
|
5
|
+
# FIXME: DirtyMinder is currently unsupported on RBX, because unlike the other
|
|
6
|
+
# supported Rubies, RBX core class (e.g. Array, Hash) methods use #send(). In
|
|
7
|
+
# other words, the other Rubies don't use #send() (they map directly to their
|
|
8
|
+
# C functions).
|
|
9
|
+
#
|
|
10
|
+
# The current methodology takes advantage of this by using #send() to forward
|
|
11
|
+
# method invocations we've hooked. Supporting RBX will require finding
|
|
12
|
+
# another way, possibly for all Rubies. In the meantime, something is better
|
|
13
|
+
# than nothing.
|
|
14
|
+
next if defined?(RUBY_ENGINE) and RUBY_ENGINE == 'rbx'
|
|
15
|
+
|
|
16
|
+
require './spec/fixtures/person'
|
|
17
|
+
|
|
18
|
+
describe Ardm::Fixtures::Person do
|
|
19
|
+
before :each do
|
|
20
|
+
@resource = Ardm::Fixtures::Person.new(:name => 'Thomas Edison')
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe 'with positions indirectly mutated as a hash' do
|
|
24
|
+
before :each do
|
|
25
|
+
@resource.positions = {
|
|
26
|
+
'company' => "Soon To Be Dirty, LLC",
|
|
27
|
+
'title' => "Layperson",
|
|
28
|
+
'details' => { 'awesome' => true },
|
|
29
|
+
}
|
|
30
|
+
@resource.save!
|
|
31
|
+
@resource.reload
|
|
32
|
+
@resource.positions['title'].should == 'Layperson'
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
describe "when I change positions" do
|
|
36
|
+
before :each do
|
|
37
|
+
@resource.changed?.should == false
|
|
38
|
+
@resource.positions['title'] = 'Chief Layer of People'
|
|
39
|
+
@resource.save!
|
|
40
|
+
@resource.reload
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "should remember the new position" do
|
|
44
|
+
@resource.positions['title'].should == 'Chief Layer of People'
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
describe "when I add a new attribute of the position" do
|
|
49
|
+
before :each do
|
|
50
|
+
@resource.changed?.should == false
|
|
51
|
+
@resource.positions['pays_buttloads_of_money'] = true
|
|
52
|
+
@resource.save!
|
|
53
|
+
@resource.reload
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it "should remember the new attribute" do
|
|
57
|
+
@resource.positions['pays_buttloads_of_money'].should be_true
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
describe "when I change the details of the position" do
|
|
62
|
+
before :each do
|
|
63
|
+
@resource.changed?.should == false
|
|
64
|
+
@resource.positions['details'].merge!('awesome' => "VERY TRUE")
|
|
65
|
+
@resource.save!
|
|
66
|
+
@resource.reload
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "should remember the changed detail" do
|
|
70
|
+
# Works in active record (unless something is fooling me)
|
|
71
|
+
#pending "not supported (YET)" do
|
|
72
|
+
# TODO: Not supported (yet?) -- this is a much harder problem to
|
|
73
|
+
# solve: using mutating accessors of nested objects. We could
|
|
74
|
+
# detect it from #dirty? (using the #hash method), but #dirty?
|
|
75
|
+
# only returns the status of known-mutated properties (not full,
|
|
76
|
+
# on-demand scan of object dirty-ness).
|
|
77
|
+
@resource.positions['details']['awesome'].should == 'VERY TRUE'
|
|
78
|
+
#end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
describe "when I reload the resource while the property is dirty" do
|
|
83
|
+
before :each do
|
|
84
|
+
@resource.positions['title'] = 'Chief Layer of People'
|
|
85
|
+
@resource.reload
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it "should reflect the previously set/persisted value" do
|
|
89
|
+
@resource.positions.should_not be_nil
|
|
90
|
+
@resource.positions['title'].should == 'Layperson'
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
end # positions indirectly mutated as a hash
|
|
95
|
+
|
|
96
|
+
describe 'with positions indirectly mutated as an array' do
|
|
97
|
+
before :each do
|
|
98
|
+
@resource.positions = [
|
|
99
|
+
{ 'company' => "Soon To Be Dirty, LLC",
|
|
100
|
+
'title' => "Layperson",
|
|
101
|
+
'details' => { 'awesome' => true },
|
|
102
|
+
},
|
|
103
|
+
]
|
|
104
|
+
@resource.save!
|
|
105
|
+
@resource.reload
|
|
106
|
+
@resource.positions.first['title'].should == 'Layperson'
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
describe "when I remove the position" do
|
|
110
|
+
before :each do
|
|
111
|
+
@resource.changed?.should == false
|
|
112
|
+
@resource.positions.pop
|
|
113
|
+
@resource.save!
|
|
114
|
+
@resource.reload
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
it "should know there aren't any positions" do
|
|
118
|
+
@resource.positions.should == []
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
describe "when I add a new position" do
|
|
123
|
+
before :each do
|
|
124
|
+
@resource.changed?.should == false
|
|
125
|
+
@resource.positions << {
|
|
126
|
+
'company' => "Down and Dirty, LP",
|
|
127
|
+
'title' => "Porn Star",
|
|
128
|
+
'details' => { 'awesome' => "also true" },
|
|
129
|
+
}
|
|
130
|
+
@resource.save!
|
|
131
|
+
@resource.reload
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
it "should know there's two positions" do
|
|
135
|
+
@resource.positions.length.should == 2
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
it "should know which position is which" do
|
|
139
|
+
@resource.positions.first['title'].should == "Layperson"
|
|
140
|
+
@resource.positions.last['title'].should == "Porn Star"
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
describe "when I change the details of one of the positions" do
|
|
144
|
+
before :each do
|
|
145
|
+
@resource.positions.last['details'].merge!('high_risk' => true)
|
|
146
|
+
@resource.save!
|
|
147
|
+
@resource.reload
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
it "should remember the changed detail" do
|
|
151
|
+
# Works in active record (unless something is fooling me)
|
|
152
|
+
#pending "not supported (YET)" do
|
|
153
|
+
# TODO: Not supported (yet?) -- this is a much harder problem to
|
|
154
|
+
# solve: using mutating accessors of nested objects. We could
|
|
155
|
+
# detect it from #dirty? (using the #hash method), but #dirty?
|
|
156
|
+
# only returns the status of known-mutated properties (not full,
|
|
157
|
+
# on-demand scan of object dirty-ness).
|
|
158
|
+
@resource.positions.last['details']['high_risk'].should == true
|
|
159
|
+
#end
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
end # when I add a new position
|
|
163
|
+
|
|
164
|
+
describe "when I remove the position with a block-based mutator" do
|
|
165
|
+
before :each do
|
|
166
|
+
@resource.changed?.should == false
|
|
167
|
+
@resource.positions.reject! { |_| true }
|
|
168
|
+
@resource.save!
|
|
169
|
+
@resource.reload
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
it "should know there aren't any positions" do
|
|
173
|
+
@resource.positions.should == []
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
describe "when I mutate positions through a reference" do
|
|
178
|
+
before :each do
|
|
179
|
+
@resource.changed?.should == false
|
|
180
|
+
@positions = @resource.positions
|
|
181
|
+
@positions << {
|
|
182
|
+
'company' => "Ooga Booga, Inc",
|
|
183
|
+
'title' => "Rocker",
|
|
184
|
+
}
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
it "should reflect the change in both the property and the reference" do
|
|
188
|
+
@resource.positions.length.should == 2
|
|
189
|
+
@resource.positions.last['title'].should == 'Rocker'
|
|
190
|
+
@positions.last['title'].should == 'Rocker'
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
end # positions indirectly mutated as an array
|
|
195
|
+
|
|
196
|
+
end
|
|
197
|
+
end
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
try_spec do
|
|
4
|
+
|
|
5
|
+
require './spec/fixtures/ticket'
|
|
6
|
+
|
|
7
|
+
describe Ardm::Fixtures::Ticket do
|
|
8
|
+
describe 'that is dumped and then loaded' do
|
|
9
|
+
before do
|
|
10
|
+
@resource = Ardm::Fixtures::Ticket.new(
|
|
11
|
+
:title => "Can't order by aggregated fields",
|
|
12
|
+
:id => 789,
|
|
13
|
+
:body => "I'm trying to use the aggregate method and sort the results by a summed field, but it doesn't work.",
|
|
14
|
+
:status => 'confirmed'
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
@resource.save.should be_true
|
|
18
|
+
@resource.reload
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'preserves property value' do
|
|
22
|
+
@resource.status.should == :confirmed
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe 'that is supplied a matching enumeration value' do
|
|
27
|
+
before do
|
|
28
|
+
@resource = Ardm::Fixtures::Ticket.new(:status => :assigned)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'typecasts it for outside reader' do
|
|
32
|
+
@resource.status.should == :assigned
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
describe '#get' do
|
|
37
|
+
before do
|
|
38
|
+
@resource = Ardm::Fixtures::Ticket.new(
|
|
39
|
+
:title => '"sudo make install" of drizzle fails because it tries to chown mysql',
|
|
40
|
+
:id => 257497,
|
|
41
|
+
:body => "Note that at the very least, there should be a check to see whether or not the user is created before chown'ing a file to the user.",
|
|
42
|
+
:status => 'confirmed'
|
|
43
|
+
)
|
|
44
|
+
@resource.save.should be_true
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it 'supports queries with equality operator on enumeration property' do
|
|
48
|
+
Ardm::Fixtures::Ticket.where(:status => :confirmed).
|
|
49
|
+
should include(@resource)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'supports queries with inequality operator on enumeration property' do
|
|
53
|
+
Ardm::Fixtures::Ticket.where.not(:status => :confirmed).
|
|
54
|
+
should_not include(@resource)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
describe 'with value unknown to enumeration property' do
|
|
59
|
+
before do
|
|
60
|
+
@resource = Ardm::Fixtures::Ticket.new(:status => :undecided)
|
|
61
|
+
@resource.valid?
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# TODO: consider sharing shared spec exampels with dm-validations,
|
|
65
|
+
# which has 'invalid model' shared group
|
|
66
|
+
it 'is invalid (auto validation for :within kicks in)' do
|
|
67
|
+
@resource.should_not be_valid
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it 'has errors' do
|
|
71
|
+
@resource.errors.should_not be_empty
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it 'has a meaningful error message on invalid property' do
|
|
75
|
+
@resource.errors[:status].should include('must be one of unconfirmed, confirmed, assigned, resolved, not_applicable')
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
try_spec do
|
|
4
|
+
|
|
5
|
+
require './spec/fixtures/person'
|
|
6
|
+
|
|
7
|
+
describe Ardm::Fixtures::Person do
|
|
8
|
+
before do
|
|
9
|
+
@resource = Ardm::Fixtures::Person.new(:name => '')
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
describe 'with a birthday' do
|
|
13
|
+
before do
|
|
14
|
+
@resource.birthday = '1983-05-03'
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe 'after typecasting string input' do
|
|
18
|
+
it 'has a valid birthday' do
|
|
19
|
+
@resource.birthday.should == ::Time.parse('1983-05-03')
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe 'when dumped and loaded again' do
|
|
24
|
+
before do
|
|
25
|
+
@resource.save.should be_true
|
|
26
|
+
@resource.reload
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'has a valid birthday' do
|
|
30
|
+
@resource.birthday.should == ::Time.parse('1983-05-03')
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
describe 'without a birthday' do
|
|
36
|
+
before do
|
|
37
|
+
@resource.birthday = nil
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
describe 'after typecasting nil' do
|
|
41
|
+
it 'has a nil value for birthday' do
|
|
42
|
+
@resource.birthday.should be_nil
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
describe 'when dumped and loaded again' do
|
|
47
|
+
before do
|
|
48
|
+
@resource.save.should be_true
|
|
49
|
+
@resource.reload
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'has a nil value for birthday' do
|
|
53
|
+
@resource.birthday.should be_nil
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
try_spec do
|
|
4
|
+
|
|
5
|
+
require './spec/fixtures/software_package'
|
|
6
|
+
|
|
7
|
+
describe Ardm::Fixtures::SoftwarePackage do
|
|
8
|
+
describe 'with source path at /var/cache/apt/archives/linux-libc-dev_2.6.28-11.40_i386.deb' do
|
|
9
|
+
before do
|
|
10
|
+
@source_path = '/var/cache/apt/archives/linux-libc-dev_2.6.28-11.40_i386.deb'
|
|
11
|
+
@resource = Ardm::Fixtures::SoftwarePackage.new(:source_path => @source_path)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
describe 'when is a new record' do
|
|
15
|
+
before do
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it 'points to original path' do
|
|
19
|
+
@resource.source_path.to_s.should == @source_path
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'responds to :directory?' do
|
|
23
|
+
@resource.source_path.should respond_to(:directory?)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it 'responds to :file?' do
|
|
27
|
+
@resource.source_path.should respond_to(:file?)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'responds to :dirname' do
|
|
31
|
+
@resource.source_path.should respond_to(:dirname)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'responds to :absolute?' do
|
|
35
|
+
@resource.source_path.should respond_to(:absolute?)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it 'responds to :readable?' do
|
|
39
|
+
@resource.source_path.should respond_to(:readable?)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'responds to :size' do
|
|
43
|
+
@resource.source_path.should respond_to(:size)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
describe 'with destination path at /usr/local' do
|
|
49
|
+
before do
|
|
50
|
+
@destination_path = '/usr/local'
|
|
51
|
+
@resource = Ardm::Fixtures::SoftwarePackage.new(:destination_path => @destination_path)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
describe 'when saved and reloaded' do
|
|
55
|
+
before do
|
|
56
|
+
@resource.save.should be_true
|
|
57
|
+
@resource.reload
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it 'points to original path' do
|
|
61
|
+
@resource.destination_path.to_s.should == @destination_path
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it 'responds to :directory?' do
|
|
65
|
+
@resource.destination_path.should respond_to(:directory?)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it 'responds to :file?' do
|
|
69
|
+
@resource.destination_path.should respond_to(:file?)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it 'responds to :dirname' do
|
|
73
|
+
@resource.destination_path.should respond_to(:dirname)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it 'responds to :absolute?' do
|
|
77
|
+
@resource.destination_path.should respond_to(:absolute?)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it 'responds to :readable?' do
|
|
81
|
+
@resource.destination_path.should respond_to(:readable?)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it 'responds to :size' do
|
|
85
|
+
@resource.destination_path.should respond_to(:size)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
describe 'with no (nil) source path' do
|
|
91
|
+
before do
|
|
92
|
+
@source_path = nil
|
|
93
|
+
@resource = Ardm::Fixtures::SoftwarePackage.new(:source_path => @source_path)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
describe 'when saved and reloaded' do
|
|
97
|
+
before do
|
|
98
|
+
@resource.save.should be_true
|
|
99
|
+
@resource.reload
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it 'has nil source path' do
|
|
103
|
+
@resource.source_path.should be_nil
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
describe 'with a blank source path' do
|
|
109
|
+
before do
|
|
110
|
+
@source_path = ''
|
|
111
|
+
@resource = Ardm::Fixtures::SoftwarePackage.new(:source_path => @source_path)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
describe 'when saved and reloaded' do
|
|
115
|
+
before do
|
|
116
|
+
@resource.save.should be_true
|
|
117
|
+
@resource.reload
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it 'has nil source path' do
|
|
121
|
+
@resource.source_path.should be_nil
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
describe 'with a source path assigned to an empty array' do
|
|
127
|
+
before do
|
|
128
|
+
@source_path = []
|
|
129
|
+
@resource = Ardm::Fixtures::SoftwarePackage.new(:source_path => @source_path)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
describe 'when saved and reloaded' do
|
|
133
|
+
before do
|
|
134
|
+
@resource.save.should be_true
|
|
135
|
+
@resource.reload
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
it 'has nil source path' do
|
|
139
|
+
@resource.source_path.should be_nil
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
describe 'with a source path assigned to a Hash' do
|
|
145
|
+
before do
|
|
146
|
+
@source_path = { :guitar => 'Joe Satriani' }
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
describe 'when instantiated' do
|
|
150
|
+
it 'raises an exception' do
|
|
151
|
+
lambda do
|
|
152
|
+
Ardm::Fixtures::SoftwarePackage.new(:source_path => @source_path)
|
|
153
|
+
end.should raise_error(TypeError)
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
try_spec do
|
|
4
|
+
|
|
5
|
+
require './spec/fixtures/tshirt'
|
|
6
|
+
|
|
7
|
+
describe Ardm::Fixtures::TShirt do
|
|
8
|
+
before do
|
|
9
|
+
@resource = Ardm::Fixtures::TShirt.new(
|
|
10
|
+
:writing => 'Fork you',
|
|
11
|
+
:has_picture => true,
|
|
12
|
+
:picture => :octocat,
|
|
13
|
+
:color => :white
|
|
14
|
+
)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe 'with the default value' do
|
|
18
|
+
it 'returns it as an array' do
|
|
19
|
+
pending "FIXME: This probably should pass" do
|
|
20
|
+
@resource.size.should eq([Ardm::Fixtures::TShirt.properties[:size].default])
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
describe 'with multiple sizes' do
|
|
26
|
+
describe 'dumped and loaded' do
|
|
27
|
+
before do
|
|
28
|
+
@resource.size = [ :xs, :medium ]
|
|
29
|
+
@resource.save.should be_true
|
|
30
|
+
@resource.reload
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it 'returns size as array' do
|
|
34
|
+
@resource.size.should == [ :xs, :medium ]
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
describe 'with a single size' do
|
|
40
|
+
before do
|
|
41
|
+
@resource.size = :large
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
describe 'dumped and loaded' do
|
|
45
|
+
before do
|
|
46
|
+
@resource.save.should be_true
|
|
47
|
+
@resource.reload
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it 'returns size as array with a single value' do
|
|
51
|
+
@resource.size.should == [:large]
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Flag does not add any auto validations
|
|
57
|
+
describe 'without size' do
|
|
58
|
+
before do
|
|
59
|
+
@resource.should be_valid
|
|
60
|
+
@resource.size = nil
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it 'is valid' do
|
|
64
|
+
@resource.should be_valid
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it 'has no errors' do
|
|
68
|
+
@resource.errors.should be_empty
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|