wisper-activerecord 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 451585256ebdbf75f46b68cc6553221ccde75b4e
4
- data.tar.gz: ed8138655b491c53530bd4ef515b649e2bbfd57f
3
+ metadata.gz: 666f55caf67abe6ebccc3a5670316f32c4ff8406
4
+ data.tar.gz: 10583078a56cb785deeb6c9548de3a09499d4e8d
5
5
  SHA512:
6
- metadata.gz: 2af4ab484e153bdf2f0095e2dc29e52f205f3eef135a9d5755eccdfa49851196e2b878c277308e7ded811af7c16d99b15ea7ae03c1f2e37a769e52ac70d08d5c
7
- data.tar.gz: f80a718f09e0f5102fef9df9932f516b19d4669818bf80831a2e7c30126edca13fae893570f060bc6276c7ad7e8086787c3cad02d3e304f02560e2a742398c91
6
+ metadata.gz: 2212d5f93e3ecd82c01369f52396e6ee0e41df1a320c95496c76d3e50d0e8409a2d508c22b31b606bfd847264b65ce80743676a22b68b75e8a54fdb165cc6d24
7
+ data.tar.gz: 5072defbcaf59d3df9eaf8ee6b8cfb01107b4be2793d53e24167d7ff3e9aa37747c6dbe6e7d19bdbd91e6e50009e1de3309d0e839e71afa9468259b6841af210
data/README.md CHANGED
@@ -16,7 +16,7 @@ gem 'wisper-activerecord'
16
16
 
17
17
  ## Usage
18
18
 
19
- ### The Model
19
+ ### Setup a publisher
20
20
 
21
21
  ```ruby
22
22
  class Meeting < ActiveRecord::Base
@@ -26,43 +26,47 @@ class Meeting < ActiveRecord::Base
26
26
  end
27
27
  ```
28
28
 
29
- If you wish all models to broadcast events without having explicitly include
30
- `Wisper.model` in each you can add the following to an initializer:
29
+ If you wish all models to broadcast events without having to explicitly include
30
+ `Wisper.model` add the following to an initializer:
31
31
 
32
32
  ```ruby
33
- # config/initializers/wisper.rb
34
33
  Wisper::ActiveRecord.extend_all
35
34
  ```
36
35
 
37
- #### Subscribing Listeners
36
+ ### Subscribing
38
37
 
39
- Subscribe a listener to instances of models:
38
+ Subscribe a listener to model instances:
40
39
 
41
40
  ```ruby
42
41
  meeting = Meeting.new
43
42
  meeting.subscribe(Auditor.new)
44
43
  ```
45
44
 
46
- Subscribe a listener to all instances of a model:
45
+ Subscribe a block to model instances:
47
46
 
48
47
  ```ruby
49
- Meeting.subscribe(Auditor.new)
48
+ meeting.on(:create_meeting_successful) { |meeting| ... }
50
49
  ```
51
50
 
52
- Please refer to the [Wisper README](https://github.com/krisleech/wisper) for full details about subscribing.
51
+ Subscribe a listener to _all_ instances of a model:
53
52
 
54
- The events broadcast are:
53
+ ```ruby
54
+ Meeting.subscribe(Auditor.new)
55
+ ```
55
56
 
56
- * `before_{create, update, destroy}`
57
- * `after_{create, update, destroy}`
57
+ Please refer to the [Wisper README](https://github.com/krisleech/wisper) for full details about subscribing.
58
58
 
59
- ### Subscribing blocks
59
+ The events which are automatically broadcast are:
60
60
 
61
- ```ruby
62
- meeting.on(:create_meeting_successful) { |meeting| ... }
63
- ```
61
+ * `after_create`
62
+ * `after_create`
63
+ * `after_destroy`
64
+ * `create_<model_name>_{successful, failed}`
65
+ * `update_<model_name>_{successful, failed}`
66
+ * `destroy_<model_name>_successful`
67
+ * `after_rollback`
64
68
 
65
- ### Reacting to events
69
+ ### Reacting to Events
66
70
 
67
71
  To receive an event the listener must implement a method matching the name of
68
72
  the event with a single argument, the instance of the model.
@@ -73,33 +77,9 @@ def create_meeting_successful(meeting)
73
77
  end
74
78
  ```
75
79
 
76
- ### Success and Failure events for Create and Update
77
-
78
- To have event broadcast for success and failure of create and
79
- update you must use the `commit` method.
80
-
81
- ```ruby
82
- meeting.title = 'My Meeting'
83
- meeting.commit
84
- ```
85
-
86
- You can also pass attributes directly to `commit`:
87
-
88
- ```ruby
89
- meeting.commit(title: 'My Meeting')
90
- ```
91
-
92
- And use the class method for creating new records:
93
-
94
- ```ruby
95
- Meeting.commit(title: 'My Meeting')
96
- ```
97
-
98
- In addition the the regular events broadcast the following events are also broadcast:
99
-
100
- * `{create, update}_<model_name>_{successful, failed}`
80
+ ## Example
101
81
 
102
- ### Example controller
82
+ ### Controller
103
83
 
104
84
  ```ruby
105
85
  class MeetingsController < ApplicationController
@@ -112,7 +92,7 @@ class MeetingsController < ApplicationController
112
92
  @meeting.subscribe(Auditor.instance)
113
93
  @meeting.on(:meeting_create_successful) { redirect_to meeting_path }
114
94
  @meeting.on(:meeting_create_failed) { render action: :new }
115
- @meeting.commit
95
+ @meeting.save
116
96
  end
117
97
 
118
98
  def edit
@@ -124,14 +104,14 @@ class MeetingsController < ApplicationController
124
104
  @meeting.subscribe(Auditor.instance)
125
105
  @meeting.on(:meeting_update_successful) { redirect_to meeting_path }
126
106
  @meeting.on(:meeting_update_failed) { render :action => :edit }
127
- @meeting.commit(params[:meeting])
107
+ @meeting.update_attributes(params[:meeting])
128
108
  end
129
109
  end
130
110
  ```
131
111
 
132
- #### An example Listener
112
+ ### Listener
133
113
 
134
- **Which simply logs all events in memory**
114
+ **Which simply records an audit in memory**
135
115
 
136
116
  ```ruby
137
117
  class Auditor
@@ -6,43 +6,51 @@ module Wisper
6
6
 
7
7
  include Wisper::Publisher
8
8
 
9
- after_commit :publish_creation, on: :create
10
- after_commit :publish_update, on: :update
11
- after_commit :publish_destroy, on: :destroy
9
+ after_validation :after_validation_broadcast
10
+ after_commit :after_create_broadcast, on: :create
11
+ after_commit :after_update_broadcast, on: :update
12
+ after_commit :after_destroy_broadcast, on: :destroy
13
+ after_rollback :after_rollback_broadcast
12
14
  end
13
15
 
14
16
  def commit(_attributes = nil)
15
- _action = new_record? ? 'create' : 'update'
17
+ warn "[DEPRECATED] use save, create, update_attributes as usual"
16
18
  assign_attributes(_attributes) if _attributes.present?
17
- result = save
18
- if result
19
- broadcast("#{_action}_#{self.class.model_name.param_key}_successful", self)
20
- else
21
- broadcast("#{_action}_#{self.class.model_name.param_key}_failed", self)
22
- end
23
- result
19
+ save
24
20
  end
25
21
 
26
22
  module ClassMethods
27
23
  def commit(_attributes = nil)
28
- new(_attributes).commit
24
+ warn "[DEPRECATED] use save, create, update_attributes as usual"
25
+ new(_attributes).save
29
26
  end
30
27
  end
31
28
 
32
29
  private
33
30
 
34
- def publish_creation
31
+ def after_validation_broadcast
32
+ action = new_record? ? 'create' : 'update'
33
+ broadcast("#{action}_#{self.class.model_name.param_key}_failed", self) unless errors.empty?
34
+ end
35
+
36
+ def after_create_broadcast
35
37
  broadcast(:after_create, self)
38
+ broadcast("create_#{self.class.model_name.param_key}_successful", self)
36
39
  end
37
40
 
38
- def publish_update
41
+ def after_update_broadcast
39
42
  broadcast(:after_update, self)
43
+ broadcast("update_#{self.class.model_name.param_key}_successful", self)
40
44
  end
41
45
 
42
- def publish_destroy
46
+ def after_destroy_broadcast
43
47
  broadcast(:after_destroy, self)
44
48
  broadcast("destroy_#{self.class.model_name.param_key}_successful", self)
45
49
  end
50
+
51
+ def after_rollback_broadcast
52
+ broadcast(:after_rollback, self)
53
+ end
46
54
  end
47
55
  end
48
56
  end
@@ -1,5 +1,5 @@
1
1
  module Wisper
2
2
  module ActiveRecord
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
@@ -9,10 +9,8 @@ describe 'ActiveRecord' do
9
9
  expect(Wisper.model).to eq Wisper::ActiveRecord::Publisher
10
10
  end
11
11
 
12
- describe '.commit' do
13
-
12
+ describe '.commit' do # DEPRECATED
14
13
  describe 'when creating' do
15
-
16
14
  context 'and model is valid' do
17
15
  it 'publishes create_<model_name>_successful event to listener' do
18
16
  expect(listener).to receive(:create_meeting_successful).with(instance_of(model_class))
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wisper-activerecord
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kris Leech
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-14 00:00:00.000000000 Z
11
+ date: 2014-10-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: wisper