kronk 1.7.6 → 1.7.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/History.rdoc +8 -0
- data/Manifest.txt +1 -0
- data/TODO.rdoc +10 -0
- data/lib/kronk.rb +2 -1
- data/lib/kronk/constants.rb +6 -4
- data/lib/kronk/player/stream.rb +5 -4
- data/lib/kronk/plist_parser.rb +3 -3
- data/lib/kronk/response.rb +77 -46
- data/lib/kronk/yaml_parser.rb +18 -0
- data/test/test_kronk.rb +6 -2
- metadata +77 -75
data/History.rdoc
CHANGED
data/Manifest.txt
CHANGED
data/TODO.rdoc
CHANGED
data/lib/kronk.rb
CHANGED
@@ -14,7 +14,7 @@ require 'yaml'
|
|
14
14
|
class Kronk
|
15
15
|
|
16
16
|
# This gem's version.
|
17
|
-
VERSION = '1.7.
|
17
|
+
VERSION = '1.7.7'
|
18
18
|
|
19
19
|
require 'kronk/constants'
|
20
20
|
require 'kronk/queue_runner'
|
@@ -39,6 +39,7 @@ class Kronk
|
|
39
39
|
require 'kronk/request'
|
40
40
|
require 'kronk/plist_parser'
|
41
41
|
require 'kronk/xml_parser'
|
42
|
+
require 'kronk/yaml_parser'
|
42
43
|
|
43
44
|
|
44
45
|
##
|
data/lib/kronk/constants.rb
CHANGED
@@ -34,10 +34,12 @@ class Kronk
|
|
34
34
|
|
35
35
|
# Default Content-Type header to parser mapping.
|
36
36
|
DEFAULT_CONTENT_TYPES = {
|
37
|
-
'js'
|
38
|
-
'json'
|
39
|
-
'plist'
|
40
|
-
'xml'
|
37
|
+
'js' => 'JSON',
|
38
|
+
'json' => 'JSON',
|
39
|
+
'plist' => 'PlistParser',
|
40
|
+
'xml' => 'XMLParser',
|
41
|
+
'yaml' => 'YamlParser',
|
42
|
+
'yml' => 'YamlParser'
|
41
43
|
}
|
42
44
|
|
43
45
|
|
data/lib/kronk/player/stream.rb
CHANGED
@@ -3,7 +3,7 @@ class Kronk
|
|
3
3
|
##
|
4
4
|
# Outputs Player results as a stream of Kronk outputs
|
5
5
|
# in chunked form, each chunk being one response and the number
|
6
|
-
# of octets being expressed in
|
6
|
+
# of octets being expressed in hexadecimal form.
|
7
7
|
#
|
8
8
|
# out = Player::StreamOutput.new
|
9
9
|
#
|
@@ -13,11 +13,11 @@ class Kronk
|
|
13
13
|
# kronk = Kronk.new
|
14
14
|
# kronk.request io1
|
15
15
|
# out.result kronk
|
16
|
-
# #=> "
|
16
|
+
# #=> "17\r\nthis is the first chunk\r\n"
|
17
17
|
#
|
18
18
|
# kronk.request io2
|
19
19
|
# out.result kronk
|
20
|
-
# #=> "
|
20
|
+
# #=> "10\r\nthis is the rest\r\n"
|
21
21
|
#
|
22
22
|
# Note: This output class will not render errors.
|
23
23
|
|
@@ -34,7 +34,7 @@ class Kronk
|
|
34
34
|
|
35
35
|
return unless output
|
36
36
|
|
37
|
-
output = "#{output.length}\r\n#{output}\r\n"
|
37
|
+
output = "#{"%X" % output.length}\r\n#{output}\r\n"
|
38
38
|
|
39
39
|
mutex.synchronize do
|
40
40
|
$stdout << output
|
@@ -45,6 +45,7 @@ class Kronk
|
|
45
45
|
|
46
46
|
|
47
47
|
def completed
|
48
|
+
$stdout << "0\r\n\r\n"
|
48
49
|
$stdout.flush
|
49
50
|
true
|
50
51
|
end
|
data/lib/kronk/plist_parser.rb
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
class Kronk
|
2
2
|
|
3
3
|
##
|
4
|
-
# Simple plist wrapper to
|
4
|
+
# Simple plist wrapper to support Kronk's parser interface.
|
5
5
|
|
6
6
|
class PlistParser
|
7
7
|
|
8
8
|
##
|
9
|
-
#
|
9
|
+
# Wrapper for Plist.parse_xml
|
10
10
|
|
11
11
|
def self.parse plist
|
12
12
|
require 'plist'
|
13
13
|
Plist.parse_xml(plist) || raise(ParserError, "invalid Plist")
|
14
14
|
|
15
15
|
rescue RuntimeError
|
16
|
-
raise
|
16
|
+
raise ParserError, "unparsable Plist"
|
17
17
|
|
18
18
|
rescue LoadError => e
|
19
19
|
raise unless e.message =~ /-- plist/
|
data/lib/kronk/response.rb
CHANGED
@@ -37,12 +37,9 @@ class Kronk
|
|
37
37
|
end
|
38
38
|
|
39
39
|
|
40
|
-
attr_accessor :body, :
|
41
|
-
:raw, :stringify_opts, :
|
40
|
+
attr_accessor :body, :code,
|
41
|
+
:raw, :request, :stringify_opts, :time, :uri
|
42
42
|
|
43
|
-
attr_reader :encoding, :parser, :time
|
44
|
-
|
45
|
-
alias to_hash headers
|
46
43
|
alias to_s raw
|
47
44
|
|
48
45
|
##
|
@@ -58,36 +55,23 @@ class Kronk
|
|
58
55
|
@_res, debug_io = request_from_io(io)
|
59
56
|
end
|
60
57
|
|
61
|
-
@headers
|
62
|
-
@headers.keys.each{|h| @headers[h] = @headers[h].join(", ")}
|
58
|
+
@headers = @encoding = @parser = nil
|
63
59
|
|
64
|
-
@
|
65
|
-
c_type = @headers["content-type"] =~ ENCODING_MATCHER
|
66
|
-
@encoding = $2 if c_type
|
67
|
-
@encoding ||= "ASCII-8BIT"
|
68
|
-
@encoding = Encoding.find(@encoding) if defined?(Encoding)
|
60
|
+
@time = 0
|
69
61
|
|
70
62
|
raw_req, raw_resp, bytes = read_raw_from debug_io
|
71
63
|
@raw = try_force_encoding raw_resp
|
72
64
|
|
73
65
|
@request = request || raw_req && Request.parse(try_force_encoding raw_req)
|
74
66
|
|
75
|
-
@time = 0
|
76
|
-
|
77
67
|
@body = try_force_encoding(@_res.body) if @_res.body
|
78
68
|
@body ||= @raw.split("\r\n\r\n",2)[1]
|
79
69
|
|
80
|
-
@bytes = (@headers["content-length"] || @body.bytes.count).to_i
|
81
|
-
|
82
70
|
@code = @_res.code
|
83
71
|
|
84
|
-
@parser = Kronk.parser_for @headers["content-type"]
|
85
|
-
|
86
72
|
@uri = @request.uri if @request && @request.uri
|
87
73
|
@uri = URI.parse io.path if File === io
|
88
74
|
|
89
|
-
@byterate = 0
|
90
|
-
|
91
75
|
@stringify_opts = {}
|
92
76
|
end
|
93
77
|
|
@@ -108,6 +92,24 @@ class Kronk
|
|
108
92
|
end
|
109
93
|
|
110
94
|
|
95
|
+
##
|
96
|
+
# If time was set, returns bytes-per-second for the whole response,
|
97
|
+
# including headers.
|
98
|
+
|
99
|
+
def byterate
|
100
|
+
return 0 unless @raw && @time.to_f > 0
|
101
|
+
@byterate = self.total_bytes / @time.to_f
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
##
|
106
|
+
# Size of the body in bytes.
|
107
|
+
|
108
|
+
def bytes
|
109
|
+
(headers["content-length"] || @body.bytes.count).to_i
|
110
|
+
end
|
111
|
+
|
112
|
+
|
111
113
|
##
|
112
114
|
# Cookie header accessor.
|
113
115
|
|
@@ -117,7 +119,22 @@ class Kronk
|
|
117
119
|
|
118
120
|
|
119
121
|
##
|
120
|
-
#
|
122
|
+
# Return the Ruby-1.9 encoding of the body, or String representation
|
123
|
+
# for Ruby-1.8.
|
124
|
+
|
125
|
+
def encoding
|
126
|
+
return @encoding if @encoding
|
127
|
+
@encoding = "utf-8" unless headers["content-type"]
|
128
|
+
c_type = headers["content-type"] =~ ENCODING_MATCHER
|
129
|
+
@encoding = $2 if c_type
|
130
|
+
@encoding ||= "ASCII-8BIT"
|
131
|
+
@encoding = Encoding.find(@encoding) if defined?(Encoding)
|
132
|
+
@encoding
|
133
|
+
end
|
134
|
+
|
135
|
+
|
136
|
+
##
|
137
|
+
# Force the encoding of the raw response and body.
|
121
138
|
|
122
139
|
def force_encoding new_encoding
|
123
140
|
new_encoding = Encoding.find new_encoding unless Encoding === new_encoding
|
@@ -128,6 +145,19 @@ class Kronk
|
|
128
145
|
end
|
129
146
|
|
130
147
|
|
148
|
+
##
|
149
|
+
# Accessor for downcased headers.
|
150
|
+
|
151
|
+
def headers
|
152
|
+
return @headers if @headers
|
153
|
+
@headers = @_res.to_hash.dup
|
154
|
+
@headers.keys.each{|h| @headers[h] = @headers[h].join(", ")}
|
155
|
+
@headers
|
156
|
+
end
|
157
|
+
|
158
|
+
alias to_hash headers
|
159
|
+
|
160
|
+
|
131
161
|
##
|
132
162
|
# If there was an error parsing the input as a standard http response,
|
133
163
|
# the input is assumed to be a body and HeadlessResponse is used.
|
@@ -150,27 +180,30 @@ class Kronk
|
|
150
180
|
# If no parser is given will look for the default parser based on
|
151
181
|
# the Content-Type, or will return the cached parsed body if available.
|
152
182
|
|
153
|
-
def parsed_body
|
183
|
+
def parsed_body new_parser=nil
|
154
184
|
@parsed_body ||= nil
|
155
185
|
|
156
|
-
return @parsed_body if @parsed_body && !
|
186
|
+
return @parsed_body if @parsed_body && !new_parser
|
157
187
|
|
158
|
-
|
188
|
+
new_parser ||= parser
|
159
189
|
|
160
190
|
begin
|
161
|
-
|
191
|
+
new_parser = Kronk.parser_for(new_parser) ||
|
192
|
+
Kronk.find_const(new_parser)
|
162
193
|
rescue NameError
|
163
|
-
raise InvalidParser, "No such parser: #{
|
164
|
-
end if String ===
|
194
|
+
raise InvalidParser, "No such parser: #{new_parser}"
|
195
|
+
end if String === new_parser
|
165
196
|
|
166
197
|
raise MissingParser,
|
167
|
-
"No parser for Content-Type: #{@_res['Content-Type']}" unless
|
198
|
+
"No parser for Content-Type: #{@_res['Content-Type']}" unless new_parser
|
168
199
|
|
169
200
|
begin
|
170
|
-
@parsed_body =
|
201
|
+
@parsed_body = new_parser.parse(self.body) or raise RuntimeError
|
171
202
|
|
172
203
|
rescue RuntimeError, ::Exception => e
|
173
|
-
msg = ParserError === e ?
|
204
|
+
msg = ParserError === e ?
|
205
|
+
e.message : "#{new_parser} failed parsing body"
|
206
|
+
|
174
207
|
msg << " returned by #{@uri}" if @uri
|
175
208
|
raise ParserError, msg
|
176
209
|
end
|
@@ -181,7 +214,7 @@ class Kronk
|
|
181
214
|
# Returns the parsed header hash.
|
182
215
|
|
183
216
|
def parsed_header include_headers=true
|
184
|
-
|
217
|
+
out_headers = headers.dup
|
185
218
|
|
186
219
|
case include_headers
|
187
220
|
when nil, false
|
@@ -191,18 +224,26 @@ class Kronk
|
|
191
224
|
include_headers = [*include_headers].map{|h| h.to_s.downcase}
|
192
225
|
|
193
226
|
headers.each do |key, value|
|
194
|
-
|
227
|
+
out_headers.delete key unless
|
195
228
|
include_headers.include? key.to_s.downcase
|
196
229
|
end
|
197
230
|
|
198
|
-
|
231
|
+
out_headers
|
199
232
|
|
200
233
|
when true
|
201
|
-
|
234
|
+
out_headers
|
202
235
|
end
|
203
236
|
end
|
204
237
|
|
205
238
|
|
239
|
+
##
|
240
|
+
# The parser to use on the body.
|
241
|
+
|
242
|
+
def parser
|
243
|
+
@parser ||= Kronk.parser_for headers["content-type"]
|
244
|
+
end
|
245
|
+
|
246
|
+
|
206
247
|
##
|
207
248
|
# Assign the parser.
|
208
249
|
|
@@ -342,7 +383,7 @@ class Kronk
|
|
342
383
|
def stringify options={}, &block
|
343
384
|
options = options.empty? ? @stringify_opts : merge_stringify_opts(options)
|
344
385
|
|
345
|
-
if !options[:raw] && (options[:parser] ||
|
386
|
+
if !options[:raw] && (options[:parser] || parser || options[:no_body])
|
346
387
|
data = selective_data options, &block
|
347
388
|
DataString.new data, options
|
348
389
|
else
|
@@ -387,16 +428,6 @@ class Kronk
|
|
387
428
|
end
|
388
429
|
|
389
430
|
|
390
|
-
##
|
391
|
-
# Assign how long the request took in seconds.
|
392
|
-
|
393
|
-
def time= new_time
|
394
|
-
@time = new_time
|
395
|
-
@byterate = self.total_bytes / @time.to_f if @raw && @time > 0
|
396
|
-
@time
|
397
|
-
end
|
398
|
-
|
399
|
-
|
400
431
|
##
|
401
432
|
# Number of bytes of the response including the header.
|
402
433
|
|
@@ -487,7 +518,7 @@ class Kronk
|
|
487
518
|
# Returns the string given with the new encoding.
|
488
519
|
|
489
520
|
def try_force_encoding str
|
490
|
-
str.force_encoding
|
521
|
+
str.force_encoding encoding if str.respond_to? :force_encoding
|
491
522
|
str
|
492
523
|
end
|
493
524
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class Kronk
|
2
|
+
|
3
|
+
##
|
4
|
+
# Simple yaml wrapper to support Kronk's parser interface.
|
5
|
+
|
6
|
+
class YamlParser
|
7
|
+
|
8
|
+
##
|
9
|
+
# Wrapper for YAML.load
|
10
|
+
|
11
|
+
def self.parse yaml
|
12
|
+
YAML.load(yaml) || raise(ParserError, "unparsable YAML")
|
13
|
+
|
14
|
+
rescue ArgumentError
|
15
|
+
raise ParserError, "unparsable YAML"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/test/test_kronk.rb
CHANGED
@@ -9,7 +9,9 @@ class TestKronk < Test::Unit::TestCase
|
|
9
9
|
'js' => 'JSON',
|
10
10
|
'json' => 'JSON',
|
11
11
|
'plist' => 'PlistParser',
|
12
|
-
'xml' => 'XMLParser'
|
12
|
+
'xml' => 'XMLParser',
|
13
|
+
'yaml' => 'YamlParser',
|
14
|
+
'yml' => 'YamlParser'
|
13
15
|
},
|
14
16
|
:context => nil,
|
15
17
|
:cache_file => Kronk::DEFAULT_CACHE_FILE,
|
@@ -68,7 +70,9 @@ class TestKronk < Test::Unit::TestCase
|
|
68
70
|
'js' => "JsEngine",
|
69
71
|
'json' => "JSON",
|
70
72
|
'plist' => "PlistParser",
|
71
|
-
'xml' =>
|
73
|
+
'xml' => 'XMLParser',
|
74
|
+
'yaml' => 'YamlParser',
|
75
|
+
'yml' => 'YamlParser'
|
72
76
|
},
|
73
77
|
:context => 3,
|
74
78
|
:default_host => "http://localhost:3000",
|
metadata
CHANGED
@@ -1,107 +1,109 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: kronk
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.7.6
|
3
|
+
version: !ruby/object:Gem::Version
|
5
4
|
prerelease:
|
5
|
+
version: 1.7.7
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Jeremie Castagna
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
|
13
|
+
date: 2011-11-08 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
15
16
|
name: json
|
16
|
-
|
17
|
+
prerelease: false
|
18
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
17
19
|
none: false
|
18
|
-
requirements:
|
20
|
+
requirements:
|
19
21
|
- - ~>
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version:
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "1.5"
|
22
24
|
type: :runtime
|
23
|
-
|
24
|
-
|
25
|
-
- !ruby/object:Gem::Dependency
|
25
|
+
version_requirements: *id001
|
26
|
+
- !ruby/object:Gem::Dependency
|
26
27
|
name: cookiejar
|
27
|
-
|
28
|
+
prerelease: false
|
29
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
28
30
|
none: false
|
29
|
-
requirements:
|
31
|
+
requirements:
|
30
32
|
- - ~>
|
31
|
-
- !ruby/object:Gem::Version
|
33
|
+
- !ruby/object:Gem::Version
|
32
34
|
version: 0.3.0
|
33
35
|
type: :runtime
|
34
|
-
|
35
|
-
|
36
|
-
- !ruby/object:Gem::Dependency
|
36
|
+
version_requirements: *id002
|
37
|
+
- !ruby/object:Gem::Dependency
|
37
38
|
name: plist
|
38
|
-
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
39
41
|
none: false
|
40
|
-
requirements:
|
42
|
+
requirements:
|
41
43
|
- - ~>
|
42
|
-
- !ruby/object:Gem::Version
|
44
|
+
- !ruby/object:Gem::Version
|
43
45
|
version: 3.1.0
|
44
46
|
type: :development
|
45
|
-
|
46
|
-
|
47
|
-
- !ruby/object:Gem::Dependency
|
47
|
+
version_requirements: *id003
|
48
|
+
- !ruby/object:Gem::Dependency
|
48
49
|
name: nokogiri
|
49
|
-
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
50
52
|
none: false
|
51
|
-
requirements:
|
53
|
+
requirements:
|
52
54
|
- - ~>
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version:
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: "1.4"
|
55
57
|
type: :development
|
56
|
-
|
57
|
-
|
58
|
-
- !ruby/object:Gem::Dependency
|
58
|
+
version_requirements: *id004
|
59
|
+
- !ruby/object:Gem::Dependency
|
59
60
|
name: mocha
|
60
|
-
|
61
|
+
prerelease: false
|
62
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
61
63
|
none: false
|
62
|
-
requirements:
|
64
|
+
requirements:
|
63
65
|
- - ~>
|
64
|
-
- !ruby/object:Gem::Version
|
66
|
+
- !ruby/object:Gem::Version
|
65
67
|
version: 0.9.12
|
66
68
|
type: :development
|
67
|
-
|
68
|
-
|
69
|
-
- !ruby/object:Gem::Dependency
|
69
|
+
version_requirements: *id005
|
70
|
+
- !ruby/object:Gem::Dependency
|
70
71
|
name: em-http-request
|
71
|
-
|
72
|
+
prerelease: false
|
73
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
72
74
|
none: false
|
73
|
-
requirements:
|
75
|
+
requirements:
|
74
76
|
- - ~>
|
75
|
-
- !ruby/object:Gem::Version
|
77
|
+
- !ruby/object:Gem::Version
|
76
78
|
version: 1.0.0
|
77
79
|
type: :development
|
78
|
-
|
79
|
-
|
80
|
-
- !ruby/object:Gem::Dependency
|
80
|
+
version_requirements: *id006
|
81
|
+
- !ruby/object:Gem::Dependency
|
81
82
|
name: hoe
|
82
|
-
|
83
|
+
prerelease: false
|
84
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
83
85
|
none: false
|
84
|
-
requirements:
|
86
|
+
requirements:
|
85
87
|
- - ~>
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
version:
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: "2.12"
|
88
90
|
type: :development
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
email:
|
91
|
+
version_requirements: *id007
|
92
|
+
description: |-
|
93
|
+
Kronk runs diffs against data from live and cached http responses.
|
94
|
+
Kronk was made possible by the sponsoring of AT&T Interactive.
|
95
|
+
email:
|
95
96
|
- yaksnrainbows@gmail.com
|
96
|
-
executables:
|
97
|
+
executables:
|
97
98
|
- kronk
|
98
99
|
extensions: []
|
99
|
-
|
100
|
+
|
101
|
+
extra_rdoc_files:
|
100
102
|
- Manifest.txt
|
101
103
|
- History.rdoc
|
102
104
|
- README.rdoc
|
103
105
|
- TODO.rdoc
|
104
|
-
files:
|
106
|
+
files:
|
105
107
|
- .autotest
|
106
108
|
- History.rdoc
|
107
109
|
- Manifest.txt
|
@@ -140,6 +142,7 @@ files:
|
|
140
142
|
- lib/kronk/test/assertions.rb
|
141
143
|
- lib/kronk/test/helper_methods.rb
|
142
144
|
- lib/kronk/xml_parser.rb
|
145
|
+
- lib/kronk/yaml_parser.rb
|
143
146
|
- script/kronk_completion
|
144
147
|
- test/mocks/200_response.json
|
145
148
|
- test/mocks/200_response.plist
|
@@ -171,34 +174,33 @@ files:
|
|
171
174
|
- .gemtest
|
172
175
|
homepage: https://github.com/yaksnrainbows/kronk
|
173
176
|
licenses: []
|
177
|
+
|
174
178
|
post_install_message:
|
175
|
-
rdoc_options:
|
179
|
+
rdoc_options:
|
176
180
|
- --main
|
177
181
|
- README.rdoc
|
178
|
-
require_paths:
|
182
|
+
require_paths:
|
179
183
|
- lib
|
180
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
184
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
181
185
|
none: false
|
182
|
-
requirements:
|
183
|
-
- -
|
184
|
-
- !ruby/object:Gem::Version
|
185
|
-
version:
|
186
|
-
|
187
|
-
- 0
|
188
|
-
hash: -2280556396485806807
|
189
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
186
|
+
requirements:
|
187
|
+
- - ">="
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: "0"
|
190
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
190
191
|
none: false
|
191
|
-
requirements:
|
192
|
-
- -
|
193
|
-
- !ruby/object:Gem::Version
|
194
|
-
version:
|
192
|
+
requirements:
|
193
|
+
- - ">="
|
194
|
+
- !ruby/object:Gem::Version
|
195
|
+
version: "0"
|
195
196
|
requirements: []
|
197
|
+
|
196
198
|
rubyforge_project: kronk
|
197
|
-
rubygems_version: 1.8.
|
199
|
+
rubygems_version: 1.8.11
|
198
200
|
signing_key:
|
199
201
|
specification_version: 3
|
200
202
|
summary: Kronk runs diffs against data from live and cached http responses
|
201
|
-
test_files:
|
203
|
+
test_files:
|
202
204
|
- test/test_assertions.rb
|
203
205
|
- test/test_cmd.rb
|
204
206
|
- test/test_core_ext.rb
|