active_data 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. data/.rspec +1 -0
  2. data/.travis.yml +1 -1
  3. data/Gemfile +5 -7
  4. data/Guardfile +8 -3
  5. data/active_data.gemspec +2 -2
  6. data/lib/active_data/attributes/base.rb +10 -5
  7. data/lib/active_data/attributes/localized.rb +1 -1
  8. data/lib/active_data/model/associations/{many.rb → association.rb} +9 -3
  9. data/lib/active_data/model/associations/embeds_many.rb +33 -0
  10. data/lib/active_data/model/associations/embeds_one.rb +30 -0
  11. data/lib/active_data/model/associations.rb +19 -22
  12. data/lib/active_data/model/attributable.rb +35 -29
  13. data/lib/active_data/model/collectionizable.rb +13 -12
  14. data/lib/active_data/model/extensions/array.rb +3 -3
  15. data/lib/active_data/model/extensions/big_decimal.rb +2 -2
  16. data/lib/active_data/model/extensions/date.rb +1 -8
  17. data/lib/active_data/model/extensions/date_time.rb +17 -0
  18. data/lib/active_data/model/extensions/float.rb +1 -1
  19. data/lib/active_data/model/extensions/hash.rb +1 -1
  20. data/lib/active_data/model/extensions/integer.rb +1 -1
  21. data/lib/active_data/model/extensions/localized.rb +2 -2
  22. data/lib/active_data/model/extensions/object.rb +17 -0
  23. data/lib/active_data/model/extensions/time.rb +17 -0
  24. data/lib/active_data/model/localizable.rb +3 -3
  25. data/lib/active_data/model/nested_attributes.rb +10 -4
  26. data/lib/active_data/model.rb +17 -11
  27. data/lib/active_data/validations/associated.rb +17 -0
  28. data/lib/active_data/validations.rb +7 -0
  29. data/lib/active_data/version.rb +1 -1
  30. data/lib/active_data.rb +1 -1
  31. data/spec/lib/active_data/model/associations/embeds_many_spec.rb +93 -0
  32. data/spec/lib/active_data/model/associations/embeds_one_spec.rb +57 -0
  33. data/spec/lib/active_data/model/attributable_spec.rb +118 -2
  34. data/spec/lib/active_data/model/attributes/localized_spec.rb +1 -0
  35. data/spec/lib/active_data/model/collectionizable_spec.rb +41 -15
  36. data/spec/lib/active_data/model/nested_attributes_spec.rb +47 -26
  37. data/spec/lib/active_data/model/type_cast_spec.rb +31 -3
  38. data/spec/lib/active_data/model_spec.rb +26 -7
  39. data/spec/lib/active_data/validations/associated_spec.rb +88 -0
  40. metadata +27 -16
  41. data/spec/lib/active_data/model/associations_spec.rb +0 -35
@@ -0,0 +1,88 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveData::Validations do
4
+ let(:main) do
5
+ Class.new do
6
+ def self.model_name
7
+ ActiveModel::Name.new(self, nil, "Main")
8
+ end
9
+
10
+ include ActiveData::Model
11
+ include ActiveData::Validations
12
+
13
+ attribute :name
14
+
15
+ validates_presence_of :name
16
+ validates_associated :validated_one, :unvalidated_one, :validated_many, :unvalidated_many
17
+
18
+ embeds_one :validated_one, class_name: ValidatedAssoc
19
+ embeds_one :unvalidated_one, class_name: UnvalidatedAssoc
20
+ embeds_many :validated_many, class_name: ValidatedAssoc
21
+ embeds_many :unvalidated_many, class_name: UnvalidatedAssoc
22
+ end
23
+ end
24
+
25
+ class ValidatedAssoc
26
+ include ActiveData::Model
27
+
28
+ attribute :name
29
+
30
+ validates_presence_of :name
31
+ end
32
+
33
+ class UnvalidatedAssoc
34
+ include ActiveData::Model
35
+
36
+ attribute :name
37
+ end
38
+
39
+ context do
40
+ subject(:instance) { main.new name: 'hello', validated_one: { name: 'name' } }
41
+ it { should be_valid }
42
+ end
43
+
44
+ context do
45
+ subject(:instance) { main.new name: 'hello', validated_one: { } }
46
+ it { should_not be_valid }
47
+ end
48
+
49
+ context do
50
+ subject(:instance) { main.new name: 'hello', unvalidated_one: { name: 'name' } }
51
+ it { should be_valid }
52
+ end
53
+
54
+ context do
55
+ subject(:instance) { main.new name: 'hello', unvalidated_one: { } }
56
+ it { should be_valid }
57
+ end
58
+
59
+ context do
60
+ subject(:instance) { main.new name: 'hello', validated_many: [{ name: 'name' }] }
61
+ it { should be_valid }
62
+ end
63
+
64
+ context do
65
+ subject(:instance) { main.new name: 'hello', validated_many: [{ }] }
66
+ it { should_not be_valid }
67
+ end
68
+
69
+ context do
70
+ subject(:instance) { main.new name: 'hello', unvalidated_many: [{ name: 'name' }] }
71
+ it { should be_valid }
72
+ end
73
+
74
+ context do
75
+ subject(:instance) { main.new name: 'hello', unvalidated_many: [{ }] }
76
+ it { should be_valid }
77
+ end
78
+
79
+ context do
80
+ subject(:instance) { main.new name: 'hello', validated_many: [{ name: 'name' }], validated_one: { } }
81
+ it { should_not be_valid }
82
+ end
83
+
84
+ context do
85
+ subject(:instance) { main.new name: 'hello', validated_many: [{ }], validated_one: { name: 'name' } }
86
+ it { should_not be_valid }
87
+ end
88
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_data
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-26 00:00:00.000000000 Z
12
+ date: 2013-06-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -48,33 +48,33 @@ dependencies:
48
48
  requirement: !ruby/object:Gem::Requirement
49
49
  none: false
50
50
  requirements:
51
- - - ! '>='
51
+ - - ~>
52
52
  - !ruby/object:Gem::Version
53
- version: '0'
53
+ version: '3.0'
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  none: false
58
58
  requirements:
59
- - - ! '>='
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '3.0'
62
62
  - !ruby/object:Gem::Dependency
63
63
  name: activemodel
64
64
  requirement: !ruby/object:Gem::Requirement
65
65
  none: false
66
66
  requirements:
67
- - - ! '>='
67
+ - - ~>
68
68
  - !ruby/object:Gem::Version
69
- version: '0'
69
+ version: '3.0'
70
70
  type: :runtime
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
- - - ! '>='
75
+ - - ~>
76
76
  - !ruby/object:Gem::Version
77
- version: '0'
77
+ version: '3.0'
78
78
  description: Making object from any hash or hash array
79
79
  email:
80
80
  - kinwizard@gmail.com
@@ -97,7 +97,9 @@ files:
97
97
  - lib/active_data/attributes/localized.rb
98
98
  - lib/active_data/model.rb
99
99
  - lib/active_data/model/associations.rb
100
- - lib/active_data/model/associations/many.rb
100
+ - lib/active_data/model/associations/association.rb
101
+ - lib/active_data/model/associations/embeds_many.rb
102
+ - lib/active_data/model/associations/embeds_one.rb
101
103
  - lib/active_data/model/attributable.rb
102
104
  - lib/active_data/model/collectionizable.rb
103
105
  - lib/active_data/model/collectionizable/proxy.rb
@@ -106,22 +108,29 @@ files:
106
108
  - lib/active_data/model/extensions/big_decimal.rb
107
109
  - lib/active_data/model/extensions/boolean.rb
108
110
  - lib/active_data/model/extensions/date.rb
111
+ - lib/active_data/model/extensions/date_time.rb
109
112
  - lib/active_data/model/extensions/float.rb
110
113
  - lib/active_data/model/extensions/hash.rb
111
114
  - lib/active_data/model/extensions/integer.rb
112
115
  - lib/active_data/model/extensions/localized.rb
116
+ - lib/active_data/model/extensions/object.rb
113
117
  - lib/active_data/model/extensions/string.rb
118
+ - lib/active_data/model/extensions/time.rb
114
119
  - lib/active_data/model/localizable.rb
115
120
  - lib/active_data/model/nested_attributes.rb
116
121
  - lib/active_data/model/parameterizable.rb
122
+ - lib/active_data/validations.rb
123
+ - lib/active_data/validations/associated.rb
117
124
  - lib/active_data/version.rb
118
- - spec/lib/active_data/model/associations_spec.rb
125
+ - spec/lib/active_data/model/associations/embeds_many_spec.rb
126
+ - spec/lib/active_data/model/associations/embeds_one_spec.rb
119
127
  - spec/lib/active_data/model/attributable_spec.rb
120
128
  - spec/lib/active_data/model/attributes/localized_spec.rb
121
129
  - spec/lib/active_data/model/collectionizable_spec.rb
122
130
  - spec/lib/active_data/model/nested_attributes_spec.rb
123
131
  - spec/lib/active_data/model/type_cast_spec.rb
124
132
  - spec/lib/active_data/model_spec.rb
133
+ - spec/lib/active_data/validations/associated_spec.rb
125
134
  - spec/spec_helper.rb
126
135
  homepage: ''
127
136
  licenses: []
@@ -137,7 +146,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
137
146
  version: '0'
138
147
  segments:
139
148
  - 0
140
- hash: 3544919037103939136
149
+ hash: -2124483537595095240
141
150
  required_rubygems_version: !ruby/object:Gem::Requirement
142
151
  none: false
143
152
  requirements:
@@ -146,19 +155,21 @@ required_rubygems_version: !ruby/object:Gem::Requirement
146
155
  version: '0'
147
156
  segments:
148
157
  - 0
149
- hash: 3544919037103939136
158
+ hash: -2124483537595095240
150
159
  requirements: []
151
160
  rubyforge_project:
152
- rubygems_version: 1.8.24
161
+ rubygems_version: 1.8.25
153
162
  signing_key:
154
163
  specification_version: 3
155
164
  summary: Working with hashes in AR style
156
165
  test_files:
157
- - spec/lib/active_data/model/associations_spec.rb
166
+ - spec/lib/active_data/model/associations/embeds_many_spec.rb
167
+ - spec/lib/active_data/model/associations/embeds_one_spec.rb
158
168
  - spec/lib/active_data/model/attributable_spec.rb
159
169
  - spec/lib/active_data/model/attributes/localized_spec.rb
160
170
  - spec/lib/active_data/model/collectionizable_spec.rb
161
171
  - spec/lib/active_data/model/nested_attributes_spec.rb
162
172
  - spec/lib/active_data/model/type_cast_spec.rb
163
173
  - spec/lib/active_data/model_spec.rb
174
+ - spec/lib/active_data/validations/associated_spec.rb
164
175
  - spec/spec_helper.rb
@@ -1,35 +0,0 @@
1
- # encoding: UTF-8
2
- require 'spec_helper'
3
-
4
- describe ActiveData::Model::Associations do
5
-
6
- class Assoc
7
- include ActiveData::Model
8
-
9
- attribute :name
10
- end
11
-
12
- let(:klass) do
13
- Class.new do
14
- include ActiveData::Model
15
-
16
- attribute :name
17
- embeds_many :assocs
18
- end
19
- end
20
-
21
- let(:instance){klass.new(:name => 'world')}
22
-
23
- context do
24
- specify { instance.assocs.should be_empty }
25
- specify { instance.assocs.should be_instance_of Assoc::Collection }
26
- specify { instance.assocs.count.should == 0 }
27
- end
28
-
29
- context 'accessor' do
30
- before { instance.assocs = [Assoc.new(:name => 'foo'), Assoc.new(:name => 'bar')] }
31
- specify { instance.assocs.count.should == 2 }
32
- specify { instance.assocs[0].name.should == 'foo' }
33
- specify { instance.assocs[1].name.should == 'bar' }
34
- end
35
- end