metadef 0.0.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/lib/metadef/meta_def.rb +70 -0
- data/lib/metadef/version.rb +3 -0
- data/lib/metadef.rb +1 -0
- metadata +70 -0
@@ -0,0 +1,70 @@
|
|
1
|
+
module MetaDef
|
2
|
+
def meta_def
|
3
|
+
@meta_def ||= Def.build self
|
4
|
+
end
|
5
|
+
|
6
|
+
def class_def
|
7
|
+
@class_def ||= ClassDef.build self
|
8
|
+
end
|
9
|
+
|
10
|
+
class Def
|
11
|
+
attr_reader :metaclass
|
12
|
+
attr_reader :real_class
|
13
|
+
|
14
|
+
def initialize(metaclass)
|
15
|
+
@metaclass = metaclass
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.build(obj)
|
19
|
+
new (obj.instance_eval("class << self; self; end"))
|
20
|
+
end
|
21
|
+
|
22
|
+
def method(name, &block)
|
23
|
+
metaclass.send :define_method, name, block
|
24
|
+
end
|
25
|
+
|
26
|
+
def reader(name)
|
27
|
+
method name do
|
28
|
+
instance_variable_get("@#{name}")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def writer(name)
|
33
|
+
method "#{name}=" do |value|
|
34
|
+
instance_variable_set "@#{name}", value
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def accessor(name)
|
39
|
+
reader name
|
40
|
+
writer name
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
class ClassDef
|
45
|
+
attr_reader :real_class
|
46
|
+
|
47
|
+
def initialize(real_class)
|
48
|
+
@real_class = real_class
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.build(obj)
|
52
|
+
new obj.class
|
53
|
+
end
|
54
|
+
|
55
|
+
def method(name, &block)
|
56
|
+
real_class.send :define_method, name, block
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
module Accessors
|
61
|
+
def accessors(options)
|
62
|
+
raise 'MetaDef::Accessors depends on MetaDef. Include MetaDef along with MetaDef::Accessors.' unless respond_to? :meta_def
|
63
|
+
|
64
|
+
options.each do |name, value|
|
65
|
+
instance_variable_set "@#{name}", value
|
66
|
+
meta_def.accessor name
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/lib/metadef.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'metadef/meta_def'
|
metadata
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: metadef
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 31
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 0
|
10
|
+
version: 0.0.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Scott Bellware
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-12-20 00:00:00 -06:00
|
19
|
+
default_executable:
|
20
|
+
dependencies: []
|
21
|
+
|
22
|
+
description:
|
23
|
+
email:
|
24
|
+
- opensource@ampgt.com
|
25
|
+
executables: []
|
26
|
+
|
27
|
+
extensions: []
|
28
|
+
|
29
|
+
extra_rdoc_files: []
|
30
|
+
|
31
|
+
files:
|
32
|
+
- lib/metadef/meta_def.rb
|
33
|
+
- lib/metadef/version.rb
|
34
|
+
- lib/metadef.rb
|
35
|
+
has_rdoc: true
|
36
|
+
homepage:
|
37
|
+
licenses: []
|
38
|
+
|
39
|
+
post_install_message:
|
40
|
+
rdoc_options: []
|
41
|
+
|
42
|
+
require_paths:
|
43
|
+
- lib
|
44
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
45
|
+
none: false
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
hash: 3
|
50
|
+
segments:
|
51
|
+
- 0
|
52
|
+
version: "0"
|
53
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
hash: 3
|
59
|
+
segments:
|
60
|
+
- 0
|
61
|
+
version: "0"
|
62
|
+
requirements: []
|
63
|
+
|
64
|
+
rubyforge_project:
|
65
|
+
rubygems_version: 1.3.7
|
66
|
+
signing_key:
|
67
|
+
specification_version: 3
|
68
|
+
summary: Ruby Metaprogramming Support
|
69
|
+
test_files: []
|
70
|
+
|