yodeler 0.0.10 → 0.1.1
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/.codeclimate.yml +33 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.travis.yml +6 -0
- data/Gemfile +4 -0
- data/Guardfile +16 -0
- data/README.md +158 -67
- data/Rakefile +4 -21
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/lib/yodeler/adapter_not_registered_error.rb +14 -0
- data/lib/yodeler/adapters/http_adapter.rb +51 -0
- data/lib/yodeler/adapters/memory_adapter.rb +23 -0
- data/lib/yodeler/adapters/void_adapter.rb +10 -0
- data/lib/yodeler/client.rb +166 -0
- data/lib/yodeler/duplicate_endpoint_name_error.rb +9 -0
- data/lib/yodeler/endpoint.rb +35 -0
- data/lib/yodeler/metric.rb +36 -0
- data/lib/yodeler/version.rb +1 -1
- data/lib/yodeler.rb +41 -106
- data/yodeler.gemspec +29 -0
- metadata +44 -102
- data/MIT-LICENSE +0 -20
- data/app/assets/javascripts/yodeler/application.js +0 -13
- data/app/assets/stylesheets/yodeler/application.css +0 -13
- data/app/controllers/yodeler/application_controller.rb +0 -4
- data/app/helpers/yodeler/application_helper.rb +0 -4
- data/app/views/layouts/yodeler/application.html.erb +0 -14
- data/config/routes.rb +0 -2
- data/lib/generators/yodeler/USAGE +0 -2
- data/lib/generators/yodeler/install_generator.rb +0 -23
- data/lib/generators/yodeler/templates/initializer.rb +0 -7
- data/lib/generators/yodeler/templates/migration.rb +0 -50
- data/lib/tasks/yodeler_tasks.rake +0 -4
- data/lib/yodeler/configuration.rb +0 -12
- data/lib/yodeler/engine.rb +0 -10
- data/lib/yodeler/listens_to_yodeler.rb +0 -32
- data/lib/yodeler/models/event.rb +0 -17
- data/lib/yodeler/models/event_type.rb +0 -6
- data/lib/yodeler/models/event_types/base.rb +0 -59
- data/lib/yodeler/models/event_types/noop_event_type.rb +0 -12
- data/lib/yodeler/models/notification.rb +0 -30
- data/lib/yodeler/models/subscription.rb +0 -9
@@ -1,50 +0,0 @@
|
|
1
|
-
class CreateYodelerTables < ActiveRecord::Migration
|
2
|
-
def change
|
3
|
-
create_table :yodeler_event_types do |t|
|
4
|
-
t.string :name, null: false # Maps to registered name in DSL
|
5
|
-
t.string :type #STI
|
6
|
-
t.datetime :created_at
|
7
|
-
end
|
8
|
-
|
9
|
-
create_table :yodeler_events do |t|
|
10
|
-
t.integer :yodeler_event_type_id, null: false
|
11
|
-
t.datetime :started_at
|
12
|
-
t.datetime :finished_at
|
13
|
-
t.text :payload
|
14
|
-
t.datetime :created_at, null: false
|
15
|
-
end
|
16
|
-
|
17
|
-
create_table :yodeler_subscriptions do |t|
|
18
|
-
t.integer :yodeler_event_type_id, null: false
|
19
|
-
|
20
|
-
# polymorphic, support for whatever type of class is owning the subscription
|
21
|
-
t.string :subscriber_type, null: false
|
22
|
-
t.integer :subscriber_id, null: false
|
23
|
-
|
24
|
-
t.datetime :created_at
|
25
|
-
t.datetime :updated_at
|
26
|
-
end
|
27
|
-
|
28
|
-
create_table :yodeler_notifications do |t|
|
29
|
-
t.integer :yodeler_event_id, null: false
|
30
|
-
t.integer :yodeler_subscription_id, null: false
|
31
|
-
t.integer :state
|
32
|
-
t.datetime :created_at, null: false
|
33
|
-
t.datetime :updated_at, null: false
|
34
|
-
end
|
35
|
-
|
36
|
-
# sqlite3 has an index name length limitation of 62(?!) characters
|
37
|
-
unless Rails.env.test?
|
38
|
-
add_index :yodeler_event_types, :name, unique: true
|
39
|
-
|
40
|
-
add_index :yodeler_events, :yodeler_event_type_id
|
41
|
-
|
42
|
-
add_index :yodeler_subscriptions, :yodeler_event_type_id
|
43
|
-
add_index :yodeler_subscriptions, [:subscriber_id, :subscriber_type]
|
44
|
-
|
45
|
-
add_index :yodeler_notifications, :yodeler_event_id
|
46
|
-
add_index :yodeler_notifications, :yodeler_subscription_id
|
47
|
-
add_index :yodeler_notifications, :state
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
data/lib/yodeler/engine.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
module Yodeler
|
2
|
-
module ListensToYodeler
|
3
|
-
extend ActiveSupport::Concern
|
4
|
-
|
5
|
-
included do
|
6
|
-
end
|
7
|
-
|
8
|
-
module ClassMethods
|
9
|
-
def listens_to_yodeler(subscriptions_assocation_name = :yodeler_subscriptions, notifications_association_name = :yodeler_notifications)
|
10
|
-
cattr_accessor :yodeler_subscriptions_name
|
11
|
-
cattr_accessor :yodeler_notifications_name
|
12
|
-
self.yodeler_subscriptions_name = subscriptions_assocation_name
|
13
|
-
self.yodeler_notifications_name = notifications_association_name
|
14
|
-
|
15
|
-
has_many self.yodeler_subscriptions_name,
|
16
|
-
dependent: :delete_all,
|
17
|
-
class_name: "Yodeler::Subscription",
|
18
|
-
foreign_key: :subscriber_id
|
19
|
-
|
20
|
-
has_many self.yodeler_notifications_name,
|
21
|
-
through: self.yodeler_subscriptions_name,
|
22
|
-
foreign_key: :subscriber_id
|
23
|
-
|
24
|
-
include Yodeler::ListensToYodeler::LocalInstanceMethods
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
module LocalInstanceMethods;end;
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
ActiveRecord::Base.send :include, Yodeler::ListensToYodeler
|
data/lib/yodeler/models/event.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
module Yodeler
|
2
|
-
class Event < ActiveRecord::Base
|
3
|
-
serialize :payload, Hash
|
4
|
-
|
5
|
-
validates_presence_of :event_type
|
6
|
-
|
7
|
-
belongs_to :event_type, class_name: "Yodeler::EventType::Base", foreign_key: :yodeler_event_type_id
|
8
|
-
has_many :notifications, class_name: "Yodeler::Notification", foreign_key: :yodeler_event_id
|
9
|
-
|
10
|
-
delegate :subscriptions, to: :event_type
|
11
|
-
delegate :name, to: :event_type
|
12
|
-
|
13
|
-
def duration
|
14
|
-
finished_at - started_at if finished_at.present? && started_at.present?
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,59 +0,0 @@
|
|
1
|
-
module Yodeler
|
2
|
-
module EventType
|
3
|
-
class Base < ActiveRecord::Base
|
4
|
-
self.table_name= "yodeler_event_types"
|
5
|
-
|
6
|
-
class Configuration
|
7
|
-
include ActiveSupport::Configurable
|
8
|
-
config_accessor(:states) do
|
9
|
-
Yodeler.configuration.default_states
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
def self.configuration
|
14
|
-
@configuration ||= Configuration.new
|
15
|
-
end
|
16
|
-
|
17
|
-
validates_presence_of :name
|
18
|
-
validates_uniqueness_of :name
|
19
|
-
|
20
|
-
has_many :events,
|
21
|
-
dependent: :delete_all,
|
22
|
-
class_name: "Yodeler::Event",
|
23
|
-
foreign_key: :yodeler_event_type_id
|
24
|
-
|
25
|
-
has_many :subscriptions,
|
26
|
-
dependent: :delete_all,
|
27
|
-
class_name: "Yodeler::Subscription",
|
28
|
-
foreign_key: :yodeler_event_type_id
|
29
|
-
|
30
|
-
|
31
|
-
# Logs the occurrence of a {Yodeler::Event} and dispatches notifications
|
32
|
-
#
|
33
|
-
# @param [Hash] params additional params to log
|
34
|
-
# @option params [String] :started_at Benchmark started at time
|
35
|
-
# @option params [String] :finished_at Benchmark finished at time
|
36
|
-
#
|
37
|
-
# @param [Hash] payload Serialized hash, anything you want
|
38
|
-
#
|
39
|
-
# @return [~Yodeler::EventType::Base] the logged event
|
40
|
-
def self.yodel!(params)
|
41
|
-
# Add the event type to the yodeler_event_types table
|
42
|
-
current_event_type = self.first_or_create name: Yodeler.registrations.key(self)
|
43
|
-
|
44
|
-
#current_event_type = self.first
|
45
|
-
current_event = current_event_type.events.create(params)
|
46
|
-
|
47
|
-
current_event_type.subscriptions.each do |subscriber|
|
48
|
-
subscriber.notifications.create({
|
49
|
-
yodeler_event_id: current_event.id,
|
50
|
-
# get the integer out of the default state (first state)
|
51
|
-
state: self.configuration.states.first.last
|
52
|
-
})
|
53
|
-
end
|
54
|
-
|
55
|
-
current_event
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
module Yodeler
|
2
|
-
module EventType
|
3
|
-
# The event that is dispatch if an Yodeler.dispatch is called on an event type that
|
4
|
-
# does not exist
|
5
|
-
#
|
6
|
-
# @example
|
7
|
-
# Yodeler.dispatch :i_dont_exist, my_payload
|
8
|
-
# # => Yodeler.dispatch :noop, my_payload
|
9
|
-
class NoopEventType < Yodeler::EventType::Base
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
module Yodeler
|
2
|
-
class Notification < ActiveRecord::Base
|
3
|
-
validates_presence_of :subscription
|
4
|
-
validates_presence_of :event
|
5
|
-
|
6
|
-
belongs_to :event, class_name: "Yodeler::Event", foreign_key: :yodeler_event_id
|
7
|
-
belongs_to :subscription, class_name: "Yodeler::Subscription", foreign_key: :yodeler_subscription_id
|
8
|
-
|
9
|
-
delegate :event_type, to: :event
|
10
|
-
delegate :subscriber, to: :subscription
|
11
|
-
|
12
|
-
def message
|
13
|
-
I18n.t("yodeler.event_types.#{event_type_key}.message", event.payload)
|
14
|
-
end
|
15
|
-
|
16
|
-
def name
|
17
|
-
I18n.t("yodeler.event_types.#{event_type_key}.name", event.payload)
|
18
|
-
end
|
19
|
-
|
20
|
-
def state
|
21
|
-
state_enum_value = read_attribute :state
|
22
|
-
event_type.class.configuration.states.key(state_enum_value)
|
23
|
-
end
|
24
|
-
|
25
|
-
protected
|
26
|
-
def event_type_key
|
27
|
-
event_type.name.to_sym
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,9 +0,0 @@
|
|
1
|
-
module Yodeler
|
2
|
-
class Subscription < ActiveRecord::Base
|
3
|
-
validates_presence_of :subscriber, :event_type
|
4
|
-
belongs_to :event_type, class_name: "Yodeler::EventType::Base", foreign_key: :yodeler_event_type_id
|
5
|
-
belongs_to :subscriber, polymorphic: true
|
6
|
-
|
7
|
-
has_many :notifications, class_name: "Yodeler::Notification", foreign_key: :yodeler_subscription_id
|
8
|
-
end
|
9
|
-
end
|