active_record-json_associations 0.9.1 → 0.10.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.
- checksums.yaml +4 -4
- data/README.md +12 -0
- data/lib/active_record/json_associations.rb +16 -2
- data/lib/active_record/json_associations/version.rb +1 -1
- data/spec/json_associations_spec.rb +62 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3dcecc3d5ba41f7deed96e8178f04221c39678799e3706b0c95938f91f197daf
|
4
|
+
data.tar.gz: c9fcdad4e8cbe19a16fc7bf3d27c8e176e5cedb06a415e95c36aff1b734ffb85
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a13fc51a526b61d909d6559e22969a9e4f7c75e880efc2ffc50b0c01e1b2aa7daf4858c33beb0dfbac7a57aa77329fd030af02db02efcb7058b8b78f93386328
|
7
|
+
data.tar.gz: e6d33f695da6f13a6ed3253ab90a0246e77a788f7593b3d1338ec8e11d6e449b4f294a8c690f5f4f2f506fb10478c3494e198fba7275d50b8d3f72f38e0d1485
|
data/README.md
CHANGED
@@ -63,6 +63,18 @@ parent = Parent.create children: [child]
|
|
63
63
|
child.parents == [parent] #=> true
|
64
64
|
```
|
65
65
|
|
66
|
+
I can't figure out how to support building records off the association, so instead there are the `has_one`/`belongs_to` builder methods:
|
67
|
+
|
68
|
+
```ruby
|
69
|
+
child.build_parent
|
70
|
+
child.create_parent
|
71
|
+
child.create_parent!
|
72
|
+
|
73
|
+
# also supports optional attributes:
|
74
|
+
|
75
|
+
child.build_parent(name: "Momma")
|
76
|
+
```
|
77
|
+
|
66
78
|
## Requirements
|
67
79
|
|
68
80
|
* ActiveRecord 5.0+
|
@@ -105,8 +105,12 @@ module ActiveRecord
|
|
105
105
|
one_ids_equals = :"#{one_ids}="
|
106
106
|
many_equals = :"#{many}="
|
107
107
|
many_eh = :"#{many}?"
|
108
|
+
build_one = :"build_#{one}"
|
109
|
+
create_one = :"create_#{one}"
|
110
|
+
create_one_bang = :"create_#{one}!"
|
108
111
|
|
109
112
|
class_name = options[:class_name] || one.classify
|
113
|
+
klass = class_name.constantize
|
110
114
|
|
111
115
|
foreign_key = options[:json_foreign_key]
|
112
116
|
foreign_key = :"#{model_name.singular}_ids" if foreign_key == true
|
@@ -117,13 +121,11 @@ module ActiveRecord
|
|
117
121
|
end
|
118
122
|
|
119
123
|
define_method one_ids_equals do |ids|
|
120
|
-
klass = class_name.constantize
|
121
124
|
normalized_ids = Array(ids).select(&:present?).map(&:to_i)
|
122
125
|
send many_equals, klass.find(normalized_ids)
|
123
126
|
end
|
124
127
|
|
125
128
|
define_method many do
|
126
|
-
klass = class_name.constantize
|
127
129
|
FIELD_INCLUDE_SCOPE_BUILDER_PROC.call(klass, foreign_key, id)
|
128
130
|
end
|
129
131
|
|
@@ -138,6 +140,18 @@ module ActiveRecord
|
|
138
140
|
define_method many_eh do
|
139
141
|
send(many).any?
|
140
142
|
end
|
143
|
+
|
144
|
+
define_method build_one do |attributes={}|
|
145
|
+
klass.new attributes.merge!(foreign_key => [id])
|
146
|
+
end
|
147
|
+
|
148
|
+
define_method create_one do |attributes={}|
|
149
|
+
klass.create attributes.merge!(foreign_key => [id])
|
150
|
+
end
|
151
|
+
|
152
|
+
define_method create_one_bang do |attributes={}|
|
153
|
+
klass.create! attributes.merge!(foreign_key => [id])
|
154
|
+
end
|
141
155
|
}
|
142
156
|
end
|
143
157
|
end
|
@@ -7,6 +7,7 @@ describe ActiveRecord::JsonAssociations do
|
|
7
7
|
silence_stream(STDOUT) do
|
8
8
|
ActiveRecord::Schema.define do
|
9
9
|
create_table :parents do |t|
|
10
|
+
t.string :name
|
10
11
|
t.text :child_ids
|
11
12
|
t.text :fuzzy_ids
|
12
13
|
t.timestamps
|
@@ -346,6 +347,67 @@ describe ActiveRecord::JsonAssociations do
|
|
346
347
|
expect(subject.parents?).to be_truthy
|
347
348
|
end
|
348
349
|
end
|
350
|
+
|
351
|
+
describe "#build_parent" do
|
352
|
+
it "doesnt save the record" do
|
353
|
+
parent = subject.build_parent
|
354
|
+
expect(parent).to be_new_record
|
355
|
+
end
|
356
|
+
|
357
|
+
it "sets the foreign key column" do
|
358
|
+
parent = subject.build_parent
|
359
|
+
expect(parent.children).to eq([subject])
|
360
|
+
end
|
361
|
+
|
362
|
+
it "passes attributes through" do
|
363
|
+
parent = subject.build_parent(name: "Parent")
|
364
|
+
expect(parent.name).to eq("Parent")
|
365
|
+
end
|
366
|
+
end
|
367
|
+
|
368
|
+
describe "#create_parent" do
|
369
|
+
it "saves the record" do
|
370
|
+
parent = subject.create_parent
|
371
|
+
expect(parent).to be_persisted
|
372
|
+
end
|
373
|
+
|
374
|
+
it "sets the foreign key column" do
|
375
|
+
parent = subject.create_parent
|
376
|
+
expect(parent.children).to eq([subject])
|
377
|
+
end
|
378
|
+
|
379
|
+
it "passes attributes through" do
|
380
|
+
parent = subject.create_parent(name: "Parent")
|
381
|
+
expect(parent.name).to eq("Parent")
|
382
|
+
end
|
383
|
+
|
384
|
+
it "calls create on the model" do
|
385
|
+
expect(Parent).to receive(:create)
|
386
|
+
subject.create_parent
|
387
|
+
end
|
388
|
+
end
|
389
|
+
|
390
|
+
describe "#create_parent!" do
|
391
|
+
it "saves the record" do
|
392
|
+
parent = subject.create_parent!
|
393
|
+
expect(parent).to be_persisted
|
394
|
+
end
|
395
|
+
|
396
|
+
it "sets the foreign key column" do
|
397
|
+
parent = subject.create_parent!
|
398
|
+
expect(parent.children).to eq([subject])
|
399
|
+
end
|
400
|
+
|
401
|
+
it "passes attributes through" do
|
402
|
+
parent = subject.create_parent!(name: "Parent")
|
403
|
+
expect(parent.name).to eq("Parent")
|
404
|
+
end
|
405
|
+
|
406
|
+
it "calls create! on the model" do
|
407
|
+
expect(Parent).to receive(:create!)
|
408
|
+
subject.create_parent!
|
409
|
+
end
|
410
|
+
end
|
349
411
|
end
|
350
412
|
|
351
413
|
describe ".has_many :parents, json_foreign_key: :fuzzy_ids" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_record-json_associations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Micah Geisel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-01-
|
11
|
+
date: 2021-01-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|