phlexible 2.1.0 → 2.2.0

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: 21073cfcdc42c7f7e5b45acded4e215b292dc6a4ba249680421e5773d1fb4f71
4
- data.tar.gz: ca39ee5c91a5cd5f6a69bde6a630078877485b0f68233c639c4fede9d1cca0a6
3
+ metadata.gz: 70c94bf6c1a9eb6c37f22444fb384f9083ade53cee6939d1d651dc5ac3d9d43e
4
+ data.tar.gz: 48740ed58950fe01c78f8fdc5cb8953839e416f8d4b0d50337fc8b063cc9fc77
5
5
  SHA512:
6
- metadata.gz: e3bc48aace4119e705d9125de82e854ce0bf1c3d1ad6e9a041381903d5e7bf5e2f8ce3be61eb81f0c9b7c252d5163f7566a8098132bffc866feccee7aecd2b66
7
- data.tar.gz: 1a0a10ace59181e18d07ef13321ce24d8991767df940f4bd1e16e6f93e357915df0a8ee2208895919f9ecc6de05759fba60b74f5ff4d3af8b16fd1c12232bcf8
6
+ metadata.gz: 8c31e7fd6181675ca02be9d25939adc858777224844c9cfaa0c767551ffad050cb1078d9f537a25887a3226b7b693901a62ec06faabf604a7c8d698ee5217e37
7
+ data.tar.gz: 1de0fab43ab9d7ec708b5b6388d1071cf1a9002a7d29967095f7e4fffa89d7cc07e6f47c9ebb24384c6baeed6bc9cbcb1393b07a28417232c334e54508e55364
data/Gemfile CHANGED
@@ -6,6 +6,7 @@ source 'https://rubygems.org'
6
6
  gemspec
7
7
 
8
8
  gem 'combustion'
9
+ gem 'debug'
9
10
  gem 'phlex-testing-nokogiri'
10
11
  gem 'rake', '~> 13.0'
11
12
  gem 'rubocop', '~> 1.55'
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- phlexible (2.1.0)
4
+ phlexible (2.2.0)
5
5
  phlex (>= 1.10.0, < 2.0.0)
6
6
  phlex-rails (>= 1.2.1, < 2.0.0)
7
7
 
@@ -50,6 +50,9 @@ GEM
50
50
  connection_pool (2.5.0)
51
51
  crass (1.0.6)
52
52
  date (3.4.1)
53
+ debug (1.10.0)
54
+ irb (~> 1.10)
55
+ reline (>= 0.3.8)
53
56
  drb (2.2.1)
54
57
  erubi (1.13.1)
55
58
  i18n (1.14.7)
@@ -155,6 +158,7 @@ PLATFORMS
155
158
 
156
159
  DEPENDENCIES
157
160
  combustion
161
+ debug
158
162
  phlex-testing-nokogiri
159
163
  phlexible!
160
164
  rake (~> 13.0)
data/README.md CHANGED
@@ -36,6 +36,32 @@ class UsersController
36
36
  end
37
37
  ```
38
38
 
39
+ #### `Callbacks`
40
+
41
+ While Phlex does have `before_template`, `after_template`, and `around_template` hooks, they must be defined as regular Ruby methods, meaning you have to always remember to call `super` when redefining any hook method.
42
+
43
+ This module provides a more Rails-like interface for defining callbacks in your Phlex views, using `ActiveSupport::Callbacks`. It implements the same `before_template`, `after_template`, and `around_template` hooks as callbacks.
44
+
45
+ ```ruby
46
+ class Views::Users::Index < Views::Base
47
+ include Phlexible::Callbacks
48
+
49
+ before_template :set_title
50
+
51
+ def view_template
52
+ h1 { @title }
53
+ end
54
+
55
+ private
56
+
57
+ def set_title
58
+ @title = 'Users'
59
+ end
60
+ end
61
+ ```
62
+
63
+ You can still use the regular `before_template`, `after_template`, and `around_template` hooks as well, but I recommend that if you include this module, that you use callbacks instead.
64
+
39
65
  #### `ControllerVariables`
40
66
 
41
67
  > Available in **>= 1.0.0**
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/callbacks'
4
+
5
+ module Phlexible
6
+ module Callbacks
7
+ extend ActiveSupport::Concern
8
+ include ActiveSupport::Callbacks
9
+
10
+ included do
11
+ define_callbacks :initialize, :template
12
+ end
13
+
14
+ class_methods do
15
+ def new(...)
16
+ obj = super
17
+ obj.run_callbacks :initialize, :after
18
+ obj
19
+ end
20
+
21
+ def after_initialize(*names, &block)
22
+ set_callback(:initialize, :after, *names, &block)
23
+ end
24
+
25
+ def around_template(*names, &block)
26
+ set_callback(:template, :around, *names, &block)
27
+ end
28
+
29
+ def before_template(*names, &block)
30
+ set_callback(:template, :before, *names, &block)
31
+ end
32
+
33
+ def after_template(*names, &block)
34
+ set_callback(:template, :after, *names, &block)
35
+ end
36
+ end
37
+
38
+ def around_template
39
+ run_callbacks :template do
40
+ super
41
+ end
42
+ end
43
+ end
44
+ end
@@ -26,6 +26,8 @@ module Phlexible
26
26
  def self.included(klass)
27
27
  klass.class_attribute :__controller_variables__, instance_predicate: false, default: Set.new
28
28
  klass.extend ClassMethods
29
+ klass.include Callbacks
30
+ klass.before_template :define_controller_variables
29
31
  end
30
32
 
31
33
  class UndefinedVariable < NameError
@@ -36,27 +38,27 @@ module Phlexible
36
38
  end
37
39
  end
38
40
 
39
- def before_template # rubocop:disable Metrics
40
- if respond_to?(:__controller_variables__)
41
- view_assigns = helpers.controller.view_assigns
42
- view = @view
43
-
44
- vars = (view&.__controller_variables__ || Set.new) + __controller_variables__
45
- vars.each do |k, v|
46
- allow_undefined = true
47
- if k.ends_with?('!')
48
- allow_undefined = false
49
- k = k.chop
50
- end
41
+ private
42
+
43
+ def define_controller_variables # rubocop:disable Metrics
44
+ return unless respond_to?(:__controller_variables__)
51
45
 
52
- raise ControllerVariables::UndefinedVariable, k if !allow_undefined && !view_assigns.key?(k)
46
+ view_assigns = helpers.controller.view_assigns
47
+ view = @view
53
48
 
54
- instance_variable_set(:"@#{v}", view_assigns[k])
55
- view&.instance_variable_set(:"@#{v}", view_assigns[k])
49
+ vars = (view&.__controller_variables__ || Set.new) + __controller_variables__
50
+ vars.each do |k, v|
51
+ allow_undefined = true
52
+ if k.ends_with?('!')
53
+ allow_undefined = false
54
+ k = k.chop
56
55
  end
57
- end
58
56
 
59
- super
57
+ raise ControllerVariables::UndefinedVariable, k if !allow_undefined && !view_assigns.key?(k)
58
+
59
+ instance_variable_set(:"@#{v}", view_assigns[k])
60
+ view&.instance_variable_set(:"@#{v}", view_assigns[k])
61
+ end
60
62
  end
61
63
 
62
64
  module ClassMethods
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Phlexible
4
- VERSION = '2.1.0'
4
+ VERSION = '2.2.0'
5
5
  end
data/lib/phlexible.rb CHANGED
@@ -6,5 +6,6 @@ require 'phlex'
6
6
  module Phlexible
7
7
  autoload :AliasView, 'phlexible/alias_view'
8
8
  autoload :PageTitle, 'phlexible/page_title'
9
+ autoload :Callbacks, 'phlexible/callbacks'
9
10
  autoload :Rails, 'phlexible/rails'
10
11
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phlexible
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Moss
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-02-05 00:00:00.000000000 Z
10
+ date: 2025-02-11 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: phlex
@@ -79,6 +79,7 @@ files:
79
79
  - fixtures/rails_helper.rb
80
80
  - lib/phlexible.rb
81
81
  - lib/phlexible/alias_view.rb
82
+ - lib/phlexible/callbacks.rb
82
83
  - lib/phlexible/page_title.rb
83
84
  - lib/phlexible/rails.rb
84
85
  - lib/phlexible/rails/a_element.rb