rocketio 0.0.7 → 0.0.8

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
  SHA1:
3
- metadata.gz: 5f1dbf572c1e7970aec62ce4ef9c086d30ecf81a
4
- data.tar.gz: ca84526779a8871ca2f7fb63be1e2544c48cc61a
3
+ metadata.gz: 058d969c6b3f050392f25ce9be512029b10cf7cf
4
+ data.tar.gz: fe12296fa46e09d621044bc15a926099daf0f85d
5
5
  SHA512:
6
- metadata.gz: a3f8c8aba7c0e2d786487f35ad8b066bc208fe49df69cf42c1e9ef7aa4e40a4f772b5f9cc6264ae08c5a5525b006cf6336da162d066aa9223cde0f7b522b454f
7
- data.tar.gz: de2d3b6d29d64fa7a8d5f6e6c5c3e9cebd030c76b3231430acb094f53bdce0fd5d9687008e3b607d24768597c1600d84636ab01b54cc4679a0acbe4cbfa6272a
6
+ metadata.gz: 57ff44d810bc535f35cacc5fd09983e9fda1c2902296e14744ec56e7c59a80fa2229c3302ce2a27a0a24fc6a613a4063cc25510c70e124a77fa9286315d70acb
7
+ data.tar.gz: 98a60d1d19ef24fa204796f607eefb9dea785a11af451ad5bceb6b60027709869f30a79d2402bee2e4521a02b27216340b3b99bf33b56a62c55c67e38881492e
@@ -69,7 +69,7 @@ module RocketIO
69
69
  engine, engine_opts = resolve_engine(opts)
70
70
  template = block_given? ? yield : resolve_template(template, engine)
71
71
  scope = opts.fetch(:scope, self)
72
- locals = opts.fetch(:locals, RocketIO::EMPTY_HASH).freeze
72
+ locals = template_vars.merge(opts.fetch(:locals, RocketIO::EMPTY_HASH)).freeze
73
73
  layout = opts.fetch(:layout, self.layout)
74
74
  template = compile_template(template, engine, engine_opts).render(scope, locals)
75
75
  layout ? render_layout(layout, opts) {template} : template
@@ -110,8 +110,8 @@ module RocketIO
110
110
  end
111
111
  end
112
112
 
113
- scope = opts.fetch(:scope, self)
114
- locals = opts.fetch(:locals, RocketIO::EMPTY_HASH).freeze
113
+ scope = opts.fetch(:scope, self)
114
+ locals = template_vars.merge(opts.fetch(:locals, RocketIO::EMPTY_HASH)).freeze
115
115
  compile_template(template, engine, engine_opts)
116
116
  .render(scope, locals, &(block || RocketIO::EMPTY_STRING_PROC))
117
117
  end
@@ -164,3 +164,4 @@ require 'rocketio/controller/render/engine'
164
164
  require 'rocketio/controller/render/layout'
165
165
  require 'rocketio/controller/render/layouts'
166
166
  require 'rocketio/controller/render/templates'
167
+ require 'rocketio/controller/render/template_vars'
@@ -0,0 +1,34 @@
1
+ module RocketIO
2
+ class Controller
3
+
4
+ # define variables to be used on templates alongside provided locals.
5
+ #
6
+ # @param name
7
+ # @param value
8
+ #
9
+ def self.define_template_var name, value = nil, &block
10
+ value || block || raise(ArgumentError, 'A value or a block expected')
11
+ (@__template_vars__ ||= {})[name.to_sym] = (block || value).freeze
12
+ define_template_vars_methods
13
+ end
14
+
15
+ def self.define_template_vars_methods source = self
16
+ return unless source.instance_variables.include?(:@__template_vars__)
17
+ vars = source.instance_variable_get(:@__template_vars__).each_with_object(allocate.__template_vars__.dup) do |(name,value),o|
18
+ o[name] = :"__#{name}_template_var__"
19
+ if value.is_a?(Proc)
20
+ define_method(o[name], &value)
21
+ else
22
+ define_method(o[name]) {value}
23
+ end
24
+ end.freeze
25
+ define_method(:__template_vars__) {vars}
26
+ end
27
+
28
+ def __template_vars__; RocketIO::EMPTY_HASH end
29
+
30
+ def template_vars
31
+ __template_vars__.each_with_object({}) {|(k,v),o| o[k] = __send__(v)}
32
+ end
33
+ end
34
+ end
@@ -1,3 +1,3 @@
1
1
  module RocketIO
2
- VERSION = '0.0.7'.freeze
2
+ VERSION = '0.0.8'.freeze
3
3
  end
@@ -0,0 +1,106 @@
1
+ require 'setup'
2
+
3
+ spec :template_vars do
4
+ context :compositing do
5
+ it 'inherits vars from superclass' do
6
+ a = mock_controller {
7
+ define_template_var(:a, 'a')
8
+ }
9
+ b = mock_controller(a) {}.initialize_controller
10
+ assert(b.template_vars[:a]) == 'a'
11
+ end
12
+
13
+ it 'complements vars inherited from superclass' do
14
+ a = mock_controller {
15
+ define_template_var(:a, 'a')
16
+ }
17
+ b = mock_controller(a) {
18
+ define_template_var(:b, 'b')
19
+ }.initialize_controller
20
+ assert(b.template_vars[:a]) == 'a'
21
+ assert(b.template_vars[:b]) == 'b'
22
+ end
23
+
24
+ it 'overrides vars inherited from superclass' do
25
+ a = mock_controller {
26
+ define_template_var(:a, 'a')
27
+ }
28
+ b = mock_controller(a) {
29
+ define_template_var(:a, 'b')
30
+ }.initialize_controller
31
+ assert(b.template_vars[:a]) == 'b'
32
+ end
33
+
34
+ test '`inherit` overrides vars inherited from superclass' do
35
+ a = mock_controller {
36
+ define_template_var(:a, 'a')
37
+ }
38
+ b = mock_controller(a) {
39
+ define_template_var(:a, 'b')
40
+ }
41
+ c = mock_controller(a) {
42
+ inherit :template_vars, from: b
43
+ }.initialize_controller
44
+ assert(c.template_vars[:a]) == 'b'
45
+ end
46
+
47
+ test '`inherit` complements vars inherited from superclass' do
48
+ a = mock_controller {
49
+ define_template_var(:a, 'a')
50
+ }
51
+ b = mock_controller(a) {
52
+ define_template_var(:b, 'b')
53
+ }
54
+ c = mock_controller(a) {
55
+ inherit :template_vars, from: b
56
+ }.initialize_controller
57
+ assert(c.template_vars[:a]) == 'a'
58
+ assert(c.template_vars[:b]) == 'b'
59
+ end
60
+
61
+ test '`inherit` overrides defined vars' do
62
+ a = mock_controller {
63
+ define_template_var(:a, 'a')
64
+ }
65
+ b = mock_controller {
66
+ define_template_var(:a, 'b')
67
+ inherit :template_vars, from: a
68
+ }.initialize_controller
69
+ assert(b.template_vars[:a]) == 'a'
70
+ end
71
+ end
72
+
73
+ context :rendering do
74
+
75
+ it 'accepts plain value via second argument' do
76
+ c = mock_controller {
77
+ define_template(:get) {'<%= x %>'}
78
+ define_template_var(:x, 'y')
79
+ }.initialize_controller
80
+ assert(c.render(:get)) == 'y'
81
+ end
82
+
83
+ it 'accepts a proc as second argument' do
84
+ c = mock_controller {
85
+ define_template(:get) {'<%= x %>'}
86
+ define_template_var(:x, -> {'y'})
87
+ }.initialize_controller
88
+ assert(c.render(:get)) == 'y'
89
+ end
90
+
91
+ it 'accepts a block without second argument' do
92
+ c = mock_controller {
93
+ define_template(:get) {'<%= x %>'}
94
+ define_template_var(:x) {'y'}
95
+ }.initialize_controller
96
+ assert(c.render(:get)) == 'y'
97
+ end
98
+
99
+ it 'raises ArgumentError if no value nor block given' do
100
+ assert { mock_controller {
101
+ define_template_var(:x)
102
+ }}.raise(ArgumentError)
103
+ end
104
+
105
+ end
106
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rocketio
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Slee Woo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-10 00:00:00.000000000 Z
11
+ date: 2016-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -138,6 +138,7 @@ files:
138
138
  - lib/rocketio/controller/render/engine.rb
139
139
  - lib/rocketio/controller/render/layout.rb
140
140
  - lib/rocketio/controller/render/layouts.rb
141
+ - lib/rocketio/controller/render/template_vars.rb
141
142
  - lib/rocketio/controller/render/templates.rb
142
143
  - lib/rocketio/controller/request.rb
143
144
  - lib/rocketio/controller/response.rb
@@ -178,6 +179,7 @@ files:
178
179
  - test/render/put.erb
179
180
  - test/render/render_test.rb
180
181
  - test/render/setup.rb
182
+ - test/render/template_vars_test.rb
181
183
  - test/render/templates/a/get.erb
182
184
  - test/render/templates/master.erb
183
185
  - test/render/templates_test.rb
@@ -210,5 +212,5 @@ rubyforge_project:
210
212
  rubygems_version: 2.5.1
211
213
  signing_key:
212
214
  specification_version: 4
213
- summary: '["rocketio-0.0.7", "Simple, fast, scalable web framework for Ruby"]'
215
+ summary: '["rocketio-0.0.8", "Simple, fast, scalable web framework for Ruby"]'
214
216
  test_files: []