wisper-activerecord 0.1.0 → 0.2.0

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: 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