sumo-search 0.1.1 → 1.0.2
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.
- checksums.yaml +4 -4
- data/.cane +0 -0
- data/.gitignore +0 -2
- data/.travis.yml +7 -0
- data/README.md +54 -27
- data/Rakefile +8 -3
- data/bin/sumo +2 -69
- data/lib/sumo/cli.rb +43 -0
- data/lib/sumo/client.rb +82 -0
- data/lib/sumo/collection.rb +97 -0
- data/lib/sumo/config.rb +11 -14
- data/lib/sumo/error.rb +8 -11
- data/lib/sumo/search.rb +69 -0
- data/lib/sumo/version.rb +9 -2
- data/lib/sumo.rb +52 -18
- data/spec/fixtures/sumo-creds +1 -0
- data/spec/lib/sumo/client_spec.rb +136 -0
- data/spec/lib/sumo/config_spec.rb +55 -74
- data/spec/lib/sumo/search_spec.rb +106 -0
- data/spec/lib/sumo_spec.rb +0 -30
- data/spec/spec_helper.rb +5 -7
- data/spec/support/vcr.rb +41 -5
- data/spec/vcr/Sumo_Search/_create/sets_the_id_and_client.yml +42 -0
- data/spec/vcr/Sumo_Search/_delete_/deletes_the_search.yml +102 -0
- data/spec/vcr/Sumo_Search/_messages/returns_an_Enumerator_of_each_message_in_the_search.yml +2579 -0
- data/spec/vcr/Sumo_Search/_records/returns_an_Enumerator_of_each_record_in_the_search.yml +2348 -0
- data/spec/vcr/Sumo_Search/_status/returns_the_status_of_the_search.yml +71 -0
- data/sumo-search.gemspec +5 -6
- metadata +62 -57
- data/lib/sumo/formatter.rb +0 -21
- data/lib/sumo/query_builder.rb +0 -61
- data/spec/fixtures/sumo_creds +0 -1
- data/spec/lib/sumo/formatter_spec.rb +0 -51
- data/spec/lib/sumo/query_builder_spec.rb +0 -128
- data/spec/vcr/Sumo/_search/when_the_credentials_can_be_found/and_the_query_is_valid/parses_the_response.yml +0 -49
- data/spec/vcr/Sumo/_search/when_the_credentials_can_be_found/but_the_query_is_invalid/raises_an_error.yml +0 -43
- data/spec/vcr/Sumo_QueryBuilder/integration/when_the_request_is_invalid/raises_an_error.yml +0 -43
- data/spec/vcr/Sumo_QueryBuilder/integration/when_the_request_is_valid/compiles_and_sends_the_query_to_the_server.yml +0 -49
@@ -0,0 +1,71 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://api.sumologic.com/api/v1/search/jobs
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: "{\"query\":\"| count _sourceCategory\",\"from\":\"2013-01-01T00:00:00\",\"to\":\"2014-03-01T00:00:00\",\"timeZone\":\"EST\"}"
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- excon/0.32.1
|
12
|
+
Content-Type:
|
13
|
+
- application/json
|
14
|
+
Accept:
|
15
|
+
- application/json
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 202
|
19
|
+
message:
|
20
|
+
headers:
|
21
|
+
Content-Type:
|
22
|
+
- application/json
|
23
|
+
Date:
|
24
|
+
- Wed, 26 Mar 2014 13:49:41 GMT
|
25
|
+
Location:
|
26
|
+
- http://api.sumologic.com/api/v1/search/jobs/24997BFEE7AC89B5
|
27
|
+
Strict-Transport-Security:
|
28
|
+
- max-age=15552000
|
29
|
+
Content-Length:
|
30
|
+
- '117'
|
31
|
+
Connection:
|
32
|
+
- Close
|
33
|
+
body:
|
34
|
+
encoding: UTF-8
|
35
|
+
string: "{\"id\":\"24997BFEE7AC89B5\",\"link\":{\"rel\":\"filtered\",\"href\":\"filtered\"}}"
|
36
|
+
http_version:
|
37
|
+
recorded_at: Wed, 26 Mar 2014 13:49:43 GMT
|
38
|
+
- request:
|
39
|
+
method: get
|
40
|
+
uri: https://api.sumologic.com/api/v1/search/jobs/24997BFEE7AC89B5
|
41
|
+
body:
|
42
|
+
encoding: US-ASCII
|
43
|
+
string: ''
|
44
|
+
headers:
|
45
|
+
User-Agent:
|
46
|
+
- excon/0.32.1
|
47
|
+
Content-Type:
|
48
|
+
- application/json
|
49
|
+
Accept:
|
50
|
+
- application/json
|
51
|
+
response:
|
52
|
+
status:
|
53
|
+
code: 200
|
54
|
+
message:
|
55
|
+
headers:
|
56
|
+
Content-Type:
|
57
|
+
- application/json
|
58
|
+
Date:
|
59
|
+
- Wed, 26 Mar 2014 13:49:42 GMT
|
60
|
+
Strict-Transport-Security:
|
61
|
+
- max-age=15552000
|
62
|
+
Content-Length:
|
63
|
+
- '125'
|
64
|
+
Connection:
|
65
|
+
- Close
|
66
|
+
body:
|
67
|
+
encoding: UTF-8
|
68
|
+
string: "{\"state\":\"GATHERING RESULTS\",\"pendingWarnings\":[],\"pendingErrors\":[],\"histogramBuckets\":[],\"messageCount\":0,\"recordCount\":-1}"
|
69
|
+
http_version:
|
70
|
+
recorded_at: Wed, 26 Mar 2014 13:49:43 GMT
|
71
|
+
recorded_with: VCR 2.8.0
|
data/sumo-search.gemspec
CHANGED
@@ -4,9 +4,9 @@ require File.expand_path('../lib/sumo/version', __FILE__)
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
5
|
gem.authors = ["Swipely, Inc."]
|
6
6
|
gem.email = %w{tomhulihan@swipely.com}
|
7
|
-
gem.description = %q{A
|
8
|
-
gem.summary = %q{A
|
9
|
-
gem.homepage = 'https://github.com/swipely/sumo-
|
7
|
+
gem.description = %q{A simple REST client for the Sumo Search Job API}
|
8
|
+
gem.summary = %q{A simple REST client for the Sumo Search Job API}
|
9
|
+
gem.homepage = 'https://github.com/swipely/sumo-job'
|
10
10
|
gem.license = 'MIT'
|
11
11
|
gem.files = `git ls-files`.split($\)
|
12
12
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
@@ -14,13 +14,12 @@ Gem::Specification.new do |gem|
|
|
14
14
|
gem.name = 'sumo-search'
|
15
15
|
gem.require_paths = %w{lib}
|
16
16
|
gem.version = Sumo::VERSION
|
17
|
-
gem.
|
18
|
-
gem.add_dependency '
|
17
|
+
gem.add_dependency 'excon', '>= 0.32'
|
18
|
+
gem.add_dependency 'clamp', '>= 0.6.3'
|
19
19
|
gem.add_dependency 'json'
|
20
20
|
gem.add_development_dependency 'rake'
|
21
21
|
gem.add_development_dependency 'rspec'
|
22
22
|
gem.add_development_dependency 'cane'
|
23
23
|
gem.add_development_dependency 'pry'
|
24
24
|
gem.add_development_dependency 'vcr', '>= 2.7.0'
|
25
|
-
gem.add_development_dependency 'simplecov'
|
26
25
|
end
|
metadata
CHANGED
@@ -1,128 +1,128 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sumo-search
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Swipely, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: excon
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0.
|
19
|
+
version: '0.32'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0.
|
26
|
+
version: '0.32'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: clamp
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.6.3
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.6.3
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: json
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
|
-
- -
|
45
|
+
- - ">="
|
32
46
|
- !ruby/object:Gem::Version
|
33
47
|
version: '0'
|
34
48
|
type: :runtime
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
|
-
- -
|
52
|
+
- - ">="
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rake
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
|
-
- -
|
59
|
+
- - ">="
|
46
60
|
- !ruby/object:Gem::Version
|
47
61
|
version: '0'
|
48
62
|
type: :development
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
|
-
- -
|
66
|
+
- - ">="
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: rspec
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
|
-
- -
|
73
|
+
- - ">="
|
60
74
|
- !ruby/object:Gem::Version
|
61
75
|
version: '0'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
|
-
- -
|
80
|
+
- - ">="
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: cane
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
|
-
- -
|
87
|
+
- - ">="
|
74
88
|
- !ruby/object:Gem::Version
|
75
89
|
version: '0'
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
|
-
- -
|
94
|
+
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: pry
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
|
-
- -
|
101
|
+
- - ">="
|
88
102
|
- !ruby/object:Gem::Version
|
89
103
|
version: '0'
|
90
104
|
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
|
-
- -
|
108
|
+
- - ">="
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: vcr
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
|
-
- -
|
115
|
+
- - ">="
|
102
116
|
- !ruby/object:Gem::Version
|
103
117
|
version: 2.7.0
|
104
118
|
type: :development
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
107
121
|
requirements:
|
108
|
-
- -
|
122
|
+
- - ">="
|
109
123
|
- !ruby/object:Gem::Version
|
110
124
|
version: 2.7.0
|
111
|
-
|
112
|
-
name: simplecov
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - '>='
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - '>='
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
125
|
-
description: A CLI for querying the Sumo Logic search API
|
125
|
+
description: A simple REST client for the Sumo Search Job API
|
126
126
|
email:
|
127
127
|
- tomhulihan@swipely.com
|
128
128
|
executables:
|
@@ -130,30 +130,35 @@ executables:
|
|
130
130
|
extensions: []
|
131
131
|
extra_rdoc_files: []
|
132
132
|
files:
|
133
|
-
- .
|
133
|
+
- ".cane"
|
134
|
+
- ".gitignore"
|
135
|
+
- ".travis.yml"
|
134
136
|
- Gemfile
|
135
137
|
- README.md
|
136
138
|
- Rakefile
|
137
139
|
- bin/sumo
|
138
140
|
- lib/sumo.rb
|
141
|
+
- lib/sumo/cli.rb
|
142
|
+
- lib/sumo/client.rb
|
143
|
+
- lib/sumo/collection.rb
|
139
144
|
- lib/sumo/config.rb
|
140
145
|
- lib/sumo/error.rb
|
141
|
-
- lib/sumo/
|
142
|
-
- lib/sumo/query_builder.rb
|
146
|
+
- lib/sumo/search.rb
|
143
147
|
- lib/sumo/version.rb
|
144
|
-
- spec/fixtures/
|
148
|
+
- spec/fixtures/sumo-creds
|
149
|
+
- spec/lib/sumo/client_spec.rb
|
145
150
|
- spec/lib/sumo/config_spec.rb
|
146
|
-
- spec/lib/sumo/
|
147
|
-
- spec/lib/sumo/query_builder_spec.rb
|
151
|
+
- spec/lib/sumo/search_spec.rb
|
148
152
|
- spec/lib/sumo_spec.rb
|
149
153
|
- spec/spec_helper.rb
|
150
154
|
- spec/support/vcr.rb
|
151
|
-
- spec/vcr/
|
152
|
-
- spec/vcr/
|
153
|
-
- spec/vcr/
|
154
|
-
- spec/vcr/
|
155
|
+
- spec/vcr/Sumo_Search/_create/sets_the_id_and_client.yml
|
156
|
+
- spec/vcr/Sumo_Search/_delete_/deletes_the_search.yml
|
157
|
+
- spec/vcr/Sumo_Search/_messages/returns_an_Enumerator_of_each_message_in_the_search.yml
|
158
|
+
- spec/vcr/Sumo_Search/_records/returns_an_Enumerator_of_each_record_in_the_search.yml
|
159
|
+
- spec/vcr/Sumo_Search/_status/returns_the_status_of_the_search.yml
|
155
160
|
- sumo-search.gemspec
|
156
|
-
homepage: https://github.com/swipely/sumo-
|
161
|
+
homepage: https://github.com/swipely/sumo-job
|
157
162
|
licenses:
|
158
163
|
- MIT
|
159
164
|
metadata: {}
|
@@ -163,30 +168,30 @@ require_paths:
|
|
163
168
|
- lib
|
164
169
|
required_ruby_version: !ruby/object:Gem::Requirement
|
165
170
|
requirements:
|
166
|
-
- -
|
171
|
+
- - ">="
|
167
172
|
- !ruby/object:Gem::Version
|
168
|
-
version:
|
173
|
+
version: '0'
|
169
174
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
170
175
|
requirements:
|
171
|
-
- -
|
176
|
+
- - ">="
|
172
177
|
- !ruby/object:Gem::Version
|
173
178
|
version: '0'
|
174
179
|
requirements: []
|
175
180
|
rubyforge_project:
|
176
|
-
rubygems_version: 2.0
|
181
|
+
rubygems_version: 2.2.0
|
177
182
|
signing_key:
|
178
183
|
specification_version: 4
|
179
|
-
summary: A
|
184
|
+
summary: A simple REST client for the Sumo Search Job API
|
180
185
|
test_files:
|
181
|
-
- spec/fixtures/
|
186
|
+
- spec/fixtures/sumo-creds
|
187
|
+
- spec/lib/sumo/client_spec.rb
|
182
188
|
- spec/lib/sumo/config_spec.rb
|
183
|
-
- spec/lib/sumo/
|
184
|
-
- spec/lib/sumo/query_builder_spec.rb
|
189
|
+
- spec/lib/sumo/search_spec.rb
|
185
190
|
- spec/lib/sumo_spec.rb
|
186
191
|
- spec/spec_helper.rb
|
187
192
|
- spec/support/vcr.rb
|
188
|
-
- spec/vcr/
|
189
|
-
- spec/vcr/
|
190
|
-
- spec/vcr/
|
191
|
-
- spec/vcr/
|
192
|
-
|
193
|
+
- spec/vcr/Sumo_Search/_create/sets_the_id_and_client.yml
|
194
|
+
- spec/vcr/Sumo_Search/_delete_/deletes_the_search.yml
|
195
|
+
- spec/vcr/Sumo_Search/_messages/returns_an_Enumerator_of_each_message_in_the_search.yml
|
196
|
+
- spec/vcr/Sumo_Search/_records/returns_an_Enumerator_of_each_record_in_the_search.yml
|
197
|
+
- spec/vcr/Sumo_Search/_status/returns_the_status_of_the_search.yml
|
data/lib/sumo/formatter.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
# This module contains formatting functions to help make text more readable.
|
2
|
-
module Sumo::Formatter
|
3
|
-
include Sumo::Error
|
4
|
-
|
5
|
-
# Given a sumo response (string)
|
6
|
-
def format_json(response)
|
7
|
-
JSON.parse(response)
|
8
|
-
.sort_by { |hash| hash['_messagetime'] }
|
9
|
-
.map { |hash| hash['_raw'] }
|
10
|
-
rescue
|
11
|
-
raise ParseError, 'Could not parse the response.'
|
12
|
-
end
|
13
|
-
|
14
|
-
def extract_key(key, logs)
|
15
|
-
logs.map { |log| JSON.parse(log)[key] }
|
16
|
-
rescue
|
17
|
-
raise ParseError, "Error extracting the #{key} from the hash."
|
18
|
-
end
|
19
|
-
|
20
|
-
module_function :format_json, :extract_key
|
21
|
-
end
|
data/lib/sumo/query_builder.rb
DELETED
@@ -1,61 +0,0 @@
|
|
1
|
-
# This class can be used to build and execute queries. For example, the
|
2
|
-
# following code builds a query for 'error' in the last 15 minutes.
|
3
|
-
#
|
4
|
-
# q = Sumo::QueryBuilder.new('user@example.com:pass')
|
5
|
-
# .query('error')
|
6
|
-
# .from('-15m')
|
7
|
-
# .to('now')
|
8
|
-
#
|
9
|
-
# Note that this class is immutable.
|
10
|
-
class Sumo::QueryBuilder
|
11
|
-
include Sumo::Error
|
12
|
-
|
13
|
-
attr_reader :creds, :opts
|
14
|
-
|
15
|
-
# Create a new QueryBuilder with the given credentials and query.
|
16
|
-
def initialize(creds, opts = {})
|
17
|
-
if creds.is_a?(String) && opts.is_a?(Hash)
|
18
|
-
@creds = creds.freeze
|
19
|
-
@opts = opts.freeze
|
20
|
-
else
|
21
|
-
raise TypeError, "Invalid initialization parameters to QueryBuilder."
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
# Metaprogram the #query, #to, #from, #time_zone, and #format methods. Each
|
26
|
-
# of these methods accepts one argument, and returns a new 'QueryBuilder' that
|
27
|
-
# has the specified query parameter key set.
|
28
|
-
def self.builder(name, key)
|
29
|
-
klass = self
|
30
|
-
define_method(name) { |arg| klass.new(creds, opts.merge(key => arg)) }
|
31
|
-
end
|
32
|
-
private_class_method :builder
|
33
|
-
|
34
|
-
builder :to, 'to'
|
35
|
-
builder :from, 'from'
|
36
|
-
builder :query, 'q'
|
37
|
-
builder :format, 'format'
|
38
|
-
builder :time_zone, 'tz'
|
39
|
-
|
40
|
-
# Send the API request to Sumo Logic.
|
41
|
-
def execute
|
42
|
-
encoded = Base64.encode64(creds)
|
43
|
-
resp = connection.get(:path => '/api/v1/logs/search',
|
44
|
-
:query => opts,
|
45
|
-
:headers => { 'Authorization' => "Basic #{encoded}" })
|
46
|
-
if resp.status >= 400
|
47
|
-
if resp.body.nil? || resp.body.empty?
|
48
|
-
raise RequestError, "An error occurred sending your request."
|
49
|
-
else
|
50
|
-
raise RequestError, JSON.parse(resp.body)['message']
|
51
|
-
end
|
52
|
-
end
|
53
|
-
resp.body
|
54
|
-
end
|
55
|
-
|
56
|
-
# A memoized HTTP connection.
|
57
|
-
def connection
|
58
|
-
@connection ||= Excon.new('https://api.sumologic.com')
|
59
|
-
end
|
60
|
-
private :connection
|
61
|
-
end
|
data/spec/fixtures/sumo_creds
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
fake_user@fake_site:fake_pass
|
@@ -1,51 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Sumo::Formatter do
|
4
|
-
subject { Sumo::Formatter }
|
5
|
-
|
6
|
-
describe '.format_json' do
|
7
|
-
context 'when the input cannot be parsed' do
|
8
|
-
it 'raises an error' do
|
9
|
-
expect { subject.format_json('cannot parse this') }
|
10
|
-
.to raise_error(Sumo::Error::ParseError)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
context 'when the input can be parsed' do
|
15
|
-
let(:input) {
|
16
|
-
[
|
17
|
-
{ '_messagetime' => 2, '_raw' => 'world' },
|
18
|
-
{ '_messagetime' => 1, '_raw' => 'hello' }
|
19
|
-
].to_json
|
20
|
-
}
|
21
|
-
|
22
|
-
it 'sorts the input by the _messagetime, returning a String' do
|
23
|
-
subject.format_json(input).should == %w(hello world)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
describe '.extract_key' do
|
29
|
-
context 'when at least one element of the Array cannot be parsed' do
|
30
|
-
let(:input) { [ { :a => 1 }.to_json, 'qwerty'] }
|
31
|
-
|
32
|
-
it 'raises an error' do
|
33
|
-
expect { subject.extract_key('anything', input) }
|
34
|
-
.to raise_error(Sumo::Error::ParseError)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
context 'when the input is an Array of parseable values' do
|
39
|
-
let(:input) {
|
40
|
-
[
|
41
|
-
{ 'message' => 'rats', 'time' => 2 }.to_json,
|
42
|
-
{ 'message' => 'cats', 'time' => 1 }.to_json
|
43
|
-
]
|
44
|
-
}
|
45
|
-
|
46
|
-
it 'returns an Array with the specified key extracted' do
|
47
|
-
subject.extract_key('message', input).should == %w(rats cats)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|