contextr 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +6 -0
- data/History.txt +6 -0
- data/{README.txt → README.rdoc} +0 -0
- data/Rakefile +38 -121
- data/TODO.taskpaper +2 -0
- data/VERSION.yml +4 -0
- data/autotest/discover.rb +3 -0
- data/autotest/rspec_test.rb +13 -0
- data/benchmark/contextr/bench.rb +91 -0
- data/benchmark/contextr/results_for_different_hashes.txt +31 -0
- data/contextr.gemspec +119 -0
- data/lib/contextr.rb +1 -1
- data/test/lib/literate_maruku_test.rb +4 -1
- data/website/ContextR_euruko_2008.pdf +0 -0
- data/website/index.html +241 -0
- data/website/index.txt +143 -0
- data/website/javascripts/rounded_corners_lite.inc.js +285 -0
- data/website/stylesheets/screen.css +144 -0
- data/website/template.rhtml +53 -0
- metadata +85 -43
- data.tar.gz.sig +0 -0
- data/Manifest.txt +0 -44
- data/lib/contextr/version.rb +0 -9
- data/scripts/txt2html +0 -67
- metadata.gz.sig +0 -0
data/.gitignore
ADDED
data/History.txt
CHANGED
data/{README.txt → README.rdoc}
RENAMED
File without changes
|
data/Rakefile
CHANGED
@@ -1,136 +1,53 @@
|
|
1
|
-
require 'rubygems'
|
2
1
|
require 'rake'
|
3
|
-
require 'rake/clean'
|
4
|
-
require 'rake/testtask'
|
5
|
-
require 'rake/packagetask'
|
6
|
-
require 'rake/gempackagetask'
|
7
2
|
require 'rake/rdoctask'
|
8
|
-
require 'rake/contrib/rubyforgepublisher'
|
9
|
-
require 'fileutils'
|
10
|
-
require 'hoe'
|
11
|
-
begin
|
12
|
-
require 'spec/rake/spectask'
|
13
|
-
rescue LoadError
|
14
|
-
puts 'To use rspec for testing you must install rspec gem:'
|
15
|
-
puts '$ sudo gem install rspec'
|
16
|
-
exit
|
17
|
-
end
|
18
3
|
|
19
|
-
|
20
|
-
require
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
ERROR: No rubyforge config file found: #{@config_file}"
|
36
|
-
Run 'rubyforge setup' to prepare your env for access to Rubyforge
|
37
|
-
- See http://newgem.rubyforge.org/rubyforge.html for more details
|
38
|
-
EOS
|
39
|
-
exit
|
40
|
-
end
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gemspec|
|
7
|
+
gemspec.name = "contextr"
|
8
|
+
gemspec.summary = "Context-oriented programming API for Ruby"
|
9
|
+
gemspec.description = "The goal is to equip Ruby with an API to allow " +
|
10
|
+
"context-oriented programming."
|
11
|
+
gemspec.email = "ruby@schmidtwisser.de"
|
12
|
+
gemspec.homepage = "http://github.com/schmidt/contextr"
|
13
|
+
gemspec.authors = ["Gregor Schmidt"]
|
14
|
+
|
15
|
+
gemspec.add_development_dependency('rake')
|
16
|
+
gemspec.add_development_dependency('markaby')
|
17
|
+
gemspec.add_development_dependency('literate_maruku')
|
18
|
+
gemspec.add_development_dependency('rspec')
|
19
|
+
gemspec.add_development_dependency('jeweler', '>= 1.4.0')
|
41
20
|
end
|
42
|
-
@rubyforge_username ||= @config["username"]
|
43
|
-
end
|
44
|
-
|
45
|
-
RUBYFORGE_PROJECT = 'contextr' # The unix name for your project
|
46
|
-
HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
|
47
|
-
DOWNLOAD_PATH = "http://rubyforge.org/projects/#{RUBYFORGE_PROJECT}"
|
48
|
-
|
49
|
-
NAME = "contextr"
|
50
|
-
REV = nil
|
51
|
-
# UNCOMMENT IF REQUIRED:
|
52
|
-
# REV = `svn info`.each {|line| if line =~ /^Revision:/ then k,v = line.split(': '); break v.chomp; else next; end} rescue nil
|
53
|
-
VERS = ContextR::VERSION::STRING + (REV ? ".#{REV}" : "")
|
54
|
-
CLEAN.include ['**/.*.sw?', '*.gem', '.config', '**/.DS_Store']
|
55
|
-
RDOC_OPTS = ['--quiet', '--title', 'contextr documentation',
|
56
|
-
"--opname", "index.html",
|
57
|
-
"--line-numbers",
|
58
|
-
"--main", "README",
|
59
|
-
"--inline-source"]
|
60
21
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
# Generate all the Rake tasks
|
68
|
-
# Run 'rake -T' to see list of generated tasks (from gem root directory)
|
69
|
-
hoe = Hoe.new(GEM_NAME, VERS) do |p|
|
70
|
-
p.author = AUTHOR
|
71
|
-
p.description = DESCRIPTION
|
72
|
-
p.email = EMAIL
|
73
|
-
p.summary = DESCRIPTION
|
74
|
-
p.url = HOMEPATH
|
75
|
-
p.rubyforge_name = RUBYFORGE_PROJECT if RUBYFORGE_PROJECT
|
76
|
-
p.test_globs = ["test/**/test_*.rb"]
|
77
|
-
p.clean_globs |= CLEAN #An array of file patterns to delete on clean.
|
78
|
-
|
79
|
-
# == Optional
|
80
|
-
p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
|
81
|
-
#p.extra_deps = [] # An array of rubygem dependencies [name, version], e.g. [ ['active_support', '>= 1.3.1'] ]
|
82
|
-
#p.spec_extras = {} # A hash of extra values to set in the gemspec.
|
83
|
-
end
|
84
|
-
|
85
|
-
CHANGES = hoe.paragraphs_of('History.txt', 0..1).join("\n\n")
|
86
|
-
PATH = (RUBYFORGE_PROJECT == GEM_NAME) ? RUBYFORGE_PROJECT : "#{RUBYFORGE_PROJECT}/#{GEM_NAME}"
|
87
|
-
hoe.remote_rdoc_dir = File.join(PATH.gsub(/^#{RUBYFORGE_PROJECT}\/?/,''), 'rdoc')
|
88
|
-
|
89
|
-
desc 'Generate website files'
|
90
|
-
task :website_generate do
|
91
|
-
Dir['website/**/*.txt'].each do |txt|
|
92
|
-
sh %{ ruby scripts/txt2html #{txt} > #{txt.gsub(/txt$/,'html')} }
|
93
|
-
end
|
22
|
+
Jeweler::GemcutterTasks.new
|
23
|
+
rescue LoadError
|
24
|
+
puts "Jeweler not available. Install it with: sudo gem install jeweler"
|
94
25
|
end
|
95
26
|
|
96
|
-
desc '
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
27
|
+
desc 'Generate documentation for the literate_maruku gem.'
|
28
|
+
Rake::RDocTask.new(:doc) do |doc|
|
29
|
+
doc.rdoc_dir = 'doc'
|
30
|
+
doc.title = 'ContextR'
|
31
|
+
doc.options << '--line-numbers' << '--inline-source'
|
32
|
+
doc.rdoc_files.include('README.rdoc')
|
33
|
+
doc.rdoc_files.include('lib/**/*.rb')
|
102
34
|
end
|
103
35
|
|
104
|
-
desc
|
105
|
-
task :
|
106
|
-
|
107
|
-
|
108
|
-
task :deploy => [:check_version, :website, :release] do
|
109
|
-
puts "Remember to create SVN tag:"
|
110
|
-
puts "svn copy svn+ssh://rubyforge.org/var/svn/#{PATH}/trunk " +
|
111
|
-
"svn+ssh://rubyforge.org/var/svn/#{PATH}/tags/contextr-#{VERS} "
|
112
|
-
puts "Suggested comment:"
|
113
|
-
puts "Tagging release #{CHANGES}"
|
36
|
+
desc "Run the tests under test"
|
37
|
+
task :test do
|
38
|
+
require 'rake/runtest'
|
39
|
+
Rake.run_tests 'test/**/test_*.rb'
|
114
40
|
end
|
115
41
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
exit
|
123
|
-
end
|
124
|
-
unless ENV['VERSION'] == VERS
|
125
|
-
puts "Please update your version.rb to match the release version, currently #{VERS}"
|
126
|
-
exit
|
42
|
+
begin
|
43
|
+
require 'spec/rake/spectask'
|
44
|
+
desc "Run the specs under spec"
|
45
|
+
Spec::Rake::SpecTask.new do |t|
|
46
|
+
t.spec_opts = ['--options', "spec/spec.opts"]
|
47
|
+
t.spec_files = FileList['spec/*_spec.rb']
|
127
48
|
end
|
128
|
-
|
129
|
-
|
130
|
-
desc "Run the specs under spec/models"
|
131
|
-
Spec::Rake::SpecTask.new do |t|
|
132
|
-
t.spec_opts = ['--options', "spec/spec.opts"]
|
133
|
-
t.spec_files = FileList['spec/*_spec.rb']
|
49
|
+
rescue LoadError
|
50
|
+
puts "RSpec not available. Install it with: sudo gem install rspec"
|
134
51
|
end
|
135
52
|
|
136
53
|
desc "Run specs and tests by default"
|
data/TODO.taskpaper
ADDED
data/VERSION.yml
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'benchmark'
|
2
|
+
require File.dirname( __FILE__ ) + '/../../lib/contextr'
|
3
|
+
|
4
|
+
class Foo
|
5
|
+
def ordinary
|
6
|
+
true
|
7
|
+
end
|
8
|
+
|
9
|
+
def once
|
10
|
+
true
|
11
|
+
end
|
12
|
+
|
13
|
+
def twice
|
14
|
+
true
|
15
|
+
end
|
16
|
+
|
17
|
+
def wrapped
|
18
|
+
true
|
19
|
+
end
|
20
|
+
|
21
|
+
def full
|
22
|
+
true
|
23
|
+
end
|
24
|
+
|
25
|
+
def claimed
|
26
|
+
true
|
27
|
+
end
|
28
|
+
|
29
|
+
in_layer :once do
|
30
|
+
def once
|
31
|
+
true
|
32
|
+
end
|
33
|
+
def twice
|
34
|
+
true
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
in_layer :two do
|
39
|
+
def twice
|
40
|
+
true
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
f = Foo.new
|
46
|
+
|
47
|
+
n = 100_000
|
48
|
+
Benchmark.bmbm(20) do |x|
|
49
|
+
x.report("Ordinary:") {
|
50
|
+
n.times { f.ordinary }
|
51
|
+
}
|
52
|
+
|
53
|
+
x.report("Once (w/o):") {
|
54
|
+
n.times { f.once }
|
55
|
+
}
|
56
|
+
|
57
|
+
x.report("Once (ctx):") {
|
58
|
+
ContextR.with_layers :one do
|
59
|
+
n.times { f.once }
|
60
|
+
end
|
61
|
+
}
|
62
|
+
|
63
|
+
x.report("Twice (w/o):") {
|
64
|
+
n.times { f.twice }
|
65
|
+
}
|
66
|
+
|
67
|
+
x.report("Twice (ctx):") {
|
68
|
+
ContextR.with_layers :one, :two do
|
69
|
+
n.times { f.twice }
|
70
|
+
end
|
71
|
+
}
|
72
|
+
end
|
73
|
+
|
74
|
+
__END__
|
75
|
+
n = 100_000 (bmbm to warm up the jvm)
|
76
|
+
|
77
|
+
ruby 1.8.6
|
78
|
+
user system total real
|
79
|
+
Ordinary: 0.040000 0.000000 0.040000 ( 0.041294)
|
80
|
+
Once (w/o): 1.030000 0.010000 1.040000 ( 1.043971)
|
81
|
+
Once (ctx): 1.540000 0.000000 1.540000 ( 1.598743)
|
82
|
+
Twice (w/o): 1.030000 0.010000 1.040000 ( 1.055684)
|
83
|
+
Twice (ctx): 2.780000 0.010000 2.790000 ( 2.839568)
|
84
|
+
|
85
|
+
jruby -O -J-server 1.0.2
|
86
|
+
user system total real
|
87
|
+
Ordinary: 0.108000 0.000000 0.108000 ( 0.108000)
|
88
|
+
Once (w/o): 2.336000 0.000000 2.336000 ( 2.335000)
|
89
|
+
Once (ctx): 3.390000 0.000000 3.390000 ( 3.390000)
|
90
|
+
Twice (w/o): 2.439000 0.000000 2.439000 ( 2.439000)
|
91
|
+
Twice (ctx): 5.191000 0.000000 5.191000 ( 5.190000)
|
@@ -0,0 +1,31 @@
|
|
1
|
+
Hash - memory leak
|
2
|
+
Ordinary: 0.040000 0.000000 0.040000 ( 0.042914)
|
3
|
+
Once (w/o): 0.610000 0.000000 0.610000 ( 0.609222)
|
4
|
+
Once (ctx): 1.640000 0.000000 1.640000 ( 1.647269)
|
5
|
+
Twice (w/o): 0.610000 0.000000 0.610000 ( 0.605728)
|
6
|
+
Twice (ctx): 1.850000 0.000000 1.850000 ( 1.861542)
|
7
|
+
Wrapped (w/o): 0.600000 0.010000 0.610000 ( 0.604295)
|
8
|
+
Wrapped (ctx): 2.980000 0.000000 2.980000 ( 2.988616)
|
9
|
+
All wrappers (ctx): 3.890000 0.010000 3.900000 ( 3.915734)
|
10
|
+
|
11
|
+
Without cache
|
12
|
+
Ordinary: 0.040000 0.000000 0.040000 ( 0.040913)
|
13
|
+
Once (w/o): 1.410000 0.010000 1.420000 ( 1.426041)
|
14
|
+
Once (ctx): 2.530000 0.010000 2.540000 ( 2.534582)
|
15
|
+
Twice (w/o): 1.400000 0.000000 1.400000 ( 1.403935)
|
16
|
+
Twice (ctx): 2.730000 0.000000 2.730000 ( 2.749183)
|
17
|
+
Wrapped (w/o): 1.400000 0.000000 1.400000 ( 1.397227)
|
18
|
+
Wrapped (ctx): 4.000000 0.010000 4.010000 ( 4.019783)
|
19
|
+
All wrappers (ctx): 4.770000 0.010000 4.780000 ( 4.790803)
|
20
|
+
|
21
|
+
SimpleWeakHash
|
22
|
+
Ordinary: 0.040000 0.000000 0.040000 ( 0.040132)
|
23
|
+
Once (w/o): 0.940000 0.000000 0.940000 ( 0.947428)
|
24
|
+
Once (ctx): 2.010000 0.010000 2.020000 ( 2.021883)
|
25
|
+
Twice (w/o): 0.950000 0.000000 0.950000 ( 0.952142)
|
26
|
+
Twice (ctx): 2.220000 0.000000 2.220000 ( 2.231346)
|
27
|
+
Wrapped (w/o): 0.950000 0.000000 0.950000 ( 0.948439)
|
28
|
+
Wrapped (ctx): 3.380000 0.010000 3.390000 ( 3.400573)
|
29
|
+
All wrappers (ctx): 4.360000 0.010000 4.370000 ( 4.390844)
|
30
|
+
|
31
|
+
WeakHash is either to slow or produces an infinte loop
|
data/contextr.gemspec
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{contextr}
|
8
|
+
s.version = "1.0.3"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Gregor Schmidt"]
|
12
|
+
s.date = %q{2009-12-03}
|
13
|
+
s.description = %q{The goal is to equip Ruby with an API to allow context-oriented programming.}
|
14
|
+
s.email = %q{ruby@schmidtwisser.de}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE.txt",
|
17
|
+
"README.rdoc"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".gitignore",
|
21
|
+
"GPL.txt",
|
22
|
+
"History.txt",
|
23
|
+
"LICENSE.txt",
|
24
|
+
"MIT.txt",
|
25
|
+
"README.rdoc",
|
26
|
+
"RUBY.txt",
|
27
|
+
"Rakefile",
|
28
|
+
"TODO.taskpaper",
|
29
|
+
"VERSION.yml",
|
30
|
+
"autotest/discover.rb",
|
31
|
+
"autotest/rspec_test.rb",
|
32
|
+
"benchmark/contextr/bench.rb",
|
33
|
+
"benchmark/contextr/results_for_different_hashes.txt",
|
34
|
+
"contextr.gemspec",
|
35
|
+
"examples/README",
|
36
|
+
"examples/employer.rb",
|
37
|
+
"examples/node.rb",
|
38
|
+
"lib/contextr.rb",
|
39
|
+
"lib/contextr/class_methods.rb",
|
40
|
+
"lib/contextr/core_ext.rb",
|
41
|
+
"lib/contextr/core_ext/module.rb",
|
42
|
+
"lib/contextr/core_ext/object.rb",
|
43
|
+
"lib/contextr/event_machine.rb",
|
44
|
+
"lib/contextr/inner_class.rb",
|
45
|
+
"lib/contextr/layer.rb",
|
46
|
+
"lib/contextr/modules/mutex_code.rb",
|
47
|
+
"lib/contextr/modules/unique_id.rb",
|
48
|
+
"lib/contextr/public_api.rb",
|
49
|
+
"lib/ext/active_support_subset.rb",
|
50
|
+
"lib/ext/dynamic.rb",
|
51
|
+
"setup.rb",
|
52
|
+
"spec/contextr_spec.rb",
|
53
|
+
"spec/spec.opts",
|
54
|
+
"spec/spec_helper.rb",
|
55
|
+
"test/class_side.mkd",
|
56
|
+
"test/dynamic_scope.mkd",
|
57
|
+
"test/dynamics.mkd",
|
58
|
+
"test/hello_world.mkd",
|
59
|
+
"test/introduction.mkd",
|
60
|
+
"test/layer_state.mkd",
|
61
|
+
"test/lib/example_test.rb",
|
62
|
+
"test/lib/literate_maruku_test.rb",
|
63
|
+
"test/meta_api.mkd",
|
64
|
+
"test/method_missing.mkd",
|
65
|
+
"test/ordering.mkd",
|
66
|
+
"test/restrictions.mkd",
|
67
|
+
"test/test_contextr.rb",
|
68
|
+
"test/test_helper.rb",
|
69
|
+
"test/test_plain.rb",
|
70
|
+
"website/ContextR_euruko_2008.pdf",
|
71
|
+
"website/index.html",
|
72
|
+
"website/index.txt",
|
73
|
+
"website/javascripts/rounded_corners_lite.inc.js",
|
74
|
+
"website/stylesheets/screen.css",
|
75
|
+
"website/template.rhtml"
|
76
|
+
]
|
77
|
+
s.homepage = %q{http://github.com/schmidt/contextr}
|
78
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
79
|
+
s.require_paths = ["lib"]
|
80
|
+
s.rubygems_version = %q{1.3.5}
|
81
|
+
s.summary = %q{Context-oriented programming API for Ruby}
|
82
|
+
s.test_files = [
|
83
|
+
"spec/contextr_spec.rb",
|
84
|
+
"spec/spec_helper.rb",
|
85
|
+
"test/lib/example_test.rb",
|
86
|
+
"test/lib/literate_maruku_test.rb",
|
87
|
+
"test/test_contextr.rb",
|
88
|
+
"test/test_helper.rb",
|
89
|
+
"test/test_plain.rb",
|
90
|
+
"examples/employer.rb",
|
91
|
+
"examples/node.rb"
|
92
|
+
]
|
93
|
+
|
94
|
+
if s.respond_to? :specification_version then
|
95
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
96
|
+
s.specification_version = 3
|
97
|
+
|
98
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
99
|
+
s.add_development_dependency(%q<rake>, [">= 0"])
|
100
|
+
s.add_development_dependency(%q<markaby>, [">= 0"])
|
101
|
+
s.add_development_dependency(%q<literate_maruku>, [">= 0"])
|
102
|
+
s.add_development_dependency(%q<rspec>, [">= 0"])
|
103
|
+
s.add_development_dependency(%q<jeweler>, [">= 1.4.0"])
|
104
|
+
else
|
105
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
106
|
+
s.add_dependency(%q<markaby>, [">= 0"])
|
107
|
+
s.add_dependency(%q<literate_maruku>, [">= 0"])
|
108
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
109
|
+
s.add_dependency(%q<jeweler>, [">= 1.4.0"])
|
110
|
+
end
|
111
|
+
else
|
112
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
113
|
+
s.add_dependency(%q<markaby>, [">= 0"])
|
114
|
+
s.add_dependency(%q<literate_maruku>, [">= 0"])
|
115
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
116
|
+
s.add_dependency(%q<jeweler>, [">= 1.4.0"])
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|