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 CHANGED
@@ -5,6 +5,5 @@ gemspec
5
5
  gem "rake"
6
6
 
7
7
  group :test do
8
- gem 'autotest'
9
8
  gem "rspec", ">= 2.6.0"
10
9
  end
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
- node.parent.to_json
86
+ self.to_json
87
87
  end
88
88
 
89
89
  def collection(items, &block)
90
90
  key = items.keys.first
91
- items = items.values.first
91
+ values = items.values.to_a.first
92
92
 
93
- merge_result!(key, [])
94
- items.each do |item|
95
- node = Node.new(item, :parent => self, &block)
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
@@ -1,4 +1,4 @@
1
1
 
2
2
  module Bldr
3
- VERSION = '0.1.0'
3
+ VERSION = '0.1.1'
4
4
  end
@@ -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
@@ -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
- date: 2011-08-04 00:00:00 -07:00
14
- default_executable:
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
- prerelease: false
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
- requirement: &id002 !ruby/object:Gem::Requirement
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: "0"
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
- requirement: &id003 !ruby/object:Gem::Requirement
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
- requirement: &id004 !ruby/object:Gem::Requirement
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
- requirement: &id005 !ruby/object:Gem::Requirement
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: "0"
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
69
66
  type: :development
70
- version_requirements: *id005
71
- description: Provides a simple and intuitive templating DSL for serializing objects to JSON.
72
- email:
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: "0"
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: "0"
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.2
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