metadef 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -0,0 +1,3 @@
1
+ module MetaDef
2
+ VERSION = "0.0.0" unless defined?(::MetaDef::VERSION)
3
+ 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
+