phlexible 2.1.0 → 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/Gemfile +1 -0
- data/Gemfile.lock +5 -1
- data/README.md +26 -0
- data/lib/phlexible/callbacks.rb +44 -0
- data/lib/phlexible/rails/controller_variables.rb +19 -17
- data/lib/phlexible/version.rb +1 -1
- data/lib/phlexible.rb +1 -0
- metadata +3 -2
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/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
phlexible (2.
|
|
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
|
-
|
|
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
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.
|
|
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
|