request-log-analyzer 1.13.1 → 1.13.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/bin/console +17 -0
  4. data/lib/cli/command_line_arguments.rb +29 -36
  5. data/lib/cli/database_console.rb +1 -3
  6. data/lib/cli/database_console_init.rb +11 -11
  7. data/lib/cli/progressbar.rb +30 -32
  8. data/lib/cli/tools.rb +20 -23
  9. data/lib/request_log_analyzer.rb +8 -8
  10. data/lib/request_log_analyzer/aggregator.rb +4 -7
  11. data/lib/request_log_analyzer/aggregator/database_inserter.rb +10 -13
  12. data/lib/request_log_analyzer/aggregator/echo.rb +5 -7
  13. data/lib/request_log_analyzer/aggregator/summarizer.rb +15 -18
  14. data/lib/request_log_analyzer/class_level_inheritable_attributes.rb +23 -0
  15. data/lib/request_log_analyzer/controller.rb +36 -42
  16. data/lib/request_log_analyzer/database.rb +4 -6
  17. data/lib/request_log_analyzer/database/base.rb +39 -41
  18. data/lib/request_log_analyzer/database/connection.rb +8 -10
  19. data/lib/request_log_analyzer/database/request.rb +1 -3
  20. data/lib/request_log_analyzer/database/source.rb +0 -2
  21. data/lib/request_log_analyzer/database/warning.rb +4 -6
  22. data/lib/request_log_analyzer/file_format.rb +46 -49
  23. data/lib/request_log_analyzer/file_format/amazon_s3.rb +15 -19
  24. data/lib/request_log_analyzer/file_format/apache.rb +42 -45
  25. data/lib/request_log_analyzer/file_format/delayed_job.rb +13 -15
  26. data/lib/request_log_analyzer/file_format/delayed_job2.rb +9 -11
  27. data/lib/request_log_analyzer/file_format/delayed_job21.rb +9 -11
  28. data/lib/request_log_analyzer/file_format/delayed_job3.rb +5 -8
  29. data/lib/request_log_analyzer/file_format/delayed_job4.rb +5 -8
  30. data/lib/request_log_analyzer/file_format/haproxy.rb +44 -48
  31. data/lib/request_log_analyzer/file_format/merb.rb +13 -17
  32. data/lib/request_log_analyzer/file_format/mysql.rb +21 -25
  33. data/lib/request_log_analyzer/file_format/nginx.rb +0 -2
  34. data/lib/request_log_analyzer/file_format/oink.rb +30 -31
  35. data/lib/request_log_analyzer/file_format/postgresql.rb +11 -15
  36. data/lib/request_log_analyzer/file_format/rack.rb +0 -2
  37. data/lib/request_log_analyzer/file_format/rails.rb +100 -104
  38. data/lib/request_log_analyzer/file_format/rails3.rb +19 -23
  39. data/lib/request_log_analyzer/file_format/rails_development.rb +0 -1
  40. data/lib/request_log_analyzer/file_format/w3c.rb +16 -18
  41. data/lib/request_log_analyzer/filter.rb +0 -2
  42. data/lib/request_log_analyzer/filter/anonymize.rb +4 -7
  43. data/lib/request_log_analyzer/filter/field.rb +3 -6
  44. data/lib/request_log_analyzer/filter/timespan.rb +2 -6
  45. data/lib/request_log_analyzer/line_definition.rb +16 -19
  46. data/lib/request_log_analyzer/log_processor.rb +10 -14
  47. data/lib/request_log_analyzer/mailer.rb +9 -12
  48. data/lib/request_log_analyzer/output.rb +12 -14
  49. data/lib/request_log_analyzer/output/fixed_width.rb +21 -28
  50. data/lib/request_log_analyzer/output/html.rb +11 -14
  51. data/lib/request_log_analyzer/request.rb +53 -33
  52. data/lib/request_log_analyzer/source.rb +2 -5
  53. data/lib/request_log_analyzer/source/log_parser.rb +9 -16
  54. data/lib/request_log_analyzer/tracker.rb +10 -12
  55. data/lib/request_log_analyzer/tracker/duration.rb +4 -6
  56. data/lib/request_log_analyzer/tracker/frequency.rb +9 -11
  57. data/lib/request_log_analyzer/tracker/hourly_spread.rb +8 -11
  58. data/lib/request_log_analyzer/tracker/numeric_value.rb +40 -44
  59. data/lib/request_log_analyzer/tracker/timespan.rb +5 -8
  60. data/lib/request_log_analyzer/tracker/traffic.rb +8 -10
  61. data/lib/request_log_analyzer/version.rb +1 -1
  62. data/request-log-analyzer.gemspec +6 -6
  63. data/spec/integration/command_line_usage_spec.rb +33 -33
  64. data/spec/integration/mailer_spec.rb +181 -185
  65. data/spec/integration/munin_plugins_rails_spec.rb +20 -20
  66. data/spec/integration/scout_spec.rb +40 -41
  67. data/spec/lib/helpers.rb +8 -9
  68. data/spec/lib/macros.rb +2 -4
  69. data/spec/lib/matchers.rb +20 -25
  70. data/spec/lib/mocks.rb +10 -11
  71. data/spec/lib/testing_format.rb +8 -10
  72. data/spec/spec_helper.rb +5 -1
  73. data/spec/unit/aggregator/database_inserter_spec.rb +23 -23
  74. data/spec/unit/aggregator/summarizer_spec.rb +7 -7
  75. data/spec/unit/controller/controller_spec.rb +14 -14
  76. data/spec/unit/controller/log_processor_spec.rb +3 -3
  77. data/spec/unit/database/base_class_spec.rb +36 -37
  78. data/spec/unit/database/connection_spec.rb +10 -10
  79. data/spec/unit/database/database_spec.rb +11 -11
  80. data/spec/unit/file_format/amazon_s3_format_spec.rb +66 -62
  81. data/spec/unit/file_format/apache_format_spec.rb +57 -52
  82. data/spec/unit/file_format/common_regular_expressions_spec.rb +18 -21
  83. data/spec/unit/file_format/delayed_job21_format_spec.rb +22 -16
  84. data/spec/unit/file_format/delayed_job2_format_spec.rb +22 -16
  85. data/spec/unit/file_format/delayed_job3_format_spec.rb +14 -10
  86. data/spec/unit/file_format/delayed_job4_format_spec.rb +14 -10
  87. data/spec/unit/file_format/delayed_job_format_spec.rb +12 -12
  88. data/spec/unit/file_format/file_format_api_spec.rb +19 -19
  89. data/spec/unit/file_format/format_autodetection_spec.rb +7 -7
  90. data/spec/unit/file_format/haproxy_format_spec.rb +53 -49
  91. data/spec/unit/file_format/inheritance_spec.rb +13 -0
  92. data/spec/unit/file_format/line_definition_spec.rb +35 -33
  93. data/spec/unit/file_format/merb_format_spec.rb +13 -11
  94. data/spec/unit/file_format/mysql_format_spec.rb +24 -24
  95. data/spec/unit/file_format/oink_format_spec.rb +29 -29
  96. data/spec/unit/file_format/postgresql_format_spec.rb +9 -9
  97. data/spec/unit/file_format/rack_format_spec.rb +36 -31
  98. data/spec/unit/file_format/rails3_format_spec.rb +46 -46
  99. data/spec/unit/file_format/rails_format_spec.rb +52 -53
  100. data/spec/unit/file_format/w3c_format_spec.rb +27 -24
  101. data/spec/unit/filter/anonymize_filter_spec.rb +7 -7
  102. data/spec/unit/filter/field_filter_spec.rb +26 -26
  103. data/spec/unit/filter/filter_spec.rb +4 -4
  104. data/spec/unit/filter/timespan_filter_spec.rb +22 -22
  105. data/spec/unit/mailer_spec.rb +21 -21
  106. data/spec/unit/request_spec.rb +29 -29
  107. data/spec/unit/source/log_parser_spec.rb +5 -5
  108. data/spec/unit/tracker/duration_tracker_spec.rb +23 -23
  109. data/spec/unit/tracker/frequency_tracker_spec.rb +29 -30
  110. data/spec/unit/tracker/hourly_spread_spec.rb +35 -35
  111. data/spec/unit/tracker/numeric_value_tracker_spec.rb +71 -72
  112. data/spec/unit/tracker/timespan_tracker_spec.rb +31 -31
  113. data/spec/unit/tracker/tracker_api_spec.rb +43 -44
  114. data/spec/unit/tracker/traffic_tracker_spec.rb +7 -7
  115. metadata +38 -35
@@ -1,30 +1,29 @@
1
1
  # Simple log file specification, used to test log parser.
2
2
  class TestingFormat < RequestLogAnalyzer::FileFormat::Base
3
-
4
3
  format_definition.first do |line|
5
4
  line.header = true
6
5
  line.teaser = /processing /
7
6
  line.regexp = /processing request (\d+)/
8
- line.captures = [{ :name => :request_no, :type => :integer }]
7
+ line.captures = [{ name: :request_no, type: :integer }]
9
8
  end
10
9
 
11
10
  format_definition.test do |line|
12
11
  line.teaser = /testing /
13
12
  line.regexp = /testing is (\w+)(?: in (\d+\.\d+)ms)?/
14
- line.captures = [{ :name => :test_capture, :type => :test_type },
15
- { :name => :duration, :type => :duration, :unit => :msec }]
13
+ line.captures = [{ name: :test_capture, type: :test_type },
14
+ { name: :duration, type: :duration, unit: :msec }]
16
15
  end
17
16
 
18
17
  format_definition.eval do |line|
19
18
  line.regexp = /evaluation (\{.*\})/
20
- line.captures = [{ :name => :evaluated, :type => :eval, :provides => { :greating => :string, :what => :string } }]
19
+ line.captures = [{ name: :evaluated, type: :eval, provides: { greating: :string, what: :string } }]
21
20
  end
22
21
 
23
22
  format_definition.last do |line|
24
23
  line.footer = true
25
24
  line.teaser = /finishing /
26
25
  line.regexp = /finishing request (\d+)/
27
- line.captures = [{ :name => :request_no, :type => :integer }]
26
+ line.captures = [{ name: :request_no, type: :integer }]
28
27
  end
29
28
 
30
29
  format_definition.combined do |line|
@@ -34,13 +33,12 @@ class TestingFormat < RequestLogAnalyzer::FileFormat::Base
34
33
  end
35
34
 
36
35
  report do |analyze|
37
- analyze.frequency :test_capture, :title => 'What is testing exactly?'
36
+ analyze.frequency :test_capture, title: 'What is testing exactly?'
38
37
  end
39
38
 
40
39
  class Request < RequestLogAnalyzer::Request
41
- def convert_test_type(value, definition)
40
+ def convert_test_type(value, _definition)
42
41
  "Testing is #{value}"
43
42
  end
44
43
  end
45
-
46
- end
44
+ end
@@ -9,7 +9,7 @@ module RequestLogAnalyzer::RSpec
9
9
  end
10
10
 
11
11
  # Include all files in the spec_helper directory
12
- Dir[File.dirname(__FILE__) + "/lib/**/*.rb"].each do |file|
12
+ Dir[File.dirname(__FILE__) + '/lib/**/*.rb'].each do |file|
13
13
  require file
14
14
  end
15
15
 
@@ -21,4 +21,8 @@ RSpec.configure do |config|
21
21
  config.include RequestLogAnalyzer::RSpec::Helpers
22
22
 
23
23
  config.extend RequestLogAnalyzer::RSpec::Macros
24
+
25
+ config.expect_with :rspec do |c|
26
+ c.syntax = :should
27
+ end
24
28
  end
@@ -21,7 +21,7 @@ describe RequestLogAnalyzer::Aggregator::DatabaseInserter do
21
21
  @database_inserter.prepare
22
22
  end
23
23
 
24
- it "should set the file_format" do
24
+ it 'should set the file_format' do
25
25
  @database.should_receive(:file_format=).with(testing_format)
26
26
  @database_inserter.prepare
27
27
  end
@@ -48,46 +48,46 @@ describe RequestLogAnalyzer::Aggregator::DatabaseInserter do
48
48
  context "using a #{name} database" do
49
49
 
50
50
  before(:each) do
51
- @database_inserter = RequestLogAnalyzer::Aggregator::DatabaseInserter.new(@log_parser, :database => connection, :reset_database => true)
51
+ @database_inserter = RequestLogAnalyzer::Aggregator::DatabaseInserter.new(@log_parser, database: connection, reset_database: true)
52
52
  @database_inserter.prepare
53
53
 
54
- @incomplete_request = testing_format.request( {:line_type => :first, :request_no => 564})
55
- @completed_request = testing_format.request( {:line_type => :first, :request_no => 564},
56
- {:line_type => :test, :test_capture => "awesome"},
57
- {:line_type => :test, :test_capture => "indeed"},
58
- {:line_type => :eval, :evaluated => { :greating => 'howdy'}, :greating => 'howdy' },
59
- {:line_type => :last, :request_no => 564})
54
+ @incomplete_request = testing_format.request(line_type: :first, request_no: 564)
55
+ @completed_request = testing_format.request({ line_type: :first, request_no: 564 },
56
+ { line_type: :test, test_capture: 'awesome' },
57
+ { line_type: :test, test_capture: 'indeed' },
58
+ { line_type: :eval, evaluated: { greating: 'howdy' }, greating: 'howdy' },
59
+ { line_type: :last, request_no: 564 })
60
60
  end
61
61
 
62
62
  after(:each) do
63
63
  @database_inserter.database.send :remove_orm_classes!
64
64
  end
65
65
 
66
- it "should insert a record in the request table" do
67
- lambda {
66
+ it 'should insert a record in the request table' do
67
+ lambda do
68
68
  @database_inserter.aggregate(@incomplete_request)
69
- }.should change(RequestLogAnalyzer::Database::Request, :count).from(0).to(1)
69
+ end.should change(RequestLogAnalyzer::Database::Request, :count).from(0).to(1)
70
70
  end
71
71
 
72
- it "should insert a record in the first_lines table" do
73
- lambda {
72
+ it 'should insert a record in the first_lines table' do
73
+ lambda do
74
74
  @database_inserter.aggregate(@incomplete_request)
75
- }.should change(@database_inserter.database.get_class(:first), :count).from(0).to(1)
75
+ end.should change(@database_inserter.database.get_class(:first), :count).from(0).to(1)
76
76
  end
77
77
 
78
- it "should insert records in all relevant line tables" do
78
+ it 'should insert records in all relevant line tables' do
79
79
  @database_inserter.aggregate(@completed_request)
80
80
  request = RequestLogAnalyzer::Database::Request.first
81
- request.should have(2).test_lines
82
- request.should have(1).first_lines
83
- request.should have(1).eval_lines
84
- request.should have(1).last_lines
81
+ request.should satisfy { |r| r.test_lines.length == 2 }
82
+ request.should satisfy { |r| r.first_lines.length == 1 }
83
+ request.should satisfy { |r| r.eval_lines.length == 1 }
84
+ request.should satisfy { |r| r.last_lines.length == 1 }
85
85
  end
86
86
 
87
- it "should log a warning in the warnings table" do
88
- RequestLogAnalyzer::Database::Warning.should_receive(:create!).with(hash_including(:warning_type => 'test_warning'))
89
- @database_inserter.warning(:test_warning, "Testing the warning system", 12)
87
+ it 'should log a warning in the warnings table' do
88
+ RequestLogAnalyzer::Database::Warning.should_receive(:create!).with(hash_including(warning_type: 'test_warning'))
89
+ @database_inserter.warning(:test_warning, 'Testing the warning system', 12)
90
90
  end
91
91
  end
92
92
  end
93
- end
93
+ end
@@ -3,23 +3,23 @@ require 'spec_helper'
3
3
  describe RequestLogAnalyzer::Aggregator::Summarizer do
4
4
 
5
5
  before(:each) do
6
- @summarizer = RequestLogAnalyzer::Aggregator::Summarizer.new(mock_source, :output => mock_output)
6
+ @summarizer = RequestLogAnalyzer::Aggregator::Summarizer.new(mock_source, output: mock_output)
7
7
  @summarizer.prepare
8
8
  end
9
9
 
10
- it "not raise exception when creating a report after aggregating multiple requests" do
11
- @summarizer.aggregate(request(:data => 'bluh1'))
12
- @summarizer.aggregate(request(:data => 'bluh2'))
10
+ it 'not raise exception when creating a report after aggregating multiple requests' do
11
+ @summarizer.aggregate(request(data: 'bluh1'))
12
+ @summarizer.aggregate(request(data: 'bluh2'))
13
13
 
14
14
  lambda { @summarizer.report(mock_output) }.should_not raise_error
15
15
  end
16
16
 
17
- it "not raise exception when creating a report after aggregating a single request" do
18
- @summarizer.aggregate(request(:data => 'bluh1'))
17
+ it 'not raise exception when creating a report after aggregating a single request' do
18
+ @summarizer.aggregate(request(data: 'bluh1'))
19
19
  lambda { @summarizer.report(mock_output) }.should_not raise_error
20
20
  end
21
21
 
22
- it "not raise exception when creating a report after aggregating no requests" do
22
+ it 'not raise exception when creating a report after aggregating no requests' do
23
23
  lambda { @summarizer.report(mock_output) }.should_not raise_error
24
24
  end
25
25
 
@@ -2,40 +2,40 @@ require 'spec_helper'
2
2
 
3
3
  describe RequestLogAnalyzer::Controller do
4
4
 
5
- it "should use a custom output generator correctly" do
6
-
5
+ it 'should use a custom output generator correctly' do
6
+
7
7
  mock_output = double('RequestLogAnalyzer::Output::Base')
8
8
  mock_output.stub(:io).and_return(mock_io)
9
9
  mock_output.should_receive(:header)
10
10
  mock_output.should_receive(:footer)
11
11
 
12
- controller = RequestLogAnalyzer::Controller.new(mock_source, :output => mock_output)
12
+ controller = RequestLogAnalyzer::Controller.new(mock_source, output: mock_output)
13
13
 
14
14
  controller.run!
15
15
  end
16
16
 
17
- it "should call aggregators correctly when run" do
18
- controller = RequestLogAnalyzer::Controller.new(mock_source, :output => mock_output)
19
-
20
- mock_aggregator = double('RequestLogAnalyzer::Aggregator::Base')
17
+ it 'should call aggregators correctly when run' do
18
+ controller = RequestLogAnalyzer::Controller.new(mock_source, output: mock_output)
19
+
20
+ mock_aggregator = double('RequestLogAnalyzer::Aggregator::Base')
21
21
  mock_aggregator.should_receive(:prepare).once.ordered
22
22
  mock_aggregator.should_receive(:aggregate).with(an_instance_of(testing_format.request_class)).twice.ordered
23
23
  mock_aggregator.should_receive(:finalize).once.ordered
24
24
  mock_aggregator.should_receive(:report).once.ordered
25
-
25
+
26
26
  controller.aggregators << mock_aggregator
27
27
  controller.run!
28
28
  end
29
-
30
- it "should call filters when run" do
31
- controller = RequestLogAnalyzer::Controller.new(mock_source, :output => mock_output)
32
-
29
+
30
+ it 'should call filters when run' do
31
+ controller = RequestLogAnalyzer::Controller.new(mock_source, output: mock_output)
32
+
33
33
  mock_filter = double('RequestLogAnalyzer::Filter::Base')
34
34
  mock_filter.should_receive(:filter).twice.and_return(nil)
35
35
  controller.should_receive(:aggregate_request).twice.and_return(nil)
36
-
36
+
37
37
  controller.filters << mock_filter
38
38
  controller.run!
39
39
  end
40
-
40
+
41
41
  end
@@ -8,11 +8,11 @@ describe RequestLogAnalyzer::LogProcessor, 'stripping log files' do
8
8
  @log_stripper = RequestLogAnalyzer::LogProcessor.new(testing_format, :strip, {})
9
9
  end
10
10
 
11
- it "should remove a junk line" do
11
+ it 'should remove a junk line' do
12
12
  @log_stripper.strip_line("junk line\n").should be_empty
13
13
  end
14
14
 
15
- it "should keep a teaser line intact" do
15
+ it 'should keep a teaser line intact' do
16
16
  @log_stripper.strip_line("processing 1234\n").should be_empty
17
17
  end
18
- end
18
+ end
@@ -5,14 +5,14 @@ describe RequestLogAnalyzer::Database::Base do
5
5
 
6
6
  describe '.subclass_from_line_definition' do
7
7
  before(:all) do
8
- @line_definition = RequestLogAnalyzer::LineDefinition.new(:test, { :regexp => /Testing (\w+), tries\: (\d+)/,
9
- :captures => [{ :name => :what, :type => :string }, { :name => :tries, :type => :integer },
10
- { :name => :evaluated, :type => :hash, :provides => {:evaluated_field => :duration} }]})
8
+ @line_definition = RequestLogAnalyzer::LineDefinition.new(:test, regexp: /Testing (\w+), tries\: (\d+)/,
9
+ captures: [{ name: :what, type: :string }, { name: :tries, type: :integer },
10
+ { name: :evaluated, type: :hash, provides: { evaluated_field: :duration } }])
11
11
  end
12
12
 
13
13
  before(:each) do
14
14
  @orm_class = double('Line ActiveRecord::Base class')
15
- @orm_class.stub("table_name=")
15
+ @orm_class.stub('table_name=')
16
16
  @orm_class.stub(:belongs_to)
17
17
  @orm_class.stub(:serialize)
18
18
  @orm_class.stub(:line_definition=)
@@ -24,41 +24,41 @@ describe RequestLogAnalyzer::Database::Base do
24
24
  RequestLogAnalyzer::Database::Base.stub(:database).and_return(@database)
25
25
  end
26
26
 
27
- it "should create a new subclass using the Base class as parent" do
27
+ it 'should create a new subclass using the Base class as parent' do
28
28
  RequestLogAnalyzer::Database::Base.subclass_from_line_definition(@line_definition, @orm_class)
29
29
  end
30
30
 
31
- it "should store the LineDefinition" do
31
+ it 'should store the LineDefinition' do
32
32
  @orm_class.should_receive(:line_definition=).with(@line_definition)
33
33
  RequestLogAnalyzer::Database::Base.subclass_from_line_definition(@line_definition, @orm_class)
34
34
  end
35
35
 
36
- it "should set the table name for the subclass" do
37
- @orm_class.should_receive("table_name=").with('test_lines')
36
+ it 'should set the table name for the subclass' do
37
+ @orm_class.should_receive('table_name=').with('test_lines')
38
38
  RequestLogAnalyzer::Database::Base.subclass_from_line_definition(@line_definition, @orm_class)
39
39
  end
40
40
 
41
- it "should set the :belongs_to relationship with the Request class" do
42
- @orm_class.should_receive(:belongs_to).with(:request, {:class_name=>"RequestLogAnalyzer::Database::Request"})
41
+ it 'should set the :belongs_to relationship with the Request class' do
42
+ @orm_class.should_receive(:belongs_to).with(:request, class_name: 'RequestLogAnalyzer::Database::Request')
43
43
  RequestLogAnalyzer::Database::Base.subclass_from_line_definition(@line_definition, @orm_class)
44
44
  end
45
45
 
46
- it "should set a :has_many relationship in the request class" do
46
+ it 'should set a :has_many relationship in the request class' do
47
47
  RequestLogAnalyzer::Database::Request.should_receive(:has_many).with(:test_lines)
48
48
  RequestLogAnalyzer::Database::Base.subclass_from_line_definition(@line_definition, @orm_class)
49
49
  end
50
50
 
51
- it "should set a :has_many relationship in the source class" do
51
+ it 'should set a :has_many relationship in the source class' do
52
52
  RequestLogAnalyzer::Database::Source.should_receive(:has_many).with(:test_lines)
53
53
  RequestLogAnalyzer::Database::Base.subclass_from_line_definition(@line_definition, @orm_class)
54
54
  end
55
55
 
56
- it "should set the :belongs_to relationship with the Source class" do
57
- @orm_class.should_receive(:belongs_to).with(:source, {:class_name=>"RequestLogAnalyzer::Database::Source"})
56
+ it 'should set the :belongs_to relationship with the Source class' do
57
+ @orm_class.should_receive(:belongs_to).with(:source, class_name: 'RequestLogAnalyzer::Database::Source')
58
58
  RequestLogAnalyzer::Database::Base.subclass_from_line_definition(@line_definition, @orm_class)
59
59
  end
60
60
 
61
- it "should serialize a complex field" do
61
+ it 'should serialize a complex field' do
62
62
  @orm_class.should_receive(:serialize).with(:evaluated, Hash)
63
63
  RequestLogAnalyzer::Database::Base.subclass_from_line_definition(@line_definition, @orm_class)
64
64
  end
@@ -76,32 +76,32 @@ describe RequestLogAnalyzer::Database::Base do
76
76
  RequestLogAnalyzer::Database::Base.stub(:database).and_return(@database)
77
77
 
78
78
  @klass = double('ActiveRecord ORM class')
79
- @klass.stub(:column_names).and_return(['id', 'request_id', 'source_id', 'lineno', 'duration'])
80
- @klass.stub("table_name=")
79
+ @klass.stub(:column_names).and_return(%w(id request_id source_id lineno duration))
80
+ @klass.stub('table_name=')
81
81
  @klass.stub(:belongs_to)
82
82
  end
83
83
 
84
- it "should set the table name" do
85
- @klass.should_receive("table_name=").with('completed_lines')
84
+ it 'should set the table name' do
85
+ @klass.should_receive('table_name=').with('completed_lines')
86
86
  RequestLogAnalyzer::Database::Base.subclass_from_table('completed_lines', @klass)
87
87
  end
88
88
 
89
- it "should create the :belongs_to relation to the request class" do
90
- @klass.should_receive(:belongs_to).with(:request, {:class_name=>"RequestLogAnalyzer::Database::Request"})
89
+ it 'should create the :belongs_to relation to the request class' do
90
+ @klass.should_receive(:belongs_to).with(:request, class_name: 'RequestLogAnalyzer::Database::Request')
91
91
  RequestLogAnalyzer::Database::Base.subclass_from_table('completed_lines', @klass)
92
92
  end
93
93
 
94
- it "should create the :has_many relation in the request class" do
94
+ it 'should create the :has_many relation in the request class' do
95
95
  RequestLogAnalyzer::Database::Request.should_receive(:has_many).with(:completed_lines)
96
96
  RequestLogAnalyzer::Database::Base.subclass_from_table('completed_lines', @klass)
97
97
  end
98
98
 
99
- it "should create the :belongs_to relation to the source class" do
100
- @klass.should_receive(:belongs_to).with(:source, {:class_name=>"RequestLogAnalyzer::Database::Source"})
99
+ it 'should create the :belongs_to relation to the source class' do
100
+ @klass.should_receive(:belongs_to).with(:source, class_name: 'RequestLogAnalyzer::Database::Source')
101
101
  RequestLogAnalyzer::Database::Base.subclass_from_table('completed_lines', @klass)
102
102
  end
103
103
 
104
- it "should create the :has_many relation in the request class" do
104
+ it 'should create the :has_many relation in the request class' do
105
105
  RequestLogAnalyzer::Database::Source.should_receive(:has_many).with(:completed_lines)
106
106
  RequestLogAnalyzer::Database::Base.subclass_from_table('completed_lines', @klass)
107
107
  end
@@ -111,9 +111,9 @@ describe RequestLogAnalyzer::Database::Base do
111
111
  describe '#create_table' do
112
112
 
113
113
  before(:all) do
114
- @line_definition = RequestLogAnalyzer::LineDefinition.new(:test, { :regexp => /Testing (\w+), tries\: (\d+)/,
115
- :captures => [{ :name => :what, :type => :string }, { :name => :tries, :type => :integer },
116
- { :name => :evaluated, :type => :hash, :provides => {:evaluated_field => :duration} }]})
114
+ @line_definition = RequestLogAnalyzer::LineDefinition.new(:test, regexp: /Testing (\w+), tries\: (\d+)/,
115
+ captures: [{ name: :what, type: :string }, { name: :tries, type: :integer },
116
+ { name: :evaluated, type: :hash, provides: { evaluated_field: :duration } }])
117
117
  end
118
118
 
119
119
  before(:each) do
@@ -128,48 +128,47 @@ describe RequestLogAnalyzer::Database::Base do
128
128
  @database.remove_orm_classes!
129
129
  end
130
130
 
131
- it "should call create_table with the correct table name" do
131
+ it 'should call create_table with the correct table name' do
132
132
  @database.connection.should_receive(:create_table).with(:test_lines)
133
133
  @klass.create_table!
134
134
  end
135
135
 
136
- it "should not create a table based on the line type name if it already exists" do
136
+ it 'should not create a table based on the line type name if it already exists' do
137
137
  @klass.stub(:table_exists?).and_return(true)
138
138
  @database.connection.should_not_receive(:create_table).with(:test_lines)
139
139
  @klass.create_table!
140
140
  end
141
141
 
142
- it "should create an index on the request_id field" do
142
+ it 'should create an index on the request_id field' do
143
143
  @database.connection.should_receive(:add_index).with(:test_lines, [:request_id])
144
144
  @klass.create_table!
145
145
  end
146
146
 
147
- it "should create an index on the source_id field" do
147
+ it 'should create an index on the source_id field' do
148
148
  @database.connection.should_receive(:add_index).with(:test_lines, [:source_id])
149
149
  @klass.create_table!
150
150
  end
151
151
 
152
- it "should create a request_id field to link the requests together" do
152
+ it 'should create a request_id field to link the requests together' do
153
153
  @database.connection.table_creator.should_receive(:column).with(:request_id, :integer)
154
154
  @klass.create_table!
155
155
  end
156
156
 
157
- it "should create a lineno field to save the location of the line in the original file" do
157
+ it 'should create a lineno field to save the location of the line in the original file' do
158
158
  @database.connection.table_creator.should_receive(:column).with(:lineno, :integer)
159
159
  @klass.create_table!
160
160
  end
161
161
 
162
- it "should create a field of the correct type for every defined capture field" do
162
+ it 'should create a field of the correct type for every defined capture field' do
163
163
  @database.connection.table_creator.should_receive(:column).with(:what, :string)
164
164
  @database.connection.table_creator.should_receive(:column).with(:tries, :integer)
165
165
  @database.connection.table_creator.should_receive(:column).with(:evaluated, :text)
166
166
  @klass.create_table!
167
167
  end
168
168
 
169
- it "should create a field of the correct type for every provided field" do
169
+ it 'should create a field of the correct type for every provided field' do
170
170
  @database.connection.table_creator.should_receive(:column).with(:evaluated_field, :float)
171
171
  @klass.create_table!
172
172
  end
173
173
  end
174
174
  end
175
-
@@ -3,32 +3,32 @@ require 'spec_helper'
3
3
  describe RequestLogAnalyzer::Database::Connection do
4
4
  describe '.from_string' do
5
5
 
6
- it "should parse a name-value based string" do
6
+ it 'should parse a name-value based string' do
7
7
  string = 'adapter=sqlite3;database=filename.db'
8
- RequestLogAnalyzer::Database::Connection.from_string(string).should == {:adapter => 'sqlite3', :database => 'filename.db'}
8
+ RequestLogAnalyzer::Database::Connection.from_string(string).should == { adapter: 'sqlite3', database: 'filename.db' }
9
9
  end
10
10
 
11
- it "should parse an URI-based string for SQLite3" do
11
+ it 'should parse an URI-based string for SQLite3' do
12
12
  string = 'sqlite3://filename.db'
13
- RequestLogAnalyzer::Database::Connection.from_string(string).should == {:adapter => 'sqlite3', :database => 'filename.db'}
13
+ RequestLogAnalyzer::Database::Connection.from_string(string).should == { adapter: 'sqlite3', database: 'filename.db' }
14
14
  end
15
15
 
16
- it "should parse an URI-based string for MySQL" do
16
+ it 'should parse an URI-based string for MySQL' do
17
17
  string = 'mysql://localhost.local/database'
18
18
  RequestLogAnalyzer::Database::Connection.from_string(string).should ==
19
- { :adapter => 'mysql', :database => 'database', :host => 'localhost.local' }
19
+ { adapter: 'mysql', database: 'database', host: 'localhost.local' }
20
20
  end
21
21
 
22
- it "should parse an URI-based string for MySQL with only username" do
22
+ it 'should parse an URI-based string for MySQL with only username' do
23
23
  string = 'mysql://username@localhost.local/database'
24
24
  RequestLogAnalyzer::Database::Connection.from_string(string).should ==
25
- { :adapter => 'mysql', :database => 'database', :host => 'localhost.local', :username => 'username' }
25
+ { adapter: 'mysql', database: 'database', host: 'localhost.local', username: 'username' }
26
26
  end
27
27
 
28
- it "should parse an URI-based string for MySQL with username and password" do
28
+ it 'should parse an URI-based string for MySQL with username and password' do
29
29
  string = 'mysql://username:password@localhost.local/database'
30
30
  RequestLogAnalyzer::Database::Connection.from_string(string).should ==
31
- { :adapter => 'mysql', :database => 'database', :host => 'localhost.local', :username => 'username', :password => 'password' }
31
+ { adapter: 'mysql', database: 'database', host: 'localhost.local', username: 'username', password: 'password' }
32
32
  end
33
33
  end
34
34
  end