kronk 1.5.1 → 1.5.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gemtest ADDED
File without changes
data/History.rdoc CHANGED
@@ -1,3 +1,20 @@
1
+ === 1.5.2 / 2011-08-15
2
+
3
+ * Enhancements:
4
+
5
+ * Moved kronk/test/core_ext to kronk/core_ext.
6
+
7
+ * Options that take a constant name now support passing a file path only,
8
+ or a Constant:file/path pair.
9
+
10
+ * Bugfixes:
11
+
12
+ * Fixed unsupported struct options in helper_methods.
13
+
14
+ * Handling of invalid parser errors.
15
+
16
+ * More explicit parser errors for unparsable strings.
17
+
1
18
  === 1.5.1 / 2011-08-12
2
19
 
3
20
  * Bugfixes:
data/Manifest.txt CHANGED
@@ -5,8 +5,9 @@ README.rdoc
5
5
  Rakefile
6
6
  bin/kronk
7
7
  lib/kronk.rb
8
- lib/kronk/constants.rb
9
8
  lib/kronk/cmd.rb
9
+ lib/kronk/constants.rb
10
+ lib/kronk/core_ext.rb
10
11
  lib/kronk/data_renderer.rb
11
12
  lib/kronk/diff.rb
12
13
  lib/kronk/diff/ascii_format.rb
@@ -25,7 +26,6 @@ lib/kronk/request.rb
25
26
  lib/kronk/response.rb
26
27
  lib/kronk/test.rb
27
28
  lib/kronk/test/assertions.rb
28
- lib/kronk/test/core_ext.rb
29
29
  lib/kronk/test/helper_methods.rb
30
30
  lib/kronk/xml_parser.rb
31
31
  script/kronk_completion
@@ -3,6 +3,9 @@ class Kronk
3
3
  # Generic Request exception.
4
4
  class Exception < ::Exception; end
5
5
 
6
+ # Raised when parsing fails.
7
+ class ParserError < Exception; end
8
+
6
9
  # Raised when the URI was not resolvable.
7
10
  class NotFoundError < Exception; end
8
11
 
@@ -0,0 +1,110 @@
1
+ class Kronk
2
+
3
+ ##
4
+ # Data manipulation and retrieval methods for Array and Hash classes.
5
+
6
+ module DataExt
7
+
8
+ ##
9
+ # Checks if the given path exists and returns the first matching path
10
+ # as an array of keys. Returns false if no path is found.
11
+
12
+ def has_path? path
13
+ Kronk::Path.find path, self do |d,k,p|
14
+ return !!p
15
+ end
16
+
17
+ false
18
+ end
19
+
20
+
21
+ ##
22
+ # Looks for data at paths matching path. Returns a hash of
23
+ # path array => data value pairs.
24
+ #
25
+ # If given a block will pass the parent data structure, the key
26
+ # or index of the item at given path, and the full path
27
+ # as an array of keys for each found path.
28
+ #
29
+ # data = {:foo => "bar", :foobar => [:a, :b, {:foo => "other bar"}, :c]}
30
+ # data.find_data "**/foo" do |parent, key, path|
31
+ # p path
32
+ # p parent[key]
33
+ # puts "---"
34
+ # end
35
+ #
36
+ # # outputs:
37
+ # # [:foo]
38
+ # # "bar"
39
+ # # ---
40
+ # # [:foobar, 2, :foo]
41
+ # # "other bar"
42
+ # # ---
43
+ #
44
+ # # returns:
45
+ # # {[:foo] => "bar", [:foobar, 2, :foo] => "other bar"}
46
+
47
+ def find_data path, &block
48
+ Kronk::Path.find path, self, &block
49
+ end
50
+
51
+
52
+ ##
53
+ # Finds and replaces the value of any match with the given new value.
54
+ # Returns true if matches were replaced, otherwise false.
55
+ #
56
+ # data = {:foo => "bar", :foobar => [:a, :b, {:foo => "other bar"}, :c]}
57
+ # data.replace_at_path "**=*bar", "BAR"
58
+ # #=> true
59
+ #
60
+ # data
61
+ # #=> {:foo => "BAR", :foobar => [:a, :b, {:foo => "BAR"}, :c]}
62
+ #
63
+ # Note: Specifying a limit will allow only "limit" number of items to be
64
+ # set but may yield unpredictible results for non-ordered Hashes.
65
+ # It's also important to realize that arrays are modified starting with
66
+ # the last index, going down.
67
+
68
+ def replace_at_path path, value, limit=nil
69
+ count = 0
70
+
71
+ Kronk::Path.find path, self do |data, key, path_arr|
72
+ count = count.next
73
+ data[key] = value
74
+
75
+ return true if limit && count >= limit
76
+ end
77
+
78
+ return count > 0
79
+ end
80
+
81
+
82
+ ##
83
+ # Similar to DataExt#replace_at_path but deletes found items.
84
+ # Returns a hash of path/value pairs of deleted items.
85
+ #
86
+ # data = {:foo => "bar", :foobar => [:a, :b, {:foo => "other bar"}, :c]}
87
+ # data.replace_at_path "**=*bar", "BAR"
88
+ # #=> {[:foo] => "bar", [:foobar, 2, :foo] => "other bar"}
89
+
90
+ def delete_at_path path, limit=nil
91
+ count = 0
92
+ out = {}
93
+
94
+ Kronk::Path.find path, self do |data, key, path_arr|
95
+ count = count.next
96
+ out[path_arr] = data[key]
97
+
98
+ data.respond_to(:delete_at) ? data.delete_at(key) : data.delete(key)
99
+
100
+ return true if limit && count >= limit
101
+ end
102
+
103
+ return count > 0
104
+ end
105
+ end
106
+ end
107
+
108
+
109
+ Array.send :include, Kronk::DataExt
110
+ Hash.send :include, Kronk::DataExt
@@ -10,7 +10,10 @@ class Kronk
10
10
 
11
11
  def self.parse plist
12
12
  require 'plist'
13
- Plist.parse_xml plist
13
+ Plist.parse_xml(plist) || raise(ParserError, "invalid Plist")
14
+
15
+ rescue RuntimeError
16
+ raise(ParserError, "unparsable Plist")
14
17
 
15
18
  rescue LoadError => e
16
19
  raise unless e.message =~ /-- plist/
@@ -12,12 +12,15 @@ class Kronk
12
12
  end
13
13
  end
14
14
 
15
+
15
16
  ##
16
- # Wraps an http response.
17
+ # Standard Kronk response object.
17
18
 
18
19
  class Response
19
20
 
20
21
  class MissingParser < Exception; end
22
+ class InvalidParser < Exception; end
23
+
21
24
 
22
25
  ENCODING_MATCHER = /(^|;\s?)charset=(.*?)\s*(;|$)/
23
26
 
@@ -84,6 +87,7 @@ class Kronk
84
87
  @parser = Kronk.parser_for @_res['Content-Type']
85
88
 
86
89
  @uri = @request.uri if @request && @request.uri
90
+ @uri = URI.parse io.path if File === io
87
91
 
88
92
  @byterate = 0
89
93
  end
@@ -152,16 +156,25 @@ class Kronk
152
156
 
153
157
  return @parsed_body if @parsed_body && !parser
154
158
 
155
- if String === parser
159
+ begin
156
160
  parser = Kronk.parser_for(parser) || Kronk.find_const(parser)
157
- end
161
+ rescue NameError
162
+ raise InvalidParser, "No such parser: #{parser}"
163
+ end if String === parser
158
164
 
159
165
  parser ||= @parser
160
166
 
161
167
  raise MissingParser,
162
168
  "No parser for Content-Type: #{@_res['Content-Type']}" unless parser
163
169
 
164
- @parsed_body = parser.parse self.body
170
+ begin
171
+ @parsed_body = parser.parse(self.body) or raise RuntimeError
172
+
173
+ rescue RuntimeError, ::Exception => e
174
+ msg = ParserError === e ? e.message : "#{parser} failed parsing body"
175
+ msg << " returned by #{@uri}" if @uri
176
+ raise ParserError, msg
177
+ end
165
178
  end
166
179
 
167
180
 
@@ -4,7 +4,8 @@ class Kronk
4
4
 
5
5
  ##
6
6
  # Kronk test helper methods to easily make and mock requests.
7
- # Sets @responses, @response, @datas, @data, and @diff instance variables.
7
+ # Sets @kronk, @responses, @response, @datas, @data, and @diff
8
+ # instance variables.
8
9
 
9
10
  module HelperMethods
10
11
 
@@ -49,37 +50,24 @@ class Kronk
49
50
  def retrieve uri1, uri2=nil, options={}
50
51
  uri2, options = nil, uri2.merge(options) if Hash === uri2
51
52
 
52
- if uri2
53
- @responses = [Kronk.retrieve(uri1, options),
54
- Kronk.retrieve(uri2, options)]
55
- @response = @responses.last
56
-
57
- @datas = @responses.map do |r|
58
- begin
59
- r.selective_data options
60
- rescue Kronk::Response::MissingParser
61
- r.body
62
- end
63
- end
64
-
65
- @data = @datas.last
66
-
67
- @diff = Diff.new_from_data(*@datas)
53
+ @kronk = Kronk.new options
68
54
 
69
- else
70
- @response = Kronk.retrieve uri1, options
71
- @responses = [@response]
55
+ uri2 ? @kronk.compare(uri1, uri2) : @kronk.retrieve(uri1)
72
56
 
73
- @data = begin
74
- @response.selective_data options
57
+ @responses = @kronk.responses
58
+ @response = @kronk.response
59
+ @datas = @responses.map do |r|
60
+ begin
61
+ r.selective_data options
75
62
  rescue Kronk::Response::MissingParser
76
- @response.body
63
+ r.body
77
64
  end
65
+ end
78
66
 
79
- @datas = [@data]
67
+ @data = @datas.last
68
+ @diff = @kronk.diff
80
69
 
81
- @diff = nil
82
- end
70
+ @kronk
83
71
  end
84
72
  end
85
73
  end
data/lib/kronk/test.rb CHANGED
@@ -5,8 +5,8 @@ class Kronk
5
5
  # and core extensions.
6
6
 
7
7
  module Test
8
+ require 'kronk/core_ext'
8
9
  require 'kronk/test/assertions'
9
- require 'kronk/test/core_ext'
10
10
  require 'kronk/test/helper_methods'
11
11
 
12
12
  include Assertions
@@ -47,7 +47,7 @@ class Kronk
47
47
  end
48
48
 
49
49
  hash = node_value root_node.children
50
- hash.values.first
50
+ hash.values.first || raise(ParserError, "invalid XML")
51
51
  end
52
52
 
53
53
 
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.5.1'
17
+ VERSION = '1.5.2'
18
18
 
19
19
  require 'kronk/constants'
20
20
  require 'kronk/player'
@@ -64,15 +64,60 @@ class Kronk
64
64
  ##
65
65
  # Find a fully qualified ruby namespace/constant.
66
66
 
67
- def self.find_const namespace
68
- consts = namespace.to_s.split "::"
69
- curr = self
67
+ def self.find_const name_or_file, case_insensitive=false
68
+ if name_or_file =~ /[^:]:([^:]+)$/
69
+ req_file = $1
70
+ i = $1.length + 2
71
+ const = name_or_file[0..-i]
70
72
 
71
- until consts.empty? do
72
- curr = curr.const_get consts.shift
73
- end
73
+ begin
74
+ require req_file
75
+ rescue LoadError
76
+ require File.expand_path(req_file)
77
+ end
78
+
79
+ find_const const
80
+
81
+ elsif name_or_file.include? File::SEPARATOR
82
+ begin
83
+ require name_or_file
84
+ rescue LoadError
85
+ require File.expand_path(name_or_file)
86
+ end
87
+
88
+ namespace = File.basename name_or_file, ".rb"
89
+ consts = File.dirname(name_or_file).split(File::SEPARATOR)
90
+ consts << namespace
91
+
92
+ name = ""
93
+ until consts.empty?
94
+ name = "::" << consts.pop.to_s << name
95
+ const = find_const name, true rescue nil
96
+ return const if const
97
+ end
98
+
99
+ raise NameError, "no constant match for #{name_or_file}"
74
100
 
75
- curr
101
+ else
102
+ consts = name_or_file.to_s.split "::"
103
+ curr = self
104
+
105
+ until consts.empty? do
106
+ const = consts.shift
107
+ next if const.to_s.empty?
108
+
109
+ if case_insensitive
110
+ const.gsub!(/(^|[\-_.]+)([a-z0-9])/i){|m| m[-1,1].upcase}
111
+ const = (curr.constants | Object.constants).find do |c|
112
+ c.to_s.downcase == const.to_s.downcase
113
+ end
114
+ end
115
+
116
+ curr = curr.const_get const.to_s
117
+ end
118
+
119
+ curr
120
+ end
76
121
  end
77
122
 
78
123
 
@@ -1,5 +1,5 @@
1
1
  require 'test/test_helper'
2
- require 'lib/kronk/test/core_ext'
2
+ require 'lib/kronk/core_ext'
3
3
 
4
4
  class TestCoreExt < Test::Unit::TestCase
5
5
 
@@ -10,60 +10,65 @@ class TestHelperMethods < Test::Unit::TestCase
10
10
  @mock_resp = Kronk::Response.new io
11
11
  @mock_resp2 = Kronk::Response.new \
12
12
  StringIO.new mock_resp("200_response.json")
13
+ @mock_req = stub("mock_req", :retrieve => @mock_resp, :uri => "host.com")
14
+ @mock_req2 = stub("mock_req", :retrieve => @mock_resp2, :uri => "host.com")
13
15
 
14
- Kronk.stubs(:retrieve).returns @mock_resp
16
+ @mock_thread = stub("mock_thread", :join => nil)
17
+
18
+ Thread.stubs(:new).yields.returns @mock_thread
19
+ Kronk::Request.any_instance.stubs(:new).returns @mock_req
15
20
  end
16
21
 
17
22
 
18
23
  def test_get
19
- Kronk.expects(:retrieve).
24
+ Kronk::Request.expects(:new).
20
25
  with("host.com", :foo => "bar", :http_method => :get).
21
- returns @mock_resp
26
+ returns @mock_req
22
27
 
23
28
  get "host.com", :foo => "bar", :http_method => :foobar
24
29
  end
25
30
 
26
31
 
27
32
  def test_get_two
28
- Kronk.expects(:retrieve).times(2).
33
+ Kronk::Request.expects(:new).times(2).
29
34
  with("host.com", :foo => "bar", :http_method => :get).
30
- returns @mock_resp
35
+ returns @mock_req
31
36
 
32
37
  get "host.com", "host.com", :foo => "bar", :http_method => :foobar
33
38
  end
34
39
 
35
40
 
36
41
  def test_post
37
- Kronk.expects(:retrieve).
42
+ Kronk::Request.expects(:new).
38
43
  with("host.com", :foo => "bar", :http_method => :post).
39
- returns @mock_resp
44
+ returns @mock_req
40
45
 
41
46
  post "host.com", :foo => "bar", :http_method => :foobar
42
47
  end
43
48
 
44
49
 
45
50
  def test_post_two
46
- Kronk.expects(:retrieve).times(2).
51
+ Kronk::Request.expects(:new).times(2).
47
52
  with("host.com", :foo => "bar", :http_method => :post).
48
- returns @mock_resp
53
+ returns @mock_req
49
54
 
50
55
  post "host.com", "host.com", :foo => "bar", :http_method => :foobar
51
56
  end
52
57
 
53
58
 
54
59
  def test_put
55
- Kronk.expects(:retrieve).
60
+ Kronk::Request.expects(:new).
56
61
  with("host.com", :foo => "bar", :http_method => :put).
57
- returns @mock_resp
62
+ returns @mock_req
58
63
 
59
64
  put "host.com", :foo => "bar", :http_method => :foobar
60
65
  end
61
66
 
62
67
 
63
68
  def test_put_two
64
- Kronk.expects(:retrieve).times(2).
69
+ Kronk::Request.expects(:new).times(2).
65
70
  with("host.com", :foo => "bar", :http_method => :put).
66
- returns @mock_resp
71
+ returns @mock_req
67
72
 
68
73
  put "host.com", "host.com", :foo => "bar", :http_method => :foobar
69
74
  end
@@ -71,26 +76,26 @@ class TestHelperMethods < Test::Unit::TestCase
71
76
 
72
77
 
73
78
  def test_delete
74
- Kronk.expects(:retrieve).
79
+ Kronk::Request.expects(:new).
75
80
  with("host.com", :foo => "bar", :http_method => :delete).
76
- returns @mock_resp
81
+ returns @mock_req
77
82
 
78
83
  delete "host.com", :foo => "bar", :http_method => :foobar
79
84
  end
80
85
 
81
86
 
82
87
  def test_delete_two
83
- Kronk.expects(:retrieve).times(2).
88
+ Kronk::Request.expects(:new).times(2).
84
89
  with("host.com", :foo => "bar", :http_method => :delete).
85
- returns @mock_resp
90
+ returns @mock_req
86
91
 
87
92
  delete "host.com", "host.com", :foo => "bar", :http_method => :foobar
88
93
  end
89
94
 
90
95
 
91
96
  def test_retrieve_one
92
- Kronk.expects(:retrieve).
93
- with("host.com", :foo => "bar", :test => "thing").returns @mock_resp
97
+ Kronk::Request.expects(:new).
98
+ with("host.com", :foo => "bar", :test => "thing").returns @mock_req
94
99
 
95
100
  @mock_resp.expects(:selective_data).with(:foo => "bar", :test => "thing").
96
101
  returns @json
@@ -108,15 +113,14 @@ class TestHelperMethods < Test::Unit::TestCase
108
113
 
109
114
 
110
115
  def test_retrieve_two
111
- Kronk.expects(:retrieve).
112
- with("host1.com", :foo => "bar").returns @mock_resp
113
-
114
- Kronk.expects(:retrieve).
115
- with("host2.com", :foo => "bar").returns @mock_resp2
116
+ Kronk::Request.expects(:new).
117
+ with("host1.com", :foo => "bar").returns @mock_req
116
118
 
117
- @mock_resp.expects(:selective_data).with(:foo => "bar").returns @json
119
+ Kronk::Request.expects(:new).
120
+ with("host2.com", :foo => "bar").returns @mock_req2
118
121
 
119
- @mock_resp2.expects(:selective_data).with(:foo => "bar").returns @json
122
+ @mock_resp.expects(:selective_data).twice.with(:foo => "bar").returns @json
123
+ @mock_resp2.expects(:selective_data).twice.with(:foo => "bar").returns @json
120
124
 
121
125
  retrieve "host1.com", "host2.com", :foo => "bar"
122
126
 
@@ -135,9 +139,10 @@ class TestHelperMethods < Test::Unit::TestCase
135
139
 
136
140
  def test_retrieve_unparsable
137
141
  mock_resp = Kronk::Response.new StringIO.new(mock_200_response)
142
+ mock_req = stub("mock_req", :retrieve => mock_resp, :uri => "host.com")
138
143
 
139
- Kronk.expects(:retrieve).
140
- with("host.com", :foo => "bar").returns mock_resp
144
+ Kronk::Request.expects(:new).
145
+ with("host.com", :foo => "bar").returns mock_req
141
146
 
142
147
  retrieve "host.com", :foo => "bar"
143
148
 
@@ -154,12 +159,8 @@ class TestHelperMethods < Test::Unit::TestCase
154
159
  def test_retrieve_two_unparsable
155
160
  mock_resp = Kronk::Response.new StringIO.new(mock_200_response)
156
161
 
157
- Kronk.expects(:retrieve).
158
- with("host1.com", :foo => "bar").returns mock_resp
159
-
160
- Kronk.expects(:retrieve).
161
- with("host2.com", :foo => "bar").returns mock_resp
162
-
162
+ Kronk::Request.any_instance.expects(:retrieve).returns mock_resp
163
+ Kronk::Request.any_instance.expects(:retrieve).returns mock_resp
163
164
 
164
165
  retrieve "host1.com", "host2.com", :foo => "bar"
165
166
 
@@ -169,7 +170,7 @@ class TestHelperMethods < Test::Unit::TestCase
169
170
  assert_equal mock_resp.body, @data
170
171
  assert_equal [mock_resp.body, mock_resp.body], @datas
171
172
 
172
- expected_diff = Kronk::Diff.new_from_data(*@datas)
173
+ expected_diff = Kronk::Diff.new(*@datas)
173
174
 
174
175
  assert_equal expected_diff.str1, @diff.str1
175
176
  assert_equal expected_diff.str2, @diff.str2
data/test/test_kronk.rb CHANGED
@@ -132,6 +132,56 @@ class TestKronk < Test::Unit::TestCase
132
132
  end
133
133
 
134
134
 
135
+ def test_find_const_file
136
+ $".delete_if{|path| path =~ %r{kronk/diff/ascii_format.rb}}
137
+ Kronk::Diff.send(:remove_const, :AsciiFormat)
138
+ assert_raises(NameError){ Kronk::Diff::AsciiFormat }
139
+
140
+ Kronk.find_const 'kronk/diff/ascii_format'
141
+ assert Kronk::Diff::AsciiFormat
142
+ end
143
+
144
+
145
+ def test_find_const_file_rb
146
+ $".delete_if{|path| path =~ %r{kronk/diff/ascii_format.rb}}
147
+ Kronk::Diff.send(:remove_const, :AsciiFormat)
148
+ assert_raises(NameError){ Kronk::Diff::AsciiFormat }
149
+
150
+ Kronk.find_const 'kronk/diff/ascii_format.rb'
151
+ assert Kronk::Diff::AsciiFormat
152
+ end
153
+
154
+
155
+ def test_find_const_file_pair
156
+ $".delete_if{|path| path =~ %r{kronk/diff/ascii_format.rb}}
157
+ Kronk::Diff.send(:remove_const, :AsciiFormat)
158
+ assert_raises(NameError){ Kronk::Diff::AsciiFormat }
159
+
160
+ Kronk.find_const 'Kronk::Diff::AsciiFormat:kronk/diff/ascii_format'
161
+ assert Kronk::Diff::AsciiFormat
162
+ end
163
+
164
+
165
+ def test_find_const_file_pair_rb
166
+ $".delete_if{|path| path =~ %r{kronk/diff/ascii_format.rb}}
167
+ Kronk::Diff.send(:remove_const, :AsciiFormat)
168
+ assert_raises(NameError){ Kronk::Diff::AsciiFormat }
169
+
170
+ Kronk.find_const 'Kronk::Diff::AsciiFormat:kronk/diff/ascii_format.rb'
171
+ assert Kronk::Diff::AsciiFormat
172
+ end
173
+
174
+
175
+ def test_find_const_file_pair_rb_expanded
176
+ $".delete_if{|path| path =~ %r{kronk/diff/ascii_format.rb}}
177
+ Kronk::Diff.send(:remove_const, :AsciiFormat)
178
+ assert_raises(NameError){ Kronk::Diff::AsciiFormat }
179
+
180
+ Kronk.find_const 'Kronk::Diff::AsciiFormat:lib/kronk/diff/ascii_format.rb'
181
+ assert Kronk::Diff::AsciiFormat
182
+ end
183
+
184
+
135
185
  def test_options_for_uri
136
186
  with_uri_options do
137
187
  assert_equal mock_uri_options['example'],
@@ -106,7 +106,7 @@ class TestResponse < Test::Unit::TestCase
106
106
  assert_equal expected, @json_resp.parsed_body
107
107
  assert_equal @xml_resp.parsed_body, @json_resp.parsed_body
108
108
 
109
- assert_raises RuntimeError do
109
+ assert_raises Kronk::ParserError do
110
110
  @json_resp.parsed_body Kronk::PlistParser
111
111
  end
112
112
  end
@@ -118,7 +118,7 @@ class TestResponse < Test::Unit::TestCase
118
118
 
119
119
  assert_equal expected, @json_resp.parsed_body
120
120
 
121
- assert_raises RuntimeError do
121
+ assert_raises Kronk::ParserError do
122
122
  @json_resp.parsed_body 'PlistParser'
123
123
  end
124
124
  end
@@ -149,8 +149,15 @@ class TestResponse < Test::Unit::TestCase
149
149
  end
150
150
 
151
151
 
152
+ def test_parsed_body_invalid_parser
153
+ assert_raises Kronk::Response::InvalidParser do
154
+ @html_resp.parsed_body "FooBar"
155
+ end
156
+ end
157
+
158
+
152
159
  def test_parsed_body_bad_parser
153
- assert_raises JSON::ParserError do
160
+ assert_raises Kronk::ParserError do
154
161
  @html_resp.parsed_body JSON
155
162
  end
156
163
  end
@@ -244,7 +251,7 @@ class TestResponse < Test::Unit::TestCase
244
251
 
245
252
 
246
253
  def test_selective_data_parser
247
- assert_raises RuntimeError do
254
+ assert_raises Kronk::ParserError do
248
255
  @json_resp.selective_data :parser => Kronk::PlistParser
249
256
  end
250
257
 
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kronk
3
3
  version: !ruby/object:Gem::Version
4
- hash: 1
5
4
  prerelease:
6
- segments:
7
- - 1
8
- - 5
9
- - 1
10
- version: 1.5.1
5
+ version: 1.5.2
11
6
  platform: ruby
12
7
  authors:
13
8
  - Jeremie Castagna
@@ -15,8 +10,7 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2011-08-12 00:00:00 -07:00
19
- default_executable:
13
+ date: 2011-08-17 00:00:00 Z
20
14
  dependencies:
21
15
  - !ruby/object:Gem::Dependency
22
16
  name: json
@@ -26,10 +20,6 @@ dependencies:
26
20
  requirements:
27
21
  - - ~>
28
22
  - !ruby/object:Gem::Version
29
- hash: 5
30
- segments:
31
- - 1
32
- - 5
33
23
  version: "1.5"
34
24
  type: :runtime
35
25
  version_requirements: *id001
@@ -41,11 +31,6 @@ dependencies:
41
31
  requirements:
42
32
  - - ~>
43
33
  - !ruby/object:Gem::Version
44
- hash: 19
45
- segments:
46
- - 0
47
- - 3
48
- - 0
49
34
  version: 0.3.0
50
35
  type: :runtime
51
36
  version_requirements: *id002
@@ -57,11 +42,6 @@ dependencies:
57
42
  requirements:
58
43
  - - ~>
59
44
  - !ruby/object:Gem::Version
60
- hash: 3
61
- segments:
62
- - 3
63
- - 1
64
- - 0
65
45
  version: 3.1.0
66
46
  type: :development
67
47
  version_requirements: *id003
@@ -73,10 +53,6 @@ dependencies:
73
53
  requirements:
74
54
  - - ~>
75
55
  - !ruby/object:Gem::Version
76
- hash: 7
77
- segments:
78
- - 1
79
- - 4
80
56
  version: "1.4"
81
57
  type: :development
82
58
  version_requirements: *id004
@@ -88,11 +64,6 @@ dependencies:
88
64
  requirements:
89
65
  - - ~>
90
66
  - !ruby/object:Gem::Version
91
- hash: 35
92
- segments:
93
- - 0
94
- - 9
95
- - 12
96
67
  version: 0.9.12
97
68
  type: :development
98
69
  version_requirements: *id005
@@ -104,12 +75,7 @@ dependencies:
104
75
  requirements:
105
76
  - - ">="
106
77
  - !ruby/object:Gem::Version
107
- hash: 47
108
- segments:
109
- - 2
110
- - 8
111
- - 0
112
- version: 2.8.0
78
+ version: 2.9.1
113
79
  type: :development
114
80
  version_requirements: *id006
115
81
  description: |-
@@ -133,8 +99,9 @@ files:
133
99
  - Rakefile
134
100
  - bin/kronk
135
101
  - lib/kronk.rb
136
- - lib/kronk/constants.rb
137
102
  - lib/kronk/cmd.rb
103
+ - lib/kronk/constants.rb
104
+ - lib/kronk/core_ext.rb
138
105
  - lib/kronk/data_renderer.rb
139
106
  - lib/kronk/diff.rb
140
107
  - lib/kronk/diff/ascii_format.rb
@@ -153,7 +120,6 @@ files:
153
120
  - lib/kronk/response.rb
154
121
  - lib/kronk/test.rb
155
122
  - lib/kronk/test/assertions.rb
156
- - lib/kronk/test/core_ext.rb
157
123
  - lib/kronk/test/helper_methods.rb
158
124
  - lib/kronk/xml_parser.rb
159
125
  - script/kronk_completion
@@ -180,7 +146,7 @@ files:
180
146
  - test/test_response.rb
181
147
  - test/test_transaction.rb
182
148
  - test/test_xml_parser.rb
183
- has_rdoc: true
149
+ - .gemtest
184
150
  homepage: https://github.com/yaksnrainbows/kronk
185
151
  licenses: []
186
152
 
@@ -195,7 +161,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
195
161
  requirements:
196
162
  - - ">="
197
163
  - !ruby/object:Gem::Version
198
- hash: 3
164
+ hash: -1250647076143869812
199
165
  segments:
200
166
  - 0
201
167
  version: "0"
@@ -204,14 +170,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
204
170
  requirements:
205
171
  - - ">="
206
172
  - !ruby/object:Gem::Version
207
- hash: 3
208
- segments:
209
- - 0
210
173
  version: "0"
211
174
  requirements: []
212
175
 
213
176
  rubyforge_project: kronk
214
- rubygems_version: 1.5.2
177
+ rubygems_version: 1.8.6
215
178
  signing_key:
216
179
  specification_version: 3
217
180
  summary: Kronk runs diffs against data from live and cached http responses
@@ -1,113 +0,0 @@
1
- class Kronk
2
-
3
- module Test
4
-
5
- ##
6
- # Data manipulation and retrieval methods for Array and Hash classes.
7
-
8
- module DataExt
9
-
10
- ##
11
- # Checks if the given path exists and returns the first matching path
12
- # as an array of keys. Returns false if no path is found.
13
-
14
- def has_path? path
15
- Kronk::Path.find path, self do |d,k,p|
16
- return !!p
17
- end
18
-
19
- false
20
- end
21
-
22
-
23
- ##
24
- # Looks for data at paths matching path. Returns a hash of
25
- # path array => data value pairs.
26
- #
27
- # If given a block will pass the parent data structure, the key
28
- # or index of the item at given path, and the full path
29
- # as an array of keys for each found path.
30
- #
31
- # data = {:foo => "bar", :foobar => [:a, :b, {:foo => "other bar"}, :c]}
32
- # data.find_data "**/foo" do |parent, key, path|
33
- # p path
34
- # p parent[key]
35
- # puts "---"
36
- # end
37
- #
38
- # # outputs:
39
- # # [:foo]
40
- # # "bar"
41
- # # ---
42
- # # [:foobar, 2, :foo]
43
- # # "other bar"
44
- # # ---
45
- #
46
- # # returns:
47
- # # {[:foo] => "bar", [:foobar, 2, :foo] => "other bar"}
48
-
49
- def find_data path, &block
50
- Kronk::Path.find path, self, &block
51
- end
52
-
53
-
54
- ##
55
- # Finds and replaces the value of any match with the given new value.
56
- # Returns true if matches were replaced, otherwise false.
57
- #
58
- # data = {:foo => "bar", :foobar => [:a, :b, {:foo => "other bar"}, :c]}
59
- # data.replace_at_path "**=*bar", "BAR"
60
- # #=> true
61
- #
62
- # data
63
- # #=> {:foo => "BAR", :foobar => [:a, :b, {:foo => "BAR"}, :c]}
64
- #
65
- # Note: Specifying a limit will allow only "limit" number of items to be
66
- # set but may yield unpredictible results for non-ordered Hashes.
67
- # It's also important to realize that arrays are modified starting with
68
- # the last index, going down.
69
-
70
- def replace_at_path path, value, limit=nil
71
- count = 0
72
-
73
- Kronk::Path.find path, self do |data, key, path_arr|
74
- count = count.next
75
- data[key] = value
76
-
77
- return true if limit && count >= limit
78
- end
79
-
80
- return count > 0
81
- end
82
-
83
-
84
- ##
85
- # Similar to DataExt#replace_at_path but deletes found items.
86
- # Returns a hash of path/value pairs of deleted items.
87
- #
88
- # data = {:foo => "bar", :foobar => [:a, :b, {:foo => "other bar"}, :c]}
89
- # data.replace_at_path "**=*bar", "BAR"
90
- # #=> {[:foo] => "bar", [:foobar, 2, :foo] => "other bar"}
91
-
92
- def delete_at_path path, limit=nil
93
- count = 0
94
- out = {}
95
-
96
- Kronk::Path.find path, self do |data, key, path_arr|
97
- count = count.next
98
- out[path_arr] = data[key]
99
-
100
- data.respond_to(:delete_at) ? data.delete_at(key) : data.delete(key)
101
-
102
- return true if limit && count >= limit
103
- end
104
-
105
- return count > 0
106
- end
107
- end
108
- end
109
- end
110
-
111
-
112
- Array.send :include, Kronk::Test::DataExt
113
- Hash.send :include, Kronk::Test::DataExt