bldr 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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