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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a4f301f9e859df07bfe34ad06884a7d88d4f7e4c32d36012e869a05ea0c1fd76
4
- data.tar.gz: c65ce7cf16879bde4ac489c827ebc1dcb0216735609f3839321b91ba85f37b80
3
+ metadata.gz: 633619f37245de4691c3f0e0b5b0f1df395f76bb1f2ed0758d3462309e76e7c2
4
+ data.tar.gz: 27550966989610cd4e4e22887d23afa2a3ff5ea2584500f628d4d0a73a3ff202
5
5
  SHA512:
6
- metadata.gz: 8cc61a8da5b7c73acc650050b8e5a787dc6178c15c28a437f851ca48bed5e1875c07f970e093fb358983dc881e2b65c10ad3ef2b319d21409c9da9394d8741ff
7
- data.tar.gz: df39de327efe8e8f90185a738ac5e1cfb3040055e488107698a4f872a238ef134fa64daff42f935b0c1111dcf9a3aae53e0683c7653a7c37e417f46d6d99c0d5
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)
@@ -1,4 +1,4 @@
1
1
  module ViewDelegates
2
2
  # Gem version
3
- VERSION = '0.3.5'.freeze
3
+ VERSION = '0.4.0'.freeze
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: view_delegates
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.5
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Aurelio Lamas Murias