anchor 0.0.3 → 0.0.4

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.
@@ -1,17 +1,17 @@
1
1
  == Purpose
2
2
 
3
- Alternative for AOP libaries providing simple syntax and containing less than 100 rows of code.
3
+ I love the concepts of AOP, but I did not like different too bloated libraries,
4
+ so I made my own.
4
5
 
5
- Containing only:
6
- * before
7
- * after
8
- * around (Not implemented yet)
6
+ Anchor contains 91 lines of code and supports *before*, *after* and *around*.
7
+
8
+ See example: https://github.com/tione/anchor/tree/master/lib/anchor/support/rails.rb
9
9
 
10
10
 
11
11
  == Installation
12
12
 
13
13
  Add to your Gemfile:
14
- gem 'anchor'
14
+ gem 'anchor' # add this row after "gem 'rails'" if rails is used
15
15
 
16
16
  And run:
17
17
  bundle install
@@ -24,25 +24,18 @@ Or run:
24
24
 
25
25
  You can name things as you want, but it is recommended to it so:
26
26
 
27
- === Example: Using *hooks* for *models* in Rails app (Not implemented yet)
27
+ === Example: Using *anchor* for *models* in Rails app
28
28
 
29
- Create app/hooks/model_name.rb
30
- anchor ModelName do
31
29
 
30
+ Create app/anchors/your_model_anchor.rb (For autoload file's postfix has to be "_anchor.rb")
31
+ anchor YourModel do
32
32
  before :save do
33
33
  puts "Before save #{self.inspect}"
34
34
  end
35
-
36
35
  end
37
36
 
38
37
 
39
- === Example: Using *hooks* for *conserns* in Rails app (Not implemented yet)
40
-
41
- Create app/hooks/model_name/what_for_hook_is_itended.rb
42
- ...
43
-
44
-
45
- === Example: Using *hooks* in *models*
38
+ === Example: Using *anchor* in *models*
46
39
 
47
40
  You can also do in app/models/your_model.rb
48
41
 
@@ -59,9 +52,35 @@ You can also do in app/models/your_model.rb
59
52
 
60
53
  == Usage examples
61
54
 
62
- === You can find some examples from:
55
+ === Instance, singleton, class, object
63
56
 
64
- * https://github.com/tione/anchor/blob/master/test/test.rb
57
+ class Example
58
+ def self.class_method
59
+ "CLASS_METHOD"
60
+ end
61
+ def instance_method
62
+ "INSTANCE_METHOD"
63
+ end
64
+ end
65
+
66
+ anchor Example do
67
+ before singleton :class_method do
68
+ puts "before class_method"
69
+ end
70
+ after :instance_method do
71
+ puts "after instance_method"
72
+ end
73
+ end
74
+
75
+ @example = Example.new
76
+ @other = Example.new
77
+
78
+ anchor @example do
79
+ before :instance_method do
80
+ puts "before @example
81
+ end
82
+ end
83
+
65
84
 
66
85
 
67
86
  === Method regexp
@@ -71,3 +90,9 @@ You can also do in app/models/your_model.rb
71
90
  puts
72
91
  end
73
92
  end
93
+
94
+ === You can find some examples from:
95
+
96
+ * https://github.com/tione/anchor/blob/master/test/test.rb
97
+
98
+ TODO: add some examples more
@@ -1,3 +1,3 @@
1
- require 'kernel'
1
+ require 'anchor/support/kernel'
2
2
  require 'anchor/hooks'
3
-
3
+ require 'anchor/support/rails'
@@ -1,6 +1,6 @@
1
1
  # = Anchor
2
2
  module Anchor
3
- def self.hook(*objs, &block)
3
+ def self.hook(*objs, &block) # :nodoc:
4
4
  objs.each do |obj|
5
5
  #puts "Trying to hook: #{obj} #{block.inspect}"
6
6
  Hooks.included(obj)
@@ -45,11 +45,16 @@ module Anchor
45
45
  orginal_methods = @orginal_methods ||= {}
46
46
 
47
47
  unless @orginal_methods[name]
48
- @orginal_methods[name] = self.instance_method(name)
49
- define_method name do
50
- hooks[name][:before].each {|proc| proc.call} if hooks[name][:before]
51
- retval = orginal_methods[name].bind(self).call
52
- hooks[name][:after].each {|proc| proc.call} if hooks[name][:after]
48
+ orginal_methods[name] = self.instance_method(name)
49
+ define_method name do
50
+ ihooks = hooks[name] # instance hooks
51
+ orginal_method = orginal_methods[name].bind(self)
52
+ # before
53
+ ihooks[:before].each {|proc| proc.call} if ihooks[:before]
54
+ # TODO: around
55
+ retval=orginal_method.call
56
+ # after
57
+ ihooks[:after].each {|proc| proc.call} if ihooks[:after]
53
58
  retval
54
59
  end
55
60
  end
@@ -68,5 +73,4 @@ module Anchor
68
73
  include Anchor::Hooks::Hooked
69
74
  end
70
75
  end
71
-
72
76
  end
@@ -2,4 +2,4 @@ module Kernel
2
2
  def anchor(*objs, &block)
3
3
  Anchor.hook(*objs, &block)
4
4
  end
5
- end
5
+ end
@@ -0,0 +1,7 @@
1
+ if defined?(Rails)
2
+ anchor Rails::Application do
3
+ after :initialize! do
4
+ Dir['app/**/*_anchor.rb'].each {|file| require File.expand_path(file) }
5
+ end
6
+ end
7
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 3
9
- version: 0.0.3
8
+ - 4
9
+ version: 0.0.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - "Margus P\xC3\xA4rt"
@@ -14,11 +14,11 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2012-01-03 00:00:00 +02:00
17
+ date: 2012-01-04 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
21
- description: Inspired from multiple AOP libaries, but its much more simplified.
21
+ description: Before, after and around method calls.
22
22
  email: margus@tione.eu
23
23
  executables: []
24
24
 
@@ -29,7 +29,8 @@ extra_rdoc_files: []
29
29
  files:
30
30
  - README.rdoc
31
31
  - lib/anchor/hooks.rb
32
- - lib/kernel.rb
32
+ - lib/anchor/support/rails.rb
33
+ - lib/anchor/support/kernel.rb
33
34
  - lib/anchor.rb
34
35
  has_rdoc: true
35
36
  homepage: https://github.com/tione/anchor
@@ -64,6 +65,6 @@ rubyforge_project:
64
65
  rubygems_version: 1.3.7
65
66
  signing_key:
66
67
  specification_version: 3
67
- summary: Before, after and around method calls.
68
+ summary: Inspired by AOP.
68
69
  test_files: []
69
70