callbacks 0.0.1 → 0.0.2
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/History.txt +7 -0
- data/Manifest.txt +1 -1
- data/README.txt +3 -0
- data/Rakefile +2 -0
- data/Version.txt +1 -1
- data/lib/callbackchain.rb +6 -0
- data/lib/callbacks.rb +4 -11
- data/lib/classmethods.rb +30 -19
- data/lib/instancemethods.rb +19 -8
- data/tasks/ann.rake +0 -0
- data/tasks/bones.rake +0 -0
- data/tasks/gem.rake +6 -1
- data/tasks/manifest.rake +3 -3
- data/tasks/notes.rake +0 -0
- data/tasks/post_load.rake +0 -0
- data/tasks/rdoc.rake +0 -0
- data/tasks/rubyforge.rake +2 -2
- data/tasks/setup.rb +6 -4
- data/tasks/spec.rake +0 -0
- data/tasks/svn.rake +0 -0
- data/tasks/test.rake +0 -0
- data/test/test_callbacks.rb +32 -0
- data/test/tester_class.rb +9 -0
- metadata +6 -7
- data/bin/callbacks +0 -8
data/History.txt
CHANGED
@@ -3,3 +3,10 @@
|
|
3
3
|
* First release
|
4
4
|
* API not yet stable
|
5
5
|
* Only supports adding hooks to classes not instances. Instances are planned for 0.2
|
6
|
+
|
7
|
+
== 0.0.2 / 2008-09-28
|
8
|
+
|
9
|
+
* Second release!
|
10
|
+
* API still not stable
|
11
|
+
* Callbacks now picks up "before#{callback}" and "after_#{callback}" instance methods automatically
|
12
|
+
* Some documentation added
|
data/Manifest.txt
CHANGED
data/README.txt
CHANGED
@@ -13,6 +13,7 @@ This package makes it simple to add callbacks a.k.a. "hooks" to ruby classes
|
|
13
13
|
* It now only supports adding callbacks to classes
|
14
14
|
* Different callbacks for instances comes with version 0.2
|
15
15
|
* I haven't decided yet on the API, maybe I'll swap "callback_methods" with "hooks"
|
16
|
+
* When using add_callback_method before the method itself is defined, it won't work
|
16
17
|
|
17
18
|
== SYNOPSIS:
|
18
19
|
|
@@ -27,6 +28,8 @@ This package makes it simple to add callbacks a.k.a. "hooks" to ruby classes
|
|
27
28
|
o = Object.new
|
28
29
|
o.inspect #will print "Going to inspect Object"
|
29
30
|
|
31
|
+
For more code examples see: http://callbacks.rubyforge.com
|
32
|
+
|
30
33
|
== REQUIREMENTS:
|
31
34
|
|
32
35
|
* ruby 1.8 (might work with ruby1.9)
|
data/Rakefile
CHANGED
data/Version.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.2
|
data/lib/callbacks.rb
CHANGED
@@ -2,26 +2,19 @@
|
|
2
2
|
module Callbacks
|
3
3
|
require 'observer'
|
4
4
|
require 'ext/metaid.rb'
|
5
|
+
require 'callbackchain.rb'
|
5
6
|
require 'instancemethods.rb'
|
6
7
|
require 'classmethods.rb'
|
7
8
|
require 'callback.rb'
|
8
|
-
|
9
|
-
# CALLBACKS = [
|
10
|
-
# 'song_halfway',
|
11
|
-
# 'song_end',
|
12
|
-
# 'boot',
|
13
|
-
# 'shutdown',
|
14
|
-
# ]
|
15
|
-
|
16
|
-
CALLBACKS = []
|
17
9
|
|
18
10
|
#Sets all things right
|
19
11
|
def self.included(base) #:nodoc:
|
20
|
-
base.extend Observable
|
12
|
+
base.extend Observable #why?
|
21
13
|
base.extend Callbacks::ClassMethods
|
22
14
|
base.send(:include, Callbacks::InstanceMethods)
|
23
15
|
end
|
24
16
|
end
|
25
17
|
|
26
18
|
#TODO: add aliases like add_hook(), callbacks(), et cetera
|
27
|
-
#TODO: feature to add hooks/callbacks to instances instead of only classes
|
19
|
+
#TODO: feature to add hooks/callbacks to instances instead of only classes
|
20
|
+
#TODO: make all of the activesupport features/tests work
|
data/lib/classmethods.rb
CHANGED
@@ -8,13 +8,13 @@ module Callbacks
|
|
8
8
|
|
9
9
|
def callback_actions
|
10
10
|
#Use one @, else it gets stored in the module and then it will be avaiable in every class that uses callback
|
11
|
-
@callback_actions ||=
|
11
|
+
@callback_actions ||= CallbackChain.new
|
12
12
|
end
|
13
13
|
|
14
14
|
def add_callback_methods(*callbacks)
|
15
15
|
callbacks.each do |callback|
|
16
16
|
self.callback_methods << callback.to_sym
|
17
|
-
self.
|
17
|
+
self.build_callback_methods(callback)
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
@@ -30,21 +30,9 @@ module Callbacks
|
|
30
30
|
self.callback_methods.delete(method.to_sym)
|
31
31
|
end
|
32
32
|
|
33
|
-
def
|
34
|
-
|
35
|
-
|
36
|
-
instance_eval <<-"end_eval"
|
37
|
-
|
38
|
-
def before_#{method}(*callbacks, &block)
|
39
|
-
add_callback_action :before, :#{method}, *callbacks, &block
|
40
|
-
end
|
41
|
-
|
42
|
-
def after_#{method}(*callbacks, &block)
|
43
|
-
add_callback_action :after, :#{method}, *callbacks, &block
|
44
|
-
end
|
45
|
-
|
46
|
-
end_eval
|
47
|
-
#end
|
33
|
+
def build_callback_methods(method)
|
34
|
+
build_before_callback_method(method)
|
35
|
+
build_after_callback_method(method)
|
48
36
|
|
49
37
|
class_eval <<-"end_eval"
|
50
38
|
def #{method}_with_callbacks
|
@@ -66,12 +54,35 @@ module Callbacks
|
|
66
54
|
ca[method][type] = [] if ca[method][type].nil?
|
67
55
|
|
68
56
|
if block_given?
|
69
|
-
|
57
|
+
callback = Callback.new(method, nil, &block)
|
70
58
|
else
|
71
59
|
code.each do |c|
|
72
|
-
|
60
|
+
callback = Callback.new(method, c)
|
73
61
|
end
|
74
62
|
end
|
63
|
+
ca[method][type] << callback
|
64
|
+
return callback
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
def build_before_callback_method(method)
|
69
|
+
instance_eval <<-"end_eval"
|
70
|
+
|
71
|
+
def before_#{method}(*callbacks, &block)
|
72
|
+
add_callback_action :before, :#{method}, *callbacks, &block
|
73
|
+
end
|
74
|
+
|
75
|
+
end_eval
|
76
|
+
end
|
77
|
+
|
78
|
+
def build_after_callback_method(method)
|
79
|
+
instance_eval <<-"end_eval"
|
80
|
+
|
81
|
+
def after_#{method}(*callbacks, &block)
|
82
|
+
add_callback_action :after, :#{method}, *callbacks, &block
|
83
|
+
end
|
84
|
+
|
85
|
+
end_eval
|
75
86
|
end
|
76
87
|
|
77
88
|
end
|
data/lib/instancemethods.rb
CHANGED
@@ -2,20 +2,31 @@ module Callbacks
|
|
2
2
|
module InstanceMethods
|
3
3
|
|
4
4
|
def callback_actions(show_classvars = true)
|
5
|
-
|
5
|
+
callback_actions = self.class_callback_actions
|
6
6
|
#return self.instance_callbacks if show_classvars == false
|
7
7
|
#return self.class_callback_actions + self.instance_callback_actions if show_classvars == true
|
8
8
|
end
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
def callback_actions_for(method, type)
|
10
|
+
def callback_actions_for(method, type)
|
11
|
+
#Do the rescue if [method] does not exist (nil), [type] will fail
|
13
12
|
begin
|
14
|
-
|
15
|
-
return self.callback_actions[method][type] ||= []
|
13
|
+
callback_actions = self.callback_actions[method][type] ||= []
|
16
14
|
rescue NoMethodError
|
17
|
-
|
15
|
+
callback_actions = []
|
18
16
|
end
|
17
|
+
|
18
|
+
#If the before/after_ method exists, and it is not already added,
|
19
|
+
# add it!
|
20
|
+
#Dit kan mooier!
|
21
|
+
if self.respond_to?("#{type}_#{method}")
|
22
|
+
if not callback_actions.include? "#{type}_#{method}".to_sym
|
23
|
+
#callback_actions << Callback.new(method, "#{type}_#{method}".to_sym)
|
24
|
+
callback = self.class.add_callback_action(type, method, "#{type}_#{method}".to_sym)
|
25
|
+
callback_actions << callback
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
return callback_actions
|
19
30
|
end
|
20
31
|
|
21
32
|
def class_callback_actions
|
@@ -35,4 +46,4 @@ module Callbacks
|
|
35
46
|
#Should I return something?
|
36
47
|
end
|
37
48
|
end
|
38
|
-
end
|
49
|
+
end
|
data/tasks/ann.rake
CHANGED
File without changes
|
data/tasks/bones.rake
CHANGED
File without changes
|
data/tasks/gem.rake
CHANGED
@@ -91,7 +91,7 @@ namespace :gem do
|
|
91
91
|
end
|
92
92
|
|
93
93
|
desc 'Install the gem'
|
94
|
-
task :install => [:clobber, :package] do
|
94
|
+
task :install => [:clobber, 'gem:package'] do
|
95
95
|
sh "#{SUDO} #{GEM} install --local pkg/#{PROJ.gem._spec.full_name}"
|
96
96
|
|
97
97
|
# use this version of the command for rubygems > 1.0.0
|
@@ -109,6 +109,11 @@ namespace :gem do
|
|
109
109
|
desc 'Reinstall the gem'
|
110
110
|
task :reinstall => [:uninstall, :install]
|
111
111
|
|
112
|
+
desc 'Cleanup the gem'
|
113
|
+
task :cleanup do
|
114
|
+
sh "#{SUDO} #{GEM} cleanup #{PROJ.gem._spec.name}"
|
115
|
+
end
|
116
|
+
|
112
117
|
end # namespace :gem
|
113
118
|
|
114
119
|
desc 'Alias to gem:package'
|
data/tasks/manifest.rake
CHANGED
@@ -15,9 +15,9 @@ namespace :manifest do
|
|
15
15
|
lines.map! do |line|
|
16
16
|
case line
|
17
17
|
when %r/^(-{3}|\+{3})/; nil
|
18
|
-
when %r/^@/;
|
19
|
-
when %r/^\+/;
|
20
|
-
when %r/^\-/;
|
18
|
+
when %r/^@/; ANSICode.blue line
|
19
|
+
when %r/^\+/; ANSICode.green line
|
20
|
+
when %r/^\-/; ANSICode.red line
|
21
21
|
else line end
|
22
22
|
end
|
23
23
|
end
|
data/tasks/notes.rake
CHANGED
File without changes
|
data/tasks/post_load.rake
CHANGED
File without changes
|
data/tasks/rdoc.rake
CHANGED
File without changes
|
data/tasks/rubyforge.rake
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# $Id$
|
2
1
|
|
3
2
|
if PROJ.rubyforge.name.valid? && HAVE_RUBYFORGE
|
4
3
|
|
@@ -7,7 +6,7 @@ require 'rake/contrib/sshpublisher'
|
|
7
6
|
|
8
7
|
namespace :gem do
|
9
8
|
desc 'Package and upload to RubyForge'
|
10
|
-
task :release => [:clobber, :package] do |t|
|
9
|
+
task :release => [:clobber, 'gem:package'] do |t|
|
11
10
|
v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
|
12
11
|
abort "Versions don't match #{v} vs #{PROJ.version}" if v != PROJ.version
|
13
12
|
pkg = "pkg/#{PROJ.gem._spec.full_name}"
|
@@ -18,6 +17,7 @@ namespace :gem do
|
|
18
17
|
end
|
19
18
|
|
20
19
|
rf = RubyForge.new
|
20
|
+
rf.configure rescue nil
|
21
21
|
puts 'Logging in'
|
22
22
|
rf.login
|
23
23
|
|
data/tasks/setup.rb
CHANGED
@@ -18,7 +18,7 @@ PROJ = OpenStruct.new(
|
|
18
18
|
:email => nil,
|
19
19
|
:url => "\000",
|
20
20
|
:version => ENV['VERSION'] || '0.0.0',
|
21
|
-
:exclude => %w(tmp$ bak$ ~$ CVS
|
21
|
+
:exclude => %w(tmp$ bak$ ~$ CVS \.svn/ \.git/ ^pkg/),
|
22
22
|
:release_name => ENV['RELEASE'],
|
23
23
|
|
24
24
|
# System Defaults
|
@@ -58,7 +58,7 @@ PROJ = OpenStruct.new(
|
|
58
58
|
|
59
59
|
# File Annotations
|
60
60
|
:notes => OpenStruct.new(
|
61
|
-
:exclude => %w(^tasks/setup
|
61
|
+
:exclude => %w(^tasks/setup\.rb$),
|
62
62
|
:extensions => %w(.txt .rb .erb) << '',
|
63
63
|
:tags => %w(FIXME OPTIMIZE TODO)
|
64
64
|
),
|
@@ -74,8 +74,8 @@ PROJ = OpenStruct.new(
|
|
74
74
|
# Rdoc
|
75
75
|
:rdoc => OpenStruct.new(
|
76
76
|
:opts => [],
|
77
|
-
:include => %w(^lib/ ^bin/ ^ext/
|
78
|
-
:exclude => %w(extconf
|
77
|
+
:include => %w(^lib/ ^bin/ ^ext/ \.txt$),
|
78
|
+
:exclude => %w(extconf\.rb$),
|
79
79
|
:main => nil,
|
80
80
|
:dir => 'doc',
|
81
81
|
:remote_dir => nil
|
@@ -159,6 +159,8 @@ GEM = WIN32 ? 'gem.bat' : 'gem'
|
|
159
159
|
end
|
160
160
|
HAVE_SVN = (Dir.entries(Dir.pwd).include?('.svn') and
|
161
161
|
system("svn --version 2>&1 > #{DEV_NULL}"))
|
162
|
+
HAVE_GIT = (Dir.entries(Dir.pwd).include?('.git') and
|
163
|
+
system("git --version 2>&1 > #{DEV_NULL}"))
|
162
164
|
|
163
165
|
# Reads a file at +path+ and spits out an array of the +paragraphs+
|
164
166
|
# specified.
|
data/tasks/spec.rake
CHANGED
File without changes
|
data/tasks/svn.rake
CHANGED
File without changes
|
data/tasks/test.rake
CHANGED
File without changes
|
data/test/test_callbacks.rb
CHANGED
@@ -153,6 +153,38 @@ class CallbacksTest < Test::Unit::TestCase
|
|
153
153
|
assert_equal ['before_exit'], $tests_run
|
154
154
|
end
|
155
155
|
|
156
|
+
# def test_should_not_raise_error_when_method_not_exist
|
157
|
+
# assert_nothing_raised do
|
158
|
+
# Tester.add_callback_methods :doesnotexist
|
159
|
+
# end
|
160
|
+
# end
|
161
|
+
|
162
|
+
# def test_no_method_callback_should_not_add_method
|
163
|
+
# Tester.add_callback_methods :nomethodcallback
|
164
|
+
# t = Tester.new
|
165
|
+
#
|
166
|
+
# assert_raise NameError do
|
167
|
+
# t.nomethodcallback
|
168
|
+
# end
|
169
|
+
# end
|
170
|
+
|
171
|
+
def test_should_use_defined_methods_in_class_as_callback
|
172
|
+
Tester.add_callback_methods :callback_with_defined_method
|
173
|
+
t = Tester.new
|
174
|
+
t.callback_with_defined_method
|
175
|
+
assert $tests_run.length > 0
|
176
|
+
end
|
177
|
+
|
178
|
+
def test_callback_should_only_be_certain_types
|
179
|
+
assert_nothing_raised do
|
180
|
+
Callback.new(:inspect, 'print "This is a test"')
|
181
|
+
end
|
182
|
+
|
183
|
+
assert_raise RuntimeError do
|
184
|
+
Callback.new(:inspect, [])
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
156
188
|
# def test_callbacks_created_in_class_should_be_vissible_in_instance
|
157
189
|
# Tester.add_callback_methods :boot, :exit
|
158
190
|
# t = Tester.new
|
data/test/tester_class.rb
CHANGED
@@ -15,6 +15,15 @@ class Tester
|
|
15
15
|
return "testing"
|
16
16
|
end
|
17
17
|
|
18
|
+
def before_callback_with_defined_method
|
19
|
+
text = "This is before the method ran and is generated by a defined method in the class"
|
20
|
+
$tests_run << text
|
21
|
+
return text
|
22
|
+
end
|
23
|
+
|
24
|
+
def callback_with_defined_method
|
25
|
+
end
|
26
|
+
|
18
27
|
def fill_globalvar_tests_run
|
19
28
|
$tests_run << 'fill_globalvar_tests_run'
|
20
29
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: callbacks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leon Bogaert
|
@@ -9,29 +9,28 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-09-28 00:00:00 +02:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
16
16
|
description: This package makes it simple to add callbacks a.k.a. "hooks" to ruby classes
|
17
17
|
email: leon@vanutsteen.nl
|
18
|
-
executables:
|
19
|
-
|
18
|
+
executables: []
|
19
|
+
|
20
20
|
extensions: []
|
21
21
|
|
22
22
|
extra_rdoc_files:
|
23
23
|
- History.txt
|
24
24
|
- README.txt
|
25
|
-
- bin/callbacks
|
26
25
|
files:
|
27
26
|
- History.txt
|
28
27
|
- Manifest.txt
|
29
28
|
- README.txt
|
30
29
|
- Rakefile
|
31
30
|
- Version.txt
|
32
|
-
- bin/callbacks
|
33
31
|
- ext/metaid.rb
|
34
32
|
- lib/callback.rb
|
33
|
+
- lib/callbackchain.rb
|
35
34
|
- lib/callbacks.rb
|
36
35
|
- lib/classmethods.rb
|
37
36
|
- lib/instancemethods.rb
|
@@ -77,7 +76,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
77
76
|
requirements: []
|
78
77
|
|
79
78
|
rubyforge_project: callbacks
|
80
|
-
rubygems_version: 1.
|
79
|
+
rubygems_version: 1.2.0
|
81
80
|
signing_key:
|
82
81
|
specification_version: 2
|
83
82
|
summary: This package makes it simple to add callbacks a
|