sonar-client 0.0.3 → 0.0.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5dd2ef2da6cb21be5643f246fb559a984400639b
4
- data.tar.gz: 1304d5edaaab17637bcbe18362d14b2c23a65581
3
+ metadata.gz: 7d8b3759eb0d676fdbcfff3fac747291e8371b0d
4
+ data.tar.gz: 8f28065237179666a832d1cf3e6f3f3f4a3dc91e
5
5
  SHA512:
6
- metadata.gz: cf3270d0d080e0f39b09501ce6c104a029ea1fa140314af14f6e44a3ed26988edc1b4ae0848fef793887127b67ab25b3975fa394695a15685148c547e779ced2
7
- data.tar.gz: 2df2543baa5d5bb6a0e87c52f7f1663392f4cd0cbc16904e26ce814d2b14859c6527c18dc090624d19c2eb1cba2759a06069f639f523bcfcac9fd9e5674b8b20
6
+ metadata.gz: c34e45704359cdd73976d7982e71e24e9791a7af1ada099411f6d40e8325c020de6ab10adf2c570d54c275d3f172d9f4f3ab2076202ef6babd1a2a83cace7fab
7
+ data.tar.gz: a913134e524d16c906ca1d92370737ddc4d92e3fc1d71a2d9229e6e090fed248c9d2c9fbda1c8777da6ef3e1ceb14080379bafa63353dbe88afc488cf179d9f2
data/.gitignore CHANGED
@@ -20,6 +20,8 @@ tmp
20
20
  _yardoc
21
21
  doc/
22
22
 
23
+ Gemfile.lock
24
+
23
25
  # Specific to RubyMotion
24
26
  .dat*
25
27
  .repl_history
data/lib/sonar/cli/cli.rb CHANGED
@@ -8,7 +8,7 @@ module Sonar
8
8
  class CLI < Thor
9
9
  class_option 'profile', aliases: '-P', type: :string, default: File.join(File.expand_path('~'), Sonar::RCFile::FILENAME),
10
10
  desc: 'Path to Sonar RC file', banner: 'FILE'
11
- class_option 'format', type: :string, desc: 'Flat JSON or pretty printed [flat/pretty]'
11
+ class_option 'format', type: :string, desc: 'Flat JSON, JSON lines, or pretty printed [flat/lines/pretty]'
12
12
 
13
13
  def initialize(*)
14
14
  @config = Sonar::RCFile.instance.load_file
@@ -32,8 +32,14 @@ module Sonar
32
32
  @query = {}
33
33
  @query[type.to_sym] = term
34
34
  @query[:limit] = options['record_limit']
35
- @client.search(@query).each do |data|
36
- print_json(cleanup_data(data), options['format'])
35
+ resp = @client.search(@query)
36
+
37
+ if resp.is_a?(Sonar::Request::RequestIterator)
38
+ resp.each do |data|
39
+ print_json(cleanup_data(data), options['format'])
40
+ end
41
+ else
42
+ print_json(cleanup_data(resp), options['format'])
37
43
  end
38
44
  end
39
45
 
@@ -54,6 +60,12 @@ module Sonar
54
60
  case format
55
61
  when 'pretty'
56
62
  ap(json)
63
+ when 'lines'
64
+ if json.has_key?('collection')
65
+ json['collection'].each { |l| puts l.to_json }
66
+ else
67
+ puts 'Could not parse the response into lines.'
68
+ end
57
69
  else
58
70
  # TODO: use a faster JSON generator?
59
71
  puts(json.to_json)
@@ -62,31 +74,27 @@ module Sonar
62
74
 
63
75
  # Clean up whitespace and parse JSON values in responses
64
76
  def cleanup_data(data)
65
- ndata = {}
66
- if data[0] != 'collection'
67
- return data
68
- end
69
-
70
- ncoll = []
71
-
72
- data[1].each do |item|
73
- nitem = {}
77
+ return data unless data.is_a?(Hash) && data.has_key?('collection')
78
+ data['collection'].each do |item|
74
79
  item.each_pair do |k,v|
75
-
76
80
  # Purge whitespace within values
77
- nval = v.kind_of?(::String) ? v.strip : v
78
- nkey = k.strip
81
+ v.is_a?(::String) ? v.strip! : v
79
82
 
80
83
  # Parse JSON values
81
- if nval && nval.index('{') == 0
82
- nval = JSON.parse(nval) rescue nval
84
+ if v.is_a?(Array)
85
+ v.map! do |e|
86
+ e = safe_parse_json(e)
87
+ end
88
+ else
89
+ v = safe_parse_json(v)
83
90
  end
84
-
85
- nitem[nkey] = nval
86
91
  end
87
- ncoll << nitem
88
92
  end
89
- [ data[0], ncoll ]
93
+ data
94
+ end
95
+
96
+ def safe_parse_json(s)
97
+ JSON.parse(s) rescue s
90
98
  end
91
99
 
92
100
  # Merge Thor options with those stored in sonar.rc file
data/lib/sonar/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Sonar
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -7,15 +7,39 @@ describe Sonar::CLI do
7
7
  Sonar::RCFile.instance.path = "#{fixtures_path}/sonar.rc"
8
8
  end
9
9
  it "should return the profile" do
10
- output = capture(:stdout) { Sonar::CLI.start(['profile']) }
10
+ output = run_command('profile')
11
11
  expect(output).to match(/email@asdfasdfasfd.com/)
12
12
  end
13
- end
14
- context "without a config file" do
15
- before do
16
- Sonar::RCFile.instance.path = ""
13
+
14
+ context 'client that returns an rdns resp' do
15
+ before do
16
+ allow_any_instance_of(Sonar::Client).to receive(:search).and_return(
17
+ { 'collection' => [{ 'address' => '192.168.1.1 ' }], 'more' => 'false' }
18
+ )
19
+ end
20
+ it 'strips whitespace from values' do
21
+ output = run_command('search rdns 8.8.8.8')
22
+ expect(output).to eq('{"collection":[{"address":"192.168.1.1"}],"more":"false"}')
23
+ end
24
+ it 'can return lines format' do
25
+ output = run_command('search --format lines rdns 8.8.8.8')
26
+ expect(output).to eq('{"address":"192.168.1.1"}')
27
+ end
17
28
  end
18
- xit "should create the missing config file" do
29
+ context 'client that returns sslcert reply with nested json' do
30
+ before do
31
+ allow_any_instance_of(Sonar::Client).to receive(:search).and_return(
32
+ Sonar::Client.new.search(sslcert: '152a0a633aaf13f02c428ac1a3e672e895512bfd')
33
+ )
34
+ end
35
+ it 'parses the nested values in an array' do
36
+ output = run_command('search sslcert 152a0a633aaf13f02c428ac1a3e672e895512bfd')
37
+ expect(JSON.parse(output)['collection'].first['details'].first['subject']['ST']).to eq('California')
38
+ end
19
39
  end
20
40
  end
41
+
42
+ def run_command(args)
43
+ capture(:stdout) { Sonar::CLI.start(args.split) }.strip
44
+ end
21
45
  end
data/spec/spec_helper.rb CHANGED
@@ -28,8 +28,6 @@ end
28
28
  RSpec.configure do |c|
29
29
  c.include APIMatchers::RSpecMatchers
30
30
 
31
- c.treat_symbols_as_metadata_keys_with_true_values = true
32
-
33
31
  #
34
32
  # Add gem specific configuration for easy access
35
33
  #
@@ -50,6 +48,19 @@ RSpec.configure do |c|
50
48
  end
51
49
  end
52
50
 
51
+ def capture(stream)
52
+ begin
53
+ stream = stream.to_s
54
+ eval "$#{stream} = StringIO.new"
55
+ yield
56
+ result = eval("$#{stream}").string
57
+ ensure
58
+ eval("$#{stream} = #{stream.upcase}")
59
+ end
60
+
61
+ result
62
+ end
63
+
53
64
  def fixtures_path
54
65
  File.expand_path('../fixtures', __FILE__)
55
66
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sonar-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Deardorff & HD Moore
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-08 00:00:00.000000000 Z
11
+ date: 2015-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday_middleware
@@ -233,7 +233,6 @@ files:
233
233
  - .rspec
234
234
  - .rubocop.yml
235
235
  - Gemfile
236
- - Gemfile.lock
237
236
  - LICENSE
238
237
  - README.md
239
238
  - Rakefile
data/Gemfile.lock DELETED
@@ -1,94 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- sonar-client (0.0.3)
5
- awesome_print
6
- faraday_middleware (~> 0.9.0)
7
- hashie (~> 2.0.3)
8
- multi_json
9
- thor
10
-
11
- GEM
12
- remote: https://rubygems.org/
13
- specs:
14
- activesupport (4.2.0)
15
- i18n (~> 0.7)
16
- json (~> 1.7, >= 1.7.7)
17
- minitest (~> 5.1)
18
- thread_safe (~> 0.3, >= 0.3.4)
19
- tzinfo (~> 1.1)
20
- addressable (2.3.6)
21
- api_matchers (0.5.1)
22
- activesupport (>= 3.2.5)
23
- nokogiri (>= 1.5.2)
24
- rspec (>= 2.14)
25
- awesome_print (1.6.1)
26
- crack (0.4.2)
27
- safe_yaml (~> 1.0.0)
28
- diff-lcs (1.2.5)
29
- docile (1.1.5)
30
- faraday (0.9.1)
31
- multipart-post (>= 1.2, < 3)
32
- faraday_middleware (0.9.1)
33
- faraday (>= 0.7.4, < 0.10)
34
- hashie (2.0.5)
35
- i18n (0.7.0)
36
- json (1.8.2)
37
- mini_portile (0.6.2)
38
- minitest (5.5.1)
39
- multi_json (1.10.1)
40
- multipart-post (2.0.0)
41
- nokogiri (1.6.5)
42
- mini_portile (~> 0.6.0)
43
- rake (10.4.2)
44
- rspec (3.1.0)
45
- rspec-core (~> 3.1.0)
46
- rspec-expectations (~> 3.1.0)
47
- rspec-mocks (~> 3.1.0)
48
- rspec-core (3.1.7)
49
- rspec-support (~> 3.1.0)
50
- rspec-expectations (3.1.2)
51
- diff-lcs (>= 1.2.0, < 2.0)
52
- rspec-support (~> 3.1.0)
53
- rspec-mocks (3.1.3)
54
- rspec-support (~> 3.1.0)
55
- rspec-support (3.1.2)
56
- safe_yaml (1.0.4)
57
- shoulda (3.5.0)
58
- shoulda-context (~> 1.0, >= 1.0.1)
59
- shoulda-matchers (>= 1.4.1, < 3.0)
60
- shoulda-context (1.2.1)
61
- shoulda-matchers (2.7.0)
62
- activesupport (>= 3.0.0)
63
- simplecov (0.9.1)
64
- docile (~> 1.1.0)
65
- multi_json (~> 1.0)
66
- simplecov-html (~> 0.8.0)
67
- simplecov-html (0.8.0)
68
- simplecov-rcov (0.2.3)
69
- simplecov (>= 0.4.1)
70
- thor (0.19.1)
71
- thread_safe (0.3.4)
72
- tzinfo (1.2.2)
73
- thread_safe (~> 0.1)
74
- vcr (2.8.0)
75
- webmock (1.8.11)
76
- addressable (>= 2.2.7)
77
- crack (>= 0.1.7)
78
- yard (0.8.7.6)
79
-
80
- PLATFORMS
81
- ruby
82
-
83
- DEPENDENCIES
84
- api_matchers
85
- bundler
86
- rake
87
- rspec
88
- shoulda
89
- simplecov
90
- simplecov-rcov
91
- sonar-client!
92
- vcr (~> 2.8.0)
93
- webmock (~> 1.8.0)
94
- yard