magic-presenter 1.3.0 → 1.4.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: 0336dc17e983771f6f96385c14429c66e961614ee20f1c99202ab92e970e8663
4
- data.tar.gz: c923d4f65d8772b8fa52dd62c5d26a0d7b5e96f9d1b3ac12af28296dfb80547b
3
+ metadata.gz: 8e957e0973cd481d761d640a21626bfa1f6c4b3c3acb6b3e4323efb164dc95aa
4
+ data.tar.gz: 36b30c143459e650a8afe314e430a6a2636d2552cd772f2c5123e79044abe043
5
5
  SHA512:
6
- metadata.gz: 94be4b679d87564d79169e919f2e5abb400971b82c0ad78d5456aedbde969e1b4574b27569dee9011861fb899637e3f5394cebfe84488a68063254b70eb7a5a7
7
- data.tar.gz: 32b20c180e447a2164013d595256c12b8019a5143595d547373c82b157757bea3cf5867248d7068d1d36786e79cd0b6873d6cd814f8f760b53a990c25ed3a924
6
+ metadata.gz: 2bde9ac73d98838e404aa3a121edebce54845b22bbff2af7bbea53e50f7614b3ae24b6efa64d70ceba365cda64200990dc8838217e3afd43e491b4ff271c48ef
7
+ data.tar.gz: 2be6beeb343bf45e09dfd32b7e02c6a9bff75ce9769ed32c61125d5194c62c1f7f7ba27b2e5e67a46b7c8eece44d9760f57ed95ef09ad77a58d53116a60df918
data/README.md CHANGED
@@ -55,6 +55,8 @@ person = Person.new(first_name: 'John', last_name: 'Smith').decorate
55
55
  person.name # => "John Smith"
56
56
  ```
57
57
 
58
+ Use [load hooks](#load-hooks) to extend the base presenter functionality.
59
+
58
60
  ### `Magic::Presentable`
59
61
 
60
62
  This module includes `Magic::Decoratable` and allows a descendant to be decorated by presenters only.
@@ -64,6 +66,8 @@ When no presenter is found,
64
66
  - `#decorate!` raises `Magic::Lookup::Error`,
65
67
  - `#decorated` returns the original object.
66
68
 
69
+ Use [load hooks](#load-hooks) to extend the functionality.
70
+
67
71
  #### Collections
68
72
 
69
73
  Active Record relations are presentable as collections. Define a collection presenter inside the matching presenter to customize collection behavior:
@@ -121,6 +125,25 @@ end
121
125
  > [!NOTE]
122
126
  > A valid `request` may be needed for URL helpers to get host data.
123
127
 
128
+ ### Load hooks
129
+
130
+ Load hooks are triggered when `Magic::Presenter::Base` or `Magic::Presentable` are loaded.
131
+ They allow you to run custom initialization code for configuration or to extend the functionality.
132
+
133
+ ```ruby
134
+ ActiveSupport.on_load :presenter do
135
+ # Put the code to be executed when Magic::Presenter is loaded here.
136
+ # It runs in the context of Magic::Presenter::Base class.
137
+ end
138
+ ```
139
+
140
+ ```ruby
141
+ ActiveSupport.on_load :presentable do
142
+ # Put the code to be executed when Magic::Presentable is loaded here.
143
+ # It runs in the context of Magic::Presentable module.
144
+ end
145
+ ```
146
+
124
147
  ## 🧙 Magic
125
148
 
126
149
  > [!IMPORTANT]
@@ -14,4 +14,6 @@ module Magic
14
14
 
15
15
  def decorator_base = Presenter::Base
16
16
  end
17
+
18
+ ActiveSupport.run_load_hooks :presentable, Presentable
17
19
  end
@@ -28,7 +28,8 @@ ActiveSupport.on_load :action_view do # rubocop:disable Metrics/BlockLength
28
28
  def assign_controller controller
29
29
  super
30
30
 
31
- self.class.decorated_method controller._helper_methods
31
+ self.class.decorated_method controller._helper_methods if
32
+ controller
32
33
  end
33
34
  end
34
35
 
@@ -60,5 +60,7 @@ module Magic
60
60
  end
61
61
  end
62
62
  end
63
+
64
+ ActiveSupport.run_load_hooks :presenter, Base
63
65
  end
64
66
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Magic
4
4
  module Presenter
5
- class Engine < ::Rails::Engine # :nodoc:
5
+ class Engine < ::Rails::Engine
6
6
  isolate_namespace Magic::Presenter
7
7
 
8
8
  config.generators do
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Magic
4
4
  module Presenter
5
- VERSION = '1.3.0'
5
+ VERSION = '1.4.1'
6
6
  end
7
7
  end
@@ -5,7 +5,7 @@ require 'magic/decorator'
5
5
  require_relative 'presenter/version'
6
6
  require_relative 'presenter/engine'
7
7
 
8
- module Magic # :nodoc:
8
+ module Magic
9
9
  # Presentation layer for Rails models
10
10
  module Presenter
11
11
  autoload :Base, 'magic/presenter/base'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: magic-presenter
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Senko
@@ -111,7 +111,7 @@ licenses:
111
111
  metadata:
112
112
  homepage_uri: "https://github.com/Alexander-Senko/magic-presenter"
113
113
  source_code_uri: "https://github.com/Alexander-Senko/magic-presenter"
114
- changelog_uri: "https://github.com/Alexander-Senko/magic-presenter/blob/v1.3.0/CHANGELOG.md"
114
+ changelog_uri: "https://github.com/Alexander-Senko/magic-presenter/blob/v1.4.1/CHANGELOG.md"
115
115
  rdoc_options: []
116
116
  require_paths:
117
117
  - lib