pervasives 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/README ADDED
@@ -0,0 +1,159 @@
1
+ NAME
2
+
3
+ pervasives.rb
4
+
5
+ SYNOPSIS
6
+
7
+ access to pristine object state. if you don't metaprogram you probably
8
+ don't need it
9
+
10
+ INSTALL
11
+
12
+ gem install pervasives
13
+
14
+ URIS
15
+
16
+ http://rubyforge.org/projects/codeforpeople/
17
+ http://codeforpeople.com/lib/ruby
18
+
19
+ SAMPLES
20
+
21
+ <========< samples/a.rb >========>
22
+
23
+ ~ > cat samples/a.rb
24
+
25
+ #
26
+ # Pervasives allows objects' method to be accessed in a pristine state, even
27
+ # when some effort has been made to derride them
28
+ #
29
+ require 'pervasives'
30
+
31
+ class OpenStruct
32
+ instance_methods.each{|m| undef_method m unless m[%r/__/]}
33
+
34
+ def initialize
35
+ @table = {}
36
+ end
37
+
38
+ def method_missing m, *a, &b
39
+ case m.to_s
40
+ when %r/[=]$/
41
+ @table[m.to_s.delete('=')] = a.shift
42
+ when %r/[?!]$/
43
+ !!@table[m.to_s.delete('?!')]
44
+ else
45
+ @table[m.to_s]
46
+ end
47
+ end
48
+
49
+ def inspect
50
+ @table.inspect
51
+ end
52
+ end
53
+
54
+ os = OpenStruct.new
55
+
56
+ os.object_id = 42
57
+ os.send = 42
58
+ os.instance_eval = 42
59
+
60
+ p os
61
+
62
+ p os.object_id
63
+ p Pervasives.object_id(os)
64
+
65
+ p os.send
66
+ p Pervasives.send(os, "key=", "value")
67
+
68
+ p os.instance_eval
69
+ p Pervasives.instance_eval(os){ @table }
70
+
71
+ ~ > ruby samples/a.rb
72
+
73
+ {"instance_eval"=>42, "send"=>42, "object_id"=>42}
74
+ 42
75
+ -609487514
76
+ 42
77
+ "value"
78
+ 42
79
+ {"instance_eval"=>42, "send"=>42, "key"=>"value", "object_id"=>42}
80
+
81
+
82
+ <========< samples/b.rb >========>
83
+
84
+ ~ > cat samples/b.rb
85
+
86
+ #
87
+ # sometimes it may be more convenient to use a Pervasives::Proxy object
88
+ # insteand of using Pervasives directly
89
+ #
90
+ require 'pervasives'
91
+
92
+ class BlankSlate
93
+ instance_methods.each { |m| undef_method m unless m =~ /^__/ }
94
+
95
+ def object_id() 42 end
96
+ end
97
+
98
+ bs = BlankSlate.new
99
+
100
+ proxy = Pervasives::Proxy.new bs
101
+
102
+ p bs.object_id
103
+ p proxy.object_id
104
+
105
+ ~ > ruby samples/b.rb
106
+
107
+ 42
108
+ -609489100
109
+
110
+
111
+ <========< samples/c.rb >========>
112
+
113
+ ~ > cat samples/c.rb
114
+
115
+ #
116
+ # the special '__' method accesses an object's Pervasives::Proxy
117
+ #
118
+ require 'pervasives'
119
+
120
+ class BlankSlate
121
+ instance_methods.each { |m| undef_method m unless m =~ /^__/ }
122
+ def object_id() 42 end
123
+ end
124
+
125
+ bs = BlankSlate.new
126
+
127
+ p bs.object_id
128
+ p __(bs){ object_id }
129
+
130
+ ~ > ruby samples/c.rb
131
+
132
+ 42
133
+ -609486982
134
+
135
+
136
+ <========< samples/d.rb >========>
137
+
138
+ ~ > cat samples/d.rb
139
+
140
+ #
141
+ # it all works for classes too
142
+ #
143
+ require 'pervasives'
144
+
145
+ class C
146
+ def self.new() raise end
147
+ def inspect() 42 end
148
+ end
149
+
150
+ p( Pervasives.new(C) )
151
+ p( Pervasives::Proxy.new(C).new )
152
+ p( __(C).new )
153
+
154
+ ~ > ruby samples/d.rb
155
+
156
+ 42
157
+ 42
158
+ 42
159
+
@@ -0,0 +1,21 @@
1
+ NAME
2
+
3
+ pervasives.rb
4
+
5
+ SYNOPSIS
6
+
7
+ access to pristine object state. if you don't metaprogram you probably
8
+ don't need it
9
+
10
+ INSTALL
11
+
12
+ gem install pervasives
13
+
14
+ URIS
15
+
16
+ http://rubyforge.org/projects/codeforpeople/
17
+ http://codeforpeople.com/lib/ruby
18
+
19
+ SAMPLES
20
+
21
+ @samples
@@ -0,0 +1,23 @@
1
+ lib, version = File::basename(File::dirname(File::expand_path(__FILE__))).split %r/-/, 2
2
+
3
+ require 'rubygems'
4
+
5
+ Gem::Specification::new do |spec|
6
+ spec.name = lib
7
+ spec.version = version
8
+ spec.platform = Gem::Platform::RUBY
9
+ spec.summary = lib
10
+
11
+ spec.files = Dir::glob "**/**"
12
+ spec.executables = Dir::glob("bin/*").map{|exe| File::basename exe}
13
+
14
+ spec.require_path = "lib"
15
+ spec.autorequire = lib
16
+
17
+ spec.has_rdoc = File::exist? "doc"
18
+ spec.test_suite_file = "test/#{ lib }.rb" if File::directory? "test"
19
+
20
+ spec.author = "Ara T. Howard"
21
+ spec.email = "ara.t.howard@noaa.gov"
22
+ spec.homepage = "http://codeforpeople.com/lib/ruby/#{ lib }/"
23
+ end
@@ -0,0 +1,32 @@
1
+ require 'pathname'
2
+
3
+ $VERBOSE=nil
4
+
5
+ def indent s, n = 2
6
+ ws = ' ' * n
7
+ s.gsub %r/^/, ws
8
+ end
9
+
10
+ template = IO::read 'README.tmpl'
11
+
12
+ samples = ''
13
+ prompt = '~ > '
14
+
15
+ Dir['sample*/*'].sort.each do |sample|
16
+ samples << "\n" << " <========< #{ sample } >========>" << "\n\n"
17
+
18
+ cmd = "cat #{ sample }"
19
+ samples << indent(prompt + cmd, 2) << "\n\n"
20
+ samples << indent(`#{ cmd }`, 4) << "\n"
21
+
22
+ cmd = "ruby #{ sample }"
23
+ samples << indent(prompt + cmd, 2) << "\n\n"
24
+
25
+ cmd = "ruby -Ilib #{ sample }"
26
+ samples << indent(`#{ cmd } 2>&1`, 4) << "\n"
27
+ end
28
+
29
+ #samples.gsub! %r/^/, ' '
30
+
31
+ readme = template.gsub %r/^\s*@samples\s*$/, samples
32
+ print readme
@@ -0,0 +1,206 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rbconfig'
3
+ require 'find'
4
+ require 'ftools'
5
+ require 'tempfile'
6
+ include Config
7
+
8
+ LIBDIR = "lib"
9
+ LIBDIR_MODE = 0644
10
+
11
+ BINDIR = "bin"
12
+ BINDIR_MODE = 0755
13
+
14
+
15
+ $srcdir = CONFIG["srcdir"]
16
+ $version = CONFIG["MAJOR"]+"."+CONFIG["MINOR"]
17
+ $libdir = File.join(CONFIG["libdir"], "ruby", $version)
18
+ $archdir = File.join($libdir, CONFIG["arch"])
19
+ $site_libdir = $:.find {|x| x =~ /site_ruby$/}
20
+ $bindir = CONFIG["bindir"] || CONFIG['BINDIR']
21
+ $ruby_install_name = CONFIG['ruby_install_name'] || CONFIG['RUBY_INSTALL_NAME'] || 'ruby'
22
+ $ruby_ext = CONFIG['EXEEXT'] || ''
23
+ $ruby = File.join($bindir, ($ruby_install_name + $ruby_ext))
24
+
25
+ if !$site_libdir
26
+ $site_libdir = File.join($libdir, "site_ruby")
27
+ elsif $site_libdir !~ %r/#{Regexp.quote($version)}/
28
+ $site_libdir = File.join($site_libdir, $version)
29
+ end
30
+
31
+ def install_rb(srcdir=nil, destdir=nil, mode=nil, bin=nil)
32
+ #{{{
33
+ path = []
34
+ dir = []
35
+ Find.find(srcdir) do |f|
36
+ next unless FileTest.file?(f)
37
+ next if (f = f[srcdir.length+1..-1]) == nil
38
+ next if (/CVS$/ =~ File.dirname(f))
39
+ next if f =~ %r/\.lnk/
40
+ path.push f
41
+ dir |= [File.dirname(f)]
42
+ end
43
+ for f in dir
44
+ next if f == "."
45
+ next if f == "CVS"
46
+ File::makedirs(File.join(destdir, f))
47
+ end
48
+ for f in path
49
+ next if (/\~$/ =~ f)
50
+ next if (/^\./ =~ File.basename(f))
51
+ unless bin
52
+ File::install(File.join(srcdir, f), File.join(destdir, f), mode, true)
53
+ else
54
+ from = File.join(srcdir, f)
55
+ to = File.join(destdir, f)
56
+ shebangify(from) do |sf|
57
+ $deferr.print from, " -> ", File::catname(from, to), "\n"
58
+ $deferr.printf "chmod %04o %s\n", mode, to
59
+ File::install(sf, to, mode, false)
60
+ end
61
+ end
62
+ end
63
+ #}}}
64
+ end
65
+ def shebangify f
66
+ #{{{
67
+ open(f) do |fd|
68
+ buf = fd.read 42
69
+ if buf =~ %r/^\s*#\s*!.*ruby/o
70
+ ftmp = Tempfile::new("#{ $$ }_#{ File::basename(f) }")
71
+ begin
72
+ fd.rewind
73
+ ftmp.puts "#!#{ $ruby }"
74
+ while((buf = fd.read(8192)))
75
+ ftmp.write buf
76
+ end
77
+ ftmp.close
78
+ yield ftmp.path
79
+ ensure
80
+ ftmp.close!
81
+ end
82
+ else
83
+ yield f
84
+ end
85
+ end
86
+ #}}}
87
+ end
88
+ def ARGV.switch
89
+ #{{{
90
+ return nil if self.empty?
91
+ arg = self.shift
92
+ return nil if arg == '--'
93
+ if arg =~ /^-(.)(.*)/
94
+ return arg if $1 == '-'
95
+ raise 'unknown switch "-"' if $2.index('-')
96
+ self.unshift "-#{$2}" if $2.size > 0
97
+ "-#{$1}"
98
+ else
99
+ self.unshift arg
100
+ nil
101
+ end
102
+ #}}}
103
+ end
104
+ def ARGV.req_arg
105
+ #{{{
106
+ self.shift || raise('missing argument')
107
+ #}}}
108
+ end
109
+ def linkify d, linked = []
110
+ #--{{{
111
+ if test ?d, d
112
+ versioned = Dir[ File::join(d, "*-[0-9].[0-9].[0-9].rb") ]
113
+ versioned.each do |v|
114
+ src, dst = v, v.gsub(%r/\-[\d\.]+\.rb$/, '.rb')
115
+ lnk = nil
116
+ begin
117
+ if test ?l, dst
118
+ lnk = "#{ dst }.lnk"
119
+ puts "#{ dst } -> #{ lnk }"
120
+ File::rename dst, lnk
121
+ end
122
+ unless test ?e, dst
123
+ puts "#{ src } -> #{ dst }"
124
+ File::copy src, dst
125
+ linked << dst
126
+ end
127
+ ensure
128
+ if lnk
129
+ at_exit do
130
+ puts "#{ lnk } -> #{ dst }"
131
+ File::rename lnk, dst
132
+ end
133
+ end
134
+ end
135
+ end
136
+ end
137
+ linked
138
+ #--}}}
139
+ end
140
+
141
+
142
+ #
143
+ # main program
144
+ #
145
+
146
+ libdir = $site_libdir
147
+ bindir = $bindir
148
+ no_linkify = false
149
+ linked = nil
150
+ help = false
151
+
152
+ usage = <<-usage
153
+ #{ File::basename $0 }
154
+ -d, --destdir <destdir>
155
+ -l, --libdir <libdir>
156
+ -b, --bindir <bindir>
157
+ -r, --ruby <ruby>
158
+ -n, --no_linkify
159
+ -s, --sudo
160
+ -h, --help
161
+ usage
162
+
163
+ begin
164
+ while switch = ARGV.switch
165
+ case switch
166
+ when '-d', '--destdir'
167
+ libdir = ARGV.req_arg
168
+ when '-l', '--libdir'
169
+ libdir = ARGV.req_arg
170
+ when '-b', '--bindir'
171
+ bindir = ARGV.req_arg
172
+ when '-r', '--ruby'
173
+ $ruby = ARGV.req_arg
174
+ when '-n', '--no_linkify'
175
+ no_linkify = true
176
+ when '-s', '--sudo'
177
+ sudo = 'sudo'
178
+ when '-h', '--help'
179
+ help = true
180
+ else
181
+ raise "unknown switch #{switch.dump}"
182
+ end
183
+ end
184
+ rescue
185
+ STDERR.puts $!.to_s
186
+ STDERR.puts usage
187
+ exit 1
188
+ end
189
+
190
+ if help
191
+ STDOUT.puts usage
192
+ exit
193
+ end
194
+
195
+ unless no_linkify
196
+ linked = linkify('lib') + linkify('bin')
197
+ end
198
+
199
+ system "#{ $ruby } extconf.rb && make && #{ sudo } make install" if test(?s, 'extconf.rb')
200
+
201
+ install_rb(LIBDIR, libdir, LIBDIR_MODE)
202
+ install_rb(BINDIR, bindir, BINDIR_MODE, bin=true)
203
+
204
+ if linked
205
+ linked.each{|path| File::rm_f path}
206
+ end
@@ -0,0 +1,61 @@
1
+ class Pervasives
2
+ VERSION = "0.0.1"
3
+
4
+ METHODS = Hash.new{|h,k| h[k] = {}}
5
+
6
+ [Module, Class, Object].each do |type|
7
+ type.instance_methods.each do |mname|
8
+ m = type.instance_method mname
9
+ METHODS[type][mname.to_s] = m
10
+ end
11
+ end
12
+
13
+ class << self
14
+ mnames = METHODS[Module].keys + METHODS[Class].keys + METHODS[Object].keys
15
+
16
+ mnames.each do |mname|
17
+ next if mname['__']
18
+ module_eval <<-code
19
+ def #{ mname } obj, *argv, &block
20
+ search_path = case obj
21
+ when Class
22
+ [Class, Module, Object]
23
+ when Module
24
+ [Module, Object]
25
+ else
26
+ [Object]
27
+ end
28
+ type = search_path.detect{|type| METHODS[type]['#{ mname }']}
29
+ m = METHODS[type]['#{ mname }']
30
+ m.bind( obj ).call( *argv, &block )
31
+ end
32
+ code
33
+ end
34
+ end
35
+
36
+ class Proxy
37
+ alias_method "__class__", "class"
38
+ alias_method "__instance_eval__", "instance_eval"
39
+ instance_methods.each{|m| undef_method m unless m[%r/__/]}
40
+ def initialize obj
41
+ @obj = obj
42
+ end
43
+ def method_missing m, *a, &b
44
+ Pervasives.__send__ m, @obj, *a, &b
45
+ end
46
+ end
47
+ end
48
+
49
+
50
+
51
+
52
+ module Kernel
53
+ def __ obj, &b
54
+ proxy = Pervasives::Proxy.new obj
55
+ b ? proxy.__instance_eval__(&b) : proxy
56
+ end
57
+ def __! obj, &b
58
+ proxy = Pervasives::Proxy.new obj
59
+ b ? proxy.__instance_eval__(&b) : proxy
60
+ end
61
+ end
@@ -0,0 +1,61 @@
1
+ class Pervasives
2
+ VERSION = "0.0.1"
3
+
4
+ METHODS = Hash.new{|h,k| h[k] = {}}
5
+
6
+ [Module, Class, Object].each do |type|
7
+ type.instance_methods.each do |mname|
8
+ m = type.instance_method mname
9
+ METHODS[type][mname.to_s] = m
10
+ end
11
+ end
12
+
13
+ class << self
14
+ mnames = METHODS[Module].keys + METHODS[Class].keys + METHODS[Object].keys
15
+
16
+ mnames.each do |mname|
17
+ next if mname['__']
18
+ module_eval <<-code
19
+ def #{ mname } obj, *argv, &block
20
+ search_path = case obj
21
+ when Class
22
+ [Class, Module, Object]
23
+ when Module
24
+ [Module, Object]
25
+ else
26
+ [Object]
27
+ end
28
+ type = search_path.detect{|type| METHODS[type]['#{ mname }']}
29
+ m = METHODS[type]['#{ mname }']
30
+ m.bind( obj ).call( *argv, &block )
31
+ end
32
+ code
33
+ end
34
+ end
35
+
36
+ class Proxy
37
+ alias_method "__class__", "class"
38
+ alias_method "__instance_eval__", "instance_eval"
39
+ instance_methods.each{|m| undef_method m unless m[%r/__/]}
40
+ def initialize obj
41
+ @obj = obj
42
+ end
43
+ def method_missing m, *a, &b
44
+ Pervasives.__send__ m, @obj, *a, &b
45
+ end
46
+ end
47
+ end
48
+
49
+
50
+
51
+
52
+ module Kernel
53
+ def __ obj, &b
54
+ proxy = Pervasives::Proxy.new obj
55
+ b ? proxy.__instance_eval__(&b) : proxy
56
+ end
57
+ def __! obj, &b
58
+ proxy = Pervasives::Proxy.new obj
59
+ b ? proxy.__instance_eval__(&b) : proxy
60
+ end
61
+ end
@@ -0,0 +1,45 @@
1
+ #
2
+ # Pervasives allows objects' method to be accessed in a pristine state, even
3
+ # when some effort has been made to derride them
4
+ #
5
+ require 'pervasives'
6
+
7
+ class OpenStruct
8
+ instance_methods.each{|m| undef_method m unless m[%r/__/]}
9
+
10
+ def initialize
11
+ @table = {}
12
+ end
13
+
14
+ def method_missing m, *a, &b
15
+ case m.to_s
16
+ when %r/[=]$/
17
+ @table[m.to_s.delete('=')] = a.shift
18
+ when %r/[?!]$/
19
+ !!@table[m.to_s.delete('?!')]
20
+ else
21
+ @table[m.to_s]
22
+ end
23
+ end
24
+
25
+ def inspect
26
+ @table.inspect
27
+ end
28
+ end
29
+
30
+ os = OpenStruct.new
31
+
32
+ os.object_id = 42
33
+ os.send = 42
34
+ os.instance_eval = 42
35
+
36
+ p os
37
+
38
+ p os.object_id
39
+ p Pervasives.object_id(os)
40
+
41
+ p os.send
42
+ p Pervasives.send(os, "key=", "value")
43
+
44
+ p os.instance_eval
45
+ p Pervasives.instance_eval(os){ @table }
@@ -0,0 +1,18 @@
1
+ #
2
+ # sometimes it may be more convenient to use a Pervasives::Proxy object
3
+ # insteand of using Pervasives directly
4
+ #
5
+ require 'pervasives'
6
+
7
+ class BlankSlate
8
+ instance_methods.each { |m| undef_method m unless m =~ /^__/ }
9
+
10
+ def object_id() 42 end
11
+ end
12
+
13
+ bs = BlankSlate.new
14
+
15
+ proxy = Pervasives::Proxy.new bs
16
+
17
+ p bs.object_id
18
+ p proxy.object_id
@@ -0,0 +1,14 @@
1
+ #
2
+ # the special '__' method accesses an object's Pervasives::Proxy
3
+ #
4
+ require 'pervasives'
5
+
6
+ class BlankSlate
7
+ instance_methods.each { |m| undef_method m unless m =~ /^__/ }
8
+ def object_id() 42 end
9
+ end
10
+
11
+ bs = BlankSlate.new
12
+
13
+ p bs.object_id
14
+ p __(bs){ object_id }
@@ -0,0 +1,13 @@
1
+ #
2
+ # it all works for classes too
3
+ #
4
+ require 'pervasives'
5
+
6
+ class C
7
+ def self.new() raise end
8
+ def inspect() 42 end
9
+ end
10
+
11
+ p( Pervasives.new(C) )
12
+ p( Pervasives::Proxy.new(C).new )
13
+ p( __(C).new )
@@ -0,0 +1,81 @@
1
+ %w( . ./lib ../lib ).each{|lib| $:.unshift lib}
2
+ require 'pervasives'
3
+ require 'test/unit'
4
+
5
+ class Pervasives::Test < Test::Unit::TestCase
6
+
7
+ def test_a_0
8
+ klass = Class.new
9
+ obj = nil
10
+
11
+ assert_nothing_raised{ obj = Pervasives.new klass }
12
+
13
+ assert_equal klass, obj.class
14
+
15
+ assert_nothing_raised{ Pervasives.inspect obj }
16
+ assert_nothing_raised{ Pervasives.send obj, :inspect }
17
+ end
18
+
19
+ def test_b_0
20
+ klass = Class.new
21
+ obj = nil
22
+
23
+ klass.module_eval{ def self.new() raise end }
24
+ assert_nothing_raised{ obj = Pervasives.new klass }
25
+
26
+ value = nil
27
+ assert_nothing_raised{ value = Pervasives.class obj }
28
+ assert_equal klass, value
29
+
30
+ klass.module_eval{ def class() raise end}
31
+ assert_nothing_raised{ value = Pervasives.class obj }
32
+ assert_equal klass, value
33
+
34
+ klass.module_eval{ def to_s() raise end}
35
+ assert_nothing_raised{ Pervasives.to_s obj }
36
+ end
37
+
38
+ def test_c_0
39
+ klass = Class.new
40
+ obj = nil
41
+ proxy = nil
42
+
43
+
44
+ instance_method_list = nil
45
+ klass.module_eval{
46
+ instance_method_list = instance_methods
47
+ instance_methods.each{|m| define_method(m){ raise }}
48
+ }
49
+
50
+ assert_nothing_raised{ obj = Pervasives.new klass }
51
+ assert_nothing_raised{ proxy = Pervasives::Proxy.new obj }
52
+
53
+ assert_nothing_raised{ proxy.to_s }
54
+ assert_equal proxy.to_s, Pervasives.to_s(obj)
55
+ assert_equal proxy.object_id, Pervasives.object_id(obj)
56
+ end
57
+
58
+ def test_d_0
59
+ klass = Class.new
60
+ obj = nil
61
+ proxy = nil
62
+
63
+ klass.module_eval{
64
+ instance_methods.each{|m| define_method(m){ raise }}
65
+ }
66
+
67
+ assert_nothing_raised{ obj = Pervasives.new klass }
68
+ assert_nothing_raised{ proxy = Pervasives::Proxy.new obj }
69
+
70
+ assert_nothing_raised{ __(obj) }
71
+
72
+ assert_equal __(obj).__class__, Pervasives::Proxy
73
+
74
+ assert_nothing_raised{ __(obj){ to_s } }
75
+ assert_equal __(obj){ to_s }, proxy.to_s
76
+
77
+ assert_nothing_raised{ __!(obj){ object_id } }
78
+ assert_equal __!(obj){ object_id }, proxy.object_id
79
+ end
80
+
81
+ end
metadata ADDED
@@ -0,0 +1,54 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.8.11
3
+ specification_version: 1
4
+ name: pervasives
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.0.1
7
+ date: 2007-01-05 00:00:00.000000 -07:00
8
+ summary: pervasives
9
+ require_paths:
10
+ - lib
11
+ email: ara.t.howard@noaa.gov
12
+ homepage: http://codeforpeople.com/lib/ruby/pervasives/
13
+ rubyforge_project:
14
+ description:
15
+ autorequire: pervasives
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: false
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ -
22
+ - ">"
23
+ - !ruby/object:Gem::Version
24
+ version: 0.0.0
25
+ version:
26
+ platform: ruby
27
+ signing_key:
28
+ cert_chain:
29
+ authors:
30
+ - Ara T. Howard
31
+ files:
32
+ - lib
33
+ - test
34
+ - gemspec.rb
35
+ - install.rb
36
+ - samples
37
+ - gen_readme.rb
38
+ - README
39
+ - README.tmpl
40
+ - lib/pervasives-0.0.1.rb
41
+ - lib/pervasives.rb
42
+ - test/pervasives.rb
43
+ - samples/a.rb
44
+ - samples/b.rb
45
+ - samples/c.rb
46
+ - samples/d.rb
47
+ test_files:
48
+ - test/pervasives.rb
49
+ rdoc_options: []
50
+ extra_rdoc_files: []
51
+ executables: []
52
+ extensions: []
53
+ requirements: []
54
+ dependencies: []