jsonbuilder 0.0.6 → 0.0.7
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/Rakefile +13 -4
- data/lib/builder/abstract.rb +0 -1
- data/lib/builder/{hash.rb → hash_structure.rb} +3 -1
- data/lib/builder/{json.rb → json_format.rb} +1 -3
- data/lib/builder/xml_markup.rb +2 -0
- data/lib/jsonbuilder.rb +3 -3
- data/spec/builder/{hash_spec.rb → hash_structure_spec.rb} +79 -43
- data/spec/builder/{json_spec.rb → json_format_spec.rb} +5 -5
- data/spec/spec_helper.rb +3 -17
- metadata +6 -6
data/Rakefile
CHANGED
@@ -34,10 +34,19 @@ RDOC_OPTS = [
|
|
34
34
|
task :default => [:spec]
|
35
35
|
task :package => [:clean]
|
36
36
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
37
|
+
begin
|
38
|
+
require 'spec/rake/spectask'
|
39
|
+
|
40
|
+
Spec::Rake::SpecTask.new('spec') do |t|
|
41
|
+
t.spec_opts = ["-f specdoc", "-c"]
|
42
|
+
t.spec_files = FileList['spec/*_spec.rb', 'spec/builder/*_spec.rb']
|
43
|
+
end
|
44
|
+
|
45
|
+
rescue LoadError
|
46
|
+
desc 'Spec rake task not available'
|
47
|
+
task :spec do
|
48
|
+
abort 'Spec rake task is not available. Be sure to install rspec as a gem or plugin'
|
49
|
+
end
|
41
50
|
end
|
42
51
|
|
43
52
|
spec = Gem::Specification.new do |s|
|
data/lib/builder/abstract.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Builder
|
2
|
-
class
|
2
|
+
class HashStructure < Abstract
|
3
3
|
|
4
4
|
def initialize(options = {})
|
5
5
|
# @default_content_key is used in such case: markup.key(value, :attr_key => attr_value)
|
@@ -12,6 +12,7 @@ module Builder
|
|
12
12
|
|
13
13
|
# NOTICE: you have to call this method to use array in json
|
14
14
|
def array_mode(key = nil, &block)
|
15
|
+
raise RuntimeError.new("cannot call inside array_mode block") if @array_mode
|
15
16
|
@array_mode = true
|
16
17
|
if eval("#{_current}").is_a?(::Hash)
|
17
18
|
key ||= :entry
|
@@ -44,6 +45,7 @@ module Builder
|
|
44
45
|
end
|
45
46
|
|
46
47
|
def text!(text)
|
48
|
+
raise RuntimeError.new("cannot call inside array_mode block") if @array_mode
|
47
49
|
if eval("#{_current}").is_a?(::Hash)
|
48
50
|
eval("#{_current}.merge!({@default_content_key => text})")
|
49
51
|
else
|
@@ -1,8 +1,7 @@
|
|
1
1
|
require 'json'
|
2
2
|
|
3
3
|
module Builder
|
4
|
-
|
5
|
-
class Json < Hash
|
4
|
+
class JsonFormat < HashStructure
|
6
5
|
|
7
6
|
def initialize(options = {})
|
8
7
|
# @default_content_key is used in such case: markup.key(value, :attr_key => attr_value)
|
@@ -21,5 +20,4 @@ module Builder
|
|
21
20
|
end
|
22
21
|
end
|
23
22
|
end
|
24
|
-
|
25
23
|
end
|
data/lib/builder/xml_markup.rb
CHANGED
data/lib/jsonbuilder.rb
CHANGED
@@ -2,7 +2,7 @@ module JsonBuilder
|
|
2
2
|
module Version
|
3
3
|
MAJOR = 0
|
4
4
|
MINOR = 0
|
5
|
-
REVISION =
|
5
|
+
REVISION = 7
|
6
6
|
class << self
|
7
7
|
def to_version
|
8
8
|
"#{MAJOR}.#{MINOR}.#{REVISION}"
|
@@ -16,6 +16,6 @@ module JsonBuilder
|
|
16
16
|
end
|
17
17
|
|
18
18
|
require 'builder/abstract'
|
19
|
-
require 'builder/
|
19
|
+
require 'builder/hash_structure'
|
20
20
|
require 'builder/xml_markup'
|
21
|
-
require 'builder/
|
21
|
+
require 'builder/json_format'
|
@@ -1,15 +1,15 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
2
2
|
|
3
|
-
describe Builder::
|
3
|
+
describe Builder::HashStructure, ".new" do
|
4
4
|
it "should be accessible" do
|
5
|
-
Builder::
|
5
|
+
Builder::HashStructure.should respond_to(:new)
|
6
6
|
end
|
7
7
|
end
|
8
8
|
|
9
|
-
describe Builder::
|
9
|
+
describe Builder::HashStructure do
|
10
10
|
|
11
11
|
it "should remove the root tag" do
|
12
|
-
builder = Builder::
|
12
|
+
builder = Builder::HashStructure.new
|
13
13
|
# XML :: <root><tag>value</tag></root>
|
14
14
|
builder.root do
|
15
15
|
builder.tag "value"
|
@@ -18,7 +18,7 @@ describe Builder::Hash do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
it "should not remove the root tag when include_root is true" do
|
21
|
-
builder = Builder::
|
21
|
+
builder = Builder::HashStructure.new(:include_root => true)
|
22
22
|
# XML :: <root><tag>value</tag></root>
|
23
23
|
builder.root do
|
24
24
|
builder.tag "value"
|
@@ -27,7 +27,7 @@ describe Builder::Hash do
|
|
27
27
|
end
|
28
28
|
|
29
29
|
it "should use the default_content_key when both content and attributes exist" do
|
30
|
-
builder = Builder::
|
30
|
+
builder = Builder::HashStructure.new
|
31
31
|
# XML :: <root><tag id="1">value</tag></root>
|
32
32
|
builder.root do
|
33
33
|
builder.tag("value", :id => 1)
|
@@ -36,7 +36,7 @@ describe Builder::Hash do
|
|
36
36
|
end
|
37
37
|
|
38
38
|
it "should use the default_content_key when both cdata! and attributes exist" do
|
39
|
-
builder = Builder::
|
39
|
+
builder = Builder::HashStructure.new
|
40
40
|
# XML :: <root><tag id="1"><![CDATA[value]]></tag></root>
|
41
41
|
builder.root do
|
42
42
|
builder.tag(:id => 1) do
|
@@ -48,28 +48,36 @@ describe Builder::Hash do
|
|
48
48
|
|
49
49
|
end
|
50
50
|
|
51
|
-
describe Builder::
|
51
|
+
describe Builder::HashStructure, "#target!" do
|
52
52
|
|
53
53
|
it "should return a String when there is only a root value" do
|
54
|
-
builder = Builder::
|
54
|
+
builder = Builder::HashStructure.new
|
55
55
|
builder.root("value")
|
56
|
-
builder.target!.should
|
56
|
+
builder.target!.should == "value"
|
57
57
|
end
|
58
58
|
|
59
|
-
it "should return
|
60
|
-
builder = Builder::
|
59
|
+
it "should return a HashStructure when there is only a root value and include_root option is true" do
|
60
|
+
builder = Builder::HashStructure.new(:include_root => true)
|
61
|
+
# XML :: <root>value</root>
|
62
|
+
builder.root "value"
|
63
|
+
builder.target!.should == {:root => "value"}
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
it "should return a HashStructure when root has deeper structure" do
|
68
|
+
builder = Builder::HashStructure.new
|
61
69
|
builder.root do
|
62
70
|
builder.item("value")
|
63
71
|
end
|
64
|
-
builder.target!.should
|
72
|
+
builder.target!.should == {:item => 'value'}
|
65
73
|
end
|
66
74
|
|
67
75
|
end
|
68
76
|
|
69
|
-
describe Builder::
|
77
|
+
describe Builder::HashStructure, "#array_mode" do
|
70
78
|
|
71
|
-
it "should support <<" do
|
72
|
-
builder = Builder::
|
79
|
+
it "should support <<(hash)" do
|
80
|
+
builder = Builder::HashStructure.new
|
73
81
|
# XML ::
|
74
82
|
# <root>
|
75
83
|
# <items>
|
@@ -85,7 +93,7 @@ describe Builder::Hash, "#array_mode" do
|
|
85
93
|
builder.items do
|
86
94
|
builder.array_mode do
|
87
95
|
2.times do |i|
|
88
|
-
_builder = Builder::
|
96
|
+
_builder = Builder::HashStructure.new
|
89
97
|
builder << _builder.item do
|
90
98
|
_builder.text "hello world #{i}"
|
91
99
|
end
|
@@ -99,7 +107,7 @@ describe Builder::Hash, "#array_mode" do
|
|
99
107
|
end
|
100
108
|
|
101
109
|
it "should generate a new key if needed" do
|
102
|
-
builder = Builder::
|
110
|
+
builder = Builder::HashStructure.new
|
103
111
|
# XML ::
|
104
112
|
# <root>
|
105
113
|
# <items site="smart.fm">
|
@@ -115,7 +123,7 @@ describe Builder::Hash, "#array_mode" do
|
|
115
123
|
builder.items(:site => "smart.fm") do
|
116
124
|
builder.array_mode do
|
117
125
|
2.times do |i|
|
118
|
-
_builder = Builder::
|
126
|
+
_builder = Builder::HashStructure.new
|
119
127
|
builder << _builder.item do
|
120
128
|
_builder.text "hello world #{i}"
|
121
129
|
end
|
@@ -137,7 +145,7 @@ describe Builder::Hash, "#array_mode" do
|
|
137
145
|
# <items>
|
138
146
|
# </items>
|
139
147
|
# </root>
|
140
|
-
builder = Builder::
|
148
|
+
builder = Builder::HashStructure.new
|
141
149
|
builder.root do
|
142
150
|
builder.items do
|
143
151
|
builder.array_mode do
|
@@ -147,36 +155,64 @@ describe Builder::Hash, "#array_mode" do
|
|
147
155
|
builder.target!.should == {:items => []}
|
148
156
|
end
|
149
157
|
|
150
|
-
it "should
|
151
|
-
builder = Builder::
|
152
|
-
# XML ::
|
153
|
-
# <root>
|
154
|
-
# <items>
|
155
|
-
# <item>
|
156
|
-
# <text>hello world 0</text>
|
157
|
-
# </item>
|
158
|
-
# <item>
|
159
|
-
# <text>hello world 1</text>
|
160
|
-
# </item>
|
161
|
-
# </items>
|
162
|
-
# </root>
|
163
|
-
succeeded = true
|
158
|
+
it "should raise error if tag methods (method_missing) is used inside block"do
|
159
|
+
builder = Builder::HashStructure.new
|
164
160
|
builder.root do
|
165
161
|
builder.items do
|
166
|
-
|
162
|
+
lambda do
|
163
|
+
builder.array_mode do
|
164
|
+
builder.item("hello world")
|
165
|
+
end
|
166
|
+
end.should raise_error
|
167
|
+
lambda do
|
167
168
|
builder.array_mode do
|
168
|
-
|
169
|
-
builder.
|
170
|
-
builder.text "hello world"
|
171
|
-
end
|
169
|
+
builder.item do
|
170
|
+
builder.text("hello world")
|
172
171
|
end
|
173
172
|
end
|
174
|
-
|
175
|
-
|
176
|
-
|
173
|
+
end.should raise_error
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
it "should raise error if tag! is used inside block"do
|
179
|
+
builder = Builder::HashStructure.new
|
180
|
+
builder.root do
|
181
|
+
builder.items do
|
182
|
+
lambda do
|
183
|
+
builder.array_mode do
|
184
|
+
builder.tag!("item", "item1")
|
185
|
+
end
|
186
|
+
end.should raise_error
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
it "should raise error if cdata! (or text!) is used inside block"do
|
192
|
+
builder = Builder::HashStructure.new
|
193
|
+
builder.root do
|
194
|
+
builder.items do
|
195
|
+
lambda do
|
196
|
+
builder.array_mode do
|
197
|
+
builder.cdata!("text")
|
198
|
+
end
|
199
|
+
end.should raise_error
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
it "should raise error if array_mode is used inside block"do
|
205
|
+
builder = Builder::HashStructure.new
|
206
|
+
builder.root do
|
207
|
+
builder.items do
|
208
|
+
lambda do
|
209
|
+
builder.array_mode do
|
210
|
+
builder.array_mode do
|
211
|
+
end
|
212
|
+
end
|
213
|
+
end.should raise_error
|
177
214
|
end
|
178
215
|
end
|
179
|
-
succeeded.should_not be_true
|
180
216
|
end
|
181
217
|
|
182
218
|
end
|
@@ -1,21 +1,21 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
2
2
|
|
3
|
-
describe Builder::
|
3
|
+
describe Builder::JsonFormat, ".new" do
|
4
4
|
it "should be accessible" do
|
5
|
-
Builder::
|
5
|
+
Builder::JsonFormat.should respond_to(:new)
|
6
6
|
end
|
7
7
|
end
|
8
8
|
|
9
|
-
describe Builder::
|
9
|
+
describe Builder::JsonFormat, "#target!" do
|
10
10
|
|
11
11
|
it "should return a String when there is only a root value" do
|
12
|
-
builder = Builder::
|
12
|
+
builder = Builder::JsonFormat.new
|
13
13
|
builder.root("value")
|
14
14
|
builder.target!.should be_a(String)
|
15
15
|
end
|
16
16
|
|
17
17
|
it "should return a JSON string when root has deeper structure" do
|
18
|
-
builder = Builder::
|
18
|
+
builder = Builder::JsonFormat.new
|
19
19
|
builder.root do
|
20
20
|
builder.item("value")
|
21
21
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,19 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
require 'rubygems'
|
5
|
-
gem 'rspec'
|
6
|
-
require 'spec'
|
7
|
-
end
|
1
|
+
require 'rubygems'
|
2
|
+
require 'spec'
|
3
|
+
|
8
4
|
$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), "..", "lib")))
|
9
|
-
require 'builder'
|
10
5
|
require 'jsonbuilder'
|
11
|
-
|
12
|
-
def be_a(klass)
|
13
|
-
be_is_a(klass)
|
14
|
-
end
|
15
|
-
|
16
|
-
def rand_string(length = 100)
|
17
|
-
chars = ('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a
|
18
|
-
Array.new(length){ chars[rand(chars.size)] }.join
|
19
|
-
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jsonbuilder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- nov
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-06-
|
12
|
+
date: 2009-06-11 00:00:00 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -36,15 +36,15 @@ files:
|
|
36
36
|
- ChangeLog
|
37
37
|
- Rakefile
|
38
38
|
- spec/builder
|
39
|
-
- spec/builder/
|
40
|
-
- spec/builder/
|
39
|
+
- spec/builder/hash_structure_spec.rb
|
40
|
+
- spec/builder/json_format_spec.rb
|
41
41
|
- spec/builder/xml_markup_spec.rb
|
42
42
|
- spec/jsonbuilder_spec.rb
|
43
43
|
- spec/spec_helper.rb
|
44
44
|
- lib/builder
|
45
45
|
- lib/builder/abstract.rb
|
46
|
-
- lib/builder/
|
47
|
-
- lib/builder/
|
46
|
+
- lib/builder/hash_structure.rb
|
47
|
+
- lib/builder/json_format.rb
|
48
48
|
- lib/builder/xml_markup.rb
|
49
49
|
- lib/jsonbuilder.rb
|
50
50
|
has_rdoc: true
|