association_observers 0.0.3
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.
- data/.gitignore +21 -0
- data/.pryrc +24 -0
- data/.rspec +2 -0
- data/.travis.yml +14 -0
- data/Gemfile +20 -0
- data/LICENSE.txt +22 -0
- data/README.md +214 -0
- data/Rakefile +3 -0
- data/association_observers.gemspec +35 -0
- data/database.yml +5 -0
- data/lib/association_observers.rb +199 -0
- data/lib/association_observers/activerecord.rb +4 -0
- data/lib/association_observers/notifiers/base.rb +77 -0
- data/lib/association_observers/notifiers/propagation_notifier.rb +16 -0
- data/lib/association_observers/railtie.rb +16 -0
- data/lib/association_observers/ruby18.rb +12 -0
- data/lib/association_observers/version.rb +3 -0
- data/lib/examples/notifiers/update_timestamp_notifier.rb +29 -0
- data/lib/examples/readme_example.rb +114 -0
- data/spec/activerecord/association_observers_spec.rb +548 -0
- data/spec/examples/readme_example_spec.rb +44 -0
- data/spec/spec_helper.rb +26 -0
- metadata +223 -0
@@ -0,0 +1,44 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require './spec/spec_helper'
|
3
|
+
require 'examples/readme_example'
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
describe "readme example" do
|
8
|
+
let(:mom){ Mom.create(:kid => Kid.create) }
|
9
|
+
let(:kid){ mom.kid }
|
10
|
+
let(:default_slices) {8}
|
11
|
+
describe "when momma bakes a cake" do
|
12
|
+
let(:cake) { mom.cakes.create(:slices => default_slices) }
|
13
|
+
it "should have a slice eaten by the kid" do
|
14
|
+
cake
|
15
|
+
mom.cakes.last.reload.slices.should == Cake.default_slices - 1
|
16
|
+
mom.kid.reload.slices.should == 1
|
17
|
+
end
|
18
|
+
it "should not tell the kid he's fat" do
|
19
|
+
kid.should_not_receive(:cry!)
|
20
|
+
kid.should_not_receive(:throw_slices_away!)
|
21
|
+
end
|
22
|
+
describe "and the cake is fully eaten by the kid" do
|
23
|
+
let(:default_slices) {1}
|
24
|
+
it "should bust kids ass" do
|
25
|
+
LOGGER.should_receive(:info).with("Slam!!")
|
26
|
+
cake
|
27
|
+
end
|
28
|
+
end
|
29
|
+
describe "and the kid has plenty of slices" do
|
30
|
+
before(:each) do
|
31
|
+
kid.update_column(:slices, 20)
|
32
|
+
end
|
33
|
+
it "should tell kid he's fat" do
|
34
|
+
LOGGER.should_receive(:info).with("Hey Fatty, BEEFCAKE!!!!!")
|
35
|
+
LOGGER.should_receive(:info).with(":'(")
|
36
|
+
cake
|
37
|
+
kid.reload.slices.should == 0
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
|
44
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'rubygems'
|
3
|
+
require 'active_record'
|
4
|
+
require './lib/association_observers'
|
5
|
+
|
6
|
+
|
7
|
+
ActiveRecord::Base.configurations = YAML.load_file(File.join(File.expand_path('../..', __FILE__), 'database.yml'))
|
8
|
+
ActiveRecord::Base.establish_connection("activerecord")
|
9
|
+
|
10
|
+
|
11
|
+
require 'rspec'
|
12
|
+
require 'database_cleaner'
|
13
|
+
|
14
|
+
RSpec.configure do |config|
|
15
|
+
|
16
|
+
config.before(:each) do
|
17
|
+
DatabaseCleaner.strategy = :transaction
|
18
|
+
DatabaseCleaner.start
|
19
|
+
end
|
20
|
+
config.after(:each) do
|
21
|
+
DatabaseCleaner.clean
|
22
|
+
end
|
23
|
+
|
24
|
+
config.mock_with :rspec
|
25
|
+
end
|
26
|
+
|
metadata
ADDED
@@ -0,0 +1,223 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: association_observers
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.3
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Tiago Cardoso
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-12-12 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
version_requirements: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ~>
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: 0.9.2.2
|
21
|
+
none: false
|
22
|
+
requirement: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.9.2.2
|
27
|
+
none: false
|
28
|
+
prerelease: false
|
29
|
+
type: :development
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rack-test
|
32
|
+
version_requirements: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - '='
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 0.6.2
|
37
|
+
none: false
|
38
|
+
requirement: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - '='
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 0.6.2
|
43
|
+
none: false
|
44
|
+
prerelease: false
|
45
|
+
type: :development
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rspec
|
48
|
+
version_requirements: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ~>
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 2.11.0
|
53
|
+
none: false
|
54
|
+
requirement: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - ~>
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: 2.11.0
|
59
|
+
none: false
|
60
|
+
prerelease: false
|
61
|
+
type: :development
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: database_cleaner
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.8.0
|
69
|
+
none: false
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - '='
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 0.8.0
|
75
|
+
none: false
|
76
|
+
prerelease: false
|
77
|
+
type: :development
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: colorize
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - '='
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: 0.5.8
|
85
|
+
none: false
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - '='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: 0.5.8
|
91
|
+
none: false
|
92
|
+
prerelease: false
|
93
|
+
type: :development
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: pry
|
96
|
+
version_requirements: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - ! '>='
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: !binary |-
|
101
|
+
MA==
|
102
|
+
none: false
|
103
|
+
requirement: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - ! '>='
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: !binary |-
|
108
|
+
MA==
|
109
|
+
none: false
|
110
|
+
prerelease: false
|
111
|
+
type: :development
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: pry-doc
|
114
|
+
version_requirements: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ! '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: !binary |-
|
119
|
+
MA==
|
120
|
+
none: false
|
121
|
+
requirement: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: !binary |-
|
126
|
+
MA==
|
127
|
+
none: false
|
128
|
+
prerelease: false
|
129
|
+
type: :development
|
130
|
+
- !ruby/object:Gem::Dependency
|
131
|
+
name: awesome_print
|
132
|
+
version_requirements: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
134
|
+
- - ! '>='
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: !binary |-
|
137
|
+
MA==
|
138
|
+
none: false
|
139
|
+
requirement: !ruby/object:Gem::Requirement
|
140
|
+
requirements:
|
141
|
+
- - ! '>='
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: !binary |-
|
144
|
+
MA==
|
145
|
+
none: false
|
146
|
+
prerelease: false
|
147
|
+
type: :development
|
148
|
+
description: ! "This is an alternative implementation of the observer pattern. As\
|
149
|
+
\ you may know, Ruby (and Rails/ActiveRecord) already have an\n implementation\
|
150
|
+
\ of it. This implementation is a variation of the pattern, so it is not supposed\
|
151
|
+
\ to supersede the existing\n implementations, but \"complete\" them for the specific\
|
152
|
+
\ use-cases addressed."
|
153
|
+
email:
|
154
|
+
- tiago@restorm.com
|
155
|
+
executables: []
|
156
|
+
extensions: []
|
157
|
+
extra_rdoc_files: []
|
158
|
+
files:
|
159
|
+
- .gitignore
|
160
|
+
- .pryrc
|
161
|
+
- .rspec
|
162
|
+
- .travis.yml
|
163
|
+
- Gemfile
|
164
|
+
- LICENSE.txt
|
165
|
+
- README.md
|
166
|
+
- Rakefile
|
167
|
+
- association_observers.gemspec
|
168
|
+
- database.yml
|
169
|
+
- lib/association_observers.rb
|
170
|
+
- lib/association_observers/activerecord.rb
|
171
|
+
- lib/association_observers/notifiers/base.rb
|
172
|
+
- lib/association_observers/notifiers/propagation_notifier.rb
|
173
|
+
- lib/association_observers/railtie.rb
|
174
|
+
- lib/association_observers/ruby18.rb
|
175
|
+
- lib/association_observers/version.rb
|
176
|
+
- lib/examples/notifiers/update_timestamp_notifier.rb
|
177
|
+
- lib/examples/readme_example.rb
|
178
|
+
- spec/activerecord/association_observers_spec.rb
|
179
|
+
- spec/examples/readme_example_spec.rb
|
180
|
+
- spec/spec_helper.rb
|
181
|
+
homepage: https://github.com/TiagoCardoso1983/association_observers
|
182
|
+
licenses: []
|
183
|
+
post_install_message:
|
184
|
+
rdoc_options: []
|
185
|
+
require_paths:
|
186
|
+
- lib
|
187
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
188
|
+
requirements:
|
189
|
+
- - ! '>='
|
190
|
+
- !ruby/object:Gem::Version
|
191
|
+
segments:
|
192
|
+
- 0
|
193
|
+
hash: 2
|
194
|
+
version: !binary |-
|
195
|
+
MA==
|
196
|
+
none: false
|
197
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - ! '>='
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
segments:
|
202
|
+
- 0
|
203
|
+
hash: 2
|
204
|
+
version: !binary |-
|
205
|
+
MA==
|
206
|
+
none: false
|
207
|
+
requirements: []
|
208
|
+
rubyforge_project:
|
209
|
+
rubygems_version: 1.8.24
|
210
|
+
signing_key:
|
211
|
+
specification_version: 3
|
212
|
+
summary: ! 'The Observer Pattern clearly defines two roles: the observer and the observed.
|
213
|
+
The observer registers itself by the observed. The observed decides when (for which
|
214
|
+
"actions") to notify the observer. The observer knows what to do when notified. What''s
|
215
|
+
the limitation? The observed has to know when and whom to notify. The observer has
|
216
|
+
to know what to do. For this logic to be implemented for two other separate entities,
|
217
|
+
behaviour has to be copied from one place to the other. So, why not delegate this
|
218
|
+
information (to whom, when, behaviour) to a third role, the notifier?'
|
219
|
+
test_files:
|
220
|
+
- spec/activerecord/association_observers_spec.rb
|
221
|
+
- spec/examples/readme_example_spec.rb
|
222
|
+
- spec/spec_helper.rb
|
223
|
+
has_rdoc:
|