accepts_nested_ids 0.1.0 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.travis.yml +1 -1
- data/CHANGELOG.md +23 -0
- data/README.md +16 -7
- data/accepts_nested_ids.gemspec +1 -1
- data/lib/accepts_nested_ids.rb +9 -14
- data/lib/accepts_nested_ids/nested_id_association.rb +11 -0
- data/lib/accepts_nested_ids/version.rb +1 -1
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: d46bd5aa6f826717d35c0c85d7250b7483e9d9e6b2db19e528ee2aa4d589dd5e
|
4
|
+
data.tar.gz: e548f69560b40eb4420ad9a7c236a7d2fe76a72d1fd6d791b1c61c0aca06a9ad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 64b38ffe75735cf1959795f83dba1c3c94741bcf2cd93e2fd0cdcee631a7969f3a09b96888b584c23ac9acefc0b01f5760564e2b4676b1f3818de32ea14ee540
|
7
|
+
data.tar.gz: bcd80ed8f969985f315e2717fa5ee78928616f52503e86fc133dc0121fe504344b722664539904326b4eb2893a3990ed02cb0d815061b36758a570e22453cf18
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
## 0.2.2 (2021-02-04)
|
2
|
+
|
3
|
+
Ensure this works with Ruby 3.0.0 by adding the #attribute method within any class to extend ActiveRecord in order to create those helper methods.
|
4
|
+
Example:
|
5
|
+
`class Company < ActiveRecord::Base
|
6
|
+
include AcceptsNestedIds
|
7
|
+
has_many :users
|
8
|
+
accepts_nested_ids_for :users
|
9
|
+
attribute :user_ids
|
10
|
+
end`
|
11
|
+
|
12
|
+
|
13
|
+
## 0.2.1 (2016-02-05)
|
14
|
+
|
15
|
+
Ensure empty array of nested associations is loaded, to handle situations where a sub class does not define its own associations and the intersection between base and sub class associations was failing.
|
16
|
+
|
17
|
+
## 0.2.0 (2016-02-05)
|
18
|
+
|
19
|
+
Fix for associations defined on a subclass not being saved.
|
20
|
+
|
21
|
+
## 0.1.2 (2015-08-12)
|
22
|
+
|
23
|
+
Fix for STI.
|
data/README.md
CHANGED
@@ -17,11 +17,7 @@ class Project < ActiveRecord::Base
|
|
17
17
|
has_many :project_users
|
18
18
|
has_many :users, through: :project_users
|
19
19
|
validates :name, presence: true
|
20
|
-
|
21
|
-
|
22
|
-
class User < ActiveRecord::Base
|
23
|
-
has_many :project_users
|
24
|
-
has_many :projects, through: :project_users
|
20
|
+
attribute :user_ids
|
25
21
|
end
|
26
22
|
```
|
27
23
|
|
@@ -84,7 +80,10 @@ class Project < ActiveRecord::Base
|
|
84
80
|
has_many :project_users
|
85
81
|
has_many :users, through: :project_users
|
86
82
|
accepts_nested_ids_for :users
|
83
|
+
attribute :user_ids
|
87
84
|
end
|
85
|
+
|
86
|
+
project.user_ids = [...]
|
88
87
|
```
|
89
88
|
|
90
89
|
### When your association has a custom name:
|
@@ -95,9 +94,14 @@ class Project < ActiveRecord::Base
|
|
95
94
|
has_many :project_users
|
96
95
|
has_many :included_users, through: :project_users, source: :user
|
97
96
|
accepts_nested_ids_for included_users: "User"
|
97
|
+
attribute :user_ids
|
98
98
|
end
|
99
|
+
|
100
|
+
project.included_user_ids = [...]
|
99
101
|
```
|
100
102
|
|
103
|
+
When using a custom association name, you must specify the actual class name as a second arg, in this case "User".
|
104
|
+
|
101
105
|
### Mix and match as desired:
|
102
106
|
|
103
107
|
```ruby
|
@@ -107,10 +111,12 @@ class Project < ActiveRecord::Base
|
|
107
111
|
has_many :project_users
|
108
112
|
has_many :included_users, through: :project_users, source: :user
|
109
113
|
accepts_nested_ids_for :documents, included_users: "User"
|
114
|
+
attribute :user_ids
|
110
115
|
end
|
111
|
-
```
|
112
116
|
|
113
|
-
|
117
|
+
project.document_ids = [...]
|
118
|
+
project.included_user_ids = [...]
|
119
|
+
```
|
114
120
|
|
115
121
|
## Development
|
116
122
|
|
@@ -118,6 +124,9 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
|
|
118
124
|
|
119
125
|
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
120
126
|
|
127
|
+
## Requirements
|
128
|
+
Requires Activemodel & Activerecord `6.1.1` or higher
|
129
|
+
|
121
130
|
## Contributing
|
122
131
|
|
123
132
|
Bug reports and pull requests are welcome on GitHub at https://github.com/uberllama/accepts_nested_ids.
|
data/accepts_nested_ids.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
spec.add_dependency "activesupport", ">= 3.0.0"
|
20
20
|
spec.add_development_dependency "activerecord", ">= 4.2.3"
|
21
|
-
spec.add_development_dependency "bundler", "~>
|
21
|
+
spec.add_development_dependency "bundler", "~> 2.2.7"
|
22
22
|
spec.add_development_dependency "rake", "~> 10.0"
|
23
23
|
spec.add_development_dependency "rspec"
|
24
24
|
spec.add_development_dependency "sqlite3"
|
data/lib/accepts_nested_ids.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require "accepts_nested_ids/version"
|
2
|
+
require "accepts_nested_ids/nested_id_association"
|
2
3
|
require "active_support/concern"
|
3
4
|
require "active_support/core_ext/string/inflections"
|
4
5
|
|
@@ -23,7 +24,8 @@ module AcceptsNestedIds
|
|
23
24
|
# end
|
24
25
|
#
|
25
26
|
def save_nested_id_associations
|
26
|
-
self.class.nested_id_associations
|
27
|
+
aggregated_id_associations = self.class.nested_id_associations | self.class.base_class.nested_id_associations
|
28
|
+
aggregated_id_associations.each do |nested_id_association|
|
27
29
|
if instance_variable_get("@#{nested_id_association.ids_attr}")
|
28
30
|
association_class = nested_id_association.class_name.constantize
|
29
31
|
ids = send(nested_id_association.ids_attr)
|
@@ -34,22 +36,15 @@ module AcceptsNestedIds
|
|
34
36
|
|
35
37
|
module ClassMethods
|
36
38
|
|
37
|
-
# Simple object that contains information about a nested ID association
|
38
|
-
#
|
39
|
-
# @param attr [Symbol] association attribute (ex: :documents)
|
40
|
-
# @param ids_attr [String] ids association attribute (ex: 'document_ids')
|
41
|
-
# @param class_name [String] association class name (ex: 'Document')
|
42
|
-
class NestedIdAssociation < Struct.new(:attr, :ids_attr, :class_name); end
|
43
|
-
|
44
39
|
# Sets up defered save and dirty tracking for the specified associations
|
45
40
|
#
|
46
41
|
# @example When class_name can be inferred from association name
|
47
42
|
# include AcceptsNestedIds
|
48
|
-
# accepts_nested_ids_for :documents, :
|
43
|
+
# accepts_nested_ids_for :documents, :users
|
49
44
|
#
|
50
45
|
# @example When class_name is different from association name
|
51
46
|
# include AcceptsNestedIds
|
52
|
-
# accepts_nested_ids_for :documents,
|
47
|
+
# accepts_nested_ids_for :documents, included_users: "User"
|
53
48
|
#
|
54
49
|
# @param args [Array]
|
55
50
|
def accepts_nested_ids_for(*args)
|
@@ -82,14 +77,14 @@ module AcceptsNestedIds
|
|
82
77
|
define_method("#{nested_id_association.ids_attr}=") do |value|
|
83
78
|
return if send(nested_id_association.ids_attr) == value
|
84
79
|
attribute_will_change!(nested_id_association.ids_attr)
|
85
|
-
instance_variable_set("@#{nested_id_association.ids_attr}", value)
|
80
|
+
instance_variable_set(:"@#{nested_id_association.ids_attr}", value)
|
86
81
|
end
|
87
82
|
|
88
83
|
end
|
89
84
|
end
|
90
85
|
|
91
86
|
def nested_id_associations
|
92
|
-
@_nested_id_associations
|
87
|
+
@_nested_id_associations || []
|
93
88
|
end
|
94
89
|
|
95
90
|
private
|
@@ -97,11 +92,11 @@ module AcceptsNestedIds
|
|
97
92
|
# Map module args into array of NestedIdAssociation objects with supporting properties
|
98
93
|
#
|
99
94
|
# @example
|
100
|
-
# accepts_nested_ids_for :documents,
|
95
|
+
# accepts_nested_ids_for :documents, included_users: "User"
|
101
96
|
# =>
|
102
97
|
# [
|
103
98
|
# { attr: :documents:, ids_attr: "document_ids", class_name: "Document"},
|
104
|
-
# { attr: :
|
99
|
+
# { attr: :included_users, ids_attr: "included_user_ids", class_name: "User" }
|
105
100
|
# ]
|
106
101
|
#
|
107
102
|
# @param args [Array]
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module AcceptsNestedIds
|
2
|
+
|
3
|
+
# Simple object that contains information about a nested ID association
|
4
|
+
#
|
5
|
+
# @param attr [Symbol] association attribute (ex: :documents)
|
6
|
+
# @param ids_attr [String] ids association attribute (ex: 'document_ids')
|
7
|
+
# @param class_name [String] association class name (ex: 'Document')
|
8
|
+
class NestedIdAssociation < Struct.new(:attr, :ids_attr, :class_name)
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: accepts_nested_ids
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yuval Kordov
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-02-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -45,14 +45,14 @@ dependencies:
|
|
45
45
|
requirements:
|
46
46
|
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version:
|
48
|
+
version: 2.2.7
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version:
|
55
|
+
version: 2.2.7
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: rake
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -106,6 +106,7 @@ files:
|
|
106
106
|
- ".gitignore"
|
107
107
|
- ".rspec"
|
108
108
|
- ".travis.yml"
|
109
|
+
- CHANGELOG.md
|
109
110
|
- Gemfile
|
110
111
|
- LICENSE.txt
|
111
112
|
- README.md
|
@@ -114,6 +115,7 @@ files:
|
|
114
115
|
- bin/console
|
115
116
|
- bin/setup
|
116
117
|
- lib/accepts_nested_ids.rb
|
118
|
+
- lib/accepts_nested_ids/nested_id_association.rb
|
117
119
|
- lib/accepts_nested_ids/version.rb
|
118
120
|
homepage: http://github.com/uberllama/accepts_nested_ids
|
119
121
|
licenses:
|
@@ -134,8 +136,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
134
136
|
- !ruby/object:Gem::Version
|
135
137
|
version: '0'
|
136
138
|
requirements: []
|
137
|
-
|
138
|
-
rubygems_version: 2.4.6
|
139
|
+
rubygems_version: 3.0.8
|
139
140
|
signing_key:
|
140
141
|
specification_version: 4
|
141
142
|
summary: Predictable nesting of associations via ID
|