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.
@@ -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
+