jsonify 0.0.8 → 0.0.9
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/jsonify.gemspec +3 -2
- data/lib/jsonify.rb +6 -3
- data/lib/jsonify/builder.rb +1 -1
- data/lib/jsonify/generate.rb +11 -32
- data/lib/jsonify/json_value.rb +7 -29
- data/lib/jsonify/version.rb +1 -1
- data/{spec → performance}/profile.rb +0 -0
- data/{spec → performance}/speed.rb +0 -0
- data/spec/builder_spec.rb +1 -1
- data/spec/generate_spec.rb +2 -2
- data/spec/json_value_spec.rb +8 -17
- data/spec/spec_helper.rb +0 -1
- metadata +22 -37
- data/spec/benchmark_helper.rb +0 -133
- data/spec/benchmark_spek.rb +0 -46
data/jsonify.gemspec
CHANGED
@@ -14,11 +14,12 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.rubyforge_project = s.name
|
15
15
|
|
16
16
|
s.files = `git ls-files`.split("\n")
|
17
|
-
s.test_files = `git ls-files -- {test,spec,
|
17
|
+
s.test_files = `git ls-files -- {test,spec,performance}/*`.split("\n")
|
18
18
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
|
-
|
21
|
+
# 1.9 JSON library built-in
|
22
|
+
s.add_development_dependency 'json' unless RUBY_VERSION =~ /^1.9/
|
22
23
|
|
23
24
|
s.add_development_dependency 'bundler'
|
24
25
|
s.add_development_dependency 'rake'
|
data/lib/jsonify.rb
CHANGED
@@ -1,7 +1,10 @@
|
|
1
|
-
|
1
|
+
begin
|
2
|
+
require 'json'
|
3
|
+
rescue LoadError
|
4
|
+
raise "No JSON implementation found. Please install a JSON library of your choosing."
|
5
|
+
end
|
2
6
|
require 'jsonify/blank_slate'
|
3
7
|
require 'jsonify/version'
|
4
8
|
require 'jsonify/json_value'
|
5
9
|
require 'jsonify/generate'
|
6
|
-
require 'jsonify/builder'
|
7
|
-
require 'benchmark'
|
10
|
+
require 'jsonify/builder'
|
data/lib/jsonify/builder.rb
CHANGED
@@ -35,7 +35,7 @@ module Jsonify
|
|
35
35
|
# @raise [TypeError] only if +:verify+ is set to true
|
36
36
|
# @raise [JSON::ParseError] only if +:verify+ is set to true
|
37
37
|
def compile!
|
38
|
-
result = (@stack[0]
|
38
|
+
result = (@stack[0] || {}).to_json
|
39
39
|
JSON.parse(result) if @verify
|
40
40
|
@pretty ? JSON.pretty_generate(JSON.parse(result)) : result
|
41
41
|
end
|
data/lib/jsonify/generate.rb
CHANGED
@@ -4,31 +4,30 @@ module Jsonify
|
|
4
4
|
module Generate
|
5
5
|
|
6
6
|
class << self
|
7
|
-
|
8
|
-
# Coerces the given value into a JsonValue.
|
7
|
+
|
8
|
+
# Coerces the given value into a JsonValue (or subclass), String, or Number.
|
9
9
|
#
|
10
10
|
# The coercion rules are based on the type (class) of the value as follows:
|
11
11
|
# - +JsonValue+ => no coercion
|
12
|
-
# - +String+ =>
|
13
|
-
# - +Numeric+ =>
|
12
|
+
# - +String+ => no coercion
|
13
|
+
# - +Numeric+ => no coercion
|
14
14
|
# - +TrueClass+ => JsonTrue ( true )
|
15
15
|
# - +FalseClass+=> JsonFalse ( false )
|
16
16
|
# - +NilClass+ => JsonNull ( null )
|
17
17
|
# - +Array+ => JsonArray ( [1,2,3] )
|
18
18
|
# - +Hash+ => JsonObject ( <code>{"\a":1,\"b\":2}</code> )
|
19
|
+
# - +else+ => #to_s
|
19
20
|
#
|
20
21
|
# @param val value to coerce into a JsonValue.
|
21
22
|
def value(val)
|
22
23
|
case val
|
23
|
-
when JsonValue; val
|
24
|
-
when
|
25
|
-
when
|
26
|
-
when
|
27
|
-
when FalseClass; false_value
|
28
|
-
when NilClass; null_value
|
24
|
+
when JsonValue, String, Numeric; val
|
25
|
+
when TrueClass; @json_true ||= JsonTrue.new
|
26
|
+
when FalseClass; @json_false ||= JsonFalse.new
|
27
|
+
when NilClass; @json_null ||= JsonNull.new
|
29
28
|
when Array; array_value val
|
30
|
-
when Hash;
|
31
|
-
else
|
29
|
+
when Hash; object_value val
|
30
|
+
else val.to_s
|
32
31
|
end
|
33
32
|
end
|
34
33
|
|
@@ -36,10 +35,6 @@ module Jsonify
|
|
36
35
|
JsonPair.new(key,value(val))
|
37
36
|
end
|
38
37
|
|
39
|
-
def string_value(val)
|
40
|
-
JsonString.new(val)
|
41
|
-
end
|
42
|
-
|
43
38
|
def object_value(hash)
|
44
39
|
json_object = JsonObject.new
|
45
40
|
hash.each { |key,val| json_object.add( pair_value(key, val) ) }
|
@@ -50,22 +45,6 @@ module Jsonify
|
|
50
45
|
JsonArray.new(Array(vals).map{ |v| value v })
|
51
46
|
end
|
52
47
|
|
53
|
-
def number_value(val)
|
54
|
-
JsonNumber.new(val)
|
55
|
-
end
|
56
|
-
|
57
|
-
def true_value
|
58
|
-
@json_true ||= JsonTrue.new # memoize
|
59
|
-
end
|
60
|
-
|
61
|
-
def false_value
|
62
|
-
@json_false ||= JsonFalse.new # memoize
|
63
|
-
end
|
64
|
-
|
65
|
-
def null_value
|
66
|
-
@json_null ||= JsonNull.new # memoize
|
67
|
-
end
|
68
|
-
|
69
48
|
end
|
70
49
|
|
71
50
|
end
|
data/lib/jsonify/json_value.rb
CHANGED
@@ -6,8 +6,8 @@ module Jsonify
|
|
6
6
|
@values = values || []
|
7
7
|
end
|
8
8
|
|
9
|
-
def
|
10
|
-
wrap values.map {|v| v.
|
9
|
+
def to_json
|
10
|
+
wrap values.map {|v| v.to_json}.join(',')
|
11
11
|
end
|
12
12
|
|
13
13
|
def add(jsonValue)
|
@@ -41,7 +41,6 @@ module Jsonify
|
|
41
41
|
end
|
42
42
|
|
43
43
|
alias_method :<<, :add
|
44
|
-
alias_method :add!, :add # for consistency with the Builder api
|
45
44
|
|
46
45
|
end
|
47
46
|
|
@@ -61,7 +60,6 @@ module Jsonify
|
|
61
60
|
end
|
62
61
|
|
63
62
|
alias_method :<<, :add
|
64
|
-
alias_method :add!, :add # for consistency with the Builder api
|
65
63
|
|
66
64
|
end
|
67
65
|
|
@@ -71,45 +69,25 @@ module Jsonify
|
|
71
69
|
@key = key.to_s
|
72
70
|
@value = Generate.value(value)
|
73
71
|
end
|
74
|
-
def
|
75
|
-
%Q{#{key.to_json}:#{value.
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
class JsonString < JsonValue
|
80
|
-
attr_accessor :value
|
81
|
-
def initialize(value)
|
82
|
-
@value = value.to_s
|
83
|
-
end
|
84
|
-
def evaluate
|
85
|
-
value.to_json
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
class JsonNumber < JsonValue
|
90
|
-
attr_accessor :value
|
91
|
-
def initialize(value)
|
92
|
-
@value = value
|
93
|
-
end
|
94
|
-
def evaluate
|
95
|
-
value
|
72
|
+
def to_json
|
73
|
+
%Q{#{key.to_json}:#{value.to_json}}
|
96
74
|
end
|
97
75
|
end
|
98
76
|
|
99
77
|
class JsonTrue < JsonValue
|
100
|
-
def
|
78
|
+
def to_json
|
101
79
|
'true'
|
102
80
|
end
|
103
81
|
end
|
104
82
|
|
105
83
|
class JsonFalse < JsonValue
|
106
|
-
def
|
84
|
+
def to_json
|
107
85
|
'false'
|
108
86
|
end
|
109
87
|
end
|
110
88
|
|
111
89
|
class JsonNull < JsonValue
|
112
|
-
def
|
90
|
+
def to_json
|
113
91
|
'null'
|
114
92
|
end
|
115
93
|
end
|
data/lib/jsonify/version.rb
CHANGED
File without changes
|
File without changes
|
data/spec/builder_spec.rb
CHANGED
data/spec/generate_spec.rb
CHANGED
@@ -13,7 +13,7 @@ describe Jsonify::Generate do
|
|
13
13
|
json = Jsonify::Generate
|
14
14
|
result = json.value links
|
15
15
|
expected = '{"links":[{"rel":"foo","href":"goo"},{"rel":"bar","href":"baz"}]}'
|
16
|
-
JSON.parse(result.
|
16
|
+
JSON.parse(result.to_json).should == JSON.parse(expected)
|
17
17
|
end
|
18
18
|
|
19
19
|
describe 'complex example' do
|
@@ -29,7 +29,7 @@ describe Jsonify::Generate do
|
|
29
29
|
}
|
30
30
|
)
|
31
31
|
expected = "{\"links\":[{\"rel\":\"foo\",\"href\":\"goo\"},{\"rel\":\"bar\",\"href\":\"baz\"}]}"
|
32
|
-
JSON.parse(json.
|
32
|
+
JSON.parse(json.to_json).should == JSON.parse(expected)
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
data/spec/json_value_spec.rb
CHANGED
@@ -3,49 +3,40 @@ require 'spec_helper'
|
|
3
3
|
describe Jsonify::JsonValue do
|
4
4
|
|
5
5
|
describe Jsonify::JsonPair do
|
6
|
-
let(:pair) { Jsonify::JsonPair.new('key',
|
6
|
+
let(:pair) { Jsonify::JsonPair.new('key','value') }
|
7
7
|
it 'should be constructed of a key and value' do
|
8
8
|
pair.key.should == 'key'
|
9
9
|
end
|
10
10
|
it 'should evaluate to key:value' do
|
11
|
-
pair.
|
11
|
+
pair.to_json.should == "\"key\":\"value\""
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
15
|
describe Jsonify::JsonTrue do
|
16
16
|
it 'should have a value of true' do
|
17
|
-
Jsonify::JsonTrue.new.
|
17
|
+
Jsonify::JsonTrue.new.to_json.should == 'true'
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
21
|
describe Jsonify::JsonFalse do
|
22
22
|
it 'should have a value of false' do
|
23
|
-
Jsonify::JsonFalse.new.
|
23
|
+
Jsonify::JsonFalse.new.to_json.should == 'false'
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
27
|
describe Jsonify::JsonNull do
|
28
28
|
it 'should have a value of true' do
|
29
|
-
Jsonify::JsonNull.new.
|
29
|
+
Jsonify::JsonNull.new.to_json.should == 'null'
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
describe
|
34
|
-
it 'should accept an integer' do
|
35
|
-
Jsonify::JsonNumber.new(1).evaluate.should == 1
|
36
|
-
end
|
37
|
-
it 'should accept a float' do
|
38
|
-
Jsonify::JsonNumber.new(1.23).evaluate.should == 1.23
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe Jsonify::JsonString do
|
33
|
+
describe 'strings' do
|
43
34
|
it 'should quote the value' do
|
44
|
-
|
35
|
+
'foo'.to_json.should == "\"foo\""
|
45
36
|
end
|
46
37
|
it 'should encode unicode' do
|
47
38
|
unicode = 'goober'.concat(16)
|
48
|
-
|
39
|
+
unicode.to_json.should == "\"goober\\u0010\""
|
49
40
|
end
|
50
41
|
end
|
51
42
|
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jsonify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,22 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-08-
|
12
|
+
date: 2011-08-05 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
|
-
- !ruby/object:Gem::Dependency
|
15
|
-
name: json_pure
|
16
|
-
requirement: &70097037247660 !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
|
-
requirements:
|
19
|
-
- - ! '>='
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: '0'
|
22
|
-
type: :runtime
|
23
|
-
prerelease: false
|
24
|
-
version_requirements: *70097037247660
|
25
14
|
- !ruby/object:Gem::Dependency
|
26
15
|
name: bundler
|
27
|
-
requirement: &
|
16
|
+
requirement: &70213882267320 !ruby/object:Gem::Requirement
|
28
17
|
none: false
|
29
18
|
requirements:
|
30
19
|
- - ! '>='
|
@@ -32,10 +21,10 @@ dependencies:
|
|
32
21
|
version: '0'
|
33
22
|
type: :development
|
34
23
|
prerelease: false
|
35
|
-
version_requirements: *
|
24
|
+
version_requirements: *70213882267320
|
36
25
|
- !ruby/object:Gem::Dependency
|
37
26
|
name: rake
|
38
|
-
requirement: &
|
27
|
+
requirement: &70213882266100 !ruby/object:Gem::Requirement
|
39
28
|
none: false
|
40
29
|
requirements:
|
41
30
|
- - ! '>='
|
@@ -43,10 +32,10 @@ dependencies:
|
|
43
32
|
version: '0'
|
44
33
|
type: :development
|
45
34
|
prerelease: false
|
46
|
-
version_requirements: *
|
35
|
+
version_requirements: *70213882266100
|
47
36
|
- !ruby/object:Gem::Dependency
|
48
37
|
name: rspec
|
49
|
-
requirement: &
|
38
|
+
requirement: &70213882264440 !ruby/object:Gem::Requirement
|
50
39
|
none: false
|
51
40
|
requirements:
|
52
41
|
- - ! '>='
|
@@ -54,10 +43,10 @@ dependencies:
|
|
54
43
|
version: '0'
|
55
44
|
type: :development
|
56
45
|
prerelease: false
|
57
|
-
version_requirements: *
|
46
|
+
version_requirements: *70213882264440
|
58
47
|
- !ruby/object:Gem::Dependency
|
59
48
|
name: autotest
|
60
|
-
requirement: &
|
49
|
+
requirement: &70213882261500 !ruby/object:Gem::Requirement
|
61
50
|
none: false
|
62
51
|
requirements:
|
63
52
|
- - ! '>='
|
@@ -65,10 +54,10 @@ dependencies:
|
|
65
54
|
version: '0'
|
66
55
|
type: :development
|
67
56
|
prerelease: false
|
68
|
-
version_requirements: *
|
57
|
+
version_requirements: *70213882261500
|
69
58
|
- !ruby/object:Gem::Dependency
|
70
59
|
name: yard
|
71
|
-
requirement: &
|
60
|
+
requirement: &70213882260300 !ruby/object:Gem::Requirement
|
72
61
|
none: false
|
73
62
|
requirements:
|
74
63
|
- - ! '>='
|
@@ -76,10 +65,10 @@ dependencies:
|
|
76
65
|
version: '0'
|
77
66
|
type: :development
|
78
67
|
prerelease: false
|
79
|
-
version_requirements: *
|
68
|
+
version_requirements: *70213882260300
|
80
69
|
- !ruby/object:Gem::Dependency
|
81
70
|
name: rdiscount
|
82
|
-
requirement: &
|
71
|
+
requirement: &70213882258020 !ruby/object:Gem::Requirement
|
83
72
|
none: false
|
84
73
|
requirements:
|
85
74
|
- - ! '>='
|
@@ -87,10 +76,10 @@ dependencies:
|
|
87
76
|
version: '0'
|
88
77
|
type: :development
|
89
78
|
prerelease: false
|
90
|
-
version_requirements: *
|
79
|
+
version_requirements: *70213882258020
|
91
80
|
- !ruby/object:Gem::Dependency
|
92
81
|
name: ruby-prof
|
93
|
-
requirement: &
|
82
|
+
requirement: &70213882254960 !ruby/object:Gem::Requirement
|
94
83
|
none: false
|
95
84
|
requirements:
|
96
85
|
- - ! '>='
|
@@ -98,7 +87,7 @@ dependencies:
|
|
98
87
|
version: '0'
|
99
88
|
type: :development
|
100
89
|
prerelease: false
|
101
|
-
version_requirements: *
|
90
|
+
version_requirements: *70213882254960
|
102
91
|
description: Turn Ruby objects into JSON -- correctly!
|
103
92
|
email:
|
104
93
|
- bsiggelkow@me.com
|
@@ -119,15 +108,13 @@ files:
|
|
119
108
|
- lib/jsonify/generate.rb
|
120
109
|
- lib/jsonify/json_value.rb
|
121
110
|
- lib/jsonify/version.rb
|
122
|
-
-
|
123
|
-
-
|
111
|
+
- performance/profile.rb
|
112
|
+
- performance/speed.rb
|
124
113
|
- spec/builder_spec.rb
|
125
114
|
- spec/generate_spec.rb
|
126
115
|
- spec/json_value_spec.rb
|
127
116
|
- spec/jsonify_spec.rb
|
128
|
-
- spec/profile.rb
|
129
117
|
- spec/spec_helper.rb
|
130
|
-
- spec/speed.rb
|
131
118
|
homepage: http://github.com/bsiggelkow/jsonify
|
132
119
|
licenses: []
|
133
120
|
post_install_message:
|
@@ -142,7 +129,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
142
129
|
version: '0'
|
143
130
|
segments:
|
144
131
|
- 0
|
145
|
-
hash:
|
132
|
+
hash: -1667055293303286952
|
146
133
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
147
134
|
none: false
|
148
135
|
requirements:
|
@@ -151,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
151
138
|
version: '0'
|
152
139
|
segments:
|
153
140
|
- 0
|
154
|
-
hash:
|
141
|
+
hash: -1667055293303286952
|
155
142
|
requirements: []
|
156
143
|
rubyforge_project: jsonify
|
157
144
|
rubygems_version: 1.8.6
|
@@ -159,12 +146,10 @@ signing_key:
|
|
159
146
|
specification_version: 3
|
160
147
|
summary: Turn Ruby objects into JSON
|
161
148
|
test_files:
|
162
|
-
-
|
163
|
-
-
|
149
|
+
- performance/profile.rb
|
150
|
+
- performance/speed.rb
|
164
151
|
- spec/builder_spec.rb
|
165
152
|
- spec/generate_spec.rb
|
166
153
|
- spec/json_value_spec.rb
|
167
154
|
- spec/jsonify_spec.rb
|
168
|
-
- spec/profile.rb
|
169
155
|
- spec/spec_helper.rb
|
170
|
-
- spec/speed.rb
|
data/spec/benchmark_helper.rb
DELETED
@@ -1,133 +0,0 @@
|
|
1
|
-
require "benchmark"
|
2
|
-
require "rspec"
|
3
|
-
|
4
|
-
module RSpec
|
5
|
-
module Benchmark
|
6
|
-
class Result
|
7
|
-
attr_accessor :slowest, :fastest, :average, :elapsed
|
8
|
-
|
9
|
-
def initialize(elapsed)
|
10
|
-
@elapsed = elapsed
|
11
|
-
@slowest = elapsed.max
|
12
|
-
@fastest = elapsed.min
|
13
|
-
@average = elapsed.inject(0) {|b, t| b + t} / elapsed.size
|
14
|
-
end
|
15
|
-
|
16
|
-
def to_s
|
17
|
-
"[average: #{average}, slowest: #{slowest}, fastest: #{fastest}]"
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
# Run a given block and calculate the average execution time.
|
22
|
-
# The block will be executed 1000 times by default.
|
23
|
-
#
|
24
|
-
# benchmark { do something }
|
25
|
-
# benchmark(100) { do something }
|
26
|
-
#
|
27
|
-
def benchmark(times = 1_000, &block)
|
28
|
-
elapsed = (1..times).collect do
|
29
|
-
GC.start
|
30
|
-
::Benchmark.realtime(&block) * 1000
|
31
|
-
end
|
32
|
-
|
33
|
-
Result.new(elapsed)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
# Check if the slowest execution is less than expected.
|
39
|
-
#
|
40
|
-
# it "should do something fast" do
|
41
|
-
# benchmark { do something }.should be_faster_than(1.3)
|
42
|
-
# end
|
43
|
-
#
|
44
|
-
RSpec::Matchers.define :be_faster_than do |expected|
|
45
|
-
match do |result|
|
46
|
-
result.slowest < expected
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
# Check if the slowest execution is greater than expected.
|
51
|
-
#
|
52
|
-
# it "should do something slow" do
|
53
|
-
# benchmark { do something }.should_not be_slower_than(1.3)
|
54
|
-
# end
|
55
|
-
#
|
56
|
-
RSpec::Matchers.define :be_slower_than do |expected|
|
57
|
-
match do |result|
|
58
|
-
result.slowest > expected
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
# Check if the execution average is close to expected.
|
63
|
-
#
|
64
|
-
# it "should do something average time" do
|
65
|
-
# benchmark { do something }.should be_on_average(1.3, 0.01)
|
66
|
-
# end
|
67
|
-
#
|
68
|
-
RSpec::Matchers.define :be_on_average do |expected, delta|
|
69
|
-
match do |result|
|
70
|
-
(result.average - expected).abs < delta
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
# Include matchers and <tt>benchmark</tt> method into RSpec context.
|
75
|
-
RSpec.configure do |config|
|
76
|
-
config.include(RSpec::Benchmark)
|
77
|
-
end
|
78
|
-
|
79
|
-
if ARGV[0] == __FILE__
|
80
|
-
describe RSpec::Benchmark do
|
81
|
-
before do
|
82
|
-
GC.stub(:start)
|
83
|
-
end
|
84
|
-
|
85
|
-
it "should be faster than expected" do
|
86
|
-
stub(:slowest => 0.01).should be_faster_than(0.5)
|
87
|
-
end
|
88
|
-
|
89
|
-
it "should not be faster than expected" do
|
90
|
-
stub(:slowest => 2).should_not be_faster_than(0.5)
|
91
|
-
end
|
92
|
-
|
93
|
-
it "should be slower than expected" do
|
94
|
-
stub(:slowest => 2).should be_slower_than(0.5)
|
95
|
-
end
|
96
|
-
|
97
|
-
it "should not be slower than expected" do
|
98
|
-
stub(:slowest => 0.5).should_not be_slower_than(2)
|
99
|
-
end
|
100
|
-
|
101
|
-
it "should be on average" do
|
102
|
-
stub(:average => 0.51).should be_on_average(0.5, 0.019)
|
103
|
-
stub(:average => 0.49).should be_on_average(0.5, 0.019)
|
104
|
-
end
|
105
|
-
|
106
|
-
it "should call garbage collector" do
|
107
|
-
GC.should_receive(:start).exactly(5).times
|
108
|
-
benchmark(5) { true }
|
109
|
-
end
|
110
|
-
|
111
|
-
it "should return result with collected data" do
|
112
|
-
result = benchmark(5) { true }
|
113
|
-
|
114
|
-
result.average.should be_kind_of(Float)
|
115
|
-
result.slowest.should be_kind_of(Float)
|
116
|
-
result.fastest.should be_kind_of(Float)
|
117
|
-
end
|
118
|
-
|
119
|
-
it "should run block" do
|
120
|
-
object = mock
|
121
|
-
object.should_receive(:run).exactly(1000).times
|
122
|
-
|
123
|
-
benchmark { object.run }
|
124
|
-
end
|
125
|
-
|
126
|
-
it "should run block with custom range" do
|
127
|
-
object = mock
|
128
|
-
object.should_receive(:run).exactly(3).times
|
129
|
-
|
130
|
-
benchmark(3) { object.run }
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
data/spec/benchmark_spek.rb
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Jsonify::Builder do
|
4
|
-
|
5
|
-
let(:j) { Jsonify::Builder.new }
|
6
|
-
|
7
|
-
describe 'hello world' do
|
8
|
-
it "runs under 0.3 milliseconds" do
|
9
|
-
benchmark do
|
10
|
-
j.hello 'world'
|
11
|
-
j.compile!
|
12
|
-
j.reset!
|
13
|
-
end.should be_faster_than( 0.3 ) #milliseconds
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
|
18
|
-
describe 'json_builder example' do
|
19
|
-
it 'should be better than builder (0.5 milliseconds)' do
|
20
|
-
benchmark do
|
21
|
-
j.name "Garrett Bjerkhoel"
|
22
|
-
j.birthday Time.local(1991, 9, 14)
|
23
|
-
j.street do
|
24
|
-
j.address "1143 1st Ave"
|
25
|
-
j.address2 "Apt 200"
|
26
|
-
j.city "New York"
|
27
|
-
j.state "New York"
|
28
|
-
j.zip 10065
|
29
|
-
end
|
30
|
-
j.skills do
|
31
|
-
j.ruby true
|
32
|
-
j.asp false
|
33
|
-
j.php true
|
34
|
-
j.mysql true
|
35
|
-
j.mongodb true
|
36
|
-
j.haproxy true
|
37
|
-
j.marathon false
|
38
|
-
end
|
39
|
-
j.single_skills ['ruby', 'php', 'mysql', 'mongodb', 'haproxy']
|
40
|
-
j.booleans [true, true, false, nil]
|
41
|
-
j.reset!
|
42
|
-
end.should be_faster_than(0.5)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
end
|