refr 0.0.5 → 0.0.6
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/lib/refr.rb +51 -47
- metadata +52 -28
data/lib/refr.rb
CHANGED
@@ -2,63 +2,67 @@
|
|
2
2
|
# DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
3
3
|
# Version 2, December 2004
|
4
4
|
#
|
5
|
-
# Copyleft meh. [http://meh.paranoid.pk | meh@paranoici.org]
|
6
|
-
#
|
7
5
|
# DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
8
6
|
# TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
9
7
|
#
|
10
8
|
# 0. You just DO WHAT THE FUCK YOU WANT TO.
|
11
9
|
#++
|
12
10
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
11
|
+
require 'blankslate'
|
12
|
+
|
13
|
+
class Reference < BlankSlate
|
14
|
+
class << self
|
15
|
+
def normalize (value)
|
16
|
+
if (value.___is_a_reference___ rescue false)
|
17
|
+
value.___get_referenced___
|
18
|
+
else
|
19
|
+
value
|
20
|
+
end
|
21
|
+
end; alias - normalize
|
22
|
+
|
23
|
+
def local (&block)
|
24
|
+
self.new(block.call, block.binding)
|
25
|
+
end
|
22
26
|
|
23
|
-
|
24
|
-
|
25
|
-
|
27
|
+
def [] (value, force=false)
|
28
|
+
if (value.___is_a_reference___ rescue false) && !force
|
29
|
+
value
|
30
|
+
else
|
31
|
+
self.local { :value }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
26
35
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
36
|
+
def initialize (name, binding)
|
37
|
+
begin
|
38
|
+
@getter = Kernel::eval("lambda { #{name} }", binding)
|
39
|
+
@setter = Kernel::eval("lambda { |v| #{name} = v }", binding)
|
40
|
+
rescue Exception => e
|
41
|
+
Kernel::raise NameError, "#{name} isn't a valid variable name"
|
42
|
+
end
|
43
|
+
end
|
35
44
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
}
|
40
|
-
$VERBOSE = tmp
|
45
|
+
def ___get_referenced___
|
46
|
+
@getter.call
|
47
|
+
end; alias ~ ___get_referenced___
|
41
48
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
@setter = ::Kernel::eval("lambda { |v| #{name} = v }", vars)
|
46
|
-
rescue ::Exception => e
|
47
|
-
::Kernel::raise ::NameError, "#{name} isn't a valid variable name"
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
def __get_referenced__
|
52
|
-
@getter.call
|
53
|
-
end; alias ~ __get_referenced__
|
54
|
-
|
55
|
-
def __set_referenced__ (val)
|
56
|
-
@setter.call(val)
|
57
|
-
end; alias =~ __set_referenced__
|
49
|
+
def ___set_referenced___ (val)
|
50
|
+
@setter.call(val)
|
51
|
+
end; alias =~ ___set_referenced___
|
58
52
|
|
59
|
-
|
60
|
-
|
61
|
-
|
53
|
+
def method_missing (id, *args, &block)
|
54
|
+
___get_referenced___.__send__(id, *args, &block)
|
55
|
+
end
|
56
|
+
|
57
|
+
def ___is_a_reference___; true; end
|
58
|
+
end
|
62
59
|
|
63
|
-
|
60
|
+
module Kernel
|
61
|
+
def Reference (*args, &block)
|
62
|
+
if args.empty? && block
|
63
|
+
Reference.local(&block)
|
64
|
+
else
|
65
|
+
Reference[*args]
|
66
|
+
end
|
67
|
+
end
|
64
68
|
end
|
metadata
CHANGED
@@ -1,54 +1,78 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: refr
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.6
|
4
5
|
prerelease:
|
5
|
-
version: 0.0.5
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- meh.
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
date: 2011-12-10 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: blankslate
|
16
|
+
requirement: &7410360 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *7410360
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rake
|
27
|
+
requirement: &7408940 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *7408940
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rspec
|
38
|
+
requirement: &7408360 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *7408360
|
16
47
|
description:
|
17
48
|
email: meh@paranoici.org
|
18
49
|
executables: []
|
19
|
-
|
20
50
|
extensions: []
|
21
|
-
|
22
51
|
extra_rdoc_files: []
|
23
|
-
|
24
|
-
files:
|
52
|
+
files:
|
25
53
|
- lib/refr.rb
|
26
54
|
homepage: http://github.com/meh/refr
|
27
55
|
licenses: []
|
28
|
-
|
29
56
|
post_install_message:
|
30
57
|
rdoc_options: []
|
31
|
-
|
32
|
-
require_paths:
|
58
|
+
require_paths:
|
33
59
|
- lib
|
34
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
35
61
|
none: false
|
36
|
-
requirements:
|
37
|
-
- -
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version:
|
40
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
41
67
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version:
|
68
|
+
requirements:
|
69
|
+
- - ! '>='
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '0'
|
46
72
|
requirements: []
|
47
|
-
|
48
73
|
rubyforge_project:
|
49
|
-
rubygems_version: 1.8.
|
74
|
+
rubygems_version: 1.8.10
|
50
75
|
signing_key:
|
51
76
|
specification_version: 3
|
52
77
|
summary: Simple reference implementation
|
53
78
|
test_files: []
|
54
|
-
|