bldr 0.1.0 → 0.1.1
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/Gemfile +0 -1
- data/README.md +4 -0
- data/lib/bldr/node.rb +5 -7
- data/lib/bldr/version.rb +1 -1
- data/spec/functional/tilt_template_spec.rb +95 -0
- data/spec/models/person.rb +3 -3
- metadata +57 -65
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -275,6 +275,10 @@ au BufRead,BufNewFile *.bldr set filetype=ruby
|
|
275
275
|
* [RABL](http://github.com/nesquena/rabl) - Inspiration
|
276
276
|
* [Tilt](https://github.com/rtomayko/tilt) - Mega awesome goodness
|
277
277
|
|
278
|
+
## Contributors
|
279
|
+
|
280
|
+
* Ian Hunter (@ihunter)
|
281
|
+
|
278
282
|
## Copyright
|
279
283
|
|
280
284
|
Copyright (c) 2011 Alex Sharp. See the MIT-LICENSE file for full
|
data/lib/bldr/node.rb
CHANGED
@@ -83,18 +83,16 @@ module Bldr
|
|
83
83
|
|
84
84
|
node = Node.new(value, :parent => self, &block)
|
85
85
|
merge_result!(key, node.render!)
|
86
|
-
|
86
|
+
self.to_json
|
87
87
|
end
|
88
88
|
|
89
89
|
def collection(items, &block)
|
90
90
|
key = items.keys.first
|
91
|
-
|
91
|
+
values = items.values.to_a.first
|
92
92
|
|
93
|
-
merge_result!
|
94
|
-
|
95
|
-
|
96
|
-
append_result!(key, node.render!)
|
97
|
-
end
|
93
|
+
merge_result! key, values.map{|item| Node.new(item, :parent => self, &block).render!}
|
94
|
+
|
95
|
+
self.to_json
|
98
96
|
end
|
99
97
|
|
100
98
|
# Add attributes to the result hash in a variety of ways
|
data/lib/bldr/version.rb
CHANGED
@@ -30,4 +30,99 @@ describe "evaluating a tilt template" do
|
|
30
30
|
:person_2 => {:name => 'john'}
|
31
31
|
})
|
32
32
|
end
|
33
|
+
|
34
|
+
describe "root Object nodes" do
|
35
|
+
|
36
|
+
let(:alex) { Person.new('alex', 25) }
|
37
|
+
let(:ian) { Person.new('ian', 32) }
|
38
|
+
|
39
|
+
it "returns json for a blank root object " do
|
40
|
+
tpl = Bldr::Template.new {
|
41
|
+
<<-RUBY
|
42
|
+
object do
|
43
|
+
attribute(:url) {"http://google.com"}
|
44
|
+
end
|
45
|
+
RUBY
|
46
|
+
}
|
47
|
+
result = tpl.render(Bldr::Node.new)
|
48
|
+
result.should == jsonify({'url' => 'http://google.com'})
|
49
|
+
end
|
50
|
+
|
51
|
+
it "returns json for a root object" do
|
52
|
+
tpl = Bldr::Template.new {
|
53
|
+
<<-RUBY
|
54
|
+
object :person => alex do
|
55
|
+
attributes :name, :age
|
56
|
+
end
|
57
|
+
RUBY
|
58
|
+
}
|
59
|
+
result = tpl.render(Bldr::Node.new, :alex => alex, :ian => ian)
|
60
|
+
parse_json(result).should == {'person' => {'name' => 'alex', 'age' => 25}}
|
61
|
+
end
|
62
|
+
|
63
|
+
it "returns json for root object templates with nested collections" do
|
64
|
+
tpl = Bldr::Template.new {
|
65
|
+
<<-RUBY
|
66
|
+
object :person => alex do
|
67
|
+
attributes :name, :age
|
68
|
+
|
69
|
+
collection :friends => friends do
|
70
|
+
attributes :name, :age
|
71
|
+
end
|
72
|
+
end
|
73
|
+
RUBY
|
74
|
+
}
|
75
|
+
result = tpl.render(Bldr::Node.new, :alex => alex, :friends => [ian])
|
76
|
+
parse_json(result).should == {
|
77
|
+
'person'=> {'name' => 'alex', 'age' => 25, 'friends' => [{'name' => 'ian', 'age' => 32}]}
|
78
|
+
}
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
describe "root Collection nodes" do
|
84
|
+
|
85
|
+
let(:alex) { Person.new('alex', 25, [Person.new('bo',33)]) }
|
86
|
+
let(:ian) { Person.new('ian', 32, [Person.new('eric',34)]) }
|
87
|
+
|
88
|
+
it "returns json for a root collection template" do
|
89
|
+
tpl = Bldr::Template.new {
|
90
|
+
<<-RUBY
|
91
|
+
collection :people => people do
|
92
|
+
attributes :name, :age
|
93
|
+
end
|
94
|
+
RUBY
|
95
|
+
}
|
96
|
+
result = tpl.render(Bldr::Node.new, :people => [alex,ian])
|
97
|
+
parse_json(result).should == {
|
98
|
+
'people'=> [{'name' => 'alex', 'age' => 25},{'name' => 'ian', 'age' => 32}]
|
99
|
+
}
|
100
|
+
end
|
101
|
+
|
102
|
+
it "returns json for a root collection with embedded collection template" do
|
103
|
+
tpl = Bldr::Template.new {
|
104
|
+
<<-RUBY
|
105
|
+
collection :people => people do
|
106
|
+
attributes :name, :age
|
107
|
+
collection :friends => current_object.friends do
|
108
|
+
attributes :name, :age
|
109
|
+
end
|
110
|
+
end
|
111
|
+
RUBY
|
112
|
+
}
|
113
|
+
result = tpl.render(Bldr::Node.new, :people => [alex,ian])
|
114
|
+
parse_json(result).should == {
|
115
|
+
'people'=> [{
|
116
|
+
'name' => 'alex',
|
117
|
+
'age' => 25,
|
118
|
+
"friends" => [{"name" => 'bo', "age" => 33}]
|
119
|
+
},{
|
120
|
+
'name' => 'ian',
|
121
|
+
'age' => 32,
|
122
|
+
"friends" => [{"name" => 'eric', "age" => 34}]
|
123
|
+
}]
|
124
|
+
}
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
33
128
|
end
|
data/spec/models/person.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
|
2
2
|
class Person
|
3
3
|
|
4
|
-
attr_accessor :name, :age
|
4
|
+
attr_accessor :name, :age, :friends
|
5
5
|
|
6
|
-
def initialize(name = nil, age = nil)
|
7
|
-
@name, @age = name, age
|
6
|
+
def initialize(name = nil, age = nil, friends = nil)
|
7
|
+
@name, @age, @friends = name, age, friends
|
8
8
|
end
|
9
9
|
end
|
metadata
CHANGED
@@ -1,83 +1,79 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: bldr
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
4
5
|
prerelease:
|
5
|
-
version: 0.1.0
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Alex Sharp
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
dependencies:
|
16
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-09-07 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
17
15
|
name: multi_json
|
18
|
-
|
19
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &2153792500 !ruby/object:Gem::Requirement
|
20
17
|
none: false
|
21
|
-
requirements:
|
18
|
+
requirements:
|
22
19
|
- - ~>
|
23
|
-
- !ruby/object:Gem::Version
|
20
|
+
- !ruby/object:Gem::Version
|
24
21
|
version: 1.0.3
|
25
22
|
type: :runtime
|
26
|
-
version_requirements: *id001
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: json_pure
|
29
23
|
prerelease: false
|
30
|
-
|
24
|
+
version_requirements: *2153792500
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: json_pure
|
27
|
+
requirement: &2153792080 !ruby/object:Gem::Requirement
|
31
28
|
none: false
|
32
|
-
requirements:
|
33
|
-
- -
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
version:
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
36
33
|
type: :development
|
37
|
-
version_requirements: *id002
|
38
|
-
- !ruby/object:Gem::Dependency
|
39
|
-
name: sinatra
|
40
34
|
prerelease: false
|
41
|
-
|
35
|
+
version_requirements: *2153792080
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: sinatra
|
38
|
+
requirement: &2153791540 !ruby/object:Gem::Requirement
|
42
39
|
none: false
|
43
|
-
requirements:
|
40
|
+
requirements:
|
44
41
|
- - ~>
|
45
|
-
- !ruby/object:Gem::Version
|
42
|
+
- !ruby/object:Gem::Version
|
46
43
|
version: 1.2.6
|
47
44
|
type: :development
|
48
|
-
version_requirements: *id003
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
name: tilt
|
51
45
|
prerelease: false
|
52
|
-
|
46
|
+
version_requirements: *2153791540
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: tilt
|
49
|
+
requirement: &2153791040 !ruby/object:Gem::Requirement
|
53
50
|
none: false
|
54
|
-
requirements:
|
51
|
+
requirements:
|
55
52
|
- - ~>
|
56
|
-
- !ruby/object:Gem::Version
|
53
|
+
- !ruby/object:Gem::Version
|
57
54
|
version: 1.3.2
|
58
55
|
type: :development
|
59
|
-
version_requirements: *id004
|
60
|
-
- !ruby/object:Gem::Dependency
|
61
|
-
name: yajl-ruby
|
62
56
|
prerelease: false
|
63
|
-
|
57
|
+
version_requirements: *2153791040
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: yajl-ruby
|
60
|
+
requirement: &2153790660 !ruby/object:Gem::Requirement
|
64
61
|
none: false
|
65
|
-
requirements:
|
66
|
-
- -
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version:
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
69
66
|
type: :development
|
70
|
-
|
71
|
-
|
72
|
-
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *2153790660
|
69
|
+
description: Provides a simple and intuitive templating DSL for serializing objects
|
70
|
+
to JSON.
|
71
|
+
email:
|
73
72
|
- ajsharp@gmail.com
|
74
73
|
executables: []
|
75
|
-
|
76
74
|
extensions: []
|
77
|
-
|
78
75
|
extra_rdoc_files: []
|
79
|
-
|
80
|
-
files:
|
76
|
+
files:
|
81
77
|
- .gitignore
|
82
78
|
- .rvmrc
|
83
79
|
- .travis.yml
|
@@ -102,35 +98,31 @@ files:
|
|
102
98
|
- spec/spec_helper.rb
|
103
99
|
- spec/unit/bldr_spec.rb
|
104
100
|
- spec/unit/node_spec.rb
|
105
|
-
has_rdoc: true
|
106
101
|
homepage: https://github.com/ajsharp/bldr
|
107
102
|
licenses: []
|
108
|
-
|
109
103
|
post_install_message:
|
110
104
|
rdoc_options: []
|
111
|
-
|
112
|
-
require_paths:
|
105
|
+
require_paths:
|
113
106
|
- lib
|
114
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
107
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
115
108
|
none: false
|
116
|
-
requirements:
|
117
|
-
- -
|
118
|
-
- !ruby/object:Gem::Version
|
119
|
-
version:
|
120
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ! '>='
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
113
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
114
|
none: false
|
122
|
-
requirements:
|
123
|
-
- -
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version:
|
115
|
+
requirements:
|
116
|
+
- - ! '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
126
119
|
requirements: []
|
127
|
-
|
128
120
|
rubyforge_project: bldr
|
129
|
-
rubygems_version: 1.6
|
121
|
+
rubygems_version: 1.8.6
|
130
122
|
signing_key:
|
131
123
|
specification_version: 3
|
132
124
|
summary: Templating library with a simple, minimalist DSL.
|
133
|
-
test_files:
|
125
|
+
test_files:
|
134
126
|
- spec/fixtures/nested_objects.json.bldr
|
135
127
|
- spec/fixtures/root_template.json.bldr
|
136
128
|
- spec/functional/tilt_template_spec.rb
|