elster 0.0.2 → 0.0.3
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/Users/jwebb/src/bigjason/elster/Gemfile.lock +8 -1
- data/Users/jwebb/src/bigjason/elster/README.md +13 -11
- data/Users/jwebb/src/bigjason/elster/Rakefile +42 -0
- data/Users/jwebb/src/bigjason/elster/elster.gemspec +1 -0
- data/Users/jwebb/src/bigjason/elster/lib/elster/streamer.rb +27 -2
- data/Users/jwebb/src/bigjason/elster/lib/elster/version.rb +1 -1
- data/Users/jwebb/src/bigjason/elster/pkg/elster-0.0.2.gem +0 -0
- data/Users/jwebb/src/bigjason/elster/test/streamer_test.rb +22 -6
- metadata +38 -12
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
elster (0.0.
|
4
|
+
elster (0.0.3)
|
5
5
|
multi_json
|
6
6
|
|
7
7
|
GEM
|
@@ -16,11 +16,18 @@ GEM
|
|
16
16
|
coderay (~> 1.0.5)
|
17
17
|
method_source (~> 0.8)
|
18
18
|
slop (~> 3.3.1)
|
19
|
+
pry (0.9.10-java)
|
20
|
+
coderay (~> 1.0.5)
|
21
|
+
method_source (~> 0.8)
|
22
|
+
slop (~> 3.3.1)
|
23
|
+
spoon (~> 0.0)
|
19
24
|
slop (3.3.2)
|
25
|
+
spoon (0.0.1)
|
20
26
|
turn (0.8.3)
|
21
27
|
ansi
|
22
28
|
|
23
29
|
PLATFORMS
|
30
|
+
java
|
24
31
|
ruby
|
25
32
|
|
26
33
|
DEPENDENCIES
|
@@ -18,17 +18,19 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
21
|
+
``` ruby
|
22
|
+
output = StringIO.new
|
23
|
+
json = Elster::Streamer.new(output)
|
24
|
+
json.key(:name, "George")
|
25
|
+
json.key(:kids) do
|
26
|
+
json.add("Job")
|
27
|
+
json.add("Buster")
|
28
|
+
end
|
29
|
+
json.close
|
30
|
+
|
31
|
+
puts output.string
|
32
|
+
# {"name":"George","kids":["Job","Buster"]}
|
33
|
+
```
|
32
34
|
|
33
35
|
## Contributing
|
34
36
|
|
@@ -1,2 +1,44 @@
|
|
1
1
|
#!/usr/bin/env rake
|
2
|
+
require "rubygems"
|
3
|
+
require "bundler/setup"
|
4
|
+
Bundler.require
|
5
|
+
|
2
6
|
require "bundler/gem_tasks"
|
7
|
+
require "benchmark"
|
8
|
+
|
9
|
+
desc "Run all tests"
|
10
|
+
task :test do
|
11
|
+
require 'turn'
|
12
|
+
require "pry"
|
13
|
+
require "test/unit"
|
14
|
+
require_relative "./test/streamer_test"
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Run a simple benchmark"
|
18
|
+
task :benchmark do
|
19
|
+
require "stringio"
|
20
|
+
ITERATIONS = 100000
|
21
|
+
|
22
|
+
Benchmark.bm do |x|
|
23
|
+
x.report("Elster ") do
|
24
|
+
result = Elster::Streamer.new StringIO.new
|
25
|
+
ITERATIONS.times do |i|
|
26
|
+
result.key("name_#{i}", "Jason #{i}")
|
27
|
+
result.key("age_#{i}", i)
|
28
|
+
result.key("nil_#{i}", nil)
|
29
|
+
end
|
30
|
+
result.close
|
31
|
+
end
|
32
|
+
|
33
|
+
x.report("Hash ") do
|
34
|
+
result = {}
|
35
|
+
ITERATIONS.times do |i|
|
36
|
+
result["name_#{i}"] = "Jason #{i}"
|
37
|
+
result["age_#{i}"] = i
|
38
|
+
result["nil_#{i}"] = nil
|
39
|
+
end
|
40
|
+
MultiJson.dump(result)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -1,8 +1,8 @@
|
|
1
|
-
require "stringio"
|
2
1
|
require "multi_json"
|
3
2
|
|
4
3
|
module Elster
|
5
4
|
class Streamer
|
5
|
+
attr_reader :output
|
6
6
|
# Create a new instance of Streamer with the specified output stream. The
|
7
7
|
# `output` must respond to `write`.
|
8
8
|
def initialize(output)
|
@@ -106,11 +106,36 @@ module Elster
|
|
106
106
|
end
|
107
107
|
|
108
108
|
def encode_value(value)
|
109
|
+
case value
|
110
|
+
when Numeric
|
111
|
+
encode_number(value)
|
112
|
+
when String
|
113
|
+
encode_string(value)
|
114
|
+
when nil
|
115
|
+
encode_nil(value)
|
116
|
+
else
|
117
|
+
MultiJson.dump(value)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def encode_generic(value)
|
109
122
|
MultiJson.dump(value)
|
110
123
|
end
|
111
124
|
|
112
125
|
def encode_string(value)
|
113
|
-
|
126
|
+
if /\A[\w\d \t]+\Z/ =~ value
|
127
|
+
"\"#{value}\""
|
128
|
+
else
|
129
|
+
encode_generic(value.to_s)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def encode_number(value)
|
134
|
+
value.to_s
|
135
|
+
end
|
136
|
+
|
137
|
+
def encode_nil(value)
|
138
|
+
"null"
|
114
139
|
end
|
115
140
|
|
116
141
|
def nest_in
|
Binary file
|
@@ -1,10 +1,5 @@
|
|
1
|
-
require "test/unit"
|
2
|
-
require 'turn'
|
3
1
|
require "stringio"
|
4
2
|
require "json"
|
5
|
-
require "pry"
|
6
|
-
|
7
|
-
require "elster"
|
8
3
|
|
9
4
|
class StreamerTest < MiniTest::Unit::TestCase
|
10
5
|
attr_reader :output, :json
|
@@ -102,7 +97,7 @@ class StreamerTest < MiniTest::Unit::TestCase
|
|
102
97
|
assert_equal "Bobertson", parsed[0]["child"]["name"]
|
103
98
|
end
|
104
99
|
|
105
|
-
def
|
100
|
+
def test_array_nested_object
|
106
101
|
json.add do
|
107
102
|
json.key(:name, "Bobert")
|
108
103
|
end
|
@@ -114,4 +109,25 @@ class StreamerTest < MiniTest::Unit::TestCase
|
|
114
109
|
assert_equal "Bobert", parsed[0]["name"]
|
115
110
|
assert_equal 44, parsed[1]["age"]
|
116
111
|
end
|
112
|
+
|
113
|
+
def test_ruby_hash
|
114
|
+
json.key("name", {:first => "Bobert"})
|
115
|
+
json.close
|
116
|
+
|
117
|
+
assert_equal "Bobert", parsed["name"]["first"]
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_ruby_array
|
121
|
+
json.key("an_array", [1, 2])
|
122
|
+
json.close
|
123
|
+
|
124
|
+
assert_equal [1, 2], parsed["an_array"]
|
125
|
+
end
|
126
|
+
|
127
|
+
def test_string_with_cr
|
128
|
+
json.key("description", "I am \nmulti\nlined")
|
129
|
+
json.close
|
130
|
+
|
131
|
+
assert_equal "I am \nmulti\nlined", parsed["description"]
|
132
|
+
end
|
117
133
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-20 00:00:00.
|
12
|
+
date: 2012-08-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: multi_json
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: minitest
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: '0'
|
33
38
|
type: :development
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: turn
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,10 +53,15 @@ dependencies:
|
|
43
53
|
version: '0'
|
44
54
|
type: :development
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: pry
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ! '>='
|
@@ -54,7 +69,12 @@ dependencies:
|
|
54
69
|
version: '0'
|
55
70
|
type: :development
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
58
78
|
description:
|
59
79
|
email:
|
60
80
|
- bigjasonwebb@gmail.com
|
@@ -85,6 +105,7 @@ files:
|
|
85
105
|
- /Users/jwebb/src/bigjason/elster/lib/elster/version.rb
|
86
106
|
- /Users/jwebb/src/bigjason/elster/lib/elster.rb
|
87
107
|
- /Users/jwebb/src/bigjason/elster/LICENSE
|
108
|
+
- /Users/jwebb/src/bigjason/elster/pkg/elster-0.0.2.gem
|
88
109
|
- /Users/jwebb/src/bigjason/elster/Rakefile
|
89
110
|
- /Users/jwebb/src/bigjason/elster/README.md
|
90
111
|
- /Users/jwebb/src/bigjason/elster/test/streamer_test.rb
|
@@ -100,17 +121,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
100
121
|
- - ! '>='
|
101
122
|
- !ruby/object:Gem::Version
|
102
123
|
version: '0'
|
124
|
+
segments:
|
125
|
+
- 0
|
126
|
+
hash: 2730646358943498707
|
103
127
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
128
|
none: false
|
105
129
|
requirements:
|
106
130
|
- - ! '>='
|
107
131
|
- !ruby/object:Gem::Version
|
108
132
|
version: '0'
|
133
|
+
segments:
|
134
|
+
- 0
|
135
|
+
hash: 2730646358943498707
|
109
136
|
requirements: []
|
110
137
|
rubyforge_project:
|
111
|
-
rubygems_version: 1.8.
|
138
|
+
rubygems_version: 1.8.24
|
112
139
|
signing_key:
|
113
140
|
specification_version: 3
|
114
141
|
summary: A simple streaming JSON encoder.
|
115
142
|
test_files: []
|
116
|
-
has_rdoc:
|