ayl-rails 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -1,6 +1,25 @@
1
1
  = ayl-rails
2
2
 
3
- Description goes here.
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{Ayl Extension for Rails ActiveRecord support.}
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.0
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
+
@@ -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.0
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-20 00:00:00.000000000Z
12
+ date: 2011-11-27 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ayl
16
- requirement: &88427140 !ruby/object:Gem::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: *88427140
24
+ version_requirements: *82467240
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rails
27
- requirement: &88426740 !ruby/object:Gem::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: *88426740
35
+ version_requirements: *82466930
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &88426440 !ruby/object:Gem::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: *88426440
46
+ version_requirements: *82466600
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: bundler
49
- requirement: &88426050 !ruby/object:Gem::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: *88426050
57
+ version_requirements: *82466170
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: jeweler
60
- requirement: &88425610 !ruby/object:Gem::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: *88425610
68
+ version_requirements: *82465650
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rcov
71
- requirement: &88425070 !ruby/object:Gem::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: *88425070
79
+ version_requirements: *82465210
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: sqlite3
82
- requirement: &88424690 !ruby/object:Gem::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: *88424690
91
- description: Ayl Extension for Rails ActiveRecord support.
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: -897926769
129
+ hash: 812368029
129
130
  required_rubygems_version: !ruby/object:Gem::Requirement
130
131
  none: false
131
132
  requirements: