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.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/.hound.yml +818 -0
- data/.travis.yml +20 -0
- data/Gemfile +23 -3
- data/README.md +8 -27
- data/Rakefile +47 -1
- data/app/controllers/harbinger/messages_controller.rb +24 -0
- data/app/models/harbinger/database_channel_message.rb +51 -0
- data/app/models/harbinger/database_channel_message_element.rb +19 -0
- data/app/views/harbinger/messages/index.html.erb +43 -0
- data/app/views/harbinger/messages/show.html.erb +24 -0
- data/config/routes.rb +3 -0
- data/db/migrate/20140310185338_create_harbinger_database_channel_message.rb +11 -0
- data/db/migrate/20140310185339_create_harbinger_database_channel_message_elements.rb +14 -0
- data/gemfiles/rails4.1.gemfile +12 -0
- data/gemfiles/rails4.gemfile +13 -0
- data/harbinger.gemspec +22 -7
- data/lib/generators/harbinger/install/install_generator.rb +23 -0
- data/lib/generators/harbinger/install/templates/harbinger_initializer.rb.erb +6 -0
- data/lib/harbinger.rb +100 -1
- data/lib/harbinger/channels.rb +25 -0
- data/lib/harbinger/channels/database_channel.rb +15 -0
- data/lib/harbinger/channels/logger_channel.rb +31 -0
- data/lib/harbinger/channels/null_channel.rb +7 -0
- data/lib/harbinger/configuration.rb +58 -0
- data/lib/harbinger/engine.rb +8 -1
- data/lib/harbinger/exceptions.rb +4 -0
- data/lib/harbinger/message.rb +20 -0
- data/lib/harbinger/reporters.rb +34 -0
- data/lib/harbinger/reporters/exception_reporter.rb +26 -0
- data/lib/harbinger/reporters/null_reporter.rb +14 -0
- data/lib/harbinger/reporters/request_reporter.rb +20 -0
- data/lib/harbinger/reporters/user_reporter.rb +20 -0
- data/lib/harbinger/version.rb +1 -1
- data/run_each_spec_in_isolation +9 -0
- data/script/fast_specs +20 -0
- data/spec/controllers/harbinger/messages_controller_spec.rb +26 -0
- data/spec/features/end_to_end_exception_handling_spec.rb +39 -0
- data/spec/lib/harbinger/channels/database_channel_spec.rb +18 -0
- data/spec/lib/harbinger/channels/logger_channel_spec.rb +21 -0
- data/spec/lib/harbinger/channels/null_channel_spec.rb +8 -0
- data/spec/lib/harbinger/channels_spec.rb +40 -0
- data/spec/lib/harbinger/configuration_spec.rb +53 -0
- data/spec/lib/harbinger/message_spec.rb +15 -0
- data/spec/lib/harbinger/reporters/exception_reporter_spec.rb +24 -0
- data/spec/lib/harbinger/reporters/null_reporter_spec.rb +21 -0
- data/spec/lib/harbinger/reporters/request_reporter_spec.rb +23 -0
- data/spec/lib/harbinger/reporters/user_reporter_spec.rb +17 -0
- data/spec/lib/harbinger/reporters_spec.rb +46 -0
- data/spec/lib/harbinger_spec.rb +60 -0
- data/spec/models/harbinger/database_channel_message_element_spec.rb +16 -0
- data/spec/models/harbinger/database_channel_message_spec.rb +68 -0
- data/spec/routing/harbinger/messages_routing_spec.rb +16 -0
- data/spec/spec_active_record_helper.rb +41 -0
- data/spec/spec_fast_helper.rb +70 -0
- data/spec/spec_slow_helper.rb +57 -0
- data/spec/spec_view_helper.rb +38 -0
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +13 -0
- data/spec/views/harbinger/messages/index.html.erb_spec.rb +31 -0
- data/spec/views/harbinger/messages/show.html.erb_spec.rb +36 -0
- metadata +205 -20
- 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.
|
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-
|
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: '
|
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: '
|
41
|
-
|
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
|
-
|
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:
|
246
|
+
version: '0'
|
86
247
|
requirements: []
|
87
248
|
rubyforge_project:
|
88
|
-
rubygems_version: 2.
|
249
|
+
rubygems_version: 2.2.2
|
89
250
|
signing_key:
|
90
251
|
specification_version: 4
|
91
|
-
summary:
|
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
|