active_record-associated_object 0.8.0 → 0.8.1
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/Gemfile.lock +1 -1
- data/README.md +6 -0
- data/lib/active_record/associated_object/object_association.rb +4 -1
- data/lib/active_record/associated_object/version.rb +1 -1
- data/lib/generators/associated/USAGE +15 -0
- data/lib/generators/associated/associated_generator.rb +27 -0
- data/lib/generators/associated/templates/associated.rb.tt +5 -0
- data/lib/generators/associated/templates/associated_test.rb.tt +8 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 76dd7495e0e2e855e708737a875ff879a8ec840d68f5c80ad4733ece3b72dda6
|
4
|
+
data.tar.gz: '09b38711104836c6c222a1663ddf4e7248ae784b727b597ed61f6436ab2bf17b'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 06fc0e959dedecab41a3c0d48d846eda454bd69c48fe8042cad1378c408fd919f688c2e07d5a26d675316556210ae25796585bc56438c8c66e3092c52fe3b1f6
|
7
|
+
data.tar.gz: bd35d99fc113f26d2b49e1fde335db7c28af90e7985ea0d2c60dc9dd8188e05cc2c4102bbe4edf5c45998d2b5cc96cd8f00bcd8974acf858450db479432c84f8
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -85,6 +85,12 @@ class Post::Publisher < ActiveRecord::AssociatedObject
|
|
85
85
|
end
|
86
86
|
```
|
87
87
|
|
88
|
+
### Use the generator to help write Associated Objects
|
89
|
+
|
90
|
+
To set up the `Post::Publisher` from above, you can call `bin/rails generate associated Post::Publisher`.
|
91
|
+
|
92
|
+
See `bin/rails generate associated --help` for more info.
|
93
|
+
|
88
94
|
### Forwarding callbacks onto the associated object
|
89
95
|
|
90
96
|
To further help illustrate how your collaborator Associated Objects interact with your domain model, you can forward callbacks.
|
@@ -14,7 +14,10 @@ module ActiveRecord::AssociatedObject::ObjectAssociation
|
|
14
14
|
module ClassMethods
|
15
15
|
def has_object(*names, **callbacks)
|
16
16
|
extend_source_from(names) do |name|
|
17
|
-
|
17
|
+
const_get object_name = name.to_s.camelize
|
18
|
+
"def #{name}; (@associated_objects ||= {})[:#{name}] ||= #{object_name}.new(self); end"
|
19
|
+
rescue NameError
|
20
|
+
raise "The #{self}::#{object_name} associated object referenced from #{self} doesn't exist"
|
18
21
|
end
|
19
22
|
|
20
23
|
extend_source_from(names) do |name|
|
@@ -0,0 +1,15 @@
|
|
1
|
+
Description:
|
2
|
+
Create a PORO collaborator associated object inheriting from `ActiveRecord::AssociatedObject` that's associated with an Active Record record class.
|
3
|
+
|
4
|
+
It'll be associated on the record with `has_object`.
|
5
|
+
|
6
|
+
Note: associated object names support pluralized class names. So "Seats" remain "seats" in all cases, and "Seat" remains "seat" in all cases.
|
7
|
+
Example:
|
8
|
+
bin/rails generate associated Organization::Seats
|
9
|
+
|
10
|
+
This will create:
|
11
|
+
app/models/organization/seats.rb
|
12
|
+
test/models/organization/seats_test.rb
|
13
|
+
|
14
|
+
And in Organization, this will insert:
|
15
|
+
has_object :seats
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class AssociatedGenerator < Rails::Generators::NamedBase
|
2
|
+
source_root File.expand_path("templates", __dir__)
|
3
|
+
|
4
|
+
def generate_associated_object_files
|
5
|
+
template "associated.rb", "app/models/#{name.underscore}.rb"
|
6
|
+
template "associated_test.rb", "test/models/#{name.underscore}_test.rb"
|
7
|
+
end
|
8
|
+
|
9
|
+
def connect_associated_object
|
10
|
+
record_file = "#{destination_root}/app/models/#{record_path}.rb"
|
11
|
+
raise "Record class '#{record_klass}' does not exist" unless File.exist?(record_file)
|
12
|
+
|
13
|
+
inject_into_class record_file, record_klass do
|
14
|
+
optimize_indentation "has_object :#{associated_object_path}", 2
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
# The `:name` argument can handle model names, but associated object class names aren't singularized.
|
21
|
+
# So these record and associated_object methods prevent that.
|
22
|
+
def record_path = record_klass.downcase.underscore
|
23
|
+
def record_klass = name.deconstantize
|
24
|
+
|
25
|
+
def associated_object_path = associated_object_class.downcase.underscore
|
26
|
+
def associated_object_class = name.demodulize
|
27
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_record-associated_object
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kasper Timm Hansen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-05-
|
11
|
+
date: 2024-05-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -43,6 +43,10 @@ files:
|
|
43
43
|
- lib/active_record/associated_object/object_association.rb
|
44
44
|
- lib/active_record/associated_object/railtie.rb
|
45
45
|
- lib/active_record/associated_object/version.rb
|
46
|
+
- lib/generators/associated/USAGE
|
47
|
+
- lib/generators/associated/associated_generator.rb
|
48
|
+
- lib/generators/associated/templates/associated.rb.tt
|
49
|
+
- lib/generators/associated/templates/associated_test.rb.tt
|
46
50
|
homepage: https://github.com/kaspth/active_record-associated_object
|
47
51
|
licenses:
|
48
52
|
- MIT
|