whoops_notifier 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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
@@ -14,7 +14,7 @@ module WhoopsNotifier
14
14
 
15
15
  # @overload notify(evidence)
16
16
  # Notify using the default basic strategy
17
- # @param [Hash] evidence the evidence expected by the basic strategy
17
+ # @param [Hash] evidence the evidence expected by the basic strategy, used by strategy to build report
18
18
  # @overload notify(strategy_name, evidence)
19
19
  # @param [Symbol, String] strategy_name
20
20
  # @param [Hash] evidence same as above
@@ -1,8 +1,9 @@
1
1
  module WhoopsNotifier
2
+
3
+ # A "glue" class which coordinates report creation
2
4
  class Investigator
3
5
  # get data from evidence using a strategy to create a report and decide whether it should be ignored
4
- attr_accessor :strategy, :report, :evidence, :ignore_report
5
- alias :ignore_report? :ignore_report
6
+ attr_accessor :strategy, :report, :evidence
6
7
 
7
8
  def initialize(strategy, evidence)
8
9
  raise ArgumentError, "strategy can not be nil" if strategy.nil?
@@ -13,11 +14,11 @@ module WhoopsNotifier
13
14
  end
14
15
 
15
16
  def investigate!
16
- create_report
17
+ strategy.call(report, evidence)
17
18
  end
18
19
 
19
- def create_report
20
- strategy.call(self)
20
+ def ignore_report?
21
+ report.ignore?
21
22
  end
22
23
  end
23
24
  end
@@ -5,6 +5,8 @@ module WhoopsNotifier
5
5
  attr_accessor attribute
6
6
  end
7
7
 
8
+ attr_accessor :ignore
9
+
8
10
  def initialize
9
11
  self.event_time = Time.now
10
12
  end
@@ -16,5 +18,9 @@ module WhoopsNotifier
16
18
  end
17
19
  h
18
20
  end
21
+
22
+ def ignore?
23
+ ignore
24
+ end
19
25
  end
20
26
  end
@@ -1,6 +1,6 @@
1
1
  strategy = WhoopsNotifier::Strategy.new("default::basic")
2
2
 
3
- strategy.add_report_modifier(:use_basic_hash) do |report, evidence|
3
+ strategy.add_report_builder(:use_basic_hash) do |report, evidence|
4
4
  report.event_type = evidence[:event_type]
5
5
  report.service = evidence[:service]
6
6
  report.environment = evidence[:environment]
@@ -1,37 +1,54 @@
1
1
  module WhoopsNotifier
2
+
3
+ # Strategies are responsible for building Reports and determining whether a
4
+ # a Report should be ignored.
5
+ #
6
+ # Each strategy contains any number of report builders and ignore criteria.
7
+ #
8
+ # Each report builder and ignore criteria takes a name. This makes adding a
9
+ # report builder or ignore criteria more like adding a method - the name
10
+ # makes it easier to see the intention of the code. It also makes it easier
11
+ # to get useful info when you inspect the strategy.
12
+ #
13
+ # Strategies use call to actually apply modifiers and criteria for the same
14
+ # reason that Rack uses call. Conceivably, you could add a strategy to the
15
+ # notifier with
16
+ # WhoopsNotifier.strategies[:lambda_stragey] = lambda{ |report, evidence|
17
+ # report.details = evidence[:detail]
18
+ # }
19
+ # or something along those lines.
2
20
  class Strategy
3
- # ask witnesses for data, create a report using a strategy, send or ignore
4
- attr_accessor :name, :ignore_criteria, :report_modifiers
21
+ attr_accessor :name, :ignore_criteria, :report_builders
5
22
 
6
23
  def initialize(name)
7
24
  self.name = name
8
25
  self.ignore_criteria = []
9
- self.report_modifiers = []
26
+ self.report_builders = []
10
27
  WhoopsNotifier.strategies[name] = self
11
28
  end
12
29
 
13
- def call(investigator)
14
- report_modifiers.each do |report_modifier|
15
- report_modifier.call(investigator.report, investigator.evidence)
30
+ def call(report, evidence)
31
+ report_builders.each do |report_modifier|
32
+ report_modifier.call(report, evidence)
16
33
  end
17
34
 
18
35
  ignore_criteria.each do |ignore_criterion|
19
- if ignore_criterion.call(investigator.report)
20
- investigator.ignore_report = true
36
+ if ignore_criterion.call(report, evidence)
37
+ report.ignore = true
21
38
  break
22
39
  end
23
40
  end
24
41
  end
25
42
 
26
- # block should take one param, the investigator
43
+ # block should take two params, the report and the evidence
27
44
  # use evidence to build the report
28
- def add_report_modifier(name, &block)
45
+ def add_report_builder(name, &block)
29
46
  give_name(name, block)
30
- @report_modifiers << block
47
+ @report_builders << block
31
48
  end
32
49
 
33
50
  # block takes one param, the investigator's report
34
- def add_ignore_case(name, &block)
51
+ def add_ignore_criteria(name, &block)
35
52
  give_name(name, block)
36
53
  @ignore_criteria << block
37
54
  end
@@ -44,7 +61,7 @@ module WhoopsNotifier
44
61
  end
45
62
 
46
63
  def inspect
47
- "#{name}\nreport modifiers: #{report_modifiers.collect{|r| r.name}.join(", ")}\nignore criteria: #{ignore_criteria.collect{|i| i.name}.join(", ")}"
64
+ "#{name}\nreport modifiers: #{report_builders.collect{|r| r.name}.join(", ")}\nignore criteria: #{ignore_criteria.collect{|i| i.name}.join(", ")}"
48
65
  end
49
66
  end
50
67
  end
@@ -16,10 +16,10 @@ describe "WhoopsNotifier::Investigator" do
16
16
  end
17
17
 
18
18
  describe "#investigate!" do
19
- it "should not send report if ignore_report is true" do
19
+ it "should not send report if ignore_report? is true" do
20
20
  strategy = lambda{}
21
21
  investigator = WhoopsNotifier::Investigator.new(strategy, {})
22
- investigator.ignore_report = true
22
+ investigator.stub(:ignore_report?).and_return(true)
23
23
 
24
24
  investigator.should_not_receive(:send_report)
25
25
 
@@ -7,26 +7,26 @@ describe "WhoopsNotifier::Strategy" do
7
7
  WhoopsNotifier.strategies[:test].should == s
8
8
  end
9
9
 
10
- it "creates empty arrays for ignore criteria and report_modifiers" do
10
+ it "creates empty arrays for ignore criteria and report_builders" do
11
11
  s = WhoopsNotifier::Strategy.new(:test)
12
12
  s.ignore_criteria.should == []
13
- s.report_modifiers.should == []
13
+ s.report_builders.should == []
14
14
  end
15
15
  end
16
16
 
17
- describe "#add_report_modifier" do
17
+ describe "#add_report_builder" do
18
18
  it "adds a named block" do
19
19
  s = WhoopsNotifier::Strategy.new(:test)
20
- s.add_report_modifier(:add_message) { |investigator| }
20
+ s.add_report_builder(:add_message) { |report, evidence| }
21
21
 
22
- s.report_modifiers.first.name.should == :add_message
22
+ s.report_builders.first.name.should == :add_message
23
23
  end
24
24
  end
25
25
 
26
- describe "#add_ignore_case" do
26
+ describe "#add_ignore_criteria" do
27
27
  it "adds a named ignore criteria block" do
28
28
  s = WhoopsNotifier::Strategy.new(:test)
29
- s.add_ignore_case(:ignore_if_empty) { |investigator| }
29
+ s.add_ignore_criteria(:ignore_if_empty) { |report| }
30
30
 
31
31
  s.ignore_criteria.first.name.should == :ignore_if_empty
32
32
  end
@@ -37,22 +37,22 @@ describe "WhoopsNotifier::Strategy" do
37
37
  strategy = WhoopsNotifier::Strategy.new(:test)
38
38
  investigator = WhoopsNotifier::Investigator.new(strategy, nil)
39
39
 
40
- strategy.add_ignore_case(:always_ignore) do |report|
40
+ strategy.add_ignore_criteria(:always_ignore) do |report|
41
41
  true
42
42
  end
43
43
 
44
- strategy.call(investigator)
45
- investigator.ignore_report.should == true
44
+ strategy.call(investigator.report, investigator.evidence)
45
+ investigator.ignore_report?.should == true
46
46
  end
47
47
 
48
48
  it "should modify the investigator's report according to the report modifiers" do
49
49
  strategy = WhoopsNotifier::Strategy.new(:test)
50
50
  investigator = WhoopsNotifier::Investigator.new(strategy, {:service => "service"})
51
- strategy.add_report_modifier(:add_details){ |report, evidence|
51
+ strategy.add_report_builder(:add_details){ |report, evidence|
52
52
  report.service = evidence[:service] + " test"
53
53
  }
54
54
 
55
- strategy.call(investigator)
55
+ strategy.call(investigator.report, investigator.evidence)
56
56
 
57
57
  investigator.report.service.should == "service test"
58
58
  end
@@ -63,11 +63,11 @@ describe "WhoopsNotifier::Strategy" do
63
63
  strategy = WhoopsNotifier::Strategy.new(:awesome_strategy)
64
64
  investigator = WhoopsNotifier::Investigator.new(strategy, nil)
65
65
 
66
- strategy.add_report_modifier(:report1){ }
67
- strategy.add_report_modifier(:report2){ }
66
+ strategy.add_report_builder(:report1){ }
67
+ strategy.add_report_builder(:report2){ }
68
68
 
69
- strategy.add_ignore_case(:ignore1){ true }
70
- strategy.add_ignore_case(:ignore2){ true }
69
+ strategy.add_ignore_criteria(:ignore1){ true }
70
+ strategy.add_ignore_criteria(:ignore2){ true }
71
71
 
72
72
  strategy.inspect.should == "awesome_strategy
73
73
  report modifiers: report1, report2
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{whoops_notifier}
8
- s.version = "0.0.3"
8
+ s.version = "0.0.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Daniel Higginbotham"]
12
- s.date = %q{2011-06-11}
12
+ s.date = %q{2011-07-09}
13
13
  s.description = %q{Handles basic notification responsibilities and allows creation of report creation strategies}
14
14
  s.email = %q{daniel@flyingmachinestudios.com}
15
15
  s.extra_rdoc_files = [
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: whoops_notifier
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 3
10
- version: 0.0.3
9
+ - 4
10
+ version: 0.0.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Daniel Higginbotham
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-06-11 00:00:00 -04:00
18
+ date: 2011-07-09 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency