json2ruby 0.1.0

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.
@@ -0,0 +1,63 @@
1
+ require 'digest/md5'
2
+
3
+ module JSON2Ruby
4
+ class Collection
5
+ attr_accessor :name, :original_name, :ruby_types
6
+
7
+ def self.short_name
8
+ "Collection"
9
+ end
10
+
11
+ def initialize(name, ruby_types = {})
12
+ @name = name
13
+ @ruby_types = ruby_types
14
+ end
15
+
16
+ def self.parse_from(name, obj_array, options = {})
17
+ ob = self.new(name)
18
+ obj_array.each do |v|
19
+ if v.kind_of?(Array)
20
+ arr = Collection.parse_from(Entity.get_next_unknown, v, options)
21
+ ob.ruby_types[arr.attr_hash] = arr
22
+ elsif v.kind_of?(String)
23
+ ob.ruby_types[RUBYSTRING.attr_hash] = RUBYSTRING
24
+ elsif v.kind_of?(Integer) && !options[:forcenumeric]
25
+ ob.ruby_types[RUBYINTEGER.attr_hash] = RUBYINTEGER
26
+ elsif v.kind_of?(Float) && !options[:forcenumeric]
27
+ ob.ruby_types[RUBYFLOAT.attr_hash] = RUBYFLOAT
28
+ elsif (v.kind_of?(Float) || v.kind_of?(Integer)) && options[:forcenumeric]
29
+ ob.ruby_types[RUBYNUMERIC.attr_hash] = RUBYNUMERIC
30
+ elsif !!v==v
31
+ ob.ruby_types[RUBYBOOLEAN.attr_hash] = RUBYBOOLEAN
32
+ elsif v.kind_of?(Hash)
33
+ ent = Entity.parse_from(Entity.get_next_unknown, v, options)
34
+ ob.ruby_types[ent.attr_hash] = ent
35
+ end
36
+ end
37
+
38
+ x = ob.attr_hash
39
+ return Entity.entities[x] if Entity.entities.has_key?(x)
40
+ Entity.entities[x] = ob
41
+ ob
42
+ end
43
+
44
+ def attr_hash
45
+ md5 = Digest::MD5.new
46
+ @ruby_types.each do |k,typ|
47
+ md5.update typ.attr_hash
48
+ end
49
+ md5.hexdigest
50
+ end
51
+
52
+ def ==(other)
53
+ return false if other.class != self.class
54
+ attr_hash == other.attr_hash
55
+ end
56
+
57
+ def comment
58
+ x = "#{@name}[]"
59
+ x += " (#{@original_name})" unless @original_name.nil?
60
+ x
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,91 @@
1
+ require 'digest/md5'
2
+
3
+ module JSON2Ruby
4
+
5
+ class Entity
6
+ attr_accessor :name, :original_name, :attributes
7
+
8
+ def self.short_name
9
+ "Entity"
10
+ end
11
+
12
+ def initialize(name, attributes = {})
13
+ @name = name
14
+ @attributes = attributes
15
+ end
16
+
17
+ def attr_hash
18
+ md5 = Digest::MD5.new
19
+ @attributes.each do |k,v|
20
+ md5.update "#{k}:#{v.attr_hash}"
21
+ end
22
+ md5.hexdigest
23
+ end
24
+
25
+ def ==(other)
26
+ return false if other.class != self.class
27
+ attr_hash == other.attr_hash
28
+ end
29
+
30
+ def self.reset_parse
31
+ @@objs = {
32
+ RUBYSTRING.attr_hash => RUBYSTRING,
33
+ RUBYINTEGER.attr_hash => RUBYINTEGER,
34
+ RUBYFLOAT.attr_hash => RUBYFLOAT,
35
+ RUBYBOOLEAN.attr_hash => RUBYBOOLEAN,
36
+ RUBYNUMERIC.attr_hash => RUBYNUMERIC,
37
+ }
38
+ @@unknowncount = 0
39
+ end
40
+
41
+ def self.parse_from(name, obj_hash, options = {})
42
+ ob = self.new(name)
43
+ obj_hash.each do |k,v|
44
+
45
+ orig = k
46
+ k = k.gsub(/[^A-Za-z0-9_]/, "_")
47
+
48
+ if v.kind_of?(Array)
49
+ att = Collection.parse_from(k, v, options)
50
+ elsif v.kind_of?(String)
51
+ att = RUBYSTRING
52
+ elsif v.kind_of?(Integer) && !options[:forcenumeric]
53
+ att = RUBYINTEGER
54
+ elsif v.kind_of?(Float) && !options[:forcenumeric]
55
+ att = RUBYFLOAT
56
+ elsif (v.kind_of?(Integer) || v.kind_of?(Float)) && options[:forcenumeric]
57
+ att = RUBYNUMERIC
58
+ elsif !!v==v
59
+ att = RUBYBOOLEAN
60
+ elsif v.kind_of?(Hash)
61
+ att = self.parse_from(k, v, options)
62
+ end
63
+ att.original_name = orig if orig != k
64
+ ob.attributes[k] = att
65
+ end
66
+
67
+ x = ob.attr_hash
68
+ return @@objs[x] if @@objs.has_key?(x)
69
+ @@objs[x] = ob
70
+ ob
71
+ end
72
+
73
+ def self.entities
74
+ @@objs
75
+ end
76
+
77
+ def self.get_next_unknown
78
+ @@unknowncount ||= 0
79
+ @@unknowncount += 1
80
+ "Unknown#{@@unknowncount}"
81
+ end
82
+
83
+ def comment
84
+ x = @name
85
+ x += " (#{@original_name})" unless @original_name.nil?
86
+ x
87
+ end
88
+
89
+ reset_parse
90
+ end
91
+ end
@@ -0,0 +1,34 @@
1
+ module JSON2Ruby
2
+
3
+ class Primitive
4
+ attr_accessor :name, :original_name, :attr_hash
5
+
6
+ def self.short_name
7
+ "Primitive"
8
+ end
9
+
10
+ def initialize(name, attr_hash)
11
+ @name = name
12
+ @attr_hash = attr_hash
13
+ end
14
+
15
+ def attr_hash
16
+ @attr_hash
17
+ end
18
+
19
+ def comment
20
+ @name
21
+ end
22
+ end
23
+
24
+ # Primitive Representing a Ruby String
25
+ RUBYSTRING = Primitive.new("String","0123456789ABCDEF0123456789ABCDEF")
26
+ # Primitive Representing a Ruby Integer
27
+ RUBYINTEGER = Primitive.new("Integer","0123456789ABCDEF0123456789ABCDE0")
28
+ # Primitive Representing a Ruby Float
29
+ RUBYFLOAT = Primitive.new("Float","0123456789ABCDEF0123456789ABCDE1")
30
+ # Primitive Representing a Ruby Boolean
31
+ RUBYBOOLEAN = Primitive.new("Boolean","0123456789ABCDEF0123456789ABCDE2")
32
+ # Psuedo-Primitive Representing a Numeric
33
+ RUBYNUMERIC = Primitive.new("Numeric","0123456789ABCDEF0123456789ABCDE2")
34
+ end
@@ -0,0 +1,50 @@
1
+ require 'digest/md5'
2
+ require 'json'
3
+ require 'optparse'
4
+
5
+ module JSON2Ruby
6
+ class RubyWriter
7
+ def self.to_code(entity, indent = 0, options = {})
8
+ x = ""
9
+ if options.has_key?(:require)
10
+ options[:require].each { |r| x += "require '#{r}'\r\n" }
11
+ x += "\r\n"
12
+ end
13
+ idt = (' '*indent)
14
+ x += "#{(' '*indent)}#{options[:modules] ? "module" : "class"} #{entity.name}"
15
+ x += " < #{options[:superclass_name]}" if options.has_key?(:superclass_name)
16
+ x += "\r\n"
17
+ if options.has_key?(:extend)
18
+ options[:extend].each { |r| x += "#{(' '*(indent+2))}extend #{r}\r\n" }
19
+ x += "\r\n"
20
+ end
21
+ if options.has_key?(:include)
22
+ options[:include].each { |r| x += "#{(' '*(indent+2))}include #{r}\r\n" }
23
+ x += "\r\n"
24
+ end
25
+ x += attributes_to_ruby(entity, indent+2, options)
26
+ x += "#{(' '*indent)}end\r\n"
27
+ x
28
+ end
29
+
30
+ def self.attributes_to_ruby(entity, indent, options = {})
31
+ ident = (' '*indent)
32
+ x = ""
33
+ entity.attributes.each do |k,v|
34
+ if (v.is_a?(Collection))
35
+ x += "#{ident}#{options[:collectionmethod]} :#{k}"
36
+ else
37
+ x += "#{ident}#{options[:attributemethod]} :#{k}"
38
+ end
39
+ if options[:includetypes]
40
+ unless v.is_a?(Primitive)
41
+ name = !options[:namespace].nil? && options[:namespace]!="" ? (options[:namespace]+"::"+v.name) : v.name
42
+ x += ", '#{name}'"
43
+ end
44
+ end
45
+ x += " # #{v.comment}\r\n"
46
+ end
47
+ x
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,3 @@
1
+ module JSON2Ruby
2
+ VERSION = '0.1.0'
3
+ end
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+
3
+ describe JSON2Ruby::Attribute do
4
+ describe '#initialize' do
5
+ it 'should set up correct attrs' do
6
+ x = JSON2Ruby::Attribute.new('hello','world')
7
+ expect(x.name).to eq("hello")
8
+ expect(x.ruby_type).to eq("world")
9
+ end
10
+
11
+ it 'should have correct defaults' do
12
+ x = JSON2Ruby::Attribute.new('hello')
13
+ expect(x.name).to eq("hello")
14
+ expect(x.ruby_type).to eq("_unknown")
15
+ end
16
+ end
17
+
18
+ describe '#short_name' do
19
+ it 'should have the correct short name' do
20
+ expect(JSON2Ruby::Attribute.short_name).to eq('Attribute')
21
+ end
22
+ end
23
+
24
+ describe '#attr_hash' do
25
+ it 'should return correct hash' do
26
+ x = JSON2Ruby::Attribute.new('hello','world')
27
+ expect(x.attr_hash).to eq("6de41d334b7ce946682da48776a10bb9")
28
+ x = JSON2Ruby::Attribute.new('foo','bar')
29
+ expect(x.attr_hash).to eq("4e99e8c12de7e01535248d2bac85e732")
30
+ x = JSON2Ruby::Attribute.new('hello','bar')
31
+ expect(x.attr_hash).to eq("4b8ef9a9e864fb4035c8e45d41b085f7")
32
+ x = JSON2Ruby::Attribute.new('foo','world')
33
+ expect(x.attr_hash).to eq("b4738da083596d81a33ec6aabba9460b")
34
+ end
35
+ end
36
+
37
+ describe '#==' do
38
+ it 'should return false if class mismatch' do
39
+ x = JSON2Ruby::Attribute.new('hello','world')
40
+
41
+ expect(x=={}).to be(false)
42
+ expect(x==[]).to be(false)
43
+ expect(x==1).to be(false)
44
+ expect(x=="hello").to be(false)
45
+ expect(x==nil).to be(false)
46
+ end
47
+
48
+ it 'should return true if and only if attr_hash matches' do
49
+ x = JSON2Ruby::Attribute.new('hello','world')
50
+ y = JSON2Ruby::Attribute.new('foo','bar')
51
+ z = JSON2Ruby::Attribute.new('hello','world')
52
+
53
+ expect(x==x).to be(true)
54
+ expect(x==y).to be(false)
55
+ expect(x==z).to be(true)
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,310 @@
1
+ require 'spec_helper'
2
+
3
+ describe JSON2Ruby::CLI do
4
+
5
+ describe '#run' do
6
+ it 'should call in correct order' do
7
+ options = { :one => 1, :outputdir => File.dirname(__FILE__) }
8
+
9
+ expect(JSON2Ruby::CLI).to receive(:puts).with("json2ruby v#{JSON2Ruby::VERSION}\n")
10
+ expect(JSON2Ruby::CLI).to receive(:get_cli_options).and_return(options)
11
+ expect(JSON2Ruby::CLI).to receive(:ensure_output_dir).with(options)
12
+ expect(JSON2Ruby::CLI).to receive(:parse_files).with(options).and_return("rootclasses")
13
+ expect(JSON2Ruby::CLI).to receive(:write_files).with("rootclasses",JSON2Ruby::RubyWriter,options)
14
+
15
+ JSON2Ruby::CLI.run
16
+ end
17
+ end
18
+
19
+ describe '#ensure_output_dir' do
20
+ it 'should check dir and create if necessary' do
21
+ dir = File.dirname(__FILE__)
22
+ options = { :one => 1, :outputdir => dir }
23
+
24
+ expect(Dir).to receive(:exists?).with(dir).and_return(false)
25
+ expect(Dir).to receive(:mkdir).with(dir)
26
+
27
+ expect(JSON2Ruby::CLI).not_to receive(:puts)
28
+
29
+ JSON2Ruby::CLI.ensure_output_dir(options)
30
+ end
31
+
32
+ it 'should not create dir if exists' do
33
+ dir = File.dirname(__FILE__)
34
+ options = { :one => 1, :outputdir => dir }
35
+
36
+ expect(Dir).to receive(:exists?).with(dir).and_return(true)
37
+ expect(Dir).not_to receive(:mkdir)
38
+
39
+ JSON2Ruby::CLI.ensure_output_dir(options)
40
+ end
41
+
42
+ it 'should be verbose if option set' do
43
+ dir = File.dirname(__FILE__)
44
+ options = { :one => 1, :outputdir => dir, :verbose =>true }
45
+
46
+ expect(Dir).to receive(:exists?).with(dir).and_return(false)
47
+ expect(Dir).to receive(:mkdir).with(dir)
48
+
49
+ expect(JSON2Ruby::CLI).to receive(:puts).with("Output Directory: #{dir}")
50
+ expect(JSON2Ruby::CLI).to receive(:puts).with("Creating Output Directory...")
51
+
52
+ JSON2Ruby::CLI.ensure_output_dir(options)
53
+ end
54
+ end
55
+
56
+ describe '#get_cli_options' do
57
+
58
+ it 'should have correct defaults' do
59
+ ARGV = []
60
+ expect(JSON2Ruby::CLI.get_cli_options).to eq({
61
+ :outputdir=> File.expand_path("../classes",File.dirname(__FILE__)),
62
+ :namespace=>"",
63
+ :attributemethod=>"attr_accessor",
64
+ :collectionmethod=>"attr_accessor",
65
+ :includetypes=>false,
66
+ :baseless=>false,
67
+ :forceoverwrite=>false,
68
+ :verbose=>false,
69
+ :modulenames=>[]
70
+ })
71
+ end
72
+
73
+ it 'should parse -o' do
74
+ ARGV=["-o","test"]
75
+ options = JSON2Ruby::CLI.get_cli_options
76
+ expect(options[:outputdir]).to eq("test")
77
+ end
78
+
79
+ it 'should parse -n' do
80
+ ARGV=["-n","TEST::TEST2"]
81
+ options = JSON2Ruby::CLI.get_cli_options
82
+ expect(options[:namespace]).to eq("TEST::TEST2")
83
+ end
84
+
85
+ it 'should parse -s' do
86
+ ARGV=["-s","TEST"]
87
+ options = JSON2Ruby::CLI.get_cli_options
88
+ expect(options[:superclass_name]).to eq("TEST")
89
+ end
90
+
91
+ it 'should parse -r' do
92
+ ARGV=["-r","json/test"]
93
+ options = JSON2Ruby::CLI.get_cli_options
94
+ expect(options[:require]).to eq(["json/test"])
95
+ end
96
+
97
+ it 'should parse multiple -r' do
98
+ ARGV=["-r","json/test","-r","onetwo"]
99
+ options = JSON2Ruby::CLI.get_cli_options
100
+ expect(options[:require]).to eq(["json/test","onetwo"])
101
+ end
102
+
103
+ it 'should parse -i' do
104
+ ARGV=["-i","json/test"]
105
+ options = JSON2Ruby::CLI.get_cli_options
106
+ expect(options[:include]).to eq(["json/test"])
107
+ end
108
+
109
+ it 'should parse multiple -i' do
110
+ ARGV=["-i","json/test","-i","onetwo"]
111
+ options = JSON2Ruby::CLI.get_cli_options
112
+ expect(options[:include]).to eq(["json/test","onetwo"])
113
+ end
114
+
115
+ it 'should parse -e' do
116
+ ARGV=["-e","json/test"]
117
+ options = JSON2Ruby::CLI.get_cli_options
118
+ expect(options[:extend]).to eq(["json/test"])
119
+ end
120
+
121
+ it 'should parse multiple -e' do
122
+ ARGV=["-e","json/test","-e","onetwo"]
123
+ options = JSON2Ruby::CLI.get_cli_options
124
+ expect(options[:extend]).to eq(["json/test","onetwo"])
125
+ end
126
+
127
+ it 'should parse -M' do
128
+ ARGV=["-M","-e","one"]
129
+ options = JSON2Ruby::CLI.get_cli_options
130
+ expect(options[:modules]).to eq(true)
131
+ end
132
+
133
+ it 'should parse -a' do
134
+ ARGV=["-a","TESTA"]
135
+ options = JSON2Ruby::CLI.get_cli_options
136
+ expect(options[:attributemethod]).to eq("TESTA")
137
+ end
138
+
139
+ it 'should parse -c' do
140
+ ARGV=["-c","TESTB"]
141
+ options = JSON2Ruby::CLI.get_cli_options
142
+ expect(options[:collectionmethod]).to eq("TESTB")
143
+ end
144
+
145
+ it 'should parse -t' do
146
+ ARGV=["-t"]
147
+ options = JSON2Ruby::CLI.get_cli_options
148
+ expect(options[:includetypes]).to eq(true)
149
+ end
150
+
151
+ it 'should parse -b' do
152
+ ARGV=["-b"]
153
+ options = JSON2Ruby::CLI.get_cli_options
154
+ expect(options[:baseless]).to eq(true)
155
+ end
156
+
157
+ it 'should parse -f' do
158
+ ARGV=["-f"]
159
+ options = JSON2Ruby::CLI.get_cli_options
160
+ expect(options[:forceoverwrite]).to eq(true)
161
+ end
162
+
163
+ it 'should parse -N' do
164
+ ARGV=["-N"]
165
+ options = JSON2Ruby::CLI.get_cli_options
166
+ expect(options[:forcenumeric]).to eq(true)
167
+ end
168
+
169
+ it 'should parse -v' do
170
+ ARGV=["-v"]
171
+ options = JSON2Ruby::CLI.get_cli_options
172
+ expect(options[:verbose]).to eq(true)
173
+ end
174
+ end
175
+
176
+ describe '#self.parse_files' do
177
+ it 'should reset entity and parse from files' do
178
+ options = {
179
+ :verbose => false
180
+ }
181
+
182
+ ARGV = ['/test/to/file','/test/to/file2']
183
+
184
+ expect(File).to receive(:read).with("/test/to/file").and_return('{"one":1}')
185
+ expect(File).to receive(:read).with("/test/to/file2").and_return('{"two":2}')
186
+
187
+ expect(JSON2Ruby::Entity).to receive(:parse_from).with("file", {"one"=>1}, options).and_return(3)
188
+ expect(JSON2Ruby::Entity).to receive(:parse_from).with("file2", {"two"=>2}, options).and_return(4)
189
+
190
+ expect(JSON2Ruby::CLI.parse_files(options)).to eq([3,4])
191
+ end
192
+
193
+ it 'should be verbose when option set' do
194
+ end
195
+ end
196
+
197
+ describe '#self.write_files' do
198
+ it 'should call File.exists? and File.write with correct data' do
199
+ options = { :one => 1, :outputdir => File.dirname(__FILE__), :modulenames => [ "TestModule" ] }
200
+
201
+ ent = JSON2Ruby::Entity.new("TestEntity", { "one" => JSON2Ruby::RUBYSTRING })
202
+ ents = { ent.attr_hash => ent }
203
+
204
+ JSON2Ruby::Entity.class_variable_set(:@@objs, ents)
205
+
206
+ writer = {}
207
+ expect(writer).to receive(:to_code).with(ent,2,options).and_return("CODE")
208
+
209
+ expect(File).to receive(:exists?).with("#{options[:outputdir]}/TestEntity.rb").and_return(false)
210
+ expect(File).to receive(:write).with("#{options[:outputdir]}/TestEntity.rb", "module TestModule\r\nCODEend\r\n")
211
+
212
+ expect(JSON2Ruby::CLI).to receive(:puts).with("Done, Generated 1 file")
213
+
214
+ JSON2Ruby::CLI.write_files([],writer, options)
215
+ end
216
+
217
+ it 'should not write collections' do
218
+ options = { :one => 1, :outputdir => File.dirname(__FILE__), :modulenames => [ "TestModule" ] }
219
+
220
+ ents = {}
221
+ ent = JSON2Ruby::Collection.new("TestCollection", { })
222
+ ents[ent.attr_hash] = ent
223
+
224
+ ent = JSON2Ruby::Entity.new("TestEntity", { "one" => JSON2Ruby::RUBYSTRING })
225
+ ents[ent.attr_hash] = ent
226
+
227
+ JSON2Ruby::Entity.class_variable_set(:@@objs, ents)
228
+
229
+ writer = {}
230
+ expect(writer).to receive(:to_code).with(ent,2,options).and_return("CODE")
231
+
232
+ expect(File).to receive(:exists?).with("#{options[:outputdir]}/TestEntity.rb").and_return(false)
233
+ expect(File).to receive(:write).with("#{options[:outputdir]}/TestEntity.rb", "module TestModule\r\nCODEend\r\n")
234
+
235
+ expect(JSON2Ruby::CLI).to receive(:puts).with("Done, Generated 1 file")
236
+
237
+ JSON2Ruby::CLI.write_files([],writer, options)
238
+ end
239
+
240
+ it 'should alert and not write file if it exists and not --forceoverwrite' do
241
+ options = { :one => 1, :outputdir => File.dirname(__FILE__), :modulenames => [ "TestModule" ] }
242
+
243
+ ent = JSON2Ruby::Entity.new("TestEntity", { "one" => JSON2Ruby::RUBYSTRING })
244
+ ents = { ent.attr_hash => ent }
245
+
246
+ JSON2Ruby::Entity.class_variable_set(:@@objs, ents)
247
+
248
+ writer = {}
249
+ expect(writer).to receive(:to_code).with(ent,2,options).and_return("CODE")
250
+
251
+ expect(File).to receive(:exists?).with("#{options[:outputdir]}/TestEntity.rb").and_return(true)
252
+ expect(File).not_to receive(:write)
253
+
254
+ expect($stderr).to receive(:puts).with("File #{options[:outputdir]}/TestEntity.rb exists. Use -f to overwrite.")
255
+
256
+ expect(JSON2Ruby::CLI).to receive(:puts).with("Done, Generated 0 files")
257
+
258
+ JSON2Ruby::CLI.write_files([],writer, options)
259
+ end
260
+
261
+ it 'should write file if it exists and --forceoverwrite' do
262
+ options = { :one => 1, :outputdir => File.dirname(__FILE__), :modulenames => [ "TestModule" ], :forceoverwrite=>true }
263
+
264
+ ent = JSON2Ruby::Entity.new("TestEntity", { "one" => JSON2Ruby::RUBYSTRING })
265
+ ents = { ent.attr_hash => ent }
266
+
267
+ JSON2Ruby::Entity.class_variable_set(:@@objs, ents)
268
+
269
+ writer = {}
270
+ expect(writer).to receive(:to_code).with(ent,2,options).and_return("CODE")
271
+
272
+ expect(File).to receive(:exists?).with("#{options[:outputdir]}/TestEntity.rb").and_return(true)
273
+ expect(File).to receive(:write).with("#{options[:outputdir]}/TestEntity.rb", "module TestModule\r\nCODEend\r\n")
274
+
275
+ expect(JSON2Ruby::CLI).to receive(:puts).with("Done, Generated 1 file")
276
+
277
+ JSON2Ruby::CLI.write_files([],writer, options)
278
+ end
279
+ end
280
+
281
+ describe '#self.display_entity' do
282
+ it 'should call puts correctly for entity' do
283
+ ent = JSON2Ruby::Entity.new("TestEntity")
284
+ ent.attributes = {
285
+ "test1" => JSON2Ruby::Attribute.new("testAttr"),
286
+ "testEntity" => JSON2Ruby::Entity.new("testEntity"),
287
+ "testCollection" => JSON2Ruby::Collection.new("testCol"),
288
+ }
289
+
290
+ expect(JSON2Ruby::CLI).to receive(:puts).with("- TestEntity (Entity - 012345670123456789ABCDEF89ABCDEF)")
291
+ expect(JSON2Ruby::CLI).to receive(:puts).with(" test1: testAttr")
292
+ expect(JSON2Ruby::CLI).to receive(:puts).with(" testEntity: testEntity")
293
+ expect(JSON2Ruby::CLI).to receive(:puts).with(" testCollection: testCol")
294
+
295
+ JSON2Ruby::CLI.display_entity("012345670123456789ABCDEF89ABCDEF",ent)
296
+ end
297
+
298
+ it 'should call puts correctly for collection' do
299
+ ent = JSON2Ruby::Collection.new("TestCollection")
300
+ ent.ruby_types = {
301
+ JSON2Ruby::RUBYSTRING.attr_hash => JSON2Ruby::RUBYSTRING
302
+ }
303
+
304
+ expect(JSON2Ruby::CLI).to receive(:puts).with("- TestCollection (Collection - 0123456701234567222BCDEF89ABCDEF)")
305
+ expect(JSON2Ruby::CLI).to receive(:puts).with(" (Types): String")
306
+
307
+ JSON2Ruby::CLI.display_entity("0123456701234567222BCDEF89ABCDEF",ent)
308
+ end
309
+ end
310
+ end