harbinger 0.0.1.pre → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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