anise 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,122 +0,0 @@
1
- require 'facets/inheritor' # remove dependency?
2
-
3
- module Anise
4
- require 'anise/annotations'
5
-
6
- module Annotatable
7
-
8
- # = Annotated Attributes
9
- #
10
- # This framework modifies the major attr_* methods to allow easy addition of annotations.
11
- # It modifies the built in attribute methods (attr, attr_reader, attr_writer and attr_accessor),
12
- # to allow annotations to added to them directly rather than requireing a separate
13
- # #ann statement.
14
- #
15
- # class X
16
- # attr :a, :valid => lambda{ |x| x.is_a?(Integer) }
17
- # end
18
- #
19
- # See annotation.rb for more information.
20
- #
21
- # NOTE This library was designed to be backward compatible with the standard versions of the
22
- # same methods.
23
- #
24
- module Attributes
25
-
26
- def self.append_features(base)
27
- base.extend self
28
- base.module_eval do
29
- inheritor :instance_attributes, [], :|
30
-
31
- annotatable_attribute_method(:attr_reader)
32
- annotatable_attribute_method(:attr_writer)
33
- annotatable_attribute_method(:attr_accessor)
34
- end
35
- end
36
-
37
- #
38
- def annotatable_attribute_method(attr_method_name)
39
- attr_method = method(attr_method_name)
40
-
41
- (class << self; self; end).instance_eval do
42
-
43
- define_method(attr_method_name) do |*args|
44
-
45
- args.flatten!
46
-
47
- harg={}; while args.last.is_a?(Hash)
48
- harg.update(args.pop)
49
- end
50
-
51
- raise ArgumentError if args.empty? and harg.empty?
52
-
53
- if args.empty? # hash mode
54
- harg.each { |a,h| send(attr_method_name,a,h) }
55
- else
56
- klass = harg[:class] = args.pop if args.last.is_a?(Class)
57
-
58
- attr_method.call(*args)
59
-
60
- args.each { |a|
61
- ann(a.to_sym,harg)
62
- }
63
-
64
- instance_attributes!.concat(args) #merge!
65
-
66
- # Use this callback to customize for your needs.
67
- if respond_to?(:attr_callback)
68
- attr_callback(self, args, harg)
69
- end
70
-
71
- # return the names of the attributes created
72
- return args
73
- end
74
-
75
- end
76
-
77
- end
78
- end
79
-
80
- # Return list of attributes that have a :class annotation.
81
- #
82
- # class MyClass
83
- # attr_accessor :test
84
- # attr_accessor :name, String, :doc => 'Hello'
85
- # attr_accessor :age, Fixnum
86
- # end
87
- #
88
- # MyClass.instance_attributes # => [:test, :name, :age, :body]
89
- # MyClass.classified_attributes # => [:name, :age]
90
- #
91
- def classified_attributes
92
- instance_attributes.find_all do |a|
93
- self.ann(a, :class)
94
- end
95
- end
96
-
97
- # This define a simple adjustment to #attr to allow it to handle the boolean argument and
98
- # to be able to accept attributes. It's backward compatible and is not needed for Ruby 1.9
99
- # which gets rid of the secondary argument.
100
- #
101
- def attr(*args)
102
- args.flatten!
103
- case args.last
104
- when TrueClass
105
- args.pop
106
- attr_accessor(*args)
107
- when FalseClass
108
- args.pop
109
- attr_reader(*args)
110
- else
111
- attr_reader(*args)
112
- end
113
- end
114
-
115
- end
116
-
117
- end
118
-
119
- end
120
-
121
- # Copyright (c) 2005, 2008 TigerOps
122
-
@@ -1,28 +0,0 @@
1
- require 'anise/annotatable'
2
-
3
- class Test_Annotatable < Test::Unit::TestCase
4
-
5
- include Anise::Annotatable
6
-
7
- annotation :req
8
-
9
- req 'r'
10
-
11
- def a
12
- "a"
13
- end
14
-
15
- def test_annotated
16
- assert_equal( {:req=>['r']}, self.class.ann(:a) )
17
- end
18
-
19
- req 's'
20
-
21
- attr :b
22
-
23
- def test_annotated
24
- assert_equal( {:req=>['s']}, self.class.ann(:b) )
25
- end
26
-
27
- end
28
-
@@ -1,32 +0,0 @@
1
- =begin
2
- require 'annotable'
3
- require 'test/unit'
4
-
5
- include Annotatable
6
-
7
- annotation :req
8
-
9
- class Test_Annotatable < Test::Unit::TestCase
10
-
11
- annotation :req
12
-
13
- req 'r'
14
-
15
- def a
16
- "a"
17
- end
18
-
19
- def test_annotated
20
- assert_equal( {:req=>['r']}, self.class.ann(:a) )
21
- end
22
-
23
- req 's'
24
-
25
- attr :b
26
-
27
- def test_annotated
28
- assert_equal( {:req=>['s']}, self.class.ann(:b) )
29
- end
30
-
31
- end
32
- =end
@@ -1,27 +0,0 @@
1
- =begin
2
- require 'annotable/attributes'
3
- require 'test/unit'
4
-
5
- include Annotatable::Attributes
6
-
7
- $self = self
8
-
9
- attr :b, :y => 1
10
-
11
- class Test_Attribute_Toplevel < Test::Unit::TestCase
12
-
13
- attr :q
14
-
15
- attr :a, :x => 1
16
-
17
- def test_attr_a
18
- assert_equal( {:x=>1}, self.class.ann(:a) )
19
- end
20
-
21
- def test_attr_b
22
- assert_equal( {:y=>1}, $self.class.ann(:b) )
23
- end
24
-
25
- end
26
- =end
27
-