view_delegates 0.3.5 → 0.4.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/lib/view_delegates/poros/view_delegate.rb +26 -1
- data/lib/view_delegates/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 633619f37245de4691c3f0e0b5b0f1df395f76bb1f2ed0758d3462309e76e7c2
|
4
|
+
data.tar.gz: 27550966989610cd4e4e22887d23afa2a3ff5ea2584500f628d4d0a73a3ff202
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 88b68ee878d559abc22a4d0a9b9ae113ea4dae6af17a0b6a3b4ec2ebc91077a17ebcc15a1d4fc8d3bdae0088ff0f0e9b5e4a62a1d015e61c3bc245c5d06757db
|
7
|
+
data.tar.gz: 74d76e809b8c572b5968ec21055be15736271ff9954b797bcaf29acec9de92b8517b2ebc5ad580cf6d55f677b72a35fe2bd1b6f0ac68438f5198895a3d963790
|
@@ -8,11 +8,13 @@ module ViewDelegates
|
|
8
8
|
class_attribute :view_locals
|
9
9
|
class_attribute :ar_models
|
10
10
|
class_attribute :properties
|
11
|
+
class_attribute :view_helpers
|
11
12
|
# We need self, Ruby gets confused without the self and thinks of a local variable instead
|
12
13
|
# of ivar
|
13
14
|
self.view_locals = self.view_locals || []
|
14
15
|
self.ar_models = self.ar_models || []
|
15
16
|
self.properties = self.properties || []
|
17
|
+
self.view_helpers = self.view_helpers || []
|
16
18
|
# View delegate cache system
|
17
19
|
# @return [ViewDelegates::Cache]
|
18
20
|
def self.delegate_cache
|
@@ -33,7 +35,9 @@ module ViewDelegates
|
|
33
35
|
send("#{t}=", view_data[t]) if view_data[t]
|
34
36
|
end
|
35
37
|
end
|
36
|
-
|
38
|
+
def self.helpers_name
|
39
|
+
"#{to_s.gsub(/^.*::/, '')}".sub(/Delegate/, ''.freeze).concat('Helper').underscore
|
40
|
+
end
|
37
41
|
# Renders as a string the view passed as params
|
38
42
|
# @param [Symbol] view
|
39
43
|
def render(view, local_params: {}, &block)
|
@@ -42,13 +46,28 @@ module ViewDelegates
|
|
42
46
|
locals[method] = send(method)
|
43
47
|
end
|
44
48
|
self.ar_models = {}
|
49
|
+
self.view_helpers = {}
|
45
50
|
self.class.ar_models&.each do |ar_model|
|
46
51
|
ar_models[ar_model] = instance_variable_get(:"@#{ar_model}")
|
47
52
|
end
|
48
53
|
self.class.properties&.each do |property|
|
49
54
|
locals[property] = instance_variable_get "@#{property}"
|
50
55
|
end
|
56
|
+
module_helpers = self.class.view_helpers
|
57
|
+
module_methods = {}
|
58
|
+
for method in module_helpers
|
59
|
+
module_methods[method] = method(method)
|
60
|
+
end
|
61
|
+
helper_obj = Struct.new(self.class.helpers_name.camelcase) do
|
62
|
+
|
63
|
+
module_helpers.each do |view_helper|
|
64
|
+
define_method view_helper do |*args|
|
65
|
+
module_methods[view_helper].call(*args)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end.new
|
51
69
|
locals = locals.merge(ar_models).merge(local_params)
|
70
|
+
locals[self.class.helpers_name.to_sym] = helper_obj
|
52
71
|
result = ViewDelegateController.render(self.class.view_path + '/' + view.to_s,
|
53
72
|
locals: locals)
|
54
73
|
|
@@ -123,6 +142,12 @@ module ViewDelegates
|
|
123
142
|
self.view_locals += methods
|
124
143
|
end
|
125
144
|
|
145
|
+
# Marks a method as view helper
|
146
|
+
# @param [Array(Symbol)] methods
|
147
|
+
def helper(*methods)
|
148
|
+
self.view_helpers += methods
|
149
|
+
end
|
150
|
+
|
126
151
|
# View properties
|
127
152
|
# @param [Symbol] method
|
128
153
|
def property(*methods)
|