monkey-lib 0.4.1 → 0.4.2
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/monkey/ext.rb +11 -1
- data/lib/monkey/ext/enumerable.rb +20 -0
- data/lib/monkey/ext/pathname.rb +3 -1
- data/spec/monkey/ext/enumerable_spec.rb +28 -0
- metadata +14 -4
data/lib/monkey/ext.rb
CHANGED
@@ -18,7 +18,6 @@ module Monkey
|
|
18
18
|
klass.send :include, self
|
19
19
|
self::ClassMethods.extend ClassDsl
|
20
20
|
self::ClassMethods.core_class core_class
|
21
|
-
klass.extend self::ClassMethods
|
22
21
|
@core_class.class_eval <<-EOS
|
23
22
|
def method_missing(meth, *args, &blk)
|
24
23
|
return super if Monkey::Backend.setup?
|
@@ -26,10 +25,21 @@ module Monkey
|
|
26
25
|
__send__(meth, *args, &blk)
|
27
26
|
end
|
28
27
|
EOS
|
28
|
+
unless klass.is_a? Class
|
29
|
+
ObjectSpace.each_object(Module) do |mod|
|
30
|
+
next unless mod.ancestors.include? klass and not mod.ancestors.include? self
|
31
|
+
mod.send :include, klass
|
32
|
+
end
|
33
|
+
end
|
29
34
|
end
|
30
35
|
return @core_class
|
31
36
|
end
|
32
37
|
|
38
|
+
def included(klass)
|
39
|
+
klass.extend self::ClassMethods
|
40
|
+
super
|
41
|
+
end
|
42
|
+
|
33
43
|
def rename_core_method(old_name, new_name)
|
34
44
|
core_class.send :undef_method, alias_core_method(old_name, new_name)
|
35
45
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Monkey
|
2
|
+
module Ext
|
3
|
+
module Enumerable
|
4
|
+
def construct(obj)
|
5
|
+
enum_for :construct, obj unless block_given? or !respond_to? :enum_for
|
6
|
+
inject(obj) { |a,v| a.tap { yield(a, v) } }
|
7
|
+
end
|
8
|
+
|
9
|
+
def construct_hash(default = {})
|
10
|
+
enum_for :construct_hash unless block_given? or !respond_to? :enum_for
|
11
|
+
construct(default.to_hash.dup) do |h,v|
|
12
|
+
result = yield(v)
|
13
|
+
result = [result, nil] unless result.is_a? Enumerable
|
14
|
+
result = [result] unless result.respond_to? :to_ary
|
15
|
+
h.merge! Hash[*result]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/monkey/ext/pathname.rb
CHANGED
@@ -0,0 +1,28 @@
|
|
1
|
+
require __FILE__.sub(%r{monkey/.*$}, "spec_helper")
|
2
|
+
|
3
|
+
describe Monkey::Ext::Enumerable do
|
4
|
+
describe :construct do
|
5
|
+
it "always returns the initial object" do
|
6
|
+
obj = Object.new
|
7
|
+
(1..100).construct(obj) { "not obj" }.should == obj
|
8
|
+
end
|
9
|
+
|
10
|
+
it "allows modifying that object" do
|
11
|
+
("a".."c").construct("result: ") { |a,v| a << v }.should == "result: abc"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe :construct_hash do
|
16
|
+
it "constructs a hash from given hashes" do
|
17
|
+
("a".."b").construct_hash { |v| { v => v } }.should == { "a" => "a", "b" => "b" }
|
18
|
+
end
|
19
|
+
|
20
|
+
it "constructs a hash from given arrays" do
|
21
|
+
("a".."b").construct_hash { |v| [v, v] }.should == { "a" => "a", "b" => "b" }
|
22
|
+
end
|
23
|
+
|
24
|
+
it "takes an initial hash" do
|
25
|
+
["a"].construct_hash("b" => "b") { |v| [v, v] }.should == { "a" => "a", "b" => "b" }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: monkey-lib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 11
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
8
|
- 4
|
8
|
-
-
|
9
|
-
version: 0.4.
|
9
|
+
- 2
|
10
|
+
version: 0.4.2
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Konstantin Haase
|
@@ -14,16 +15,18 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2010-
|
18
|
+
date: 2010-05-31 00:00:00 +02:00
|
18
19
|
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
22
|
name: backports
|
22
23
|
prerelease: false
|
23
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
24
26
|
requirements:
|
25
27
|
- - ">="
|
26
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
27
30
|
segments:
|
28
31
|
- 0
|
29
32
|
version: "0"
|
@@ -50,6 +53,7 @@ extra_rdoc_files:
|
|
50
53
|
- lib/monkey/backend.rb
|
51
54
|
- lib/monkey/engine.rb
|
52
55
|
- lib/monkey/ext/array.rb
|
56
|
+
- lib/monkey/ext/enumerable.rb
|
53
57
|
- lib/monkey/ext/file.rb
|
54
58
|
- lib/monkey/ext/module.rb
|
55
59
|
- lib/monkey/ext/object.rb
|
@@ -76,6 +80,7 @@ files:
|
|
76
80
|
- lib/monkey/backend.rb
|
77
81
|
- lib/monkey/engine.rb
|
78
82
|
- lib/monkey/ext/array.rb
|
83
|
+
- lib/monkey/ext/enumerable.rb
|
79
84
|
- lib/monkey/ext/file.rb
|
80
85
|
- lib/monkey/ext/module.rb
|
81
86
|
- lib/monkey/ext/object.rb
|
@@ -89,6 +94,7 @@ files:
|
|
89
94
|
- spec/monkey/backend_spec.rb
|
90
95
|
- spec/monkey/engine_spec.rb
|
91
96
|
- spec/monkey/ext/array_spec.rb
|
97
|
+
- spec/monkey/ext/enumerable_spec.rb
|
92
98
|
- spec/monkey/ext/module_spec.rb
|
93
99
|
- spec/monkey/ext/object_spec.rb
|
94
100
|
- spec/monkey/ext/pathname_spec.rb
|
@@ -106,23 +112,27 @@ rdoc_options: []
|
|
106
112
|
require_paths:
|
107
113
|
- lib
|
108
114
|
required_ruby_version: !ruby/object:Gem::Requirement
|
115
|
+
none: false
|
109
116
|
requirements:
|
110
117
|
- - ">="
|
111
118
|
- !ruby/object:Gem::Version
|
119
|
+
hash: 3
|
112
120
|
segments:
|
113
121
|
- 0
|
114
122
|
version: "0"
|
115
123
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
124
|
+
none: false
|
116
125
|
requirements:
|
117
126
|
- - ">="
|
118
127
|
- !ruby/object:Gem::Version
|
128
|
+
hash: 3
|
119
129
|
segments:
|
120
130
|
- 0
|
121
131
|
version: "0"
|
122
132
|
requirements: []
|
123
133
|
|
124
134
|
rubyforge_project:
|
125
|
-
rubygems_version: 1.3.
|
135
|
+
rubygems_version: 1.3.7
|
126
136
|
signing_key:
|
127
137
|
specification_version: 3
|
128
138
|
summary: Making ruby extension frameworks pluggable.
|