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 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