attributes 3.2.0 → 3.3.0

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/README CHANGED
@@ -1,18 +1,18 @@
1
1
  NAME
2
-
3
2
  attributes.rb
4
3
 
5
- URIS
4
+ INSTALL
5
+ gem install attributes
6
6
 
7
+ URIS
7
8
  http://rubyforge.org/projects/codeforpeople/
8
9
  http://codeforpeople.com/lib/ruby
9
10
 
10
11
  SYNOPSIS
11
-
12
- attributes.rb provides an attr_* like method will several user friendly
13
- additions. attributes.rb is similar to the traits.rb package but sacrafices
14
- a few features for simplicity of implementation: attributes.rb is only 42
15
- lines of code.
12
+ attributes.rb provides a set of attr_* like method with several user
13
+ friendly additions. attributes.rb is similar to the traits.rb package but
14
+ sacrifices a few features for simplicity of implementation: attributes.rb is
15
+ only 42 lines of code.
16
16
 
17
17
  the implimentation of attributes.rb borrows many of the best ideas from the
18
18
  metakoans.rb ruby quiz
@@ -21,6 +21,12 @@ SYNOPSIS
21
21
 
22
22
  in particular the solutions of Christian Neukirchen and Florian Gross.
23
23
 
24
+ HISTORY
25
+ 3.3.0
26
+
27
+ moved to an instance variable-less model using an module level closure for
28
+ the attributes list
29
+
24
30
  SAMPLES
25
31
 
26
32
  <========< samples/a.rb >========>
@@ -52,10 +58,9 @@ SAMPLES
52
58
 
53
59
  ~ > ruby samples/a.rb
54
60
 
55
- samples/a.rb:5:in `require': ./lib/attributes.rb:53: syntax error (SyntaxError)
56
- def attributes *a &b
57
- ^
58
- ./lib/attributes.rb:64: syntax error from samples/a.rb:5
61
+ 42
62
+ "forty-two"
63
+ 42
59
64
 
60
65
 
61
66
  <========< samples/b.rb >========>
@@ -81,10 +86,8 @@ SAMPLES
81
86
 
82
87
  ~ > ruby samples/b.rb
83
88
 
84
- samples/b.rb:6:in `require': ./lib/attributes.rb:53: syntax error (SyntaxError)
85
- def attributes *a &b
86
- ^
87
- ./lib/attributes.rb:64: syntax error from samples/b.rb:6
89
+ 42
90
+ 42.0
88
91
 
89
92
 
90
93
  <========< samples/c.rb >========>
@@ -106,10 +109,7 @@ SAMPLES
106
109
 
107
110
  ~ > ruby samples/c.rb
108
111
 
109
- samples/c.rb:4:in `require': ./lib/attributes.rb:53: syntax error (SyntaxError)
110
- def attributes *a &b
111
- ^
112
- ./lib/attributes.rb:64: syntax error from samples/c.rb:4
112
+ 42
113
113
 
114
114
 
115
115
  <========< samples/d.rb >========>
@@ -153,8 +153,35 @@ SAMPLES
153
153
 
154
154
  ~ > ruby samples/d.rb
155
155
 
156
- samples/d.rb:7:in `require': ./lib/attributes.rb:53: syntax error (SyntaxError)
157
- def attributes *a &b
158
- ^
159
- ./lib/attributes.rb:64: syntax error from samples/d.rb:7
156
+ ["x", "y", "z"]
157
+ {"x"=>0, "y"=>1, "z"=>2}
158
+ "forty-two"
159
+
160
+
161
+ <========< samples/e.rb >========>
162
+
163
+ ~ > cat samples/e.rb
164
+
165
+ #
166
+ # my favourite element of attributes is that getters can also be setters.
167
+ # this allows incredibly clean looking code like
168
+ #
169
+ require 'attributes'
170
+
171
+ class Config
172
+ attributes %w( host port)
173
+ def initialize(&block) instance_eval &block end
174
+ end
175
+
176
+ conf = Config.new{
177
+ host 'codeforpeople.org'
178
+
179
+ port 80
180
+ }
181
+
182
+ p conf
183
+
184
+ ~ > ruby samples/e.rb
185
+
186
+ #<Config:0x220b0 @port=80, @host="codeforpeople.org">
160
187
 
data/README.tmpl CHANGED
@@ -1,18 +1,18 @@
1
1
  NAME
2
-
3
2
  attributes.rb
4
3
 
5
- URIS
4
+ INSTALL
5
+ gem install attributes
6
6
 
7
+ URIS
7
8
  http://rubyforge.org/projects/codeforpeople/
8
9
  http://codeforpeople.com/lib/ruby
9
10
 
10
11
  SYNOPSIS
11
-
12
- attributes.rb provides an attr_* like method will several user friendly
13
- additions. attributes.rb is similar to the traits.rb package but sacrafices
14
- a few features for simplicity of implementation: attributes.rb is only 42
15
- lines of code.
12
+ attributes.rb provides a set of attr_* like method with several user
13
+ friendly additions. attributes.rb is similar to the traits.rb package but
14
+ sacrifices a few features for simplicity of implementation: attributes.rb is
15
+ only 42 lines of code.
16
16
 
17
17
  the implimentation of attributes.rb borrows many of the best ideas from the
18
18
  metakoans.rb ruby quiz
@@ -21,6 +21,11 @@ SYNOPSIS
21
21
 
22
22
  in particular the solutions of Christian Neukirchen and Florian Gross.
23
23
 
24
- SAMPLES
24
+ HISTORY
25
+ 3.3.0
26
+
27
+ moved to an instance variable-less model using an module level closure for
28
+ the attributes list
25
29
 
30
+ SAMPLES
26
31
  @samples
File without changes
@@ -1,7 +1,6 @@
1
1
  module Attributes
2
- VERSION = '3.2.0'
3
-
4
- def version() VERSION end
2
+ VERSION = '3.3.0'
3
+ def self.version() VERSION end
5
4
 
6
5
  def attributes *a, &b
7
6
  unless a.empty?
@@ -13,10 +12,7 @@ module Attributes
13
12
 
14
13
  names_and_defaults.each do |name, default|
15
14
  init = b || lambda { default }
16
- ivar = "@#{ name }"
17
- getter = "#{ name }"
18
- setter = "#{ name }="
19
- query = "#{ name }?"
15
+ ivar, getter, setter, query = "@#{ name }", "#{ name }", "#{ name }=", "#{ name }?"
20
16
 
21
17
  define_method(setter) do |value|
22
18
  instance_variable_set ivar, value
@@ -27,9 +23,7 @@ module Attributes
27
23
  send setter, value.shift
28
24
  else
29
25
  defined = instance_eval "defined? #{ ivar }"
30
- unless defined
31
- send setter, instance_eval(&init)
32
- end
26
+ send setter, instance_eval(&init) unless defined
33
27
  instance_variable_get ivar
34
28
  end
35
29
  end
@@ -40,29 +34,35 @@ module Attributes
40
34
  attributes
41
35
  end
42
36
  else
43
- @attributes ||= []
37
+ begin
38
+ __attribute_list__
39
+ rescue NameError
40
+ singleton_class =
41
+ class << self
42
+ self
43
+ end
44
+ singleton_class.module_eval <<-code
45
+ attribute_list = []
46
+ define_method('attribute_list'){ attribute_list }
47
+ alias_method '__attribute_list__', 'attribute_list'
48
+ code
49
+ __attribute_list__
50
+ end
44
51
  end
45
52
  end
46
53
 
47
- def attribute *a, &b
48
- attributes *a, &b
49
- end
54
+ %w( __attributes__ __attribute__ attribute ).each{|dst| alias_method dst, 'attributes'}
50
55
  end
51
56
 
52
57
  class Object
53
58
  def attributes *a, &b
54
- sc =
59
+ sc =
55
60
  class << self
56
61
  self
57
62
  end
58
63
  sc.attributes *a, &b
59
64
  end
60
-
61
- def attribute *a, &b
62
- attributes *a, &b
63
- end
65
+ %w( __attributes__ __attribute__ attribute ).each{|dst| alias_method dst, 'attributes'}
64
66
  end
65
67
 
66
- class Module
67
- include Attributes
68
- end
68
+ class Module; include Attributes; end
data/lib/attributes.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  module Attributes
2
- VERSION = '3.2.0'
3
-
4
- def version() VERSION end
2
+ VERSION = '3.3.0'
3
+ def self.version() VERSION end
5
4
 
6
5
  def attributes *a, &b
7
6
  unless a.empty?
@@ -13,10 +12,7 @@ module Attributes
13
12
 
14
13
  names_and_defaults.each do |name, default|
15
14
  init = b || lambda { default }
16
- ivar = "@#{ name }"
17
- getter = "#{ name }"
18
- setter = "#{ name }="
19
- query = "#{ name }?"
15
+ ivar, getter, setter, query = "@#{ name }", "#{ name }", "#{ name }=", "#{ name }?"
20
16
 
21
17
  define_method(setter) do |value|
22
18
  instance_variable_set ivar, value
@@ -27,9 +23,7 @@ module Attributes
27
23
  send setter, value.shift
28
24
  else
29
25
  defined = instance_eval "defined? #{ ivar }"
30
- unless defined
31
- send setter, instance_eval(&init)
32
- end
26
+ send setter, instance_eval(&init) unless defined
33
27
  instance_variable_get ivar
34
28
  end
35
29
  end
@@ -40,29 +34,35 @@ module Attributes
40
34
  attributes
41
35
  end
42
36
  else
43
- @attributes ||= []
37
+ begin
38
+ __attribute_list__
39
+ rescue NameError
40
+ singleton_class =
41
+ class << self
42
+ self
43
+ end
44
+ singleton_class.module_eval <<-code
45
+ attribute_list = []
46
+ define_method('attribute_list'){ attribute_list }
47
+ alias_method '__attribute_list__', 'attribute_list'
48
+ code
49
+ __attribute_list__
50
+ end
44
51
  end
45
52
  end
46
53
 
47
- def attribute *a, &b
48
- attributes *a, &b
49
- end
54
+ %w( __attributes__ __attribute__ attribute ).each{|dst| alias_method dst, 'attributes'}
50
55
  end
51
56
 
52
57
  class Object
53
58
  def attributes *a, &b
54
- sc =
59
+ sc =
55
60
  class << self
56
61
  self
57
62
  end
58
63
  sc.attributes *a, &b
59
64
  end
60
-
61
- def attribute *a, &b
62
- attributes *a, &b
63
- end
65
+ %w( __attributes__ __attribute__ attribute ).each{|dst| alias_method dst, 'attributes'}
64
66
  end
65
67
 
66
- class Module
67
- include Attributes
68
- end
68
+ class Module; include Attributes; end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.8.11
2
+ rubygems_version: 0.9.2
3
3
  specification_version: 1
4
4
  name: attributes
5
5
  version: !ruby/object:Gem::Version
6
- version: 3.2.0
7
- date: 2006-10-16 00:00:00.000000 -06:00
6
+ version: 3.3.0
7
+ date: 2007-06-04 00:00:00 -06:00
8
8
  summary: attributes
9
9
  require_paths:
10
- - lib
10
+ - lib
11
11
  email: ara.t.howard@noaa.gov
12
12
  homepage: http://codeforpeople.com/lib/ruby/attributes/
13
13
  rubyforge_project:
@@ -18,35 +18,43 @@ bindir: bin
18
18
  has_rdoc: false
19
19
  required_ruby_version: !ruby/object:Gem::Version::Requirement
20
20
  requirements:
21
- -
22
- - ">"
23
- - !ruby/object:Gem::Version
24
- version: 0.0.0
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
25
24
  version:
26
25
  platform: ruby
27
26
  signing_key:
28
27
  cert_chain:
28
+ post_install_message:
29
29
  authors:
30
- - Ara T. Howard
30
+ - Ara T. Howard
31
31
  files:
32
- - lib
33
- - samples
34
- - install.rb
35
- - gemspec.rb
36
- - gen_readme.rb
37
- - README.tmpl
38
- - README
39
- - lib/attributes.rb
40
- - lib/attributes-3.2.0.rb
41
- - samples/a.rb
42
- - samples/b.rb
43
- - samples/c.rb
44
- - samples/d.rb
45
- - samples/e.rb
32
+ - attributes-3.3.0.gem
33
+ - gemspec.rb
34
+ - gen_readme.rb
35
+ - install.rb
36
+ - lib
37
+ - lib/attributes-3.3.0.rb
38
+ - lib/attributes.rb
39
+ - README
40
+ - README.tmpl
41
+ - samples
42
+ - samples/a.rb
43
+ - samples/b.rb
44
+ - samples/c.rb
45
+ - samples/d.rb
46
+ - samples/e.rb
46
47
  test_files: []
48
+
47
49
  rdoc_options: []
50
+
48
51
  extra_rdoc_files: []
52
+
49
53
  executables: []
54
+
50
55
  extensions: []
56
+
51
57
  requirements: []
52
- dependencies: []
58
+
59
+ dependencies: []
60
+