bldr 0.5.3 → 0.5.4
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.
- data/.travis.yml +1 -2
- data/HISTORY.md +4 -2
- data/bldr.gemspec +1 -1
- data/lib/bldr.rb +0 -2
- data/lib/bldr/node.rb +9 -4
- data/lib/bldr/version.rb +1 -1
- data/lib/sinatra/bldr.rb +2 -3
- data/spec/fixtures/root_partial.bldr +1 -0
- data/spec/functional/tilt_template_spec.rb +7 -0
- data/spec/integration/sinatra_spec.rb +33 -0
- data/spec/spec_helper.rb +11 -2
- data/spec/unit/bldr_spec.rb +3 -3
- data/spec/unit/node_spec.rb +7 -0
- metadata +18 -16
data/.travis.yml
CHANGED
data/HISTORY.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
|
-
## 0.5.
|
1
|
+
## 0.5.4 (2012-04-24)
|
2
|
+
* Fix bug to allow using `template` method at the root of a bldr template
|
3
|
+
* Add `locals` reader method to allow access to locals passed into a bldr template
|
2
4
|
|
5
|
+
## 0.5.3
|
3
6
|
* Add ability to use `attribute` method at the root-level in a bldr template
|
4
7
|
* Fix for when partials return nil (#19)
|
5
8
|
|
@@ -10,5 +13,4 @@
|
|
10
13
|
* Add new `attribute` inferred object syntax (@ihunter)
|
11
14
|
|
12
15
|
## 0.1.2 (2011-09-08)
|
13
|
-
|
14
16
|
* Return an empty collection when a nil value is passed to `collection` method
|
data/bldr.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
20
|
s.require_paths = ["lib"]
|
21
21
|
|
22
|
-
s.add_dependency 'multi_json'
|
22
|
+
s.add_dependency 'multi_json'
|
23
23
|
|
24
24
|
s.add_development_dependency 'json_pure'
|
25
25
|
s.add_development_dependency 'sinatra', '~>1.2.6'
|
data/lib/bldr.rb
CHANGED
data/lib/bldr/node.rb
CHANGED
@@ -3,7 +3,7 @@ module Bldr
|
|
3
3
|
|
4
4
|
class Node
|
5
5
|
|
6
|
-
attr_reader :current_object, :result, :parent, :opts, :views
|
6
|
+
attr_reader :current_object, :result, :parent, :opts, :views, :locals
|
7
7
|
|
8
8
|
# Initialize a new Node instance.
|
9
9
|
#
|
@@ -22,6 +22,7 @@ module Bldr
|
|
22
22
|
@opts = opts
|
23
23
|
@parent = opts[:parent]
|
24
24
|
@views = opts[:views]
|
25
|
+
@locals = opts[:locals]
|
25
26
|
# Storage hash for all descendant nodes
|
26
27
|
@result = {}
|
27
28
|
|
@@ -60,8 +61,7 @@ module Bldr
|
|
60
61
|
# and the object to serialize.
|
61
62
|
# @param [Proc] block the code block to evaluate
|
62
63
|
#
|
63
|
-
# @return [
|
64
|
-
# descendant nodes.
|
64
|
+
# @return [Bldr::Node] returns self
|
65
65
|
def object(base = nil, &block)
|
66
66
|
if base.kind_of? Hash
|
67
67
|
key = base.keys.first
|
@@ -78,6 +78,7 @@ module Bldr
|
|
78
78
|
self
|
79
79
|
end
|
80
80
|
|
81
|
+
# @return [Bldr::Node] returns self
|
81
82
|
def collection(items, &block)
|
82
83
|
|
83
84
|
if items.respond_to?('keys')
|
@@ -185,12 +186,16 @@ module Bldr
|
|
185
186
|
# object :person => dude do
|
186
187
|
# template "path/to/template", :locals => {:foo => 'bar'}
|
187
188
|
# end
|
188
|
-
|
189
|
+
#
|
190
|
+
# @return [Bldr::Node] returns self
|
191
|
+
def template(template, options={})
|
189
192
|
locals = options[:locals] || options['locals']
|
190
193
|
|
191
194
|
if tpl = Bldr::Template.new(find_template(template)).render(self, locals)
|
192
195
|
merge_result! nil, tpl.result
|
193
196
|
end
|
197
|
+
|
198
|
+
self
|
194
199
|
end
|
195
200
|
|
196
201
|
private
|
data/lib/bldr/version.rb
CHANGED
data/lib/sinatra/bldr.rb
CHANGED
@@ -23,10 +23,9 @@ module Sinatra
|
|
23
23
|
#
|
24
24
|
# @param [Hash] opts a hash of options
|
25
25
|
# @option opts [Hash] :locals a hash of local variables to be used in the template
|
26
|
-
# @option
|
27
26
|
def bldr(template, opts = {}, &block)
|
28
|
-
opts[:scope] = ::Bldr::Node.new(nil,opts.merge(:views => (settings.views || "./views")))
|
29
|
-
locals
|
27
|
+
opts[:scope] = ::Bldr::Node.new(nil, opts.merge(:views => (settings.views || "./views")))
|
28
|
+
locals = opts.delete(:locals)
|
30
29
|
MultiJson.encode render(:bldr, template, opts, locals, &block).result
|
31
30
|
# @todo add support for alternate formats, like plist
|
32
31
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
template 'fixtures/partial.json.bldr'
|
@@ -147,3 +147,10 @@ describe "evaluating a tilt template" do
|
|
147
147
|
|
148
148
|
end
|
149
149
|
end
|
150
|
+
|
151
|
+
describe "using a partial template at the root of another template" do
|
152
|
+
it "works as expected" do
|
153
|
+
template = Bldr::Template.new('./spec/fixtures/root_partial.bldr')
|
154
|
+
template.render(Bldr::Node.new(nil, :views => './spec')).result.should == {:foo => 'bar'}
|
155
|
+
end
|
156
|
+
end
|
@@ -8,6 +8,8 @@ describe "Using Bldr with a sinatra app" do
|
|
8
8
|
register Sinatra::Bldr
|
9
9
|
|
10
10
|
set :views, File.expand_path(__FILE__ + '/../..')
|
11
|
+
disable :show_exceptions
|
12
|
+
enable :raise_errors
|
11
13
|
|
12
14
|
get '/' do
|
13
15
|
alex = Person.new("alex", 25)
|
@@ -49,6 +51,15 @@ describe "Using Bldr with a sinatra app" do
|
|
49
51
|
|
50
52
|
bldr :'fixtures/root_template.json', :locals => {:name => name, :age => age}
|
51
53
|
end
|
54
|
+
|
55
|
+
get '/root_partial' do
|
56
|
+
bldr :'fixtures/root_partial'
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
it "properly renders a template that only contains a template call" do
|
61
|
+
response = Rack::MockRequest.new(TestApp).get('/root_partial')
|
62
|
+
MultiJson.decode(response.body).should == {'foo' => 'bar'}
|
52
63
|
end
|
53
64
|
|
54
65
|
it "returns json for a simple single-level template" do
|
@@ -86,3 +97,25 @@ describe "Using Bldr with a sinatra app" do
|
|
86
97
|
parse_json(response.body).should == {'name' => 'john doe', 'age' => 26}
|
87
98
|
end
|
88
99
|
end
|
100
|
+
|
101
|
+
describe "access to the locals hash inside sinatra bldr templates" do
|
102
|
+
class Locals < BaseTestApp
|
103
|
+
disable :show_exceptions
|
104
|
+
enable :raise_errors
|
105
|
+
|
106
|
+
get '/' do
|
107
|
+
tpl = <<-RUBY
|
108
|
+
object(:locals) do
|
109
|
+
attribute(:key) { locals[:key] }
|
110
|
+
end
|
111
|
+
RUBY
|
112
|
+
|
113
|
+
bldr tpl, :locals => {:key => 'val'}
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
it "provides access to the locals hash in the template" do
|
118
|
+
response = Rack::MockRequest.new(Locals).get('/')
|
119
|
+
MultiJson.decode(response.body)['locals']['key'].should == 'val'
|
120
|
+
end
|
121
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -3,6 +3,7 @@ require 'rspec'
|
|
3
3
|
|
4
4
|
require 'yajl'
|
5
5
|
require 'tilt'
|
6
|
+
require 'sinatra/base'
|
6
7
|
|
7
8
|
$:.unshift(File.dirname(File.expand_path(__FILE__)))
|
8
9
|
|
@@ -10,6 +11,16 @@ require File.join(File.dirname(File.expand_path(__FILE__)), "..", "lib", "bldr")
|
|
10
11
|
|
11
12
|
Dir['spec/models/*'].each { |f| require File.expand_path(f) }
|
12
13
|
|
14
|
+
require 'sinatra/bldr'
|
15
|
+
|
16
|
+
class BaseTestApp < Sinatra::Base
|
17
|
+
register Sinatra::Bldr
|
18
|
+
|
19
|
+
set :views, File.expand_path(__FILE__ + '/../..')
|
20
|
+
disable :show_exceptions
|
21
|
+
enable :raise_errors
|
22
|
+
end
|
23
|
+
|
13
24
|
RSpec.configure do |c|
|
14
25
|
def node_wrap(*args, &block)
|
15
26
|
Bldr::Node.new(*args, &block)
|
@@ -35,6 +46,4 @@ RSpec.configure do |c|
|
|
35
46
|
c.after do
|
36
47
|
Bldr.handlers.clear
|
37
48
|
end
|
38
|
-
|
39
|
-
|
40
49
|
end
|
data/spec/unit/bldr_spec.rb
CHANGED
@@ -2,17 +2,17 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe "the json encoding library" do
|
4
4
|
it "uses yajl by default" do
|
5
|
-
MultiJson.engine.should == MultiJson::
|
5
|
+
MultiJson.engine.should == MultiJson::Adapters::Yajl
|
6
6
|
end
|
7
7
|
|
8
8
|
it "allows changing the json encoder to json pure" do
|
9
9
|
Bldr.json_encoder = :json_pure
|
10
|
-
MultiJson.engine.should == MultiJson::
|
10
|
+
MultiJson.engine.should == MultiJson::Adapters::JsonPure
|
11
11
|
end
|
12
12
|
|
13
13
|
it "allows changing the json encoder to the json gem" do
|
14
14
|
Bldr.json_encoder = :json_gem
|
15
|
-
MultiJson.engine.should == MultiJson::
|
15
|
+
MultiJson.engine.should == MultiJson::Adapters::JsonGem
|
16
16
|
end
|
17
17
|
|
18
18
|
end
|
data/spec/unit/node_spec.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bldr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,22 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-04-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: multi_json
|
16
|
-
requirement: &
|
16
|
+
requirement: &70282606563340 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70282606563340
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: json_pure
|
27
|
-
requirement: &
|
27
|
+
requirement: &70282606562140 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70282606562140
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: sinatra
|
38
|
-
requirement: &
|
38
|
+
requirement: &70282606560360 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 1.2.6
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70282606560360
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: tilt
|
49
|
-
requirement: &
|
49
|
+
requirement: &70282606558200 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.3.2
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70282606558200
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: yajl-ruby
|
60
|
-
requirement: &
|
60
|
+
requirement: &70282606557500 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '1.0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70282606557500
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: actionpack
|
71
|
-
requirement: &
|
71
|
+
requirement: &70282606573160 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: 3.0.7
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70282606573160
|
80
80
|
description: Provides a simple and intuitive templating DSL for serializing objects
|
81
81
|
to JSON.
|
82
82
|
email:
|
@@ -105,6 +105,7 @@ files:
|
|
105
105
|
- spec/fixtures/nested_objects.json.bldr
|
106
106
|
- spec/fixtures/partial.json.bldr
|
107
107
|
- spec/fixtures/partial_with_locals.json.bldr
|
108
|
+
- spec/fixtures/root_partial.bldr
|
108
109
|
- spec/fixtures/root_template.json.bldr
|
109
110
|
- spec/fixtures/some/include.json.bldr
|
110
111
|
- spec/functional/handlers_spec.rb
|
@@ -144,6 +145,7 @@ test_files:
|
|
144
145
|
- spec/fixtures/nested_objects.json.bldr
|
145
146
|
- spec/fixtures/partial.json.bldr
|
146
147
|
- spec/fixtures/partial_with_locals.json.bldr
|
148
|
+
- spec/fixtures/root_partial.bldr
|
147
149
|
- spec/fixtures/root_template.json.bldr
|
148
150
|
- spec/fixtures/some/include.json.bldr
|
149
151
|
- spec/functional/handlers_spec.rb
|