harbinger 0.0.1.pre → 0.1.0

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.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/.hound.yml +818 -0
  4. data/.travis.yml +20 -0
  5. data/Gemfile +23 -3
  6. data/README.md +8 -27
  7. data/Rakefile +47 -1
  8. data/app/controllers/harbinger/messages_controller.rb +24 -0
  9. data/app/models/harbinger/database_channel_message.rb +51 -0
  10. data/app/models/harbinger/database_channel_message_element.rb +19 -0
  11. data/app/views/harbinger/messages/index.html.erb +43 -0
  12. data/app/views/harbinger/messages/show.html.erb +24 -0
  13. data/config/routes.rb +3 -0
  14. data/db/migrate/20140310185338_create_harbinger_database_channel_message.rb +11 -0
  15. data/db/migrate/20140310185339_create_harbinger_database_channel_message_elements.rb +14 -0
  16. data/gemfiles/rails4.1.gemfile +12 -0
  17. data/gemfiles/rails4.gemfile +13 -0
  18. data/harbinger.gemspec +22 -7
  19. data/lib/generators/harbinger/install/install_generator.rb +23 -0
  20. data/lib/generators/harbinger/install/templates/harbinger_initializer.rb.erb +6 -0
  21. data/lib/harbinger.rb +100 -1
  22. data/lib/harbinger/channels.rb +25 -0
  23. data/lib/harbinger/channels/database_channel.rb +15 -0
  24. data/lib/harbinger/channels/logger_channel.rb +31 -0
  25. data/lib/harbinger/channels/null_channel.rb +7 -0
  26. data/lib/harbinger/configuration.rb +58 -0
  27. data/lib/harbinger/engine.rb +8 -1
  28. data/lib/harbinger/exceptions.rb +4 -0
  29. data/lib/harbinger/message.rb +20 -0
  30. data/lib/harbinger/reporters.rb +34 -0
  31. data/lib/harbinger/reporters/exception_reporter.rb +26 -0
  32. data/lib/harbinger/reporters/null_reporter.rb +14 -0
  33. data/lib/harbinger/reporters/request_reporter.rb +20 -0
  34. data/lib/harbinger/reporters/user_reporter.rb +20 -0
  35. data/lib/harbinger/version.rb +1 -1
  36. data/run_each_spec_in_isolation +9 -0
  37. data/script/fast_specs +20 -0
  38. data/spec/controllers/harbinger/messages_controller_spec.rb +26 -0
  39. data/spec/features/end_to_end_exception_handling_spec.rb +39 -0
  40. data/spec/lib/harbinger/channels/database_channel_spec.rb +18 -0
  41. data/spec/lib/harbinger/channels/logger_channel_spec.rb +21 -0
  42. data/spec/lib/harbinger/channels/null_channel_spec.rb +8 -0
  43. data/spec/lib/harbinger/channels_spec.rb +40 -0
  44. data/spec/lib/harbinger/configuration_spec.rb +53 -0
  45. data/spec/lib/harbinger/message_spec.rb +15 -0
  46. data/spec/lib/harbinger/reporters/exception_reporter_spec.rb +24 -0
  47. data/spec/lib/harbinger/reporters/null_reporter_spec.rb +21 -0
  48. data/spec/lib/harbinger/reporters/request_reporter_spec.rb +23 -0
  49. data/spec/lib/harbinger/reporters/user_reporter_spec.rb +17 -0
  50. data/spec/lib/harbinger/reporters_spec.rb +46 -0
  51. data/spec/lib/harbinger_spec.rb +60 -0
  52. data/spec/models/harbinger/database_channel_message_element_spec.rb +16 -0
  53. data/spec/models/harbinger/database_channel_message_spec.rb +68 -0
  54. data/spec/routing/harbinger/messages_routing_spec.rb +16 -0
  55. data/spec/spec_active_record_helper.rb +41 -0
  56. data/spec/spec_fast_helper.rb +70 -0
  57. data/spec/spec_slow_helper.rb +57 -0
  58. data/spec/spec_view_helper.rb +38 -0
  59. data/spec/test_app_templates/lib/generators/test_app_generator.rb +13 -0
  60. data/spec/views/harbinger/messages/index.html.erb_spec.rb +31 -0
  61. data/spec/views/harbinger/messages/show.html.erb_spec.rb +36 -0
  62. metadata +205 -20
  63. data/MIT-LICENSE +0 -20
@@ -0,0 +1,68 @@
1
+ require 'spec_active_record_helper'
2
+ require 'harbinger/database_channel_message'
3
+ require 'harbinger/message'
4
+
5
+ module Harbinger
6
+ describe DatabaseChannelMessage do
7
+ subject { described_class.new }
8
+ let(:message) do
9
+ Message.new do |message|
10
+ message.append('exception', 'name', 'hello')
11
+ message.append('exception', 'name', 'world')
12
+ message.append('user', 'name', 'tim')
13
+ message.append('user', 'id', '123')
14
+ end
15
+ end
16
+
17
+ it 'should have many elements' do
18
+ subject.save!
19
+ expect(subject.elements).to be_a_kind_of(ActiveRecord::Associations::CollectionProxy)
20
+ end
21
+
22
+ context '.ordered' do
23
+ it 'should evaluate to sql' do
24
+ expect(described_class.ordered.to_sql).to be_a(String)
25
+ end
26
+ end
27
+
28
+ context '.search_state' do
29
+ it 'should evaluate to sql' do
30
+ expect(described_class.search_state('new').to_sql).to be_a(String)
31
+ end
32
+ end
33
+
34
+ context '.search_text' do
35
+ it 'should evaluate to sql' do
36
+ expect(described_class.search_text('my-text').to_sql).to be_a(String)
37
+ end
38
+ end
39
+
40
+ context '.search' do
41
+ it 'handles a query parameter' do
42
+ expect(described_class.search(q: 'Hello', state: 'new').to_sql).to be_a(String)
43
+ end
44
+ end
45
+
46
+ context '.store_message' do
47
+ it 'creates a new instance' do
48
+ expect { described_class.store_message(message) }.
49
+ to change { described_class.count }.
50
+ by(1)
51
+ end
52
+
53
+ it 'creates elements' do
54
+ storage = described_class.new
55
+ expect { described_class.store_message(message, storage) }.
56
+ to change { storage.elements.count }.
57
+ by(3)
58
+ end
59
+
60
+ it 'assigns :contexts' do
61
+ storage = described_class.new
62
+ expect { described_class.store_message(message, storage) }.
63
+ to change { storage.attributes.values_at('contexts', 'state') }.
64
+ from([nil, nil]).to(['exception,user', 'new'])
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_slow_helper'
2
+
3
+ module Harbinger
4
+ describe 'routes for Messages', type: :routing do
5
+ routes { Harbinger::Engine.routes }
6
+
7
+ it 'generates a resourceful URL for :index' do
8
+ expect(messages_path).to eq('/harbinger/messages')
9
+ end
10
+
11
+ it 'generates a resourceful URL for :show' do
12
+ expect(message_path('1')).to eq('/harbinger/messages/1')
13
+ end
14
+
15
+ end
16
+ end
@@ -0,0 +1,41 @@
1
+ # This helper provides at least a x2 speed increase over the 'spec_slow_helper'.
2
+ #
3
+ # To validate this assumption, find a spec for an ActiveRecord object, and run
4
+ # with `rspec -r spec/spec_active_record_helper.rb ./path/to/spec.rb`
5
+ #
6
+ # Example:
7
+ # $ time rspec -r spec/spec_active_record_helper.rb spec/features/new_user_input_to_in_memory_spec.rb
8
+ #
9
+ # real 0m1.576s
10
+ # user 0m1.093s
11
+ # sys 0m0.295s
12
+ #
13
+ # Compared to `rspec -r spec/spec_slow_helper.rb ./path/to/spec.rb`
14
+ #
15
+ # Example:
16
+ # $ time rspec -r spec/spec_slow_helper.rb spec/features/new_user_input_to_in_memory_spec.rb
17
+ #
18
+ # real 0m3.546s
19
+ # user 0m2.417s
20
+ # sys 0m0.702s
21
+ require 'active_record'
22
+ require 'spec_fast_helper'
23
+
24
+ if !defined?(Rails)
25
+ # Sometimes this will be invoked when Rails is defined. In that case the relative
26
+ # path is ../internal. When Rails is not defined the relative path is different.
27
+ # By providing an absolute path, I avoid either of those silly things.
28
+ database = File.expand_path('../internal/db/development.sqlite3', __FILE__)
29
+
30
+ connection_info = { adapter: 'sqlite3', database: database, pool: 5, timeout: 5000 }
31
+ ActiveRecord::Base.establish_connection(connection_info)
32
+ end
33
+
34
+ RSpec.configure do |config|
35
+ config.around do |example|
36
+ ActiveRecord::Base.transaction do
37
+ example.run
38
+ fail ActiveRecord::Rollback
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,70 @@
1
+ # This helper provides at least a ~x3 speed increase over the 'spec_slow_helper'.
2
+ #
3
+ # The idea being that some tests have very few dependencies.
4
+ #
5
+ # Example:
6
+ # $ time rspec -r spec/spec_fast_helper.rb spec/lib/hydramata-work_spec.rb
7
+ #
8
+ # real 0m1.188s
9
+ # user 0m0.979s
10
+ # sys 0m0.204s
11
+ #
12
+ # Compared to `rspec -r spec/spec_slow_helper.rb ./path/to/spec.rb`
13
+ #
14
+ # Example:
15
+ # $ time rspec -r spec/spec_slow_helper.rb spec/lib/hydramata-work_spec.rb
16
+ #
17
+ # real 0m3.491s
18
+ # user 0m2.800s
19
+ # sys 0m0.667s
20
+
21
+ require 'rspec/given'
22
+ unless defined?(Rails)
23
+ Dir[File.expand_path("../../app/*", __FILE__)].each do |dir|
24
+ $LOAD_PATH << dir
25
+ end
26
+ $LOAD_PATH << File.expand_path("../../lib", __FILE__)
27
+
28
+ unless defined?(require_dependency)
29
+ def require_dependency(*files)
30
+ require *files
31
+ end
32
+ end
33
+ end
34
+
35
+ class AttributeBucket
36
+ def initialize(attributes = {})
37
+ attributes.each do |key, value|
38
+ send("#{key}=", value) if respond_to?("#{key}=")
39
+ end
40
+ end
41
+ end
42
+
43
+ class Request < AttributeBucket
44
+ attr_accessor :path, :params, :user_agent
45
+ end
46
+
47
+ unless defined?(User)
48
+ class User < AttributeBucket
49
+ attr_accessor :username
50
+ end
51
+ end
52
+
53
+ shared_examples 'a harbinger reporter' do
54
+ Given(:reporter) { described_class.new(double) }
55
+ context 'interface' do
56
+ Then { expect(reporter).to respond_to(:accept) }
57
+ And { expect(reporter.method(:accept).arity).to eq(1) }
58
+ end
59
+ context 'is fault tolerant' do
60
+ Given(:message) { double(append: false) }
61
+ When { reporter.accept(message) }
62
+ end
63
+ end
64
+
65
+
66
+ shared_examples "a harbinger channel" do
67
+ Given(:channel) { described_class }
68
+ Then { expect(channel).to respond_to(:deliver) }
69
+ And { expect(channel.method(:deliver).arity).to eq(-2) }
70
+ end
@@ -0,0 +1,57 @@
1
+ # Why is this a spec_slow_helper instead of spec_helper
2
+ # Because it is extremely slow to load all of the following dependencies:
3
+ #
4
+ # * SimpleCov
5
+ # * EngineCart (and therefore the underlying internal Rails application)
6
+ # * Rails
7
+ #
8
+ # But overtime the slowness grows. See the sibling helpers: ./spec/*_helper.rb
9
+ # (i.e. spec_active_record_helper.rb, spec_fast_helper.rb, spec_view_helper.rb)
10
+ ENV['RAILS_ENV'] ||= 'test'
11
+ if ENV['COV'] || ENV['COVERAGE']
12
+ require 'simplecov'
13
+ SimpleCov.start 'rails'
14
+ SimpleCov.command_name 'spec'
15
+ end
16
+
17
+ if ENV['TRAVIS']
18
+ require 'coveralls'
19
+ Coveralls.wear!('rails')
20
+ end
21
+
22
+ require 'engine_cart'
23
+ require File.expand_path('../internal/config/environment.rb', __FILE__)
24
+
25
+ EngineCart.load_application!
26
+
27
+ require 'rspec/rails'
28
+ require 'rspec-html-matchers'
29
+ require 'database_cleaner'
30
+
31
+ # This file was generated by the `rspec --init` command. Conventionally, all
32
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
33
+ # Require this file using `require 'spec_helper'` to ensure that it is only
34
+ # loaded once.
35
+ #
36
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
37
+ RSpec.configure do |config|
38
+ config.run_all_when_everything_filtered = true
39
+ config.filter_run :focus
40
+ config.raise_errors_for_deprecations!
41
+ # Run specs in random order to surface order dependencies. If you find an
42
+ # order dependency and want to debug it, you can fix the order by providing
43
+ # the seed, which is printed after each run.
44
+ # --seed 1234
45
+ config.order = 'random'
46
+
47
+ config.before(:suite) do
48
+ DatabaseCleaner.strategy = :transaction
49
+ DatabaseCleaner.clean_with(:truncation)
50
+ end
51
+
52
+ config.around(:each) do |example|
53
+ DatabaseCleaner.cleaning do
54
+ example.run
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,38 @@
1
+ # I'm deliberately not including this, as I was hoping to keep the views tested
2
+ # in extreme isolation.
3
+
4
+ # Example:
5
+ # $ time rspec -r spec/spec_view_helper.rb spec/views/hydramata/works/fieldsets/_edit.html.erb_spec.rb
6
+ #
7
+ # real 0m1.228s
8
+ # user 0m1.003s
9
+ # sys 0m0.205s
10
+ #
11
+ # Compared to `rspec -r spec/spec_slow_helper.rb ./path/to/spec.rb`
12
+ #
13
+ # Example:
14
+ # $ time rspec -r spec/spec_view_helper.rb spec/views/hydramata/works/fieldsets/_edit.html.erb_spec.rb
15
+ #
16
+ # real 0m3.417s
17
+ # user 0m2.720s
18
+ # sys 0m0.679s
19
+
20
+ require 'active_support'
21
+ require 'action_view'
22
+ require 'action_controller'
23
+
24
+ require 'active_support/core_ext/hash/reverse_merge'
25
+
26
+ require 'rspec/core'
27
+ require 'rails/version'
28
+ require 'rspec/rails/extensions'
29
+ require 'rspec/rails/view_rendering'
30
+ require 'rspec/rails/adapters'
31
+ require 'rspec/rails/matchers'
32
+ require 'rspec/rails/fixture_support'
33
+ require 'rspec/rails/example'
34
+ require 'rspec/rails/configuration'
35
+
36
+ require 'rspec-html-matchers'
37
+
38
+ ActionController::Base.prepend_view_path(File.expand_path('../../app/views', __FILE__))
@@ -0,0 +1,13 @@
1
+ require 'rails/generators'
2
+
3
+ class TestAppGenerator < Rails::Generators::Base
4
+ source_root "./spec/test_app_templates"
5
+
6
+ # if you need to generate any additional configuration
7
+ # into the test app, this generator will be run immediately
8
+ # after setting up the application
9
+
10
+ def install_engine
11
+ generate 'harbinger:install'
12
+ end
13
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_view_helper'
2
+
3
+ # As of 3.0.x :type tags are no longer inferred.
4
+ # This means, without the `type: :view` tag, the render method does not exist
5
+ # in the example context
6
+ describe 'harbinger/messages/index.html.erb', type: :view do
7
+ let(:created_at) { Time.now }
8
+ let(:message) do
9
+ double(
10
+ 'Message',
11
+ contexts: ['Hello','World'],
12
+ state: 'new',
13
+ created_at: created_at
14
+ )
15
+ end
16
+ let(:harbinger) { double("Engine", message_path: true, messages_path: '/messages/') }
17
+ it 'renders the object and fieldsets' do
18
+ expect(harbinger).to receive(:message_path).with(message.to_param).and_return("/messages/#{message.to_param}")
19
+ render template: "harbinger/messages/index.html.erb", locals: { messages: [message], harbinger: harbinger }
20
+ expect(rendered).to have_tag('.search-form') do
21
+ with_tag('input.q.search-query', with: { type: 'search', name: 'q' } )
22
+ end
23
+
24
+ expect(rendered).to have_tag('.message') do
25
+ with_tag(".detail.message-created-at-detail a time", text: created_at.to_s)
26
+ with_tag('.detail.message-contexts-detail', text: 'Hello')
27
+ with_tag('.detail.message-contexts-detail', text: 'World')
28
+ with_tag('.detail.message-state-detail', text: 'new')
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_view_helper'
2
+
3
+ # As of 3.0.x :type tags are no longer inferred.
4
+ # This means, without the `type: :view` tag, the render method does not exist
5
+ # in the example context
6
+ describe 'harbinger/messages/show.html.erb', type: :view do
7
+ let(:created_at) { Time.now }
8
+ let(:netid_element) { double('Element', key: 'netid', value: 'jfriesen') }
9
+ let(:request_referrer_element) { double('Element', key: 'request_referrer', value: 'from somewhere') }
10
+ let(:message) do
11
+ double(
12
+ 'Message',
13
+ contexts: ['Hello','World'],
14
+ state: 'new',
15
+ created_at: created_at,
16
+ elements: [netid_element, request_referrer_element]
17
+ )
18
+ end
19
+ it 'renders the object and fieldsets' do
20
+ render template: 'harbinger/messages/show',
21
+ locals: { message: message }
22
+ expect(rendered).to have_tag('article.message') do
23
+ with_tag('.term.message-contexts-term')
24
+ with_tag('.detail.message-contexts-detail', text: 'Hello')
25
+ with_tag('.detail.message-contexts-detail', text: 'World')
26
+ with_tag('.term.message-state-term')
27
+ with_tag('.detail.message-state-detail', text: 'new')
28
+ with_tag('.term.message-created-at-term')
29
+ with_tag('.detail.message-created-at-detail time', text: created_at.to_s)
30
+ with_tag('.term.netid-term', text: netid_element.key)
31
+ with_tag('.detail.netid-detail', text: netid_element.value)
32
+ with_tag('.term.request-referrer-term', text: request_referrer_element.key)
33
+ with_tag('.detail.request-referrer-detail', text: request_referrer_element.value)
34
+ end
35
+ end
36
+ end
metadata CHANGED
@@ -1,71 +1,232 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: harbinger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.pre
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Friesen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-27 00:00:00.000000000 Z
11
+ date: 2014-08-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.5'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.5'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '10.3'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
41
- description: An exception tracking Rails engine
40
+ version: '10.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec-given
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.5'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.5'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec-rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec-html-matchers
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.6'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.6'
83
+ - !ruby/object:Gem::Dependency
84
+ name: engine_cart
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.3'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.3'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rails
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '4.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '4.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: sqlite3
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.3'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.3'
125
+ - !ruby/object:Gem::Dependency
126
+ name: database_cleaner
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '1.3'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '1.3'
139
+ - !ruby/object:Gem::Dependency
140
+ name: capybara
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '2.4'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '2.4'
153
+ description: A Rails engine for arbitrary message creation and delivery.
42
154
  email:
43
155
  - jeremy.n.friesen@gmail.com
44
- executables:
45
- - rails
156
+ executables: []
46
157
  extensions: []
47
158
  extra_rdoc_files: []
48
159
  files:
49
- - .gitignore
160
+ - ".gitignore"
161
+ - ".hound.yml"
162
+ - ".travis.yml"
50
163
  - Gemfile
51
164
  - LICENSE
52
- - MIT-LICENSE
53
165
  - README.md
54
166
  - Rakefile
55
167
  - app/assets/images/harbinger/.keep
56
168
  - app/assets/javascripts/harbinger/application.js
57
169
  - app/assets/stylesheets/harbinger/application.css
58
170
  - app/controllers/harbinger/application_controller.rb
171
+ - app/controllers/harbinger/messages_controller.rb
59
172
  - app/helpers/harbinger/application_helper.rb
173
+ - app/models/harbinger/database_channel_message.rb
174
+ - app/models/harbinger/database_channel_message_element.rb
175
+ - app/views/harbinger/messages/index.html.erb
176
+ - app/views/harbinger/messages/show.html.erb
60
177
  - app/views/layouts/harbinger/application.html.erb
61
178
  - bin/rails
62
179
  - config/routes.rb
180
+ - db/migrate/20140310185338_create_harbinger_database_channel_message.rb
181
+ - db/migrate/20140310185339_create_harbinger_database_channel_message_elements.rb
182
+ - gemfiles/rails4.1.gemfile
183
+ - gemfiles/rails4.gemfile
63
184
  - harbinger.gemspec
185
+ - lib/generators/harbinger/install/install_generator.rb
186
+ - lib/generators/harbinger/install/templates/harbinger_initializer.rb.erb
64
187
  - lib/harbinger.rb
188
+ - lib/harbinger/channels.rb
189
+ - lib/harbinger/channels/database_channel.rb
190
+ - lib/harbinger/channels/logger_channel.rb
191
+ - lib/harbinger/channels/null_channel.rb
192
+ - lib/harbinger/configuration.rb
65
193
  - lib/harbinger/engine.rb
194
+ - lib/harbinger/exceptions.rb
195
+ - lib/harbinger/message.rb
196
+ - lib/harbinger/reporters.rb
197
+ - lib/harbinger/reporters/exception_reporter.rb
198
+ - lib/harbinger/reporters/null_reporter.rb
199
+ - lib/harbinger/reporters/request_reporter.rb
200
+ - lib/harbinger/reporters/user_reporter.rb
66
201
  - lib/harbinger/version.rb
67
202
  - lib/tasks/harbinger_tasks.rake
68
- homepage: ''
203
+ - run_each_spec_in_isolation
204
+ - script/fast_specs
205
+ - spec/controllers/harbinger/messages_controller_spec.rb
206
+ - spec/features/end_to_end_exception_handling_spec.rb
207
+ - spec/lib/harbinger/channels/database_channel_spec.rb
208
+ - spec/lib/harbinger/channels/logger_channel_spec.rb
209
+ - spec/lib/harbinger/channels/null_channel_spec.rb
210
+ - spec/lib/harbinger/channels_spec.rb
211
+ - spec/lib/harbinger/configuration_spec.rb
212
+ - spec/lib/harbinger/message_spec.rb
213
+ - spec/lib/harbinger/reporters/exception_reporter_spec.rb
214
+ - spec/lib/harbinger/reporters/null_reporter_spec.rb
215
+ - spec/lib/harbinger/reporters/request_reporter_spec.rb
216
+ - spec/lib/harbinger/reporters/user_reporter_spec.rb
217
+ - spec/lib/harbinger/reporters_spec.rb
218
+ - spec/lib/harbinger_spec.rb
219
+ - spec/models/harbinger/database_channel_message_element_spec.rb
220
+ - spec/models/harbinger/database_channel_message_spec.rb
221
+ - spec/routing/harbinger/messages_routing_spec.rb
222
+ - spec/spec_active_record_helper.rb
223
+ - spec/spec_fast_helper.rb
224
+ - spec/spec_slow_helper.rb
225
+ - spec/spec_view_helper.rb
226
+ - spec/test_app_templates/lib/generators/test_app_generator.rb
227
+ - spec/views/harbinger/messages/index.html.erb_spec.rb
228
+ - spec/views/harbinger/messages/show.html.erb_spec.rb
229
+ homepage: https://github.com/ndlib/harbinger
69
230
  licenses:
70
231
  - Apache2
71
232
  metadata: {}
@@ -75,18 +236,42 @@ require_paths:
75
236
  - lib
76
237
  required_ruby_version: !ruby/object:Gem::Requirement
77
238
  requirements:
78
- - - '>='
239
+ - - ">="
79
240
  - !ruby/object:Gem::Version
80
241
  version: '0'
81
242
  required_rubygems_version: !ruby/object:Gem::Requirement
82
243
  requirements:
83
- - - '>'
244
+ - - ">="
84
245
  - !ruby/object:Gem::Version
85
- version: 1.3.1
246
+ version: '0'
86
247
  requirements: []
87
248
  rubyforge_project:
88
- rubygems_version: 2.0.14
249
+ rubygems_version: 2.2.2
89
250
  signing_key:
90
251
  specification_version: 4
91
- summary: An exception tracking Rails engine
92
- test_files: []
252
+ summary: A Rails engine for arbitrary message creation and delivery.
253
+ test_files:
254
+ - spec/controllers/harbinger/messages_controller_spec.rb
255
+ - spec/features/end_to_end_exception_handling_spec.rb
256
+ - spec/lib/harbinger/channels/database_channel_spec.rb
257
+ - spec/lib/harbinger/channels/logger_channel_spec.rb
258
+ - spec/lib/harbinger/channels/null_channel_spec.rb
259
+ - spec/lib/harbinger/channels_spec.rb
260
+ - spec/lib/harbinger/configuration_spec.rb
261
+ - spec/lib/harbinger/message_spec.rb
262
+ - spec/lib/harbinger/reporters/exception_reporter_spec.rb
263
+ - spec/lib/harbinger/reporters/null_reporter_spec.rb
264
+ - spec/lib/harbinger/reporters/request_reporter_spec.rb
265
+ - spec/lib/harbinger/reporters/user_reporter_spec.rb
266
+ - spec/lib/harbinger/reporters_spec.rb
267
+ - spec/lib/harbinger_spec.rb
268
+ - spec/models/harbinger/database_channel_message_element_spec.rb
269
+ - spec/models/harbinger/database_channel_message_spec.rb
270
+ - spec/routing/harbinger/messages_routing_spec.rb
271
+ - spec/spec_active_record_helper.rb
272
+ - spec/spec_fast_helper.rb
273
+ - spec/spec_slow_helper.rb
274
+ - spec/spec_view_helper.rb
275
+ - spec/test_app_templates/lib/generators/test_app_generator.rb
276
+ - spec/views/harbinger/messages/index.html.erb_spec.rb
277
+ - spec/views/harbinger/messages/show.html.erb_spec.rb