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