embedson 1.0.2 → 1.0.3

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.
@@ -7,15 +7,21 @@ describe Embedson::Model do
7
7
 
8
8
  with_model :Parent do
9
9
  table do |t|
10
- t.json :embeddeda
10
+ t.json :embedded
11
+ t.json :emba
11
12
  end
12
13
 
13
14
  model do
14
- embeds_one :embeddeda
15
+ embeds_one :embedded
16
+ embeds_one :emba, class_name: Embedded, inverse_of: :parenta
15
17
  end
16
18
  end
17
19
 
18
- class Embeddeda
20
+ class Embedded < OpenStruct
21
+ extend Embedson::Model
22
+
23
+ embedded_in :parent
24
+ embedded_in :parenta, inverse_of: :emba
19
25
 
20
26
  def to_h
21
27
  { defined: 'in', embedded: true }
@@ -23,43 +29,43 @@ describe Embedson::Model do
23
29
  end
24
30
 
25
31
  let(:parent) { Parent.new }
26
- let(:embedded) { Embeddeda.new }
32
+ let(:embedded) { Embedded.new }
27
33
 
28
34
  it 'adds "embeds_one" method' do
29
35
  expect(Parent).to respond_to(:embeds_one)
30
36
  end
31
37
 
32
- it 'adds "embeddeda" method' do
33
- expect(parent).to respond_to(:embeddeda)
38
+ it 'adds "embedded" method' do
39
+ expect(parent).to respond_to(:embedded)
34
40
  end
35
41
 
36
- it 'adds "embeddeda=" method' do
37
- expect(parent).to respond_to("embeddeda=")
42
+ it 'adds "embedded=" method' do
43
+ expect(parent).to respond_to("embedded=")
38
44
  end
39
45
 
40
- describe 'defined .embeddeda= method' do
41
- it 'assigns value of Embeddeda class' do
46
+ describe 'defined .embedded= method' do
47
+ it 'assigns value of Embedded class' do
42
48
 
43
49
  expect {
44
- parent.embeddeda = embedded
45
- }.to change{ parent.embeddeda }.from(nil).to(embedded)
50
+ parent.embedded = embedded
51
+ }.to change{ parent.embedded }.from(nil).to(embedded)
46
52
  end
47
53
 
48
54
  context 'when assigning nil' do
49
- let(:parent) { Parent.new(embeddeda: embedded) }
55
+ let(:parent) { Parent.new(embedded: embedded) }
50
56
 
51
57
  it 'removes assignmnent' do
52
58
  parent
53
59
  expect {
54
- parent.embeddeda = nil
55
- }.to change { parent.embeddeda }.from(embedded).to(nil)
60
+ parent.embedded = nil
61
+ }.to change { parent.embedded }.from(embedded).to(nil)
56
62
  end
57
63
  end
58
64
 
59
65
  context 'when assigning wrong class' do
60
66
  it 'raises ClassTypeError' do
61
67
  expect{
62
- parent.embeddeda = 'something'
68
+ parent.embedded = 'something'
63
69
  }.to raise_error(Embedson::ClassTypeError)
64
70
  end
65
71
  end
@@ -71,16 +77,16 @@ describe Embedson::Model do
71
77
 
72
78
  it 'marks parent as changed' do
73
79
  expect {
74
- parent.embeddeda = embedded
80
+ parent.embedded = embedded
75
81
  }.to change{ parent.changed? }.from(false).to(true)
76
82
  end
77
83
 
78
84
  context 'and saved after change' do
79
- it 'saves Embeddeda class in column' do
85
+ it 'saves Embedded class in column' do
80
86
  expect{
81
- parent.embeddeda = embedded
87
+ parent.embedded = embedded
82
88
  parent.save!
83
- }.to change { parent.reload.read_attribute(:embeddeda) }.from(nil).to(embedded.to_h.stringify_keys)
89
+ }.to change { parent.reload.read_attribute(:embedded) }.from(nil).to(embedded.to_h.stringify_keys)
84
90
  end
85
91
  end
86
92
  end
@@ -89,23 +95,23 @@ describe Embedson::Model do
89
95
  describe 'defined .embedded method' do
90
96
  context 'when value column is null' do
91
97
  it 'returns nil' do
92
- expect(parent.embeddeda).to be nil
98
+ expect(parent.embedded).to be nil
93
99
  end
94
100
  end
95
101
 
96
- it 'returns Embeddeda class' do
97
- parent.embeddeda = embedded
98
- expect(parent.embeddeda).to be_a Embeddeda
102
+ it 'returns Embedded class' do
103
+ parent.embedded = embedded
104
+ expect(parent.embedded).to be_a Embedded
99
105
  end
100
106
 
101
107
  context 'when there is defined value in column' do
102
108
  before do
103
- parent.embeddeda = embedded
109
+ parent.embedded = embedded
104
110
  parent.save!
105
111
  end
106
112
 
107
113
  it 'returns Embeddeda class initialized with value from column' do
108
- expect(parent.reload.embeddeda).to eq embedded
114
+ expect(parent.reload.embedded).to eq embedded
109
115
  end
110
116
  end
111
117
  end
@@ -211,7 +217,7 @@ describe Embedson::Model do
211
217
  class Embeddedd < OpenStruct
212
218
  extend Embedson::Model
213
219
 
214
- embedded_in :parent
220
+ embedded_in :parent, inverse_of: :emb
215
221
 
216
222
  def to_h
217
223
  { defined: 'in', embedded: true }
@@ -245,11 +251,11 @@ describe Embedson::Model do
245
251
 
246
252
  with_model :Parent do
247
253
  table do |t|
248
- t.json :embeddede
254
+ t.json :embedded
249
255
  end
250
256
 
251
257
  model do
252
- embeds_one :embeddede
258
+ embeds_one :embeddede, column_name: :embedded
253
259
  end
254
260
  end
255
261
 
@@ -284,6 +290,10 @@ describe Embedson::Model do
284
290
  expect(embedded).to respond_to("parent=")
285
291
  end
286
292
 
293
+ it 'adds "parent_send_to_related" method' do
294
+ expect(embedded.respond_to?("parent_send_to_related", true) ).to be true
295
+ end
296
+
287
297
  describe 'defined .parent= method' do
288
298
  it 'assigns value of embeding class' do
289
299
  expect {
@@ -326,39 +336,12 @@ describe Embedson::Model do
326
336
  expect{
327
337
  embedded.parent = parent
328
338
  parent.save!
329
- }.to change { parent.reload.read_attribute(:embeddede) }.from(nil).to(embedded.to_h.stringify_keys)
339
+ }.to change { parent.reload.read_attribute(:embedded) }.from(nil).to(embedded.to_h.stringify_keys)
330
340
  end
331
341
  end
332
342
  end
333
343
  end
334
344
 
335
- describe 'defined .save method' do
336
-
337
- context 'when there is parent' do
338
- let(:embedded) { Embeddede.new(parent: parent) }
339
-
340
- it 'calls .save on parent' do
341
- expect(parent).to receive(:save)
342
- embedded.save
343
- end
344
-
345
- it 'saves to_h result in parent column' do
346
- parent.save!
347
- expect {
348
- embedded.save
349
- }.to change { parent.reload.read_attribute(:embeddede) }.from(nil).to({ "defined" => "in", "embedded" => true })
350
- end
351
- end
352
-
353
- context 'when there is no parent' do
354
- let(:embedded) { Embeddede.new }
355
-
356
- it 'returns false' do
357
- expect(embedded.save).to eq(false)
358
- end
359
- end
360
- end
361
-
362
345
  describe 'defined .save! method' do
363
346
 
364
347
  context 'when there is parent' do
@@ -373,7 +356,19 @@ describe Embedson::Model do
373
356
  parent.save!
374
357
  expect {
375
358
  embedded.save!
376
- }.to change { parent.reload.read_attribute(:embeddede) }.from(nil).to({ "defined" => "in", "embedded" => true })
359
+ }.to change { parent.reload.read_attribute(:embedded) }.from(nil).to({ "defined" => "in", "embedded" => true })
360
+ end
361
+
362
+ context 'and embedded is changed' do
363
+ it 'saves changes in parent' do
364
+ embedded.save!
365
+ expect {
366
+ embedded.change = 'new value'
367
+ embedded.save!
368
+ }.to change { parent.reload.read_attribute(:embedded) }
369
+ .from({ "defined" => "in", "embedded" => true })
370
+ .to({"defined"=>"in", "embedded"=>true, "change"=>"new value"})
371
+ end
377
372
  end
378
373
  end
379
374
 
@@ -398,7 +393,7 @@ describe Embedson::Model do
398
393
  embedded.save!
399
394
  expect {
400
395
  embedded.destroy
401
- }.to change { parent.reload.read_attribute(:embeddede) }.from({ "defined" => "in", "embedded" => true }).to(nil)
396
+ }.to change { parent.reload.read_attribute(:embedded) }.from({ "defined" => "in", "embedded" => true }).to(nil)
402
397
  end
403
398
  end
404
399
 
@@ -424,7 +419,7 @@ describe Embedson::Model do
424
419
  embedded.change = 'registered'
425
420
  expect {
426
421
  embedded.embedson_model_changed!
427
- }.to change { parent.read_attribute(:embeddede) }.from({ "defined" => "in", "embedded" => true }).to({ "defined" => "in", "embedded" => true, 'change' => 'registered' })
422
+ }.to change { parent.read_attribute(:embedded) }.from({ "defined" => "in", "embedded" => true }).to({ "defined" => "in", "embedded" => true, 'change' => 'registered' })
428
423
  end
429
424
  end
430
425
 
@@ -437,6 +432,16 @@ describe Embedson::Model do
437
432
 
438
433
  describe 'defined .initialize method' do
439
434
 
435
+ with_model :Parenta do
436
+ table do |t|
437
+ t.json :emb
438
+ end
439
+
440
+ model do
441
+ embeds_one :emb, class_name: Embeddedf
442
+ end
443
+ end
444
+
440
445
 
441
446
  class Embeddedf
442
447
  extend Embedson::Model
@@ -450,18 +455,19 @@ describe Embedson::Model do
450
455
 
451
456
  # when you put it before initialize
452
457
  # Embeddedf.new(parent: parent)
453
- # will not owkr
454
- embedded_in :parent
458
+ # will not work
459
+ embedded_in :parenta, inverse_of: :emb
455
460
 
456
461
  def to_h
457
462
  { one: one, two: two }
458
463
  end
459
464
  end
460
465
 
461
- let(:embedded) { Embeddedf.new(one: '1', two: '2', parent: parent)}
466
+ let(:parent) { Parenta.new }
467
+ let(:embedded) { Embeddedf.new(one: '1', two: '2', parenta: parent)}
462
468
 
463
469
  it 'allows to initialize with parent' do
464
- expect(embedded.parent).to eq parent
470
+ expect(embedded.parenta).to eq parent
465
471
  end
466
472
 
467
473
  it 'keeps initialize working' do
metadata CHANGED
@@ -1,125 +1,125 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embedson
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - sufleR
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-27 00:00:00.000000000 Z
11
+ date: 2014-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - ! '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: '4'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - ! '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '4'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.6'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.6'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ~>
46
46
  - !ruby/object:Gem::Version
47
47
  version: '10.3'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ~>
53
53
  - !ruby/object:Gem::Version
54
54
  version: '10.3'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
61
  version: '3.1'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ~>
67
67
  - !ruby/object:Gem::Version
68
68
  version: '3.1'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: pg
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ~>
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0.17'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ~>
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0.17'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: pry
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
87
+ - - ~>
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0.10'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - "~>"
94
+ - - ~>
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0.10'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: with_model
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - "~>"
101
+ - - ~>
102
102
  - !ruby/object:Gem::Version
103
103
  version: '1.2'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - "~>"
108
+ - - ~>
109
109
  - !ruby/object:Gem::Version
110
110
  version: '1.2'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: codeclimate-test-reporter
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - "~>"
115
+ - - ~>
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0.4'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - "~>"
122
+ - - ~>
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0.4'
125
125
  description: Save any class which respond to to_h in json column as embedded model.
@@ -129,12 +129,13 @@ executables: []
129
129
  extensions: []
130
130
  extra_rdoc_files: []
131
131
  files:
132
- - ".gitignore"
133
- - ".travis.yml"
132
+ - .gitignore
133
+ - .travis.yml
134
134
  - Gemfile
135
135
  - LICENSE.txt
136
136
  - README.md
137
137
  - Rakefile
138
+ - TODO.md
138
139
  - embedson.gemspec
139
140
  - lib/embedson.rb
140
141
  - lib/embedson/exceptions.rb
@@ -143,6 +144,8 @@ files:
143
144
  - lib/embedson/model/embeds_builder.rb
144
145
  - lib/embedson/model/method_builder.rb
145
146
  - lib/embedson/version.rb
147
+ - spec/embedson/exceptions_spec.rb
148
+ - spec/embedson/model/embedded_builder_spec.rb
146
149
  - spec/embedson/model_spec.rb
147
150
  - spec/spec_helper.rb
148
151
  homepage: https://github.com/sufleR/embedson
@@ -155,20 +158,22 @@ require_paths:
155
158
  - lib
156
159
  required_ruby_version: !ruby/object:Gem::Requirement
157
160
  requirements:
158
- - - ">="
161
+ - - ! '>='
159
162
  - !ruby/object:Gem::Version
160
163
  version: 1.9.3
161
164
  required_rubygems_version: !ruby/object:Gem::Requirement
162
165
  requirements:
163
- - - ">="
166
+ - - ! '>='
164
167
  - !ruby/object:Gem::Version
165
168
  version: '0'
166
169
  requirements: []
167
170
  rubyforge_project:
168
- rubygems_version: 2.2.2
171
+ rubygems_version: 2.1.4
169
172
  signing_key:
170
173
  specification_version: 4
171
174
  summary: Embedded model for AR with postgresql
172
175
  test_files:
176
+ - spec/embedson/exceptions_spec.rb
177
+ - spec/embedson/model/embedded_builder_spec.rb
173
178
  - spec/embedson/model_spec.rb
174
179
  - spec/spec_helper.rb