active_record-associated_object 0.4.1 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2c4701ccba7500ef91ffd5d4c6978c9cef567bb8150a5e8724e6654f22688020
4
- data.tar.gz: 8848a32bb16888dfda3a77f11c14c01e14d59532a19aa3a063b38bea7042fd18
3
+ metadata.gz: 183e19260b1d449e28b760db3736cc6ca82506064c24c24cec9ecf4333d4b441
4
+ data.tar.gz: 01fc12b34d5eaee9ebb1fccfe9183287022e6a6e314a98739867bf94061fde29
5
5
  SHA512:
6
- metadata.gz: 6756cbb26cacb5279fa40ddda01f82d9e9a61956f4dafcfa45a8a0c61afa8b62df9a1b2ec86b31a995aef058a1c0989c14fb304680310e8c09e78fab95be7e31
7
- data.tar.gz: 78f334424f4df172b084c1fb1c3f42094804a99bec24e5870dd53e95727b28c54f7ad5e36af196f71270ff86dc303f26fe530572b3f5f209865b8d92d9ceb0d1
6
+ metadata.gz: 1439d66acf12abe1a26cddebefe0900826a04afc85be171d3622a665810c2ecce7e849098fa3a901aef84d99ddbfd16f33f455c8ad1822e1009f938a8734c0b5
7
+ data.tar.gz: a750d3c644db9b92a097b5fb69d794f6b48cfa02b7bacd9559bded8e4fa67be7ed19a869501326560c79c35e9b90bebfaa4a18392192e299f61acedd2b328a37
data/Gemfile CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- # Specify your gem's dependencies in active_record-associated_object.gemspec
6
5
  gemspec
7
6
 
8
7
  gem "rake", "~> 13.0"
@@ -14,6 +13,7 @@ gem "sqlite3"
14
13
  # Integrations to setup and test with.
15
14
  gem "kredis"
16
15
  gem "activejob"
16
+ gem "active_job-performs"
17
17
  gem "railties"
18
18
 
19
19
  gem "minitest-sprint", "~> 1.2"
data/Gemfile.lock CHANGED
@@ -1,8 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_record-associated_object (0.4.1)
5
- active_job-performs
4
+ active_record-associated_object (0.5.1)
6
5
  activerecord (>= 6.1)
7
6
 
8
7
  GEM
@@ -133,6 +132,7 @@ PLATFORMS
133
132
  x86_64-linux
134
133
 
135
134
  DEPENDENCIES
135
+ active_job-performs
136
136
  active_record-associated_object!
137
137
  activejob
138
138
  debug
data/README.md CHANGED
@@ -44,11 +44,47 @@ class Post::Publisher < ActiveRecord::AssociatedObject
44
44
  end
45
45
  ```
46
46
 
47
- ### How `performs` removes Active Job boilerplate
47
+ ### Namespaced models
48
48
 
49
- `performs` comes from the `active_job-performs` gem and is automatically bundled with `ActiveRecord::AssociatedObject`.
49
+ If you have a namespaced Active Record like this:
50
50
 
51
- With an associated object like this:
51
+ ```ruby
52
+ # app/models/post/comment.rb
53
+ class Post::Comment < ApplicationRecord
54
+ belongs_to :post
55
+
56
+ has_object :rating
57
+ end
58
+ ```
59
+
60
+ You can define the associated object in the same way it was done for `Post::Publisher` above, within the `Post::Comment` namespace:
61
+
62
+ ```ruby
63
+ # app/models/post/comment/rating.rb
64
+ class Post::Comment::Rating < ActiveRecord::AssociatedObject
65
+ def great?
66
+ # A `comment` method is generated to access the associated comment. There's also a `record` alias available.
67
+ comment.author.subscriber_of? comment.post.author
68
+ end
69
+ end
70
+ ```
71
+
72
+ ### Composite primary keys
73
+
74
+ We support Active Record models with composite primary keys out of the box.
75
+
76
+ Just setup the associated objects like the above examples and you've got GlobalID/Active Job and Kredis support automatically.
77
+
78
+ ### Remove Active Job boilerplate with `performs`
79
+
80
+ If you also bundle [`active_job-performs`](https://github.com/kaspth/active_job-performs) in your Gemfile like this:
81
+
82
+ ```ruby
83
+ gem "active_job-performs"
84
+ gem "active_record-associated_object"
85
+ ```
86
+
87
+ Every associated object now has access to the `performs` macro, so you can do this:
52
88
 
53
89
  ```ruby
54
90
  class Post::Publisher < ActiveRecord::AssociatedObject
@@ -64,7 +100,7 @@ class Post::Publisher < ActiveRecord::AssociatedObject
64
100
  end
65
101
  ```
66
102
 
67
- is equivalent to:
103
+ which is equivalent to this:
68
104
 
69
105
  ```ruby
70
106
  class Post::Publisher < ActiveRecord::AssociatedObject
@@ -97,6 +133,8 @@ class Post::Publisher < ActiveRecord::AssociatedObject
97
133
  end
98
134
  ```
99
135
 
136
+ See the `ActiveJob::Performs` README for more details.
137
+
100
138
  ### Passing callbacks onto the associated object
101
139
 
102
140
  `has_object` accepts a hash of callbacks to pass.
@@ -26,10 +26,5 @@ Gem::Specification.new do |spec|
26
26
  end
27
27
  spec.require_paths = ["lib"]
28
28
 
29
- # Uncomment to register a new dependency of your gem
30
29
  spec.add_dependency "activerecord", ">= 6.1"
31
- spec.add_dependency "active_job-performs"
32
-
33
- # For more information and examples about making a new gem, check out our
34
- # guide at: https://bundler.io/guides/creating_gem.html
35
30
  end
@@ -1,11 +1,15 @@
1
1
  class ActiveRecord::AssociatedObject::Railtie < Rails::Railtie
2
2
  initializer "integrations.include" do
3
- ActiveRecord::AssociatedObject.include Kredis::Attributes if defined?(Kredis)
4
- ActiveRecord::AssociatedObject.include GlobalID::Identification if defined?(GlobalID)
3
+ config.after_initialize do
4
+ ActiveRecord::AssociatedObject.include Kredis::Attributes if defined?(Kredis)
5
+ ActiveRecord::AssociatedObject.include GlobalID::Identification if defined?(GlobalID)
5
6
 
6
- ActiveSupport.on_load :active_job do
7
- require "active_job/performs"
8
- ActiveRecord::AssociatedObject.extend ActiveJob::Performs
7
+ ActiveSupport.on_load :active_job do
8
+ require "active_job/performs"
9
+ ActiveRecord::AssociatedObject.extend ActiveJob::Performs
10
+ rescue LoadError
11
+ # We haven't bundled active_job-performs, so we're continuing without it.
12
+ end
9
13
  end
10
14
  end
11
15
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module ActiveRecord
4
4
  class AssociatedObject
5
- VERSION = "0.4.1"
5
+ VERSION = "0.5.1"
6
6
  end
7
7
  end
@@ -2,17 +2,17 @@ class ActiveRecord::AssociatedObject
2
2
  class << self
3
3
  def inherited(klass)
4
4
  record_klass = klass.module_parent
5
- record_name = klass.module_parent_name.underscore
5
+ record_name = klass.module_parent_name.demodulize.underscore
6
6
  attribute_name = klass.to_s.demodulize.underscore.to_sym
7
7
 
8
8
  unless record_klass.respond_to?(:descends_from_active_record?) && record_klass.descends_from_active_record?
9
9
  raise ArgumentError, "#{record_klass} isn't valid; can only associate with ActiveRecord::Base subclasses"
10
10
  end
11
11
 
12
- alias_method record_name, :record
13
- define_singleton_method(:record_klass) { record_klass }
14
- define_singleton_method(:attribute_name) { attribute_name }
15
- delegate :record_klass, :attribute_name, to: :class
12
+ klass.alias_method record_name, :record
13
+ klass.define_singleton_method(:record_klass) { record_klass }
14
+ klass.define_singleton_method(:attribute_name) { attribute_name }
15
+ klass.delegate :record_klass, :attribute_name, to: :class
16
16
  end
17
17
 
18
18
  def respond_to_missing?(...) = record_klass.respond_to?(...) || super
@@ -39,4 +39,5 @@ class ActiveRecord::AssociatedObject
39
39
  end
40
40
  end
41
41
 
42
+ require_relative "associated_object/version"
42
43
  require_relative "associated_object/railtie" if defined?(Rails::Railtie)
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.4.1
4
+ version: 0.5.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: 2023-10-31 00:00:00.000000000 Z
11
+ date: 2023-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '6.1'
27
- - !ruby/object:Gem::Dependency
28
- name: active_job-performs
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
27
  description:
42
28
  email:
43
29
  - hey@kaspth.com