birkirb-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} +17 -5
- data/lib/builder/{json.rb → json_format.rb} +1 -3
- data/lib/builder/xml_markup.rb +13 -0
- data/lib/jsonbuilder.rb +3 -3
- data/spec/builder/{hash_spec.rb → hash_structure_spec.rb} +72 -23
- data/spec/builder/{json_spec.rb → json_format_spec.rb} +5 -5
- data/spec/builder/xml_markup_spec.rb +23 -0
- data/spec/spec_helper.rb +3 -8
- 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)
|
|
@@ -35,6 +35,16 @@ module Builder
|
|
|
35
35
|
end
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
+
def root!(key, *attrs, &block)
|
|
39
|
+
@include_root = true
|
|
40
|
+
method_missing(key, *attrs, &block)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def content!(key, default_content_key, *attrs, &block)
|
|
44
|
+
@default_content_key = default_content_key
|
|
45
|
+
method_missing(key, *attrs, &block)
|
|
46
|
+
end
|
|
47
|
+
|
|
38
48
|
def <<(_target)
|
|
39
49
|
if @array_mode
|
|
40
50
|
eval("#{_current} << _target")
|
|
@@ -44,7 +54,9 @@ module Builder
|
|
|
44
54
|
end
|
|
45
55
|
end
|
|
46
56
|
|
|
47
|
-
def text!(text)
|
|
57
|
+
def text!(text, default_content_key = nil)
|
|
58
|
+
@default_content_key = default_content_key unless default_content_key.nil?
|
|
59
|
+
|
|
48
60
|
raise RuntimeError.new("cannot call inside array_mode block") if @array_mode
|
|
49
61
|
if eval("#{_current}").is_a?(::Hash)
|
|
50
62
|
eval("#{_current}.merge!({@default_content_key => text})")
|
|
@@ -61,10 +73,10 @@ module Builder
|
|
|
61
73
|
def method_missing(key, *args, &block)
|
|
62
74
|
key = args.first.is_a?(Symbol) ? "#{key}:#{args.shift}".to_sym : key.to_sym
|
|
63
75
|
args[0] = {@default_content_key => args[0]} if args.size > 1 && !args[0].is_a?(::Hash)
|
|
64
|
-
|
|
65
|
-
_root(key, args, &block)
|
|
66
|
-
else
|
|
76
|
+
if @root
|
|
67
77
|
_child(key, args, &block)
|
|
78
|
+
else
|
|
79
|
+
_root(key, args, &block)
|
|
68
80
|
end
|
|
69
81
|
target!
|
|
70
82
|
end
|
|
@@ -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
|
@@ -1,6 +1,19 @@
|
|
|
1
|
+
require 'builder/xmlmarkup'
|
|
2
|
+
|
|
1
3
|
module Builder
|
|
2
4
|
class XmlMarkup
|
|
3
5
|
|
|
6
|
+
# Rooted element only needed by XML
|
|
7
|
+
def root!(key, *attrs, &block)
|
|
8
|
+
tag!(key, *attrs, &block)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
alias :single_argument_cdata! :cdata!
|
|
12
|
+
|
|
13
|
+
def cdata!(key, default_content_key = nil)
|
|
14
|
+
single_argument_cdata!(key)
|
|
15
|
+
end
|
|
16
|
+
|
|
4
17
|
# Add this no-op
|
|
5
18
|
def array_mode(key = nil, &block)
|
|
6
19
|
yield(self)
|
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"
|
|
@@ -17,8 +17,17 @@ describe Builder::Hash do
|
|
|
17
17
|
builder.target!.should == {:tag => "value"}
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
+
it "should remove the root tag, but keep the attributes" do
|
|
21
|
+
builder = Builder::HashStructure.new
|
|
22
|
+
# XML :: <root><tag>value</tag></root>
|
|
23
|
+
builder.root(:id => 1) do
|
|
24
|
+
builder.tag "value"
|
|
25
|
+
end
|
|
26
|
+
builder.target!.should == {:id => 1, :tag => "value"}
|
|
27
|
+
end
|
|
28
|
+
|
|
20
29
|
it "should not remove the root tag when include_root is true" do
|
|
21
|
-
builder = Builder::
|
|
30
|
+
builder = Builder::HashStructure.new(:include_root => true)
|
|
22
31
|
# XML :: <root><tag>value</tag></root>
|
|
23
32
|
builder.root do
|
|
24
33
|
builder.tag "value"
|
|
@@ -27,7 +36,7 @@ describe Builder::Hash do
|
|
|
27
36
|
end
|
|
28
37
|
|
|
29
38
|
it "should use the default_content_key when both content and attributes exist" do
|
|
30
|
-
builder = Builder::
|
|
39
|
+
builder = Builder::HashStructure.new
|
|
31
40
|
# XML :: <root><tag id="1">value</tag></root>
|
|
32
41
|
builder.root do
|
|
33
42
|
builder.tag("value", :id => 1)
|
|
@@ -35,8 +44,17 @@ describe Builder::Hash do
|
|
|
35
44
|
builder.target!.should == {:tag => {:id => 1, :content => "value"}}
|
|
36
45
|
end
|
|
37
46
|
|
|
47
|
+
it "should use the specified default_content_key when both content and attributes exist" do
|
|
48
|
+
builder = Builder::HashStructure.new(:default_content_key => :text)
|
|
49
|
+
# XML :: <root><tag id="1">value</tag></root>
|
|
50
|
+
builder.root do
|
|
51
|
+
builder.tag("value", :id => 1)
|
|
52
|
+
end
|
|
53
|
+
builder.target!.should == {:tag => {:id => 1, :text => "value"}}
|
|
54
|
+
end
|
|
55
|
+
|
|
38
56
|
it "should use the default_content_key when both cdata! and attributes exist" do
|
|
39
|
-
builder = Builder::
|
|
57
|
+
builder = Builder::HashStructure.new
|
|
40
58
|
# XML :: <root><tag id="1"><![CDATA[value]]></tag></root>
|
|
41
59
|
builder.root do
|
|
42
60
|
builder.tag(:id => 1) do
|
|
@@ -46,26 +64,46 @@ describe Builder::Hash do
|
|
|
46
64
|
builder.target!.should == {:tag => {:id => 1, :content => "value"}}
|
|
47
65
|
end
|
|
48
66
|
|
|
67
|
+
it "should allow the default_content_key to be specified as a second argument to cdata!" do
|
|
68
|
+
builder = Builder::HashStructure.new
|
|
69
|
+
# XML :: <quotes><quote id=\"1\"><![CDATA[All generalizations are false, including this one.]]></quote></quotes>
|
|
70
|
+
builder.quotes do
|
|
71
|
+
builder.quote(:id => 1) do
|
|
72
|
+
builder.cdata!("All generalizations are false, including this one.", :text)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
builder.target!.should == {:quote => {:id => 1, :text => "All generalizations are false, including this one."}}
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it "should use the specified default_content_key when it and content and attributes are specified via the content!" do
|
|
79
|
+
builder = Builder::HashStructure.new
|
|
80
|
+
# XML :: <root><tag id="1">value</tag></root>
|
|
81
|
+
builder.root do
|
|
82
|
+
builder.content!(:tag, :text, "value", :id => 1)
|
|
83
|
+
end
|
|
84
|
+
builder.target!.should == {:tag => {:id => 1, :text => "value"}}
|
|
85
|
+
end
|
|
86
|
+
|
|
49
87
|
end
|
|
50
88
|
|
|
51
|
-
describe Builder::
|
|
89
|
+
describe Builder::HashStructure, "#target!" do
|
|
52
90
|
|
|
53
91
|
it "should return a String when there is only a root value" do
|
|
54
|
-
builder = Builder::
|
|
92
|
+
builder = Builder::HashStructure.new
|
|
55
93
|
builder.root("value")
|
|
56
94
|
builder.target!.should == "value"
|
|
57
95
|
end
|
|
58
96
|
|
|
59
|
-
it "should return a
|
|
60
|
-
builder = Builder::
|
|
97
|
+
it "should return a HashStructure when there is only a root value and include_root option is true" do
|
|
98
|
+
builder = Builder::HashStructure.new(:include_root => true)
|
|
61
99
|
# XML :: <root>value</root>
|
|
62
100
|
builder.root "value"
|
|
63
101
|
builder.target!.should == {:root => "value"}
|
|
64
102
|
end
|
|
65
103
|
|
|
66
104
|
|
|
67
|
-
it "should return a
|
|
68
|
-
builder = Builder::
|
|
105
|
+
it "should return a HashStructure when root has deeper structure" do
|
|
106
|
+
builder = Builder::HashStructure.new
|
|
69
107
|
builder.root do
|
|
70
108
|
builder.item("value")
|
|
71
109
|
end
|
|
@@ -74,10 +112,21 @@ describe Builder::Hash, "#target!" do
|
|
|
74
112
|
|
|
75
113
|
end
|
|
76
114
|
|
|
77
|
-
describe Builder::
|
|
115
|
+
describe Builder::HashStructure, "#root!" do
|
|
116
|
+
|
|
117
|
+
it "should force the root tag" do
|
|
118
|
+
builder = Builder::HashStructure.new
|
|
119
|
+
builder.root!(:root) do
|
|
120
|
+
builder.tag "value"
|
|
121
|
+
end
|
|
122
|
+
builder.target!.should == {:root => {:tag => 'value'}}
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
describe Builder::HashStructure, "#array_mode" do
|
|
78
127
|
|
|
79
128
|
it "should support <<(hash)" do
|
|
80
|
-
builder = Builder::
|
|
129
|
+
builder = Builder::HashStructure.new
|
|
81
130
|
# XML ::
|
|
82
131
|
# <root>
|
|
83
132
|
# <items>
|
|
@@ -93,7 +142,7 @@ describe Builder::Hash, "#array_mode" do
|
|
|
93
142
|
builder.items do
|
|
94
143
|
builder.array_mode do
|
|
95
144
|
2.times do |i|
|
|
96
|
-
_builder = Builder::
|
|
145
|
+
_builder = Builder::HashStructure.new
|
|
97
146
|
builder << _builder.item do
|
|
98
147
|
_builder.text "hello world #{i}"
|
|
99
148
|
end
|
|
@@ -107,7 +156,7 @@ describe Builder::Hash, "#array_mode" do
|
|
|
107
156
|
end
|
|
108
157
|
|
|
109
158
|
it "should generate a new key if needed" do
|
|
110
|
-
builder = Builder::
|
|
159
|
+
builder = Builder::HashStructure.new
|
|
111
160
|
# XML ::
|
|
112
161
|
# <root>
|
|
113
162
|
# <items site="smart.fm">
|
|
@@ -123,7 +172,7 @@ describe Builder::Hash, "#array_mode" do
|
|
|
123
172
|
builder.items(:site => "smart.fm") do
|
|
124
173
|
builder.array_mode do
|
|
125
174
|
2.times do |i|
|
|
126
|
-
_builder = Builder::
|
|
175
|
+
_builder = Builder::HashStructure.new
|
|
127
176
|
builder << _builder.item do
|
|
128
177
|
_builder.text "hello world #{i}"
|
|
129
178
|
end
|
|
@@ -145,7 +194,7 @@ describe Builder::Hash, "#array_mode" do
|
|
|
145
194
|
# <items>
|
|
146
195
|
# </items>
|
|
147
196
|
# </root>
|
|
148
|
-
builder = Builder::
|
|
197
|
+
builder = Builder::HashStructure.new
|
|
149
198
|
builder.root do
|
|
150
199
|
builder.items do
|
|
151
200
|
builder.array_mode do
|
|
@@ -156,7 +205,7 @@ describe Builder::Hash, "#array_mode" do
|
|
|
156
205
|
end
|
|
157
206
|
|
|
158
207
|
it "should raise error if tag methods (method_missing) is used inside block"do
|
|
159
|
-
builder = Builder::
|
|
208
|
+
builder = Builder::HashStructure.new
|
|
160
209
|
builder.root do
|
|
161
210
|
builder.items do
|
|
162
211
|
lambda do
|
|
@@ -176,7 +225,7 @@ describe Builder::Hash, "#array_mode" do
|
|
|
176
225
|
end
|
|
177
226
|
|
|
178
227
|
it "should raise error if tag! is used inside block"do
|
|
179
|
-
builder = Builder::
|
|
228
|
+
builder = Builder::HashStructure.new
|
|
180
229
|
builder.root do
|
|
181
230
|
builder.items do
|
|
182
231
|
lambda do
|
|
@@ -189,7 +238,7 @@ describe Builder::Hash, "#array_mode" do
|
|
|
189
238
|
end
|
|
190
239
|
|
|
191
240
|
it "should raise error if cdata! (or text!) is used inside block"do
|
|
192
|
-
builder = Builder::
|
|
241
|
+
builder = Builder::HashStructure.new
|
|
193
242
|
builder.root do
|
|
194
243
|
builder.items do
|
|
195
244
|
lambda do
|
|
@@ -202,7 +251,7 @@ describe Builder::Hash, "#array_mode" do
|
|
|
202
251
|
end
|
|
203
252
|
|
|
204
253
|
it "should raise error if array_mode is used inside block"do
|
|
205
|
-
builder = Builder::
|
|
254
|
+
builder = Builder::HashStructure.new
|
|
206
255
|
builder.root do
|
|
207
256
|
builder.items do
|
|
208
257
|
lambda do
|
|
@@ -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
|
|
@@ -15,5 +15,28 @@ describe Builder::XmlMarkup, "#array_mode" do
|
|
|
15
15
|
end
|
|
16
16
|
builder.target!.should == builder2.target!
|
|
17
17
|
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
describe Builder::XmlMarkup, "#xml_root!" do
|
|
21
|
+
|
|
22
|
+
it "should create an element as normal" do
|
|
23
|
+
builder = Builder::XmlMarkup.new
|
|
24
|
+
builder.root!("root") do
|
|
25
|
+
builder.tag "value"
|
|
26
|
+
end
|
|
27
|
+
builder.target!.should == "<root><tag>value</tag></root>"
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe Builder::XmlMarkup, "#cdata!" do
|
|
18
32
|
|
|
33
|
+
it "should support a second argument which does nothing" do
|
|
34
|
+
builder = Builder::XmlMarkup.new
|
|
35
|
+
builder.quotes do
|
|
36
|
+
builder.quote(:id => 1) do
|
|
37
|
+
builder.cdata!("All generalizations are false, including this one.", :text)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
builder.target!.should == "<quotes><quote id=\"1\"><![CDATA[All generalizations are false, including this one.]]></quote></quotes>"
|
|
41
|
+
end
|
|
19
42
|
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -1,10 +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'
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: birkirb-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 -07: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
|