shared 0.4.2 → 0.4.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README +35 -6
- data/ann-shared-0.4.2.txt +183 -0
- data/lib/shared.rb +5 -1
- metadata +2 -1
data/README
CHANGED
@@ -12,6 +12,11 @@ URIS
|
|
12
12
|
http://codeforpeople.com/lib/ruby/
|
13
13
|
|
14
14
|
HISTORY
|
15
|
+
0.4.3
|
16
|
+
- added version info
|
17
|
+
- move methods from Object to Kernel and made them private (thx Stefan
|
18
|
+
Rusterholz)
|
19
|
+
|
15
20
|
0.4.2
|
16
21
|
initial version
|
17
22
|
|
@@ -44,8 +49,12 @@ SAMPLES
|
|
44
49
|
|
45
50
|
~ > ruby samples/a.rb
|
46
51
|
|
47
|
-
|
48
|
-
|
52
|
+
samples/a.rb:4:in `require': ./lib/shared.rb:2: no .<digit> floating literal anymore; put 0 before dot (SyntaxError)
|
53
|
+
Shared::VERSION = 0.4.3 unless defined?(Shared::VERSION)
|
54
|
+
^
|
55
|
+
./lib/shared.rb:2: syntax error, unexpected tINTEGER
|
56
|
+
Shared::VERSION = 0.4.3 unless defined?(Shared::VERSION)
|
57
|
+
^ from samples/a.rb:4
|
49
58
|
|
50
59
|
|
51
60
|
<========< samples/b.rb >========>
|
@@ -73,7 +82,12 @@ SAMPLES
|
|
73
82
|
|
74
83
|
~ > ruby samples/b.rb
|
75
84
|
|
76
|
-
|
85
|
+
samples/b.rb:5:in `require': ./lib/shared.rb:2: no .<digit> floating literal anymore; put 0 before dot (SyntaxError)
|
86
|
+
Shared::VERSION = 0.4.3 unless defined?(Shared::VERSION)
|
87
|
+
^
|
88
|
+
./lib/shared.rb:2: syntax error, unexpected tINTEGER
|
89
|
+
Shared::VERSION = 0.4.3 unless defined?(Shared::VERSION)
|
90
|
+
^ from samples/b.rb:5
|
77
91
|
|
78
92
|
|
79
93
|
<========< samples/c.rb >========>
|
@@ -108,7 +122,12 @@ SAMPLES
|
|
108
122
|
|
109
123
|
~ > ruby samples/c.rb
|
110
124
|
|
111
|
-
|
125
|
+
samples/c.rb:5:in `require': ./lib/shared.rb:2: no .<digit> floating literal anymore; put 0 before dot (SyntaxError)
|
126
|
+
Shared::VERSION = 0.4.3 unless defined?(Shared::VERSION)
|
127
|
+
^
|
128
|
+
./lib/shared.rb:2: syntax error, unexpected tINTEGER
|
129
|
+
Shared::VERSION = 0.4.3 unless defined?(Shared::VERSION)
|
130
|
+
^ from samples/c.rb:5
|
112
131
|
|
113
132
|
|
114
133
|
<========< samples/d.rb >========>
|
@@ -139,7 +158,12 @@ SAMPLES
|
|
139
158
|
|
140
159
|
~ > ruby samples/d.rb
|
141
160
|
|
142
|
-
|
161
|
+
samples/d.rb:5:in `require': ./lib/shared.rb:2: no .<digit> floating literal anymore; put 0 before dot (SyntaxError)
|
162
|
+
Shared::VERSION = 0.4.3 unless defined?(Shared::VERSION)
|
163
|
+
^
|
164
|
+
./lib/shared.rb:2: syntax error, unexpected tINTEGER
|
165
|
+
Shared::VERSION = 0.4.3 unless defined?(Shared::VERSION)
|
166
|
+
^ from samples/d.rb:5
|
143
167
|
|
144
168
|
|
145
169
|
<========< samples/e.rb >========>
|
@@ -179,5 +203,10 @@ SAMPLES
|
|
179
203
|
|
180
204
|
~ > ruby samples/e.rb
|
181
205
|
|
182
|
-
|
206
|
+
samples/e.rb:5:in `require': ./lib/shared.rb:2: no .<digit> floating literal anymore; put 0 before dot (SyntaxError)
|
207
|
+
Shared::VERSION = 0.4.3 unless defined?(Shared::VERSION)
|
208
|
+
^
|
209
|
+
./lib/shared.rb:2: syntax error, unexpected tINTEGER
|
210
|
+
Shared::VERSION = 0.4.3 unless defined?(Shared::VERSION)
|
211
|
+
^ from samples/e.rb:5
|
183
212
|
|
@@ -0,0 +1,183 @@
|
|
1
|
+
NAME
|
2
|
+
shared.rb
|
3
|
+
|
4
|
+
DESCRIPTION
|
5
|
+
super simple super power sharing of instance and class level code
|
6
|
+
|
7
|
+
INSTALL
|
8
|
+
gem install shared
|
9
|
+
|
10
|
+
URIS
|
11
|
+
http://rubyforge.org/projects/codeforpeople
|
12
|
+
http://codeforpeople.com/lib/ruby/
|
13
|
+
|
14
|
+
HISTORY
|
15
|
+
0.4.2
|
16
|
+
initial version
|
17
|
+
|
18
|
+
SAMPLES
|
19
|
+
|
20
|
+
<========< samples/a.rb >========>
|
21
|
+
|
22
|
+
~ > cat samples/a.rb
|
23
|
+
|
24
|
+
# shared.rb is a very simple and very powerful method of sharing code between
|
25
|
+
# classes.
|
26
|
+
#
|
27
|
+
require 'shared'
|
28
|
+
|
29
|
+
shared(:code) do
|
30
|
+
def classname() self.class.name end
|
31
|
+
end
|
32
|
+
|
33
|
+
class Foo
|
34
|
+
include shared(:code)
|
35
|
+
end
|
36
|
+
|
37
|
+
class Bar
|
38
|
+
include shared(:code)
|
39
|
+
end
|
40
|
+
|
41
|
+
p Foo.new.classname #=> "Foo"
|
42
|
+
|
43
|
+
p Bar.new.classname #=> "Bar"
|
44
|
+
|
45
|
+
~ > ruby samples/a.rb
|
46
|
+
|
47
|
+
"Foo"
|
48
|
+
"Bar"
|
49
|
+
|
50
|
+
|
51
|
+
<========< samples/b.rb >========>
|
52
|
+
|
53
|
+
~ > cat samples/b.rb
|
54
|
+
|
55
|
+
# shared.rb allows natural declaration of both instance and class-level
|
56
|
+
# methods - it's more than simple module inclusion
|
57
|
+
#
|
58
|
+
|
59
|
+
require 'shared'
|
60
|
+
|
61
|
+
shared('methods') do
|
62
|
+
def self.class_method() 40 end
|
63
|
+
|
64
|
+
def instance_method() 2 end
|
65
|
+
end
|
66
|
+
|
67
|
+
class C
|
68
|
+
include shared('methods')
|
69
|
+
end
|
70
|
+
|
71
|
+
p(C.class_method + C.new.instance_method) #=> 42
|
72
|
+
|
73
|
+
|
74
|
+
~ > ruby samples/b.rb
|
75
|
+
|
76
|
+
42
|
77
|
+
|
78
|
+
|
79
|
+
<========< samples/c.rb >========>
|
80
|
+
|
81
|
+
~ > cat samples/c.rb
|
82
|
+
|
83
|
+
# shared.rb works equally well with individual objects in addition to the
|
84
|
+
# normal class level usage
|
85
|
+
#
|
86
|
+
|
87
|
+
require 'shared'
|
88
|
+
|
89
|
+
shared(:meta_tools) do
|
90
|
+
def singleton_class &block
|
91
|
+
singleton_class =
|
92
|
+
class << self
|
93
|
+
self
|
94
|
+
end
|
95
|
+
block ? singleton_class.module_eval(&block) : singleton_class
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
a = %w( a b c )
|
100
|
+
|
101
|
+
a.extend shared(:meta_tools)
|
102
|
+
|
103
|
+
a.singleton_class do
|
104
|
+
def to_range() first .. last end
|
105
|
+
end
|
106
|
+
|
107
|
+
p a.to_range #=> "a".."c"
|
108
|
+
|
109
|
+
~ > ruby samples/c.rb
|
110
|
+
|
111
|
+
"a".."c"
|
112
|
+
|
113
|
+
|
114
|
+
<========< samples/d.rb >========>
|
115
|
+
|
116
|
+
~ > cat samples/d.rb
|
117
|
+
|
118
|
+
# an example use-case for shared.rb is sharing code bewteen classes that
|
119
|
+
# require both class level and instance level behaviour to be shared
|
120
|
+
#
|
121
|
+
|
122
|
+
require 'shared'
|
123
|
+
|
124
|
+
shared(:acts_as_named) do
|
125
|
+
validates_precence_of :name
|
126
|
+
|
127
|
+
def to_html() "<blink> #{ name } </blink>" end
|
128
|
+
end
|
129
|
+
|
130
|
+
class Model
|
131
|
+
def Model.validates_precence_of(*a) end
|
132
|
+
|
133
|
+
def name() 'zaphod' end
|
134
|
+
|
135
|
+
include shared(:acts_as_named)
|
136
|
+
end
|
137
|
+
|
138
|
+
p Model.new.to_html #=> "<blink> zaphod </blink>"
|
139
|
+
|
140
|
+
~ > ruby samples/d.rb
|
141
|
+
|
142
|
+
"<blink> zaphod </blink>"
|
143
|
+
|
144
|
+
|
145
|
+
<========< samples/e.rb >========>
|
146
|
+
|
147
|
+
~ > cat samples/e.rb
|
148
|
+
|
149
|
+
# it's important to note that the shared code is injected into the reciever
|
150
|
+
# fresh on each call and, in that way, the effect is rather macro like
|
151
|
+
#
|
152
|
+
|
153
|
+
require 'shared'
|
154
|
+
|
155
|
+
share(:instance_tracker) do
|
156
|
+
const_set :Instances, []
|
157
|
+
|
158
|
+
def self.instances() const_get :Instances end
|
159
|
+
|
160
|
+
def self.new *a, &b
|
161
|
+
obj = super
|
162
|
+
ensure
|
163
|
+
instances << obj
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
class Foo
|
168
|
+
include shared(:instance_tracker)
|
169
|
+
end
|
170
|
+
|
171
|
+
class Bar
|
172
|
+
include shared(:instance_tracker)
|
173
|
+
end
|
174
|
+
|
175
|
+
2.times{ Foo.new }
|
176
|
+
40.times{ Bar.new }
|
177
|
+
|
178
|
+
p(Foo.instances.size + Bar.instances.size)
|
179
|
+
|
180
|
+
~ > ruby samples/e.rb
|
181
|
+
|
182
|
+
42
|
183
|
+
|
data/lib/shared.rb
CHANGED
@@ -1,4 +1,7 @@
|
|
1
1
|
module Shared
|
2
|
+
Shared::VERSION = 0.4.3 unless defined?(Shared::VERSION)
|
3
|
+
def version() Shared::VERSION end
|
4
|
+
|
2
5
|
Code = {}
|
3
6
|
|
4
7
|
def shared name, &block
|
@@ -48,7 +51,8 @@ module Shared
|
|
48
51
|
extend self
|
49
52
|
end
|
50
53
|
|
51
|
-
|
54
|
+
module Kernel
|
55
|
+
private
|
52
56
|
def share *a, &b
|
53
57
|
Shared.share *a, &b
|
54
58
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shared
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ara T. Howard
|
@@ -31,6 +31,7 @@ extensions: []
|
|
31
31
|
extra_rdoc_files: []
|
32
32
|
|
33
33
|
files:
|
34
|
+
- ann-shared-0.4.2.txt
|
34
35
|
- gemspec.rb
|
35
36
|
- gen_readme.rb
|
36
37
|
- install.rb
|