birkirb-jsonbuilder 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -34,10 +34,19 @@ RDOC_OPTS = [
34
34
  task :default => [:spec]
35
35
  task :package => [:clean]
36
36
 
37
- Rake::TestTask.new("spec") do |t|
38
- t.libs << "spec"
39
- t.pattern = "spec/**/*_spec.rb"
40
- t.verbose = true
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|
@@ -1,5 +1,4 @@
1
1
  module Builder
2
-
3
2
  class Abstract
4
3
  def nil?
5
4
  false
@@ -1,5 +1,5 @@
1
1
  module Builder
2
- class Hash < Abstract
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
- unless @root
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
@@ -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 = 6
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/hash'
19
+ require 'builder/hash_structure'
20
20
  require 'builder/xml_markup'
21
- require 'builder/json'
21
+ require 'builder/json_format'
@@ -1,15 +1,15 @@
1
1
  require File.join(File.dirname(__FILE__), '..', 'spec_helper')
2
2
 
3
- describe Builder::Hash, ".new" do
3
+ describe Builder::HashStructure, ".new" do
4
4
  it "should be accessible" do
5
- Builder::Hash.should respond_to(:new)
5
+ Builder::HashStructure.should respond_to(:new)
6
6
  end
7
7
  end
8
8
 
9
- describe Builder::Hash do
9
+ describe Builder::HashStructure do
10
10
 
11
11
  it "should remove the root tag" do
12
- builder = Builder::Hash.new
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::Hash.new(:include_root => true)
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::Hash.new
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::Hash.new
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::Hash, "#target!" do
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::Hash.new
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 Hash when there is only a root value and include_root option is true" do
60
- builder = Builder::Hash.new(:include_root => true)
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 Hash when root has deeper structure" do
68
- builder = Builder::Hash.new
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::Hash, "#array_mode" do
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::Hash.new
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::Hash.new
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::Hash.new
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::Hash.new
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::Hash.new
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::Hash.new
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::Hash.new
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::Hash.new
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::Hash.new
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::Json, ".new" do
3
+ describe Builder::JsonFormat, ".new" do
4
4
  it "should be accessible" do
5
- Builder::Hash.should respond_to(:new)
5
+ Builder::JsonFormat.should respond_to(:new)
6
6
  end
7
7
  end
8
8
 
9
- describe Builder::Json, "#target!" do
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::Hash.new
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::Json.new
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
- begin
2
- require 'spec'
3
- rescue LoadError
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.6
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-08 00:00:00 -07:00
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/hash_spec.rb
40
- - spec/builder/json_spec.rb
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/hash.rb
47
- - lib/builder/json.rb
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