fattr 2.0.0 → 2.1.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.
Files changed (5) hide show
  1. data/a.rb +42 -0
  2. data/fattr.gemspec +2 -2
  3. data/lib/fattr.rb +12 -12
  4. data/test/fattr.rb +6 -0
  5. metadata +3 -2
data/a.rb ADDED
@@ -0,0 +1,42 @@
1
+ require 'rubygems'
2
+ require 'fattr'
3
+
4
+ class A
5
+ class << A
6
+ fattr(:x, :inheritable => true){ 42 }
7
+ end
8
+ end
9
+
10
+ class B < A; end
11
+
12
+ class C < B; end
13
+
14
+
15
+ p C.x
16
+ p B.x
17
+ p A.x
18
+ puts
19
+
20
+ B.x = 42.0
21
+
22
+ p C.x
23
+ p B.x
24
+ p A.x
25
+ puts
26
+
27
+ C.x! # force re-initialization from parent(s)
28
+
29
+ p C.x
30
+ p B.x
31
+ p A.x
32
+ puts
33
+
34
+
35
+ class K
36
+ end
37
+ module M
38
+ fattr(:x, :inheritable => true){ 42 }
39
+ end
40
+ K.extend(M)
41
+
42
+ p K.x
data/fattr.gemspec CHANGED
@@ -4,11 +4,11 @@
4
4
  Gem::Specification::new do |spec|
5
5
  spec.name = "fattr"
6
6
  spec.description = 'fattr.rb is a "fatter attr" for ruby'
7
- spec.version = "2.0.0"
7
+ spec.version = "2.1.0"
8
8
  spec.platform = Gem::Platform::RUBY
9
9
  spec.summary = "fattr"
10
10
 
11
- spec.files = ["fattr.gemspec", "lib", "lib/fattr.rb", "Rakefile", "README", "README.erb", "samples", "samples/a.rb", "samples/b.rb", "samples/c.rb", "samples/d.rb", "samples/e.rb", "samples/f.rb", "samples/g.rb", "samples/h.rb", "test", "test/fattr.rb"]
11
+ spec.files = ["a.rb", "fattr.gemspec", "lib", "lib/fattr.rb", "Rakefile", "README", "README.erb", "samples", "samples/a.rb", "samples/b.rb", "samples/c.rb", "samples/d.rb", "samples/e.rb", "samples/f.rb", "samples/g.rb", "samples/h.rb", "test", "test/fattr.rb"]
12
12
  spec.executables = []
13
13
 
14
14
 
data/lib/fattr.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Fattr
2
- Fattr::Version = '2.0.0' unless Fattr.const_defined?(:Version)
2
+ Fattr::Version = '2.1.0' unless Fattr.const_defined?(:Version)
3
3
  def self.version() Fattr::Version end
4
4
 
5
5
  class List < ::Array
@@ -65,25 +65,25 @@ module Fattr
65
65
  default = config['default'] if config.has_key?('default')
66
66
 
67
67
  inheritable = false
68
- if Class===self
68
+ if Module===self
69
69
  inheritable = config[:inheritable] if config.has_key?(:inheritable)
70
70
  inheritable = config['inheritable'] if config.has_key?('inheritable')
71
71
  end
72
72
 
73
73
  initialize = (
74
- block || (
75
- unless inheritable
76
- lambda{ default }
77
- else
78
- lambda do
79
- if ancestors[1..-1].any?{|ancestor| ancestor.Fattrs.include?(name)}
80
- ancestors[1].send(name)
81
- else
82
- default
74
+ if inheritable
75
+ lambda do
76
+ parents = ancestors[1..-1]
77
+ catch(:value) do
78
+ parents.each do |parent|
79
+ throw(:value, parent.send(name)) if parent.respond_to?(name)
83
80
  end
81
+ block ? block.call : default
84
82
  end
85
83
  end
86
- )
84
+ else
85
+ block || lambda{ default }
86
+ end
87
87
  )
88
88
 
89
89
  initializer = lambda do |this|
data/test/fattr.rb CHANGED
@@ -65,21 +65,27 @@ Testing Fattr do
65
65
  a = Class.new{ Fattr :x, :default => 42, :inheritable => true }
66
66
  b = Class.new(a)
67
67
  c = Class.new(b)
68
+
68
69
  def a.name() 'a' end
69
70
  def b.name() 'b' end
70
71
  def c.name() 'c' end
72
+
71
73
  assert{ c.x==42 }
72
74
  assert{ b.x==42 }
73
75
  assert{ a.x==42 }
76
+
74
77
  assert{ b.x=42.0 }
75
78
  assert{ b.x==42.0 }
76
79
  assert{ a.x==42 }
80
+
77
81
  assert{ a.x='forty-two' }
78
82
  assert{ a.x=='forty-two' }
79
83
  assert{ b.x==42.0 }
84
+
80
85
  assert{ b.x! }
81
86
  assert{ b.x=='forty-two' }
82
87
  assert{ b.x='FORTY-TWO' }
88
+
83
89
  assert{ c.x! }
84
90
  assert{ c.x=='FORTY-TWO' }
85
91
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fattr
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ara T. Howard
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-11 00:00:00 -06:00
12
+ date: 2009-10-12 00:00:00 -06:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -22,6 +22,7 @@ extensions: []
22
22
  extra_rdoc_files: []
23
23
 
24
24
  files:
25
+ - a.rb
25
26
  - fattr.gemspec
26
27
  - lib/fattr.rb
27
28
  - Rakefile