ardm 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,27 +1,28 @@
1
- share_examples_for 'A semipublic Property' do
1
+ shared_examples 'A semipublic Property' do
2
2
  module ::Blog
3
3
  class Article < Ardm::Record
4
4
  self.table_name = "articles"
5
5
  property :id, Serial
6
+ timestamps :at
6
7
  end
7
8
  end
8
9
 
9
10
  describe '.new' do
10
11
  describe 'when provided no options' do
11
12
  it 'should return a Property' do
12
- property.should be_kind_of(type)
13
+ expect(property).to be_kind_of(type)
13
14
  end
14
15
 
15
16
  it 'should set the load_as' do
16
- property.load_as.should be(type.load_as)
17
+ expect(property.load_as).to be(type.load_as)
17
18
  end
18
19
 
19
20
  it 'should set the model' do
20
- property.model.should equal(model)
21
+ expect(property.model).to equal(model)
21
22
  end
22
23
 
23
24
  it 'should set the options to the default' do
24
- property.options.should == type.options.merge(options)
25
+ expect(property.options).to eq(type.options.merge(options))
25
26
  end
26
27
  end
27
28
 
@@ -32,19 +33,19 @@ share_examples_for 'A semipublic Property' do
32
33
  let(:property) { type.new(model, name, options.merge(opts)) }
33
34
 
34
35
  it 'should return a Property' do
35
- property.should be_kind_of(type)
36
+ expect(property).to be_kind_of(type)
36
37
  end
37
38
 
38
39
  it 'should set the model' do
39
- property.model.should equal(model)
40
+ expect(property.model).to equal(model)
40
41
  end
41
42
 
42
43
  it 'should set the load_as' do
43
- property.load_as.should be(type.load_as)
44
+ expect(property.load_as).to be(type.load_as)
44
45
  end
45
46
 
46
47
  it "should set the options to #{opts.inspect}" do
47
- property.options.should == type.options.merge(options.merge(opts))
48
+ expect(property.options).to eq(type.options.merge(options.merge(opts)))
48
49
  end
49
50
  end
50
51
  end
@@ -52,9 +53,9 @@ share_examples_for 'A semipublic Property' do
52
53
  [ [], nil ].each do |value|
53
54
  describe "when provided #{(invalid_options = { attribute => value }).inspect}" do
54
55
  it 'should raise an exception' do
55
- lambda {
56
+ expect {
56
57
  type.new(model, name, options.merge(invalid_options))
57
- }.should raise_error(ArgumentError, "options[#{attribute.inspect}] must be either true, false, a Symbol or an Array of Symbols")
58
+ }.to raise_error(ArgumentError, "options[#{attribute.inspect}] must be either true, false, a Symbol or an Array of Symbols")
58
59
  end
59
60
  end
60
61
  end
@@ -65,21 +66,21 @@ share_examples_for 'A semipublic Property' do
65
66
  subject { property.load(value) }
66
67
 
67
68
  before do
68
- property.should_receive(:typecast).with(value).and_return(value)
69
+ expect(property).to receive(:typecast).with(value).and_return(value)
69
70
  end
70
71
 
71
- it { should eql(value) }
72
+ it { is_expected.to eql(value) }
72
73
  end
73
74
 
74
75
  describe "#typecast" do
75
76
  describe 'when value is nil' do
76
77
  it 'returns value unchanged' do
77
- property.typecast(nil).should be(nil)
78
+ expect(property.typecast(nil)).to be(nil)
78
79
  end
79
80
 
80
81
  describe 'when value is a Ruby primitive' do
81
82
  it 'returns value unchanged' do
82
- property.typecast(value).should == value
83
+ expect(property.typecast(value)).to eq(value)
83
84
  end
84
85
  end
85
86
  end
@@ -88,27 +89,27 @@ share_examples_for 'A semipublic Property' do
88
89
  describe '#valid?' do
89
90
  describe 'when provided a valid value' do
90
91
  it 'should return true' do
91
- property.valid?(value).should be(true)
92
+ expect(property.valid?(value)).to be(true)
92
93
  end
93
94
  end
94
95
 
95
96
  describe 'when provide an invalid value' do
96
97
  it 'should return false' do
97
- property.valid?(invalid_value).should be(false)
98
+ expect(property.valid?(invalid_value)).to be(false)
98
99
  end
99
100
  end
100
101
 
101
102
  describe 'when provide a nil value when required' do
102
103
  it 'should return false' do
103
104
  property = type.new(model, name, options.merge(:required => true))
104
- property.valid?(nil).should be(false)
105
+ expect(property.valid?(nil)).to be(false)
105
106
  end
106
107
  end
107
108
 
108
109
  describe 'when provide a nil value when not required' do
109
110
  it 'should return false' do
110
111
  property = type.new(model, name, options.merge(:required => false))
111
- property.valid?(nil).should be(true)
112
+ expect(property.valid?(nil)).to be(true)
112
113
  end
113
114
  end
114
115
  end
@@ -121,14 +122,14 @@ share_examples_for 'A semipublic Property' do
121
122
  shared_examples_for 'assert_valid_value on invalid value' do
122
123
  it 'should raise Ardm::Property::InvalidValueError' do
123
124
  expect { subject }.to(raise_error(Ardm::Property::InvalidValueError) do |error|
124
- error.property.should == property
125
+ expect(error.property).to eq(property)
125
126
  end)
126
127
  end
127
128
  end
128
129
 
129
130
  describe 'when provided a valid value' do
130
131
  it 'should return true' do
131
- subject.should be(true)
132
+ expect(subject).to be(true)
132
133
  end
133
134
  end
134
135
 
@@ -152,7 +153,7 @@ share_examples_for 'A semipublic Property' do
152
153
  let(:value) { nil }
153
154
 
154
155
  it 'should return true' do
155
- subject.should be(true)
156
+ expect(subject).to be(true)
156
157
  end
157
158
  end
158
159
  end
data/spec/spec_helper.rb CHANGED
@@ -38,6 +38,23 @@ RSpec.configure do |config|
38
38
  config.after(:each) do
39
39
  DatabaseCleaner.clean
40
40
  end
41
+
42
+ def reset_raise_on_save_failure(object)
43
+ name = :raise_on_save_failure
44
+ ivar = "@#{name}"
45
+
46
+ if object.respond_to? :singleton_class
47
+ object.singleton_class.class_eval do
48
+ remove_possible_method(name)
49
+ end
50
+ end
51
+
52
+ object.instance_eval do
53
+ if instance_variable_defined?(ivar)
54
+ remove_instance_variable(ivar)
55
+ end
56
+ end
57
+ end
41
58
  end
42
59
 
43
60
  DEPENDENCIES = {
@@ -30,11 +30,11 @@ try_spec do
30
30
  end
31
31
 
32
32
  it 'returns instance of BCrypt::Password' do
33
- @result.should be_an_instance_of(BCrypt::Password)
33
+ expect(@result).to be_an_instance_of(BCrypt::Password)
34
34
  end
35
35
 
36
36
  it 'returns a string that is 60 characters long' do
37
- @result.size.should == 60
37
+ expect(@result.size).to eq(60)
38
38
  end
39
39
  end
40
40
 
@@ -45,7 +45,7 @@ try_spec do
45
45
  end
46
46
 
47
47
  it 'returns nil' do
48
- @result.should be_nil
48
+ expect(@result).to be_nil
49
49
  end
50
50
  end
51
51
  end
@@ -58,11 +58,11 @@ try_spec do
58
58
  end
59
59
 
60
60
  it 'returns instance of BCrypt::Password' do
61
- @result.should be_an_instance_of(BCrypt::Password)
61
+ expect(@result).to be_an_instance_of(BCrypt::Password)
62
62
  end
63
63
 
64
64
  it 'returns a string that matches original' do
65
- @result.should == @clear_password
65
+ expect(@result).to eq(@clear_password)
66
66
  end
67
67
  end
68
68
 
@@ -73,7 +73,7 @@ try_spec do
73
73
  end
74
74
 
75
75
  it 'returns nil' do
76
- @result.should be_nil
76
+ expect(@result).to be_nil
77
77
  end
78
78
  end
79
79
  end
@@ -86,11 +86,11 @@ try_spec do
86
86
  end
87
87
 
88
88
  it 'casts argument to BCrypt::Password' do
89
- @result.should be_an_instance_of(BCrypt::Password)
89
+ expect(@result).to be_an_instance_of(BCrypt::Password)
90
90
  end
91
91
 
92
92
  it 'casts argument to value that matches input' do
93
- @result.should == @input
93
+ expect(@result).to eq(@input)
94
94
  end
95
95
  end
96
96
 
@@ -101,11 +101,11 @@ try_spec do
101
101
  end
102
102
 
103
103
  it 'casts argument to BCrypt::Password' do
104
- @result.should be_an_instance_of(BCrypt::Password)
104
+ expect(@result).to be_an_instance_of(BCrypt::Password)
105
105
  end
106
106
 
107
107
  it 'casts argument to value that matches input' do
108
- @result.should == @input
108
+ expect(@result).to eq(@input)
109
109
  end
110
110
  end
111
111
 
@@ -116,11 +116,11 @@ try_spec do
116
116
  end
117
117
 
118
118
  it 'casts argument to BCrypt::Password' do
119
- @result.should be_an_instance_of(BCrypt::Password)
119
+ expect(@result).to be_an_instance_of(BCrypt::Password)
120
120
  end
121
121
 
122
122
  it 'casts argument to value that matches input' do
123
- @result.should == @input
123
+ expect(@result).to eq(@input)
124
124
  end
125
125
  end
126
126
 
@@ -131,11 +131,11 @@ try_spec do
131
131
  end
132
132
 
133
133
  it 'casts argument to BCrypt::Password' do
134
- @result.should be_an_instance_of(BCrypt::Password)
134
+ expect(@result).to be_an_instance_of(BCrypt::Password)
135
135
  end
136
136
 
137
137
  it 'casts argument to value that matches input' do
138
- @result.should == @input
138
+ expect(@result).to eq(@input)
139
139
  end
140
140
  end
141
141
 
@@ -146,7 +146,7 @@ try_spec do
146
146
  end
147
147
 
148
148
  it 'returns nil' do
149
- @result.should be_nil
149
+ expect(@result).to be_nil
150
150
  end
151
151
  end
152
152
  end
@@ -19,7 +19,7 @@ try_spec do
19
19
  end
20
20
 
21
21
  it 'parses the argument using CVS parser' do
22
- @result.should == [ %w[ uno due tre ] ]
22
+ expect(@result).to eq([ %w[ uno due tre ] ])
23
23
  end
24
24
  end
25
25
 
@@ -30,7 +30,7 @@ try_spec do
30
30
  end
31
31
 
32
32
  it 'does not change the input' do
33
- @result.should == @input
33
+ expect(@result).to eq(@input)
34
34
  end
35
35
  end
36
36
 
@@ -41,7 +41,7 @@ try_spec do
41
41
  end
42
42
 
43
43
  it 'returns nil' do
44
- @result.should be_nil
44
+ expect(@result).to be_nil
45
45
  end
46
46
  end
47
47
 
@@ -52,7 +52,7 @@ try_spec do
52
52
  end
53
53
 
54
54
  it 'returns nil' do
55
- @result.should be_nil
55
+ expect(@result).to be_nil
56
56
  end
57
57
  end
58
58
 
@@ -63,7 +63,7 @@ try_spec do
63
63
  end
64
64
 
65
65
  it 'returns nil' do
66
- @result.should be_nil
66
+ expect(@result).to be_nil
67
67
  end
68
68
  end
69
69
 
@@ -74,7 +74,7 @@ try_spec do
74
74
  end
75
75
 
76
76
  it 'returns nil' do
77
- @result.should be_nil
77
+ expect(@result).to be_nil
78
78
  end
79
79
  end
80
80
 
@@ -85,7 +85,7 @@ try_spec do
85
85
  end
86
86
 
87
87
  it 'returns input as is' do
88
- @result.should eql(@input)
88
+ expect(@result).to eql(@input)
89
89
  end
90
90
  end
91
91
  end
@@ -98,7 +98,7 @@ try_spec do
98
98
  end
99
99
 
100
100
  it 'dumps value to comma separated string' do
101
- @result.should == "uno,due,tre\nuno,dos,tres\n"
101
+ expect(@result).to eq("uno,due,tre\nuno,dos,tres\n")
102
102
  end
103
103
  end
104
104
 
@@ -109,7 +109,7 @@ try_spec do
109
109
  end
110
110
 
111
111
  it 'returns input as is' do
112
- @result.should == @input
112
+ expect(@result).to eq(@input)
113
113
  end
114
114
  end
115
115
 
@@ -120,7 +120,7 @@ try_spec do
120
120
  end
121
121
 
122
122
  it 'returns nil' do
123
- @result.should be_nil
123
+ expect(@result).to be_nil
124
124
  end
125
125
  end
126
126
 
@@ -131,7 +131,7 @@ try_spec do
131
131
  end
132
132
 
133
133
  it 'returns nil' do
134
- @result.should be_nil
134
+ expect(@result).to be_nil
135
135
  end
136
136
  end
137
137
  end
@@ -26,15 +26,13 @@ describe Ardm::Property::DirtyMinder,'set!' do
26
26
 
27
27
  shared_examples_for 'a non hooked value' do
28
28
  it 'should not extend value with hook' do
29
- value.should_not be_kind_of(Ardm::Property::DirtyMinder::Hooker)
29
+ expect(object.get!(resource)).not_to be_kind_of(Ardm::Property::DirtyMinder::Hooker)
30
30
  end
31
31
  end
32
32
 
33
33
  shared_examples_for 'a hooked value' do
34
- it 'should extend value with hook' do
35
- pending "FIXME: This probably should pass" do
36
- value.should be_kind_of(Ardm::Property::DirtyMinder::Hooker)
37
- end
34
+ it 'should extend value with hook', pending: true do
35
+ expect(object.get!(resource)).to be_kind_of(Ardm::Property::DirtyMinder::Hooker)
38
36
  end
39
37
  end
40
38
 
@@ -18,14 +18,14 @@ try_spec do
18
18
  end
19
19
 
20
20
  it 'should return the key of the value match from the flag map' do
21
- @enum.dump(:first).should == 1
22
- @enum.dump(:second).should == 2
23
- @enum.dump(:third).should == 3
21
+ expect(@enum.dump(:first)).to eq(1)
22
+ expect(@enum.dump(:second)).to eq(2)
23
+ expect(@enum.dump(:third)).to eq(3)
24
24
  end
25
25
 
26
26
  describe 'when there is no match' do
27
27
  it 'should return nil' do
28
- @enum.dump(:zero).should be_nil
28
+ expect(@enum.dump(:zero)).to be_nil
29
29
  end
30
30
  end
31
31
  end
@@ -36,14 +36,14 @@ try_spec do
36
36
  end
37
37
 
38
38
  it 'returns the value of the key match from the flag map' do
39
- @enum.load(1).should == :uno
40
- @enum.load(2).should == :dos
41
- @enum.load(3).should == :tres
39
+ expect(@enum.load(1)).to eq(:uno)
40
+ expect(@enum.load(2)).to eq(:dos)
41
+ expect(@enum.load(3)).to eq(:tres)
42
42
  end
43
43
 
44
44
  describe 'when there is no key' do
45
45
  it 'returns nil' do
46
- @enum.load(-1).should be_nil
46
+ expect(@enum.load(-1)).to be_nil
47
47
  end
48
48
  end
49
49
  end
@@ -56,19 +56,19 @@ try_spec do
56
56
 
57
57
  describe 'when given a symbol' do
58
58
  it 'uses Enum type' do
59
- @enum.typecast(:uno).should == :uno
59
+ expect(@enum.typecast(:uno)).to eq(:uno)
60
60
  end
61
61
  end
62
62
 
63
63
  describe 'when given a string' do
64
64
  it 'uses Enum type' do
65
- @enum.typecast('uno').should == :uno
65
+ expect(@enum.typecast('uno')).to eq(:uno)
66
66
  end
67
67
  end
68
68
 
69
69
  describe 'when given nil' do
70
70
  it 'returns nil' do
71
- @enum.typecast( nil).should == nil
71
+ expect(@enum.typecast( nil)).to eq(nil)
72
72
  end
73
73
  end
74
74
  end
@@ -80,19 +80,19 @@ try_spec do
80
80
 
81
81
  describe 'when given an integer' do
82
82
  it 'uses Enum type' do
83
- @enum.typecast(1).should == 1
83
+ expect(@enum.typecast(1)).to eq(1)
84
84
  end
85
85
  end
86
86
 
87
87
  describe 'when given a float' do
88
88
  it 'uses Enum type' do
89
- @enum.typecast(1.1).should == 1
89
+ expect(@enum.typecast(1.1)).to eq(1)
90
90
  end
91
91
  end
92
92
 
93
93
  describe 'when given nil' do
94
94
  it 'returns nil' do
95
- @enum.typecast( nil).should == nil
95
+ expect(@enum.typecast( nil)).to eq(nil)
96
96
  end
97
97
  end
98
98
  end
@@ -104,19 +104,19 @@ try_spec do
104
104
 
105
105
  describe 'when given a symbol' do
106
106
  it 'uses Enum type' do
107
- @enum.typecast(:uno).should == 'uno'
107
+ expect(@enum.typecast(:uno)).to eq('uno')
108
108
  end
109
109
  end
110
110
 
111
111
  describe 'when given a string' do
112
112
  it 'uses Enum type' do
113
- @enum.typecast('uno').should == 'uno'
113
+ expect(@enum.typecast('uno')).to eq('uno')
114
114
  end
115
115
  end
116
116
 
117
117
  describe 'when given nil' do
118
118
  it 'returns nil' do
119
- @enum.typecast( nil).should == nil
119
+ expect(@enum.typecast( nil)).to eq(nil)
120
120
  end
121
121
  end
122
122
  end