wisper-active_tracker 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b9653554aee66849fa191fad424789ddbbe068c4
4
- data.tar.gz: 42932ac432b075229333bee3af85c146c6fabd83
3
+ metadata.gz: e78264d7de44631531b658fedef71c719898d930
4
+ data.tar.gz: b3d56509c0b63fdeffa9f76766da7f5f81db34e6
5
5
  SHA512:
6
- metadata.gz: 5a4f05999713768f8addc8e04b0dfc837d580ff4f8eeb52aa09ee377a627e21d8145ed944ef0c1bccf0e1e43a2bf314b717d1f9fc92ee5d5b1dc4093b13de701
7
- data.tar.gz: 25f9d244cb7abec1712a040d5b65c99ea1528fa26e725ace37680f44901fc65b90600a2c676e6ef35724c128412e1d5817d28b6b21936fa53952cee30bb839be
6
+ metadata.gz: 27b34ab1ca2a4cb3580f68d9ecb60da21e71afe0ac5b8eb67714d31e4bcb44b0a30c4108c19334a385299f8302fbebc76ebb5d46077434729b6ca96e8e3584e9
7
+ data.tar.gz: ba239e2d86ad7df740f9630482482cde90c39f8c922e8252094a16b4d51e0acccccc855a1ab5b34f0ecf322e14c926bf309d8ad141c57190fdebfc960be41156
data/Gemfile CHANGED
@@ -1,18 +1,3 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
-
5
- gem 'rubysl', '~> 2.0', :platforms => :rbx
6
-
7
- gem 'bundler', '~> 1.5'
8
- gem 'rake'
9
- gem 'rspec'
10
- gem 'pry'
11
-
12
- gem "sqlite3", :platform => :ruby
13
- gem "activerecord-jdbcsqlite3-adapter", :platform => :jruby
14
-
15
- group :metrics do
16
- gem 'flay'
17
- gem 'simplecov'
18
- end
data/README.md CHANGED
@@ -1,15 +1,13 @@
1
- # Wisper::ActiveChanges
1
+ # Wisper::ActiveTracker
2
2
 
3
3
  Transparently publish model lifecycle events to subscribers.
4
-
5
4
  Using Wisper events is a better alternative to ActiveRecord callbacks and Observers.
6
-
7
5
  Listeners are subscribed to models at runtime.
8
6
 
9
7
  ## Installation
10
8
 
11
9
  ```ruby
12
- gem 'wisper-activechanges'
10
+ gem 'wisper-active_tracker'
13
11
  ```
14
12
 
15
13
  ## Usage
@@ -18,17 +16,17 @@ gem 'wisper-activechanges'
18
16
 
19
17
  ```ruby
20
18
  class Meeting < ActiveRecord::Base
21
- include Wisper.model
19
+ include Wisper::ActiveTracker
22
20
 
23
21
  # ...
24
22
  end
25
23
  ```
26
24
 
27
25
  If you wish all models to broadcast events without having to explicitly include
28
- `Wisper.model` add the following to an initializer:
26
+ `Wisper::ActiveTracker` add the following to an initializer:
29
27
 
30
28
  ```ruby
31
- Wisper::ActiveRecord.extend_all
29
+ Wisper::ActiveTracker.extend_all
32
30
  ```
33
31
 
34
32
  ### Subscribing
@@ -57,11 +55,14 @@ Please refer to the [Wisper README](https://github.com/krisleech/wisper) for ful
57
55
  The events which are automatically broadcast are:
58
56
 
59
57
  * `after_create`
60
- * `after_create`
61
- * `after_destroy`
62
58
  * `create_<model_name>_{successful, failed}`
59
+ * `after_update`
63
60
  * `update_<model_name>_{successful, failed}`
61
+ * `before_create`
62
+ * `after_destroy`
64
63
  * `destroy_<model_name>_successful`
64
+ * `after_commit`
65
+ * `<model_name>_committed`
65
66
  * `after_rollback`
66
67
 
67
68
  ### Reacting to Events
@@ -173,15 +174,3 @@ meeting.save
173
174
  ```ruby
174
175
  Auditor.audit # => [...]
175
176
  ```
176
-
177
- ## Compatibility
178
-
179
- ## Contributing
180
-
181
- Please submit a Pull Request with specs.
182
-
183
- ### Running the specs
184
-
185
- ```
186
- bundle exec rspec
187
- ```
@@ -3,42 +3,43 @@ module Wisper
3
3
  module Tracker
4
4
  extend ActiveSupport::Concern
5
5
 
6
- module ClassMethods
7
- def has_tracker(options = {})
8
- include Wisper::Publisher
9
-
10
- after_validation :__track_after_validation_broadcast
11
- after_commit :__track_after_create_broadcast, on: :create
12
- after_commit :__track_after_update_broadcast, on: :update
13
- after_commit :__track_after_destroy_broadcast, on: :destroy
14
- after_rollback :__track_after_rollback_broadcast
15
- before_destroy :__track_before_destroy_broadcast
16
-
17
- class_attribute :__tracker_options
18
- self.__tracker_options = options.dup
19
- end
6
+ included do
7
+ include Wisper::Publisher
8
+
9
+ after_validation :__track_after_validation_broadcast
10
+ after_commit :__track_after_create_broadcast, on: :create
11
+ after_commit :__track_after_update_broadcast, on: :update
12
+ after_commit :__track_after_destroy_broadcast, on: :destroy
13
+ after_commit :__track_after_commit_broadcast
14
+ after_rollback :__track_after_rollback_broadcast
15
+ before_destroy :__track_before_destroy_broadcast
20
16
  end
21
17
 
22
18
  private
23
19
 
24
20
  def __track_after_validation_broadcast
25
21
  action = new_record? ? 'create' : 'update'
26
- broadcast("#{action}_#{self.class.model_name.param_key}_failed", __tracker_args_broadcast) unless errors.empty?
22
+ broadcast("#{action}_#{__tracker_broadcast_key}_failed", __tracker_args_broadcast) unless errors.empty?
27
23
  end
28
24
 
29
25
  def __track_after_create_broadcast
30
26
  broadcast(:after_create, __tracker_args_broadcast)
31
- broadcast("create_#{self.class.model_name.param_key}_successful", __tracker_args_broadcast)
27
+ broadcast("create_#{__tracker_broadcast_key}_successful", __tracker_args_broadcast)
32
28
  end
33
29
 
34
30
  def __track_after_update_broadcast
35
31
  broadcast(:after_update, __tracker_args_broadcast)
36
- broadcast("update_#{self.class.model_name.param_key}_successful", __tracker_args_broadcast)
32
+ broadcast("update_#{__tracker_broadcast_key}_successful", __tracker_args_broadcast)
37
33
  end
38
34
 
39
35
  def __track_after_destroy_broadcast
40
36
  broadcast(:after_destroy, __tracker_args_broadcast)
41
- broadcast("destroy_#{self.class.model_name.param_key}_successful", __tracker_args_broadcast)
37
+ broadcast("destroy_#{__tracker_broadcast_key}_successful", __tracker_args_broadcast)
38
+ end
39
+
40
+ def __track_after_commit_broadcast
41
+ broadcast(:after_commit, __tracker_args_broadcast)
42
+ broadcast("#{__tracker_broadcast_key}_committed", __tracker_args_broadcast)
42
43
  end
43
44
 
44
45
  def __track_after_rollback_broadcast
@@ -49,26 +50,21 @@ module Wisper
49
50
  broadcast(:before_destroy, __tracker_args_broadcast)
50
51
  end
51
52
 
52
- def __tracker_args_broadcast
53
- args = {}
54
-
55
- args[:tenant] = Apartment::Tenant.current if defined?(Apartment)
56
-
57
- if self.respond_to?(:tracker_args)
58
- args.merge(self.tracker_args)
59
- else
53
+ def __tracker_broadcast_key
54
+ self.class.model_name.param_key
55
+ end
60
56
 
61
- if self.__tracker_options[:model]
62
- args[:model] = self
63
- else
64
- args[:id] = self.id
65
- end
57
+ def __tracker_args_broadcast
58
+ args = {
59
+ id: id,
60
+ global_id: to_global_id
61
+ }
66
62
 
67
- unless self.__tracker_options[:skip_changes]
68
- args[:changes] = self.changes.dup
69
- end
63
+ args.merge(default_tracker_args) if respond_to?(:default_tracker_args)
64
+ args.merge(tracker_args) if respond_to?(:tracker_args)
70
65
 
71
- end
66
+ args[:model] ||= self
67
+ args[:changes] ||= changes.dup
72
68
 
73
69
  args
74
70
  end
@@ -1,5 +1,5 @@
1
1
  module Wisper
2
2
  module ActiveTracker
3
- VERSION = "0.1.1"
3
+ VERSION = '0.1.2'.freeze
4
4
  end
5
5
  end
@@ -1,12 +1,14 @@
1
- require "wisper/active_tracker/version"
2
- require "wisper/active_tracker/tracker"
1
+ require 'wisper/active_tracker/version'
2
+ require 'wisper/active_tracker/tracker'
3
3
 
4
4
  module Wisper
5
- def self.tracker
6
- ::Wisper::ActiveTracker::Tracker
7
- end
8
-
9
5
  module ActiveTracker
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ include Tracker
10
+ end
11
+
10
12
  def self.extend_all
11
13
  ::ActiveRecord::Base.class_eval { include Wisper.tracker }
12
14
  end
@@ -1,24 +1,26 @@
1
1
  # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+
4
4
  require 'wisper/active_tracker/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "wisper-active_tracker"
7
+ spec.name = 'wisper-active_tracker'
8
8
  spec.version = Wisper::ActiveTracker::VERSION
9
- spec.authors = ["Mikko Kokkonen"]
10
- spec.email = ["mikko@mikian.com"]
11
- spec.summary = %q{Subscribe to changes on ActiveRecord models}
12
- spec.description = %q{Subscribe to changes on ActiveRecord models}
13
- spec.homepage = "https://github.com/mikian/wisper-active_tracker"
14
- spec.license = "MIT"
9
+ spec.authors = ['Mikko Kokkonen']
10
+ spec.email = ['mikko@mikian.com']
11
+ spec.summary = 'Subscribe to changes on ActiveRecord models'
12
+ spec.description = 'Subscribe to changes on ActiveRecord models'
13
+ spec.homepage = 'https://github.com/mikian/wisper-active_tracker'
14
+ spec.license = 'MIT'
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ["lib"]
20
- spec.required_ruby_version = ">= 1.9.3"
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_dependency 'wisper', '~> 2.0'
22
+ spec.add_dependency 'activerecord', '>= 5.0.0'
21
23
 
22
- spec.add_dependency "wisper", "~> 1.3"
23
- spec.add_dependency "activerecord", ">= 3.0.0"
24
+ spec.add_development_dependency 'rspec'
25
+ spec.add_development_dependency 'sqlite3'
24
26
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wisper-active_tracker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mikko Kokkonen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-15 00:00:00.000000000 Z
11
+ date: 2017-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: wisper
@@ -16,28 +16,56 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.3'
19
+ version: '2.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.3'
26
+ version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activerecord
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 3.0.0
33
+ version: 5.0.0
34
34
  type: :runtime
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: 3.0.0
40
+ version: 5.0.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: sqlite3
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
41
69
  description: Subscribe to changes on ActiveRecord models
42
70
  email:
43
71
  - mikko@mikian.com
@@ -47,21 +75,13 @@ extra_rdoc_files: []
47
75
  files:
48
76
  - ".gitignore"
49
77
  - ".rspec"
50
- - ".travis.yml"
51
78
  - Gemfile
52
79
  - LICENSE.txt
53
80
  - README.md
54
81
  - Rakefile
55
- - gemfiles/activerecord-3.0
56
- - gemfiles/activerecord-4.0
57
82
  - lib/wisper/active_tracker.rb
58
83
  - lib/wisper/active_tracker/tracker.rb
59
84
  - lib/wisper/active_tracker/version.rb
60
- - spec/spec_helper.rb
61
- - spec/support/models.rb
62
- - spec/support/schema.rb
63
- - spec/wisper/activechanges_spec.rb
64
- - spec/wisper/publisher_spec.rb
65
85
  - wisper-active_tracker.gemspec
66
86
  homepage: https://github.com/mikian/wisper-active_tracker
67
87
  licenses:
@@ -75,7 +95,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
75
95
  requirements:
76
96
  - - ">="
77
97
  - !ruby/object:Gem::Version
78
- version: 1.9.3
98
+ version: '0'
79
99
  required_rubygems_version: !ruby/object:Gem::Requirement
80
100
  requirements:
81
101
  - - ">="
@@ -83,14 +103,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
83
103
  version: '0'
84
104
  requirements: []
85
105
  rubyforge_project:
86
- rubygems_version: 2.2.2
106
+ rubygems_version: 2.6.13
87
107
  signing_key:
88
108
  specification_version: 4
89
109
  summary: Subscribe to changes on ActiveRecord models
90
- test_files:
91
- - spec/spec_helper.rb
92
- - spec/support/models.rb
93
- - spec/support/schema.rb
94
- - spec/wisper/activechanges_spec.rb
95
- - spec/wisper/publisher_spec.rb
96
- has_rdoc:
110
+ test_files: []
data/.travis.yml DELETED
@@ -1,11 +0,0 @@
1
- language: ruby
2
- bundler_args: --without=metrics
3
- script: bundle exec rspec spec
4
- gemfile:
5
- - gemfiles/activerecord-3.0
6
- - gemfiles/activerecord-4.0
7
- rvm:
8
- - '1.9.3'
9
- - '2.1.1'
10
- - jruby
11
- - rbx-2
@@ -1,12 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rubysl', '~> 2.0', :platforms => :rbx
4
-
5
- gem 'rspec'
6
-
7
- gem "sqlite3", :platform => :ruby
8
- gem "activerecord-jdbcsqlite3-adapter", :platform => :jruby
9
-
10
- gem 'activerecord', '~> 3.0'
11
-
12
- gemspec :path => '../'
@@ -1,12 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rubysl', '~> 2.0', :platforms => :rbx
4
-
5
- gem 'rspec'
6
-
7
- gem "sqlite3", :platform => :ruby
8
- gem "activerecord-jdbcsqlite3-adapter", :platform => :jruby
9
-
10
- gem 'activerecord', '~> 4.0'
11
-
12
- gemspec :path => '../'
data/spec/spec_helper.rb DELETED
@@ -1,48 +0,0 @@
1
- begin
2
- require 'simplecov'
3
- SimpleCov.start do
4
- add_filter 'spec'
5
- end
6
- rescue LoadError
7
- end
8
-
9
- require 'wisper'
10
- require 'active_record'
11
-
12
- puts "Using ActiveRecord #{ActiveRecord::VERSION::STRING}"
13
-
14
- adapter = RUBY_PLATFORM == "java" ? 'jdbcsqlite3' : 'sqlite3'
15
-
16
- ActiveRecord::Base.establish_connection(:adapter => adapter,
17
- :database => File.dirname(__FILE__) + "/db.sqlite3")
18
-
19
- load File.dirname(__FILE__) + '/support/schema.rb'
20
-
21
- require 'support/models'
22
-
23
- require 'wisper/activechanges'
24
-
25
- RSpec.configure do |config|
26
- config.filter_run :focus
27
- config.run_all_when_everything_filtered = true
28
-
29
- if config.files_to_run.one?
30
- config.full_backtrace = true
31
- config.default_formatter = 'doc'
32
- end
33
-
34
- config.profile_examples = 10
35
-
36
- config.order = :random
37
-
38
- Kernel.srand config.seed
39
-
40
- config.expect_with :rspec do |expectations|
41
- expectations.syntax = :expect
42
- end
43
-
44
- config.mock_with :rspec do |mocks|
45
- mocks.syntax = :expect
46
- mocks.verify_partial_doubles = true
47
- end
48
- end
@@ -1,3 +0,0 @@
1
- class Meeting < ActiveRecord::Base
2
- validates :title, presence: true # database default to non-blank value
3
- end
@@ -1,9 +0,0 @@
1
- ActiveRecord::Schema.define do
2
- self.verbose = false
3
-
4
- create_table :meetings, :force => true do |t|
5
- t.string :title, default: 'My Meeting'
6
- t.string :location
7
- t.timestamps
8
- end
9
- end
@@ -1,85 +0,0 @@
1
- describe 'ActiveChanges' do
2
- let(:listener) { double('Listener') }
3
- let(:model_class) { Class.new(Meeting) { include Wisper.model } }
4
-
5
- before { Wisper::GlobalListeners.clear }
6
- before { allow(model_class).to receive(:name).and_return('Meeting') }
7
-
8
- it '.model returns ActiveChanges module' do
9
- expect(Wisper.model).to eq Wisper::ActiveChanges::Publisher
10
- end
11
-
12
- describe '.commit' do # DEPRECATED
13
- describe 'when creating' do
14
- context 'and model is valid' do
15
- it 'publishes create_<model_name>_successful event to listener' do
16
- expect(listener).to receive(:create_meeting_successful).with(instance_of(model_class))
17
- model_class.subscribe(listener)
18
- model_class.commit
19
- end
20
- end
21
-
22
- context 'and model is not valid' do
23
- it 'publishes create_<model_name>_failed event to listener' do
24
- expect(listener).to receive(:create_meeting_failed).with(instance_of(model_class))
25
- model_class.subscribe(listener)
26
- model_class.commit(title: nil)
27
- end
28
- end
29
- end
30
-
31
- describe 'when updating' do
32
- before { model_class.create! }
33
-
34
- let(:model) { model_class.first }
35
-
36
- context 'and model is valid' do
37
- it 'publishes update_<model_name>_successful event to listener' do
38
- expect(listener).to receive(:update_meeting_successful).with(instance_of(model_class))
39
- model_class.subscribe(listener)
40
- model.commit(title: 'foo')
41
- end
42
- end
43
-
44
- context 'and model is not valid' do
45
- it 'publishes update_<model_name>_failed event to listener' do
46
- expect(listener).to receive(:update_meeting_failed).with(instance_of(model_class))
47
- model_class.subscribe(listener)
48
- model.commit(title: nil)
49
- end
50
- end
51
- end
52
- end
53
-
54
- describe 'create' do
55
- it 'publishes an after_create event to listener' do
56
- expect(listener).to receive(:after_create).with(instance_of(model_class))
57
- model_class.subscribe(listener)
58
- model_class.create
59
- end
60
- end
61
-
62
- describe 'update' do
63
- before { model_class.create! }
64
-
65
- let(:model) { model_class.first }
66
-
67
- it 'publishes an after_update event to listener' do
68
- expect(listener).to receive(:after_update).with(instance_of(model_class))
69
- model.subscribe(listener)
70
- model.update_attributes(title: 'new title')
71
- end
72
- end
73
-
74
- describe 'destroy' do
75
- before { model_class.create! }
76
-
77
- let(:model) { model_class.first }
78
-
79
- it 'publishes an on_destroy event to listener' do
80
- expect(listener).to receive(:after_destroy).with(instance_of(model_class))
81
- model_class.subscribe(listener)
82
- model.destroy
83
- end
84
- end
85
- end
@@ -1,10 +0,0 @@
1
- describe Wisper::ActiveRecord::Publisher do
2
-
3
- it 'includes Wisper::Publisher' do
4
- klass = Class.new(ActiveRecord::Base) do
5
- include Wisper::ActiveRecord::Publisher
6
- end
7
-
8
- expect(klass.ancestors).to include Wisper::Publisher
9
- end
10
- end