phlexible 2.0.1 → 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: 67a5772f23aaab09628e1f250674e02196ed67245779f66d542a322f8fae0ccc
4
- data.tar.gz: a861b4de7b33edfbbc2c16f688ab2de1cc5806c3d2715c77e67f4bc91144e23a
3
+ metadata.gz: 70c94bf6c1a9eb6c37f22444fb384f9083ade53cee6939d1d651dc5ac3d9d43e
4
+ data.tar.gz: 48740ed58950fe01c78f8fdc5cb8953839e416f8d4b0d50337fc8b063cc9fc77
5
5
  SHA512:
6
- metadata.gz: 56bceb89cf1707f6159487538e69447abbf0e069aaf62c0acc7eff9e87e7254d24ef7e3223f51ea5d393bbf706306845e9a06c3ab70ed5b94c54012b65f94d1f
7
- data.tar.gz: 7a34ba21a321dc20b86e71d1973e13e76dc2ac6d01d6fd79705a7e86841715ce55bb49c28c5469a1c1ffd72d23bb6c366a94b6847bfc188e5c2fb697bfb8a85e
6
+ metadata.gz: 8c31e7fd6181675ca02be9d25939adc858777224844c9cfaa0c767551ffad050cb1078d9f537a25887a3226b7b693901a62ec06faabf604a7c8d698ee5217e37
7
+ data.tar.gz: 1de0fab43ab9d7ec708b5b6388d1071cf1a9002a7d29967095f7e4fffa89d7cc07e6f47c9ebb24384c6baeed6bc9cbcb1393b07a28417232c334e54508e55364
data/.rubocop.yml CHANGED
@@ -1,4 +1,5 @@
1
1
  AllCops:
2
+ TargetRubyVersion: 3.3.0
2
3
  SuggestExtensions: false
3
4
  NewCops: enable
4
5
 
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.0.1)
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)
@@ -148,12 +151,14 @@ GEM
148
151
 
149
152
  PLATFORMS
150
153
  arm64-darwin-22
154
+ arm64-darwin-23
151
155
  arm64-darwin-24
152
156
  x86_64-darwin-19
153
157
  x86_64-linux
154
158
 
155
159
  DEPENDENCIES
156
160
  combustion
161
+ debug
157
162
  phlex-testing-nokogiri
158
163
  phlexible!
159
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
@@ -4,8 +4,8 @@ module Phlexible
4
4
  module Rails
5
5
  # Calls `url_for` for the `href` attribute.
6
6
  module AElement
7
- def a(href:, **kwargs, &block)
8
- super(href: helpers.url_for(href), **kwargs, &block)
7
+ def a(href:, **, &)
8
+ super(href: helpers.url_for(href), **, &)
9
9
  end
10
10
  end
11
11
  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.0.1'
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
data/phlexible.gemspec CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
12
12
  spec.description = 'A bunch of helpers and goodies intended to make life with Phlex even easier!'
13
13
  spec.homepage = 'https://github.com/joelmoss/phlexible'
14
14
  spec.license = 'MIT'
15
- spec.required_ruby_version = '>= 3.0.0'
15
+ spec.required_ruby_version = '>= 3.3.0'
16
16
 
17
17
  spec.metadata['homepage_uri'] = spec.homepage
18
18
  spec.metadata['source_code_uri'] = 'https://github.com/joelmoss/phlexible'
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.0.1
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
@@ -105,7 +106,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
105
106
  requirements:
106
107
  - - ">="
107
108
  - !ruby/object:Gem::Version
108
- version: 3.0.0
109
+ version: 3.3.0
109
110
  required_rubygems_version: !ruby/object:Gem::Requirement
110
111
  requirements:
111
112
  - - ">="