lugg 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 269ec3ed7cc8b001cb923289fcc45a991f1d6fbb
4
- data.tar.gz: 9f34b5919963cfc7f972887ab416d6d1e21abf92
3
+ metadata.gz: abcad075a8a7f632dbf9fd6d144291d3ae4273c9
4
+ data.tar.gz: 2a24b47421c0b4c40615f1a8ccff3158b64b8897
5
5
  SHA512:
6
- metadata.gz: 4c2a1b31b30905a76ce343f57510fa5373dfbe06c499b9819d57e7e40e90cf11eb3ea6f858eeb3390f3fabe8a92d466984b39e7bf5f6b9fbe3584d35678efbef
7
- data.tar.gz: c673f9f5112bb7233ec78c882d913bbecbb7a5f425043ae5053eae42183d0930397469b0d411ef621ea6d47082b76143ed20f7f99a6ddba40c89526889b3ed0b
6
+ metadata.gz: 685c248a1c3da1cc2798164108a18538062aece46f8edf00d7104e3c07354895ba73249e330aee99547ce87d3b95f0c26ff50aaa6bf85f9e1de08660307e2594
7
+ data.tar.gz: 83940e320771cb6d5b5c37a430dd5c001f728db52f0d332bef0bbec51cd213ff448065dc47dd6a4599a58c2a16b104f19d38471dff2fcd2a15fecc5f9f1e8abb
@@ -24,13 +24,9 @@ LineLength:
24
24
  AndOr:
25
25
  Enabled: false
26
26
 
27
- ClassLength:
28
- Exclude:
29
- - lib/lugg/runner.rb
30
-
31
- MethodLength:
32
- Exclude:
33
- - lib/lugg/runner.rb
34
-
35
27
  DoubleNegation:
36
28
  Enabled: false
29
+
30
+ TrivialAccessors:
31
+ Exclude:
32
+ - lib/lugg/switch.rb
@@ -74,8 +74,11 @@ module Lugg
74
74
 
75
75
  def params
76
76
  params_string = source[/^ Parameters: (.+)$/, 1]
77
- return {} unless params_string
78
- eval(params_string) rescue {} # rubocop:disable Eval, RescueModifier
77
+ String(params_string)
78
+ .scan(/(?<!\\)"(.+?)(?<!\\)"=>(?<!\\)"(.+?)(?<!\\)"/)
79
+ .each_with_object({}) do |match, output|
80
+ output[match[0]] = match[1]
81
+ end
79
82
  end
80
83
  end
81
84
  end
@@ -1,6 +1,7 @@
1
1
  require 'lugg/version'
2
2
  require 'lugg/filter'
3
3
  require 'lugg/streamer'
4
+ require 'lugg/switches'
4
5
  require 'optparse'
5
6
  require 'optparse/time'
6
7
 
@@ -29,17 +30,6 @@ module Lugg
29
30
  end
30
31
  end
31
32
 
32
- private
33
-
34
- def reset
35
- @combine = false
36
- @last_block = nil
37
- end
38
-
39
- def combine_clauses?
40
- @combine && @last_block
41
- end
42
-
43
33
  def add_clause(&block)
44
34
  if combine_clauses?
45
35
  prev_block = @last_block
@@ -51,6 +41,12 @@ module Lugg
51
41
  end
52
42
  end
53
43
 
44
+ def combine_next
45
+ @combine = true
46
+ end
47
+
48
+ private
49
+
54
50
  def options
55
51
  @options ||= OptionParser.new do |o|
56
52
  o.banner = <<-EOS
@@ -60,91 +56,17 @@ Parses log entries from FILE or STDIN and uses [options] to control what is
60
56
  sent STDOUT.
61
57
  EOS
62
58
  o.separator ''
59
+ Switch.apply_all(o, self)
60
+ end
61
+ end
63
62
 
64
- o.on '--and',
65
- 'Combine previous and next clause with AND instead of OR' do
66
- @combine = true
67
- end
68
-
69
- %w(get post put delete head patch).each do |verb|
70
- o.on "--#{verb}", "Limit to #{verb.upcase} requests" do
71
- add_clause { |r| r.method == verb.upcase }
72
- end
73
- end
74
-
75
- o.on '-c',
76
- '--controller CONTROLLER',
77
- 'Limit to requests handled by CONTROLLER' do |controller|
78
- add_clause { |r| r.controller == controller }
79
- end
80
-
81
- o.on '-a',
82
- '--action CONTROLLER_ACTION',
83
- 'Limit to requests handled by CONTROLLER_ACTION' do |ca|
84
- add_clause { |r| r.action == ca }
85
- end
86
-
87
- %w(json html xml csv pdf js).each do |format|
88
- o.on "--#{format}", "Limit to #{format} requests" do
89
- add_clause { |r| r.format.downcase == format }
90
- end
91
- end
92
-
93
- o.on '-f', '--format FORMAT', 'Limit to FORMAT requests' do |format|
94
- add_clause { |r| r.format.downcase == format.downcase }
95
- end
96
-
97
- o.on '-s',
98
- '--status CODE',
99
- 'Limit requests with status code CODE' do |code|
100
- add_clause { |r| r.code == code }
101
- end
102
-
103
- o.on '--since TIME',
104
- Time,
105
- 'Limit to requests made after TIME' do |time|
106
- add_clause { |r| r.timestamp > time }
107
- end
108
-
109
- o.on '--until TIME',
110
- Time,
111
- 'Limit to requests made before TIME' do |time|
112
- add_clause { |r| r.timestamp < time }
113
- end
114
-
115
- o.on '-d',
116
- '--duration N',
117
- Integer,
118
- 'Limit to requests longer than N ms' do |n|
119
- add_clause { |r| r.duration > n }
120
- end
121
-
122
- o.on '-u',
123
- '--uri URI',
124
- Regexp,
125
- 'Limit to requests matching URI' do |uri|
126
- add_clause { |r| r.uri =~ uri }
127
- end
128
-
129
- o.on '-p',
130
- '--param KEY=VAL',
131
- 'Limit to requests with param KEY => VAL' do |param|
132
- key, value = param.split('=', 2)
133
- add_clause { |r| r.params[key] == value }
134
- end
135
-
136
- o.separator ''
137
-
138
- o.on_tail '-v', '--version', 'Display version number' do
139
- puts Lugg::VERSION
140
- exit
141
- end
63
+ def reset
64
+ @combine = false
65
+ @last_block = nil
66
+ end
142
67
 
143
- o.on_tail '-h', '--help', 'Display this message' do
144
- puts o
145
- exit
146
- end
147
- end
68
+ def combine_clauses?
69
+ @combine && @last_block
148
70
  end
149
71
  end
150
72
  end
@@ -0,0 +1,58 @@
1
+ module Lugg
2
+ # An object representing a command line swith with certain behaviour. The
3
+ # Runner applies switches to its own internal `OptionParser` object to build
4
+ # the CLI and provide querying functionality.
5
+ #
6
+ # @see Runner
7
+ class Switch
8
+ @queries = []
9
+
10
+ # Define a new Switch object and add it to the global collection of
11
+ # switches.
12
+ def self.define(*args, &block)
13
+ @queries << new(*args).tap { |obj| obj.instance_eval(&block) }
14
+ end
15
+
16
+ # Call {#apply} on each {Switch} in the global collection to register the
17
+ # callback on a given object.
18
+ def self.apply_all(*args)
19
+ @queries.each do |query|
20
+ query.apply_to(*args)
21
+ end
22
+ end
23
+
24
+ def initialize(method = :on)
25
+ @method = method
26
+ @flags = nil
27
+ @cast = nil
28
+ @desc = nil
29
+ @action = nil
30
+ end
31
+
32
+ def apply_to(options, obj)
33
+ @options = options
34
+ @obj = obj
35
+ @options.send(@method, *[@flags, @cast, @desc].flatten.compact, &@action)
36
+ end
37
+
38
+ private
39
+
40
+ def flags(*flags)
41
+ @flags = flags
42
+ end
43
+
44
+ def cast(obj)
45
+ @cast = obj
46
+ end
47
+
48
+ def desc(msg)
49
+ @desc = msg
50
+ end
51
+
52
+ def action(&block)
53
+ @action = block
54
+ end
55
+
56
+ attr_reader :options, :obj
57
+ end
58
+ end
@@ -0,0 +1,127 @@
1
+ require 'lugg/switch'
2
+
3
+ # Collection of available command line argument switches and their behaviour.
4
+ module Lugg
5
+ Switch.define do
6
+ flags '--and'
7
+ desc 'Combine previous and next clause with AND instead of OR'
8
+ action do
9
+ obj.combine_next
10
+ end
11
+ end
12
+
13
+ %w(get post put delete head patch).each do |verb|
14
+ Switch.define do
15
+ flags "--#{verb}"
16
+ desc "Limit to #{verb.upcase} requests"
17
+ action do
18
+ obj.add_clause { |r| r.method == verb.upcase }
19
+ end
20
+ end
21
+ end
22
+
23
+ Switch.define do
24
+ flags '-c', '--controller CONTROLLER'
25
+ desc 'Limit to requests handled by CONTROLLER'
26
+ action do |controller|
27
+ obj.add_clause { |r| r.controller == controller }
28
+ end
29
+ end
30
+
31
+ Switch.define do
32
+ flags '-a', '--action CONTROLLER_ACTION'
33
+ desc 'Limit to requests handled by CONTROLLER_ACTION'
34
+ action do |ca|
35
+ obj.add_clause { |r| r.action == ca }
36
+ end
37
+ end
38
+
39
+ %w(json html xml csv pdf js).each do |format|
40
+ Switch.define do
41
+ flags "--#{format}"
42
+ desc "Limit to #{format} requests"
43
+ action do
44
+ obj.add_clause { |r| r.format.downcase == format }
45
+ end
46
+ end
47
+ end
48
+
49
+ Switch.define do
50
+ flags '-f', '--format FORMAT'
51
+ desc 'Limit to FORMAT requests'
52
+ action do |format|
53
+ obj.add_clause { |r| r.format.downcase == format.downcase }
54
+ end
55
+ end
56
+
57
+ Switch.define do
58
+ flags '-s', '--status CODE'
59
+ desc 'Limit requests with status code CODE'
60
+ action do |code|
61
+ obj.add_clause { |r| r.code == code }
62
+ end
63
+ end
64
+
65
+ Switch.define do
66
+ flags '--since TIME'
67
+ cast Time
68
+ desc 'Limit to requests made after TIME'
69
+ action do |time|
70
+ obj.add_clause { |r| r.timestamp > time }
71
+ end
72
+ end
73
+
74
+ Switch.define do
75
+ flags '--until TIME'
76
+ cast Time
77
+ desc 'Limit to requests made before TIME'
78
+ action do |time|
79
+ obj.add_clause { |r| r.timestamp < time }
80
+ end
81
+ end
82
+
83
+ Switch.define do
84
+ flags '-d', '--duration N'
85
+ cast Integer
86
+ desc 'Limit to requests longer than N ms'
87
+ action do |n|
88
+ obj.add_clause { |r| r.duration > n }
89
+ end
90
+ end
91
+
92
+ Switch.define do
93
+ flags '-u', '--uri URI'
94
+ cast Regexp
95
+ desc 'Limit to requests matching URI'
96
+ action do |uri|
97
+ obj.add_clause { |r| r.uri =~ uri }
98
+ end
99
+ end
100
+
101
+ Switch.define do
102
+ flags '-p', '--param PAIR'
103
+ desc 'Limit to requests with param KEY => VAL'
104
+ action do |param|
105
+ key, value = param.split('=', 2)
106
+ obj.add_clause { |r| r.params[key] == value }
107
+ end
108
+ end
109
+
110
+ Switch.define :on_tail do
111
+ flags '-v', '--version'
112
+ desc 'Display version number'
113
+ action do
114
+ puts Lugg::VERSION
115
+ exit
116
+ end
117
+ end
118
+
119
+ Switch.define :on_tail do
120
+ flags '-h', '--help'
121
+ desc 'Display this message'
122
+ action do
123
+ puts options
124
+ exit
125
+ end
126
+ end
127
+ end
@@ -1,3 +1,3 @@
1
1
  module Lugg
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
@@ -32,7 +32,7 @@ module Lugg
32
32
  let(:options) { %w(--post --and --controller PostsController) }
33
33
  let(:input) { "Started GET\nProcessing by PostsController#index as HTML\nCompleted 1\nStarted POST\nProcessing by BlogController#create as HTML\nCompleted 2\n" }
34
34
 
35
- it 'limits requests to GET requests' do
35
+ it 'limits to post requests in PostsController' do
36
36
  subject.run(StringIO.new(input))
37
37
  expect(stdout.string).to eql("Started POST\nProcessing by BlogController#create as HTML\nCompleted 2\n")
38
38
  end
@@ -42,7 +42,7 @@ module Lugg
42
42
  let(:options) { %w(--controller PostsController) }
43
43
  let(:input) { "Started GET\nProcessing by PostsController#index as HTML\nCompleted 1\nStarted POST\nProcessing by BlogController#create as HTML\nCompleted 2\n" }
44
44
 
45
- it 'limits requests to GET requests' do
45
+ it 'limits to just PostController' do
46
46
  subject.run(StringIO.new(input))
47
47
  expect(stdout.string).to eql("Started GET\nProcessing by PostsController#index as HTML\nCompleted 1\n")
48
48
  end
@@ -52,17 +52,17 @@ module Lugg
52
52
  let(:options) { %w(--since 2012-03-20) }
53
53
  let(:input) { "Started GET at 2012-03-21 12:00 +0100\nCompleted 1\nStarted GET at 2012-03-19\nProcessing by BlogController#create as HTML\nCompleted 2\n" }
54
54
 
55
- it 'limits requests to GET requests' do
55
+ it 'limits to after the date' do
56
56
  subject.run(StringIO.new(input))
57
57
  expect(stdout.string).to eql("Started GET at 2012-03-21 12:00 +0100\nCompleted 1\n")
58
58
  end
59
59
  end
60
60
 
61
- context 'with --param foo=bar' do
62
- let(:options) { ['--param', 'foo=val'] }
61
+ context 'with --param foo=val' do
62
+ let(:options) { %w(--param foo=val) }
63
63
  let(:input) { "Started GET\n Parameters: {\"foo\"=>\"val\"}\nCompleted 1\nStarted POST\nProcessing by BlogController#create as HTML\nCompleted 2\n" }
64
64
 
65
- it 'limits requests to GET requests' do
65
+ it 'limits to requests with given param' do
66
66
  subject.run(StringIO.new(input))
67
67
  expect(stdout.string).to eql("Started GET\n Parameters: {\"foo\"=>\"val\"}\nCompleted 1\n")
68
68
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lugg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arjan van der Gaag
@@ -107,6 +107,8 @@ files:
107
107
  - lib/lugg/request_matcher.rb
108
108
  - lib/lugg/runner.rb
109
109
  - lib/lugg/streamer.rb
110
+ - lib/lugg/switch.rb
111
+ - lib/lugg/switches.rb
110
112
  - lib/lugg/version.rb
111
113
  - lugg.gemspec
112
114
  - spec/fixtures/example.log