phlexible 2.0.1 → 2.2.0
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 +4 -4
- data/.rubocop.yml +1 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +6 -1
- data/README.md +26 -0
- data/lib/phlexible/callbacks.rb +44 -0
- data/lib/phlexible/rails/a_element.rb +2 -2
- data/lib/phlexible/rails/controller_variables.rb +19 -17
- data/lib/phlexible/version.rb +1 -1
- data/lib/phlexible.rb +1 -0
- data/phlexible.gemspec +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 70c94bf6c1a9eb6c37f22444fb384f9083ade53cee6939d1d651dc5ac3d9d43e
|
|
4
|
+
data.tar.gz: 48740ed58950fe01c78f8fdc5cb8953839e416f8d4b0d50337fc8b063cc9fc77
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8c31e7fd6181675ca02be9d25939adc858777224844c9cfaa0c767551ffad050cb1078d9f537a25887a3226b7b693901a62ec06faabf604a7c8d698ee5217e37
|
|
7
|
+
data.tar.gz: 1de0fab43ab9d7ec708b5b6388d1071cf1a9002a7d29967095f7e4fffa89d7cc07e6f47c9ebb24384c6baeed6bc9cbcb1393b07a28417232c334e54508e55364
|
data/.rubocop.yml
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
phlexible (2.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)
|
|
@@ -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:,
|
|
8
|
-
super(href: helpers.url_for(href),
|
|
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
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|
-
|
|
46
|
+
view_assigns = helpers.controller.view_assigns
|
|
47
|
+
view = @view
|
|
53
48
|
|
|
54
|
-
|
|
55
|
-
|
|
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
|
-
|
|
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
|
data/lib/phlexible/version.rb
CHANGED
data/lib/phlexible.rb
CHANGED
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.
|
|
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
|
|
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-
|
|
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.
|
|
109
|
+
version: 3.3.0
|
|
109
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
110
111
|
requirements:
|
|
111
112
|
- - ">="
|