anise 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/HISTORY +4 -0
- data/MANIFEST +3 -1
- data/VERSION +1 -1
- data/lib/anise/annotation.rb +9 -0
- data/spec/01_annotations.rd +25 -0
- data/spec/04_callbacks.rd +60 -0
- metadata +4 -2
data/HISTORY
CHANGED
data/MANIFEST
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
anise 0.
|
1
|
+
anise 0.4.0 beta (2009-02-15)
|
data/lib/anise/annotation.rb
CHANGED
@@ -134,6 +134,8 @@ module Anise
|
|
134
134
|
keys = keys.inject({}){ |h,(k,v)| h[k.to_sym] = v; h} #rekey
|
135
135
|
annotations[ref] ||= {}
|
136
136
|
annotations[ref].update(keys)
|
137
|
+
# callback
|
138
|
+
annotation_added(ref)
|
137
139
|
else
|
138
140
|
key = keys.to_sym
|
139
141
|
annotation(ref)[key]
|
@@ -162,6 +164,8 @@ module Anise
|
|
162
164
|
keys = keys.inject({}){ |h,(k,v)| h[k.to_sym] = v; h} #rekey
|
163
165
|
annotations[ref] ||= {}
|
164
166
|
annotations[ref].update(keys)
|
167
|
+
# callback
|
168
|
+
annotation_added(ref) if method_defined?(:annotation_added)
|
165
169
|
else
|
166
170
|
key = keys.to_sym
|
167
171
|
annotations[ref] ||= {}
|
@@ -173,6 +177,11 @@ module Anise
|
|
173
177
|
end
|
174
178
|
end
|
175
179
|
|
180
|
+
# callback method
|
181
|
+
def annotation_added(name)
|
182
|
+
super if defined?(super)
|
183
|
+
end
|
184
|
+
|
176
185
|
end
|
177
186
|
|
178
187
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
= Creating and Reading Annotations
|
2
|
+
|
3
|
+
Load the primary annotations library.
|
4
|
+
|
5
|
+
require 'anise/annotation'
|
6
|
+
|
7
|
+
Given a example class X we can apply annotations to it using the #ann method.
|
8
|
+
|
9
|
+
class X
|
10
|
+
include Anise::Annotation
|
11
|
+
ann :x1, :a=>1
|
12
|
+
ann :x1, :b=>2
|
13
|
+
end
|
14
|
+
|
15
|
+
We can then use #ann to lookup the set annotations.
|
16
|
+
|
17
|
+
X.ann(:x1,:a).should == 1
|
18
|
+
|
19
|
+
The #ann method is a public interface, so we can define annotation externally as well.
|
20
|
+
|
21
|
+
X.ann :x1, :a => 2
|
22
|
+
X.ann(:x1, :a).should == 2
|
23
|
+
|
24
|
+
QED.
|
25
|
+
|
@@ -0,0 +1,60 @@
|
|
1
|
+
= Callbacks
|
2
|
+
|
3
|
+
Load the annotations, which supports callbacks out of the box.
|
4
|
+
|
5
|
+
require 'anise/annotation'
|
6
|
+
|
7
|
+
Given a sample class X, we can use a standard callback method #annotation_added().
|
8
|
+
|
9
|
+
class X
|
10
|
+
include Anise::Annotation
|
11
|
+
|
12
|
+
class << self
|
13
|
+
attr :last_callback
|
14
|
+
|
15
|
+
def annotation_added(name)
|
16
|
+
@last_callback = [name, ann(name)]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
Now if we add an annotation, we will see the callback catches it.
|
22
|
+
|
23
|
+
X.ann :x1, :a=>1
|
24
|
+
X.last_callback.should == [:x1, {:a => 1}]
|
25
|
+
|
26
|
+
We'll do it again to be sure.
|
27
|
+
|
28
|
+
X.ann :x1, :b=>2
|
29
|
+
X.last_callback.should == [:x1, {:a => 1, :b => 2}]
|
30
|
+
|
31
|
+
== Using Callbacks for Attribute Defaults
|
32
|
+
|
33
|
+
class ::Module
|
34
|
+
def annotation_added(key)
|
35
|
+
base = self
|
36
|
+
if value = ann(key, :default)
|
37
|
+
define_method(key) do
|
38
|
+
instance_variable_set("@#{key}", value) unless instance_variable_defined?("@#{key}")
|
39
|
+
base.module_eval{ attr key }
|
40
|
+
instance_variable_get("@#{key}")
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
Try it out.
|
47
|
+
|
48
|
+
class Y
|
49
|
+
include Anise::Annotation
|
50
|
+
|
51
|
+
attr :a
|
52
|
+
ann :a, :default => 10
|
53
|
+
end
|
54
|
+
|
55
|
+
x = Y.new
|
56
|
+
x.a.should == 10
|
57
|
+
x.a.should == 10
|
58
|
+
|
59
|
+
QED.
|
60
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: anise
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- tigerops-community@rubyforge.org
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2009-
|
13
|
+
date: 2009-05-28 00:00:00 -04:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -70,6 +70,8 @@ files:
|
|
70
70
|
- test/test_annotations_module.rb
|
71
71
|
- test/test_anise_toplevel.rb
|
72
72
|
- test/test_annotations_toplevel.rb
|
73
|
+
- spec/04_callbacks.rd
|
74
|
+
- spec/01_annotations.rd
|
73
75
|
has_rdoc: true
|
74
76
|
homepage: http://
|
75
77
|
post_install_message:
|