lite-decorator 1.3.1 → 2.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 83f15b0a52139c1ac7ec23fe37dfe4aa0c43eee2ad38ca114ebb05a12598b5cb
4
- data.tar.gz: e9e225627211d78ebfe11dff2ed7846a600916aca3176c6ece041206e3ab4d44
3
+ metadata.gz: 86273c0729ff8bedae37cb2b0c05a502e368fab6aba0a9e32c639acddb9335ab
4
+ data.tar.gz: c06a5e0ee30f5f8f84a76ac39a6cb028ce4955cbb86d51e14671b608a0deb9c7
5
5
  SHA512:
6
- metadata.gz: 21f72f88662e5bb8a7fe44b588d5779a18288c362ee25d39b7dda33ab69f1692f6f2f09d6d8d59245e8b711262c4add05a86e1e1a694cf45cc4b408e73239de3
7
- data.tar.gz: afc4d9dafc6883d65a4703c08c2be6d507371a1e90411fd56179f863e01dba0969ab4fbe192b17b5f2b5f12216cfae545c03cd046e2977e3383409251f6f9d7c
6
+ metadata.gz: a049d6bd1d9a19fa4c34e233525e4bd40cb621470c4a52ff1758d886c3c3ac5e8b004e5e9abfdb231e6655074fdb7b406f3465e04ea7dd0fcde6c04388074b5a
7
+ data.tar.gz: 1243a68c3306d38f3c828fa75ec1fea227597934b9e80238ba7cab476e8d98dc843b08efa709d22a8753a7bf8864a923a786a23b1d7554d1bd10721560e0eccf
data/CHANGELOG.md CHANGED
@@ -6,6 +6,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [2.0.1] - 2024-09-23
10
+ ### Changed
11
+ - Rename `Infered` to `Inference` and `Record` to `Delegator`
12
+
13
+ ## [2.0.0] - 2024-09-22
14
+ ### Changed
15
+ - Split inference from lazy delegation
16
+
9
17
  ## [1.3.1] - 2024-09-20
10
18
  ### Changed
11
19
  - Memoize record decorator class
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lite-decorator (1.3.1)
4
+ lite-decorator (2.0.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -26,7 +26,6 @@ Or install it yourself as:
26
26
 
27
27
  * [Setup](#setup)
28
28
  * [Usage](#usage)
29
- * [ActiveRecord](#active_record)
30
29
 
31
30
  ## Setup
32
31
 
@@ -59,7 +58,7 @@ end
59
58
  ## Usage
60
59
 
61
60
  To access the decorator you need to pass the object to the decorator class.
62
- PORO's just like active record objects can be decorated as well in this method.
61
+ PORO's and ActiveRecord objects can be decorated with this method.
63
62
 
64
63
  #### Instance
65
64
  ```ruby
@@ -75,16 +74,33 @@ collection = UserDecorator.new(users)
75
74
  collection.map(&:full_name) #=> ["John Doe", "Jane Poe"]
76
75
  ```
77
76
 
78
- ## ActiveRecord
77
+ #### Infered decoration
79
78
 
80
- Including the record module will automatically lazy delegate methods to decorators
81
- if available. If neither the class instance and the decorator contain the method,
82
- a `NoMethodError` just like normal.
79
+ Including the `Inference` module will setup a `decorator_class` and `decorator` method
80
+ that you can access via your PORO and ActiveRecord objects.
81
+
82
+ ```ruby
83
+ class User
84
+ include Lite::Decorator::Inference
85
+ end
86
+
87
+ user = User.first
88
+ user.decorator.full_name
89
+ ```
90
+
91
+ #### Decorator delegation
92
+
93
+ Including the `Delegator` module will use method missing to delegate decorator methods as
94
+ if it lived on the PORO or ActiveRecord object itself. If neither the class instance and the
95
+ decorator contain the method, a `NoMethodError` just like normal.
83
96
 
84
97
  ```ruby
85
98
  class User < ActiveRecord::Base
86
- include Lite::Decorator::Record
99
+ include Lite::Decorator::Delegator
87
100
  end
101
+
102
+ user = User.first
103
+ user.full_name
88
104
  ```
89
105
 
90
106
  ## Development
@@ -6,14 +6,10 @@ module Lite
6
6
  module Decorator
7
7
  class Base < SimpleDelegator
8
8
 
9
- class << self
10
-
11
- def decorate(object)
12
- return new(object) unless object.respond_to?(:each)
13
-
14
- object.map { |obj| new(obj) }
15
- end
9
+ def self.decorate(object)
10
+ return new(object) unless object.respond_to?(:each)
16
11
 
12
+ object.map { |obj| new(obj) }
17
13
  end
18
14
 
19
15
  def class
@@ -2,16 +2,10 @@
2
2
 
3
3
  module Lite
4
4
  module Decorator
5
- module Record
5
+ module Delegator
6
6
 
7
- def decorator_class
8
- return @decorator_class if defined?(@decorator_class)
9
-
10
- @decorator_class = "#{self.class.name}Decorator".safe_constantize
11
- end
12
-
13
- def decorator
14
- @decorator ||= decorator_class&.new(self)
7
+ def self.included(base)
8
+ base.include Inference
15
9
  end
16
10
 
17
11
  private
@@ -31,7 +25,7 @@ module Lite
31
25
  def respond_to_method?(method_name)
32
26
  return respond_to_method_cache[method_name] if respond_to_method_cache.key?(method_name)
33
27
 
34
- respond_to_method_cache[method_name] = decorator.present? && decorator.public_methods.include?(method_name)
28
+ respond_to_method_cache[method_name] = decorator&.public_methods&.include?(method_name)
35
29
  end
36
30
 
37
31
  def respond_to_missing?(method_name, include_private = false)
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lite
4
+ module Decorator
5
+ module Inference
6
+
7
+ def decorator_class
8
+ return @decorator_class if defined?(@decorator_class)
9
+
10
+ @decorator_class = "#{self.class.name}Decorator".safe_constantize
11
+ end
12
+
13
+ def decorator
14
+ @decorator ||= decorator_class&.new(self)
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -3,7 +3,7 @@
3
3
  module Lite
4
4
  module Decorator
5
5
 
6
- VERSION = "1.3.1"
6
+ VERSION = "2.0.1"
7
7
 
8
8
  end
9
9
  end
@@ -4,4 +4,5 @@ require "generators/rails/decorator_generator" if defined?(Rails::Generators)
4
4
 
5
5
  require "lite/decorator/version"
6
6
  require "lite/decorator/base"
7
- require "lite/decorator/record"
7
+ require "lite/decorator/inference"
8
+ require "lite/decorator/delegator"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lite-decorator
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juan Gomez
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-09-21 00:00:00.000000000 Z
11
+ date: 2024-09-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -204,7 +204,8 @@ files:
204
204
  - lib/generators/rails/templates/decorator.rb.tt
205
205
  - lib/lite/decorator.rb
206
206
  - lib/lite/decorator/base.rb
207
- - lib/lite/decorator/record.rb
207
+ - lib/lite/decorator/delegator.rb
208
+ - lib/lite/decorator/inference.rb
208
209
  - lib/lite/decorator/version.rb
209
210
  - lite-decorator.gemspec
210
211
  homepage: http://drexed.github.io/lite-decorator