jsonbuilder 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,7 @@
1
1
  module Builder
2
2
 
3
3
  class XmlMarkup
4
+ # Do nothing
4
5
  def array_mode(key = nil, &block)
5
6
  yield(self)
6
7
  end
@@ -8,8 +9,6 @@ module Builder
8
9
 
9
10
  class JsonMarkup
10
11
 
11
- attr_accessor :path, :target
12
-
13
12
  def initialize(options = {})
14
13
  # @default_content_key is used in such case: markup.key(value, :attr_key => attr_value)
15
14
  # in this case, we need some key for value.
@@ -26,14 +25,14 @@ module Builder
26
25
  # NOTICE: you have to call this method to use array in json
27
26
  def array_mode(key = nil, &block)
28
27
  @array_mode = true
29
- if eval("#{current}").is_a?(Hash)
28
+ if eval("#{_current}").is_a?(Hash)
30
29
  key ||= :entries
31
- eval("#{current}.merge!(key => [])")
30
+ eval("#{_current}.merge!(key => [])")
32
31
  @path.push(key.to_sym)
33
32
  yield(self)
34
33
  @path.pop
35
34
  else
36
- eval("#{current} = []")
35
+ eval("#{_current} = []")
37
36
  yield(self)
38
37
  end
39
38
  @array_mode = false
@@ -55,18 +54,18 @@ module Builder
55
54
 
56
55
  def <<(_target)
57
56
  if @array_mode
58
- eval("#{current} << _target")
57
+ eval("#{_current} << _target")
59
58
  else
60
- eval("#{current} ||= {}")
61
- eval("#{current}.merge!(_target)")
59
+ eval("#{_current} ||= {}")
60
+ eval("#{_current}.merge!(_target)")
62
61
  end
63
62
  end
64
63
 
65
64
  def text!(text)
66
- if eval("#{current}").is_a?(Hash)
67
- eval("#{current}.merge!({@default_content_key => text})")
65
+ if eval("#{_current}").is_a?(Hash)
66
+ eval("#{_current}.merge!({@default_content_key => text})")
68
67
  else
69
- eval("#{current} = text")
68
+ eval("#{_current} = text")
70
69
  end
71
70
  end
72
71
  alias_method :cdata!, :text!
@@ -79,43 +78,43 @@ module Builder
79
78
  key = args.first.is_a?(Symbol) ? "#{key}:#{args.shift}".to_sym : key.to_sym
80
79
  args[0] = {@default_content_key => args[0]} if args.size > 1 && !args[0].is_a?(Hash)
81
80
  unless @root
82
- root(key, args, &block)
81
+ _root(key, args, &block)
83
82
  else
84
- children(key, args, &block)
83
+ _child(key, args, &block)
85
84
  end
86
85
  target!
87
86
  end
88
87
 
89
88
  private
90
89
 
91
- def root(root, args, &block)
90
+ def _root(root, args, &block)
92
91
  @root = root
93
92
  @target[root] = {}
94
93
  @path = [root]
95
- set_args(args, &block)
94
+ _set_args(args, &block)
96
95
  yield(self) if block_given?
97
96
  end
98
97
 
99
- def children(key, args, &block)
100
- eval("#{current} ||= {}")
98
+ def _child(key, args, &block)
99
+ eval("#{_current} ||= {}")
101
100
  @path.push(key)
102
- set_args(args, &block)
101
+ _set_args(args, &block)
103
102
  @path.pop
104
103
  end
105
104
 
106
- def set_args(args, &block)
105
+ def _set_args(args, &block)
107
106
  args.each do |arg|
108
107
  case arg
109
108
  when Hash
110
109
  self << arg
111
110
  else
112
- eval("#{current} = arg")
111
+ eval("#{_current} = arg")
113
112
  end
114
113
  end
115
114
  yield(self) if block_given?
116
115
  end
117
116
 
118
- def current
117
+ def _current
119
118
  "@target[:\"#{@path.join('"][:"')}\"]"
120
119
  end
121
120
 
@@ -2,7 +2,7 @@ module JsonBuilder
2
2
  module Version
3
3
  MAJOR = 0
4
4
  MINOR = 0
5
- REVISION = 4
5
+ REVISION = 5
6
6
  class << self
7
7
  def to_version
8
8
  "#{MAJOR}.#{MINOR}.#{REVISION}"
@@ -0,0 +1,164 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'spec_helper')
2
+
3
+ describe Builder::JsonMarkup, ".new" do
4
+ it "should be accessible" do
5
+ Builder::JsonMarkup.should respond_to(:new)
6
+ end
7
+ end
8
+
9
+ describe Builder::JsonMarkup do
10
+
11
+ it "should remove root tag" do
12
+ markup = Builder::JsonMarkup.new
13
+ # XML :: <root><tag>value</tag></root>
14
+ markup.root do
15
+ markup.tag "value"
16
+ end
17
+ markup.target!.should == {:tag => "value"}
18
+ end
19
+
20
+ it "should not remove root tag when include_root is true" do
21
+ markup = Builder::JsonMarkup.new(:include_root => true)
22
+ # XML :: <root><tag>value</tag></root>
23
+ markup.root do
24
+ markup.tag "value"
25
+ end
26
+ markup.target!.should == {:root => {:tag => "value"}}
27
+ end
28
+
29
+ it "should use default_content_key when both content and attributes are exist" do
30
+ markup = Builder::JsonMarkup.new
31
+ # XML :: <root><tag id="1">value</tag></root>
32
+ markup.root do
33
+ markup.tag("value", :id => 1)
34
+ end
35
+ markup.target!.should == {:tag => {:id => 1, :content => "value"}}
36
+ end
37
+
38
+ it "should use default_content_key when both cdata! and attributes are exist" do
39
+ markup = Builder::JsonMarkup.new
40
+ # XML :: <root><tag id="1"><![CDATA[value]]></tag></root>
41
+ markup.root do
42
+ markup.tag(:id => 1) do
43
+ markup.cdata! "value"
44
+ end
45
+ end
46
+ markup.target!.should == {:tag => {:id => 1, :content => "value"}}
47
+ end
48
+
49
+ end
50
+
51
+ describe Builder::JsonMarkup, "#array_mode" do
52
+
53
+ it "should support <<" do
54
+ markup = Builder::JsonMarkup.new
55
+ # XML ::
56
+ # <root>
57
+ # <items>
58
+ # <item>
59
+ # <text>hello world 0</text>
60
+ # </item>
61
+ # <item>
62
+ # <text>hello world 1</text>
63
+ # </item>
64
+ # </items>
65
+ # </root>
66
+ markup.root do
67
+ markup.items do
68
+ markup.array_mode do
69
+ 2.times do |i|
70
+ _markup = Builder::JsonMarkup.new
71
+ markup << _markup.item do
72
+ _markup.text "hello world #{i}"
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+ markup.target!.should == {
79
+ :items => [{:text => "hello world 0"}, {:text => "hello world 1"}]
80
+ }
81
+ end
82
+
83
+ it "should generate new key if needed" do
84
+ markup = Builder::JsonMarkup.new
85
+ # XML ::
86
+ # <root>
87
+ # <items site="smart.fm">
88
+ # <item>
89
+ # <text>hello world 0</text>
90
+ # </item>
91
+ # <item>
92
+ # <text>hello world 1</text>
93
+ # </item>
94
+ # </items>
95
+ # </root>
96
+ markup.root do
97
+ markup.items(:site => "smart.fm") do
98
+ markup.array_mode do
99
+ 2.times do |i|
100
+ _markup = Builder::JsonMarkup.new
101
+ markup << _markup.item do
102
+ _markup.text "hello world #{i}"
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end
108
+ markup.target!.should == {
109
+ :items => {
110
+ :entries => [{:text => "hello world 0"}, {:text=>"hello world 1"}],
111
+ :site=>"smart.fm"
112
+ }
113
+ }
114
+ end
115
+
116
+ it "should treat blank block as blank Array" do
117
+ # XML ::
118
+ # <root>
119
+ # <items>
120
+ # </items>
121
+ # </root>
122
+ markup = Builder::JsonMarkup.new
123
+ markup.root do
124
+ markup.items do
125
+ markup.array_mode do
126
+ end
127
+ end
128
+ end
129
+ markup.target!.should == {:items => []}
130
+ end
131
+
132
+ it "should not support all methods except <<"do
133
+ markup = Builder::JsonMarkup.new
134
+ # XML ::
135
+ # <root>
136
+ # <items>
137
+ # <item>
138
+ # <text>hello world 0</text>
139
+ # </item>
140
+ # <item>
141
+ # <text>hello world 1</text>
142
+ # </item>
143
+ # </items>
144
+ # </root>
145
+ succeeded = true
146
+ markup.root do
147
+ markup.items do
148
+ begin
149
+ markup.array_mode do
150
+ 2.times do
151
+ markup.item do
152
+ markup.text "hello world"
153
+ end
154
+ end
155
+ end
156
+ rescue
157
+ succeeded = false
158
+ end
159
+ end
160
+ end
161
+ succeeded.should_not be_true
162
+ end
163
+
164
+ end
@@ -0,0 +1,13 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ describe JsonBuilder::Version, "#to_version" do
4
+ it "should return version in 'X.Y.Z' format" do
5
+ JsonBuilder::Version.to_version.should =~ /\d+\.\d+\.\d+/
6
+ end
7
+ end
8
+
9
+ describe JsonBuilder::Version, "#to_name" do
10
+ it "should return version in 'X_Y_Z' format" do
11
+ JsonBuilder::Version.to_name.should =~ /\d+_\d+_\d+/
12
+ end
13
+ 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
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - nov
@@ -28,6 +28,7 @@ files:
28
28
  - Rakefile
29
29
  - spec/builder
30
30
  - spec/builder/jsonmarkup_spec.rb
31
+ - spec/jsonbuilder_spec.rb
31
32
  - spec/spec_helper.rb
32
33
  - lib/builder
33
34
  - lib/builder/jsonmarkup.rb
@@ -69,5 +70,5 @@ rubygems_version: 1.3.1
69
70
  signing_key:
70
71
  specification_version: 2
71
72
  summary: Builder::XmlMarkup like JsonBuilder (Builder::JsonMarkup)
72
- test_files: []
73
-
73
+ test_files:
74
+ - spec/jsonbuilder_spec.rb