ayl-rails 0.1.0 → 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.
- data/README.rdoc +20 -1
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/ayl-rails.gemspec +72 -0
- data/lib/ayl-rails/railtie.rb +4 -4
- data/spec/rails_extensions_spec.rb +43 -0
- metadata +19 -18
data/README.rdoc
CHANGED
@@ -1,6 +1,25 @@
|
|
1
1
|
= ayl-rails
|
2
2
|
|
3
|
-
|
3
|
+
This gem partners with the {ayl}[https://github.com/j0hnds/ayl] gem to allow you to configure your standard ActiveRecord after_* hooks to be asynchronous.
|
4
|
+
|
5
|
+
Just register this gem in your Gemfile like:
|
6
|
+
|
7
|
+
gem 'ayl-rails'
|
8
|
+
|
9
|
+
Then in your model, you can convert your after_* hooks to be asynchronous.
|
10
|
+
|
11
|
+
For example:
|
12
|
+
|
13
|
+
after_save :method # or,
|
14
|
+
after_create :method # or,
|
15
|
+
after_update :method
|
16
|
+
|
17
|
+
becomes
|
18
|
+
|
19
|
+
ayl_after_save :method #,
|
20
|
+
ayl_after_create :method #,
|
21
|
+
ayl_after_update :method
|
22
|
+
|
4
23
|
|
5
24
|
== Contributing to ayl-rails
|
6
25
|
|
data/Rakefile
CHANGED
@@ -18,7 +18,7 @@ Jeweler::Tasks.new do |gem|
|
|
18
18
|
gem.homepage = "http://github.com/j0hnds/ayl-rails"
|
19
19
|
gem.license = "MIT"
|
20
20
|
gem.summary = %Q{Ayl Extension for Rails ActiveRecord support.}
|
21
|
-
gem.description = %Q{
|
21
|
+
gem.description = %Q{Partner to ayl to allow ActiveRecord after_* hooks to be made asynchronous.}
|
22
22
|
gem.email = "j0hnds@gmail.com"
|
23
23
|
gem.authors = ["j0hnds@gmail.com"]
|
24
24
|
# dependencies defined in Gemfile
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
data/ayl-rails.gemspec
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "ayl-rails"
|
8
|
+
s.version = "0.1.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["j0hnds@gmail.com"]
|
12
|
+
s.date = "2011-11-27"
|
13
|
+
s.description = "Partner to ayl to allow ActiveRecord after_* hooks to be made asynchronous."
|
14
|
+
s.email = "j0hnds@gmail.com"
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE.txt",
|
17
|
+
"README.rdoc"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".rspec",
|
22
|
+
"Gemfile",
|
23
|
+
"Gemfile.lock",
|
24
|
+
"LICENSE.txt",
|
25
|
+
"README.rdoc",
|
26
|
+
"Rakefile",
|
27
|
+
"VERSION",
|
28
|
+
"ayl-rails.gemspec",
|
29
|
+
"lib/ayl-rails.rb",
|
30
|
+
"lib/ayl-rails/railtie.rb",
|
31
|
+
"spec/rails_extensions_spec.rb",
|
32
|
+
"spec/spec_helper.rb",
|
33
|
+
"spec/support/null_logger.rb",
|
34
|
+
"spec/support/what_happened.rb"
|
35
|
+
]
|
36
|
+
s.homepage = "http://github.com/j0hnds/ayl-rails"
|
37
|
+
s.licenses = ["MIT"]
|
38
|
+
s.require_paths = ["lib"]
|
39
|
+
s.rubygems_version = "1.8.10"
|
40
|
+
s.summary = "Ayl Extension for Rails ActiveRecord support."
|
41
|
+
|
42
|
+
if s.respond_to? :specification_version then
|
43
|
+
s.specification_version = 3
|
44
|
+
|
45
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
46
|
+
s.add_runtime_dependency(%q<ayl>, [">= 0.1.0"])
|
47
|
+
s.add_runtime_dependency(%q<rails>, [">= 3.0.0"])
|
48
|
+
s.add_development_dependency(%q<rspec>, [">= 2.3.0"])
|
49
|
+
s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
|
50
|
+
s.add_development_dependency(%q<jeweler>, [">= 1.6.4"])
|
51
|
+
s.add_development_dependency(%q<rcov>, [">= 0"])
|
52
|
+
s.add_development_dependency(%q<sqlite3>, [">= 0"])
|
53
|
+
else
|
54
|
+
s.add_dependency(%q<ayl>, [">= 0.1.0"])
|
55
|
+
s.add_dependency(%q<rails>, [">= 3.0.0"])
|
56
|
+
s.add_dependency(%q<rspec>, [">= 2.3.0"])
|
57
|
+
s.add_dependency(%q<bundler>, [">= 1.0.0"])
|
58
|
+
s.add_dependency(%q<jeweler>, [">= 1.6.4"])
|
59
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
60
|
+
s.add_dependency(%q<sqlite3>, [">= 0"])
|
61
|
+
end
|
62
|
+
else
|
63
|
+
s.add_dependency(%q<ayl>, [">= 0.1.0"])
|
64
|
+
s.add_dependency(%q<rails>, [">= 3.0.0"])
|
65
|
+
s.add_dependency(%q<rspec>, [">= 2.3.0"])
|
66
|
+
s.add_dependency(%q<bundler>, [">= 1.0.0"])
|
67
|
+
s.add_dependency(%q<jeweler>, [">= 1.6.4"])
|
68
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
69
|
+
s.add_dependency(%q<sqlite3>, [">= 0"])
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
data/lib/ayl-rails/railtie.rb
CHANGED
@@ -31,13 +31,13 @@ module Ayl
|
|
31
31
|
def add_ayl_hook(hook, *args, &block)
|
32
32
|
if args && args.first.is_a?(Symbol)
|
33
33
|
method = args.shift
|
34
|
-
ayl_hooks[hook] << lambda{|o| o.send(method)}
|
34
|
+
ayl_hooks(*args)[hook] << lambda{|o| o.send(method)}
|
35
35
|
else
|
36
|
-
ayl_hooks[hook] << block
|
36
|
+
ayl_hooks(*args)[hook] << block
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
-
def ayl_hooks
|
40
|
+
def ayl_hooks(*args)
|
41
41
|
@ayn_hooks ||= Hash.new do |hash, hook|
|
42
42
|
# Remember: this block is invoked only once for each
|
43
43
|
# access of a key that has not been used before.
|
@@ -58,7 +58,7 @@ module Ayl
|
|
58
58
|
# So, the self.class target for the ayl_send is because we
|
59
59
|
# need to call the ayl_send method at the singleton level.
|
60
60
|
#
|
61
|
-
send(hook) { |o| self.class.ayl_send(ahook, o) }
|
61
|
+
send(hook, *args) { |o| self.class.ayl_send(ahook, o) }
|
62
62
|
|
63
63
|
# This is for the worker's benefit
|
64
64
|
#
|
@@ -60,6 +60,30 @@ class AfterCreate::MyModel < ActiveRecord::Base
|
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
|
+
module ConditionalCallbacks; end
|
64
|
+
|
65
|
+
class ConditionalCallbacks::MyModel < ActiveRecord::Base
|
66
|
+
attr_accessor :do_callback
|
67
|
+
|
68
|
+
ayl_after_create :handle_after_create, :if => :should_do_callback?
|
69
|
+
|
70
|
+
ayl_after_update :handle_after_update, :if => :should_do_callback?
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
def handle_after_create
|
75
|
+
WhatHappened.instance << "handle after create"
|
76
|
+
end
|
77
|
+
|
78
|
+
def handle_after_update
|
79
|
+
WhatHappened.instance << "handle after update"
|
80
|
+
end
|
81
|
+
|
82
|
+
def should_do_callback?
|
83
|
+
@do_callback
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
63
87
|
describe "Rails Extensions" do
|
64
88
|
|
65
89
|
before(:each) do
|
@@ -166,4 +190,23 @@ describe "Rails Extensions" do
|
|
166
190
|
|
167
191
|
end
|
168
192
|
|
193
|
+
context "when using conditional callbacks" do
|
194
|
+
|
195
|
+
it "should invoke the after_create and after_update callbacks when the flag is true" do
|
196
|
+
model = ConditionalCallbacks::MyModel.new(:name => "spud")
|
197
|
+
model.do_callback = true # Should allow after_create to be called, but not after_update
|
198
|
+
model.save
|
199
|
+
model.update_attribute(:name, "dog")
|
200
|
+
WhatHappened.instance.what_ran.should == [ "handle after create", "handle after update" ]
|
201
|
+
end
|
202
|
+
|
203
|
+
it "should not invoke the after_create or after_update callbacks when the flag is false" do
|
204
|
+
model = ConditionalCallbacks::MyModel.new(:name => "spud")
|
205
|
+
model.do_callback = false # Should allow after_update to be called, but not after_create
|
206
|
+
model.save
|
207
|
+
model.update_attribute(:name, "dog")
|
208
|
+
WhatHappened.instance.what_ran.should be_blank
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
169
212
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ayl-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-11-
|
12
|
+
date: 2011-11-27 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ayl
|
16
|
-
requirement: &
|
16
|
+
requirement: &82467240 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.1.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *82467240
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rails
|
27
|
-
requirement: &
|
27
|
+
requirement: &82466930 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 3.0.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *82466930
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
requirement: &
|
38
|
+
requirement: &82466600 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 2.3.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *82466600
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: bundler
|
49
|
-
requirement: &
|
49
|
+
requirement: &82466170 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.0.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *82466170
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: jeweler
|
60
|
-
requirement: &
|
60
|
+
requirement: &82465650 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.6.4
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *82465650
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rcov
|
71
|
-
requirement: &
|
71
|
+
requirement: &82465210 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *82465210
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: sqlite3
|
82
|
-
requirement: &
|
82
|
+
requirement: &82434600 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,8 +87,8 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
91
|
-
description:
|
90
|
+
version_requirements: *82434600
|
91
|
+
description: Partner to ayl to allow ActiveRecord after_* hooks to be made asynchronous.
|
92
92
|
email: j0hnds@gmail.com
|
93
93
|
executables: []
|
94
94
|
extensions: []
|
@@ -104,6 +104,7 @@ files:
|
|
104
104
|
- README.rdoc
|
105
105
|
- Rakefile
|
106
106
|
- VERSION
|
107
|
+
- ayl-rails.gemspec
|
107
108
|
- lib/ayl-rails.rb
|
108
109
|
- lib/ayl-rails/railtie.rb
|
109
110
|
- spec/rails_extensions_spec.rb
|
@@ -125,7 +126,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
125
126
|
version: '0'
|
126
127
|
segments:
|
127
128
|
- 0
|
128
|
-
hash:
|
129
|
+
hash: 812368029
|
129
130
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
130
131
|
none: false
|
131
132
|
requirements:
|