ffi-tk 2009.11.29
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/CHANGELOG +748 -0
- data/MANIFEST +188 -0
- data/README.md +85 -0
- data/Rakefile +47 -0
- data/TODO.md +62 -0
- data/bin/rwish +33 -0
- data/doc/MIT_LICENSE +18 -0
- data/doc/TCL_LICENSE +39 -0
- data/example/choose_color.rb +22 -0
- data/example/choose_directory.rb +22 -0
- data/example/dialog.rb +37 -0
- data/example/hello.rb +11 -0
- data/example/message_box.rb +26 -0
- data/example/option_menu.rb +17 -0
- data/example/popup.rb +24 -0
- data/example/set_palette.rb +32 -0
- data/example/text.rb +47 -0
- data/example/tile/kroc_demo_small.rb +123 -0
- data/example/tile/kroc_rb_demo.rb +135 -0
- data/example/tile/notebook.rb +48 -0
- data/example/tile/theme_hello.rb +38 -0
- data/example/tile/treeview.rb +71 -0
- data/example/various.rb +25 -0
- data/example/wait.rb +16 -0
- data/ffi-tk.gemspec +33 -0
- data/lib/ffi-tk.rb +76 -0
- data/lib/ffi-tk/command.rb +39 -0
- data/lib/ffi-tk/command/after.rb +36 -0
- data/lib/ffi-tk/command/bell.rb +34 -0
- data/lib/ffi-tk/command/bind.rb +11 -0
- data/lib/ffi-tk/command/bindtags.rb +69 -0
- data/lib/ffi-tk/command/cget.rb +92 -0
- data/lib/ffi-tk/command/choose_color.rb +29 -0
- data/lib/ffi-tk/command/choose_directory.rb +45 -0
- data/lib/ffi-tk/command/clipboard.rb +102 -0
- data/lib/ffi-tk/command/configure.rb +88 -0
- data/lib/ffi-tk/command/destroy.rb +12 -0
- data/lib/ffi-tk/command/dialog.rb +54 -0
- data/lib/ffi-tk/command/event.rb +79 -0
- data/lib/ffi-tk/command/focus.rb +70 -0
- data/lib/ffi-tk/command/font.rb +124 -0
- data/lib/ffi-tk/command/get_open_file.rb +85 -0
- data/lib/ffi-tk/command/get_save_file.rb +83 -0
- data/lib/ffi-tk/command/grab.rb +141 -0
- data/lib/ffi-tk/command/grid.rb +246 -0
- data/lib/ffi-tk/command/image.rb +79 -0
- data/lib/ffi-tk/command/lower.rb +23 -0
- data/lib/ffi-tk/command/message_box.rb +65 -0
- data/lib/ffi-tk/command/option_menu.rb +8 -0
- data/lib/ffi-tk/command/pack.rb +99 -0
- data/lib/ffi-tk/command/place.rb +91 -0
- data/lib/ffi-tk/command/popup.rb +14 -0
- data/lib/ffi-tk/command/raise.rb +25 -0
- data/lib/ffi-tk/command/scrollable.rb +151 -0
- data/lib/ffi-tk/command/selection.rb +132 -0
- data/lib/ffi-tk/command/set_palette.rb +9 -0
- data/lib/ffi-tk/command/tk_cmd.rb +155 -0
- data/lib/ffi-tk/command/vars.rb +82 -0
- data/lib/ffi-tk/command/wait.rb +39 -0
- data/lib/ffi-tk/command/winfo.rb +668 -0
- data/lib/ffi-tk/command/wm.rb +1025 -0
- data/lib/ffi-tk/core_extensions.rb +154 -0
- data/lib/ffi-tk/event/data.rb +60 -0
- data/lib/ffi-tk/event/handler.rb +44 -0
- data/lib/ffi-tk/ffi/tcl.rb +92 -0
- data/lib/ffi-tk/ffi/tcl/cmd_proc.rb +10 -0
- data/lib/ffi-tk/ffi/tcl/eval_result.rb +148 -0
- data/lib/ffi-tk/ffi/tcl/interp.rb +95 -0
- data/lib/ffi-tk/ffi/tcl/obj.rb +89 -0
- data/lib/ffi-tk/ffi/tcl/time.rb +36 -0
- data/lib/ffi-tk/ffi/tk.rb +35 -0
- data/lib/ffi-tk/geometry.rb +32 -0
- data/lib/ffi-tk/thread_sender.rb +26 -0
- data/lib/ffi-tk/tk.rb +222 -0
- data/lib/ffi-tk/variable.rb +46 -0
- data/lib/ffi-tk/widget.rb +68 -0
- data/lib/ffi-tk/widget/button.rb +41 -0
- data/lib/ffi-tk/widget/canvas.rb +806 -0
- data/lib/ffi-tk/widget/canvas/arc.rb +18 -0
- data/lib/ffi-tk/widget/canvas/bitmap.rb +13 -0
- data/lib/ffi-tk/widget/canvas/image.rb +10 -0
- data/lib/ffi-tk/widget/canvas/item.rb +170 -0
- data/lib/ffi-tk/widget/canvas/line.rb +16 -0
- data/lib/ffi-tk/widget/canvas/oval.rb +15 -0
- data/lib/ffi-tk/widget/canvas/polygon.rb +16 -0
- data/lib/ffi-tk/widget/canvas/rectangle.rb +15 -0
- data/lib/ffi-tk/widget/canvas/text.rb +15 -0
- data/lib/ffi-tk/widget/canvas/window.rb +11 -0
- data/lib/ffi-tk/widget/checkbutton.rb +63 -0
- data/lib/ffi-tk/widget/entry.rb +208 -0
- data/lib/ffi-tk/widget/frame.rb +12 -0
- data/lib/ffi-tk/widget/label.rb +26 -0
- data/lib/ffi-tk/widget/labelframe.rb +7 -0
- data/lib/ffi-tk/widget/listbox.rb +192 -0
- data/lib/ffi-tk/widget/menu.rb +318 -0
- data/lib/ffi-tk/widget/menubutton.rb +7 -0
- data/lib/ffi-tk/widget/message.rb +36 -0
- data/lib/ffi-tk/widget/panedwindow.rb +164 -0
- data/lib/ffi-tk/widget/radiobutton.rb +43 -0
- data/lib/ffi-tk/widget/root.rb +8 -0
- data/lib/ffi-tk/widget/scale.rb +44 -0
- data/lib/ffi-tk/widget/scrollbar.rb +114 -0
- data/lib/ffi-tk/widget/spinbox.rb +198 -0
- data/lib/ffi-tk/widget/text.rb +893 -0
- data/lib/ffi-tk/widget/text/peer.rb +10 -0
- data/lib/ffi-tk/widget/tile.rb +70 -0
- data/lib/ffi-tk/widget/tile/button.rb +8 -0
- data/lib/ffi-tk/widget/tile/checkbutton.rb +8 -0
- data/lib/ffi-tk/widget/tile/combobox.rb +43 -0
- data/lib/ffi-tk/widget/tile/entry.rb +8 -0
- data/lib/ffi-tk/widget/tile/frame.rb +13 -0
- data/lib/ffi-tk/widget/tile/label.rb +9 -0
- data/lib/ffi-tk/widget/tile/labelframe.rb +8 -0
- data/lib/ffi-tk/widget/tile/menubutton.rb +8 -0
- data/lib/ffi-tk/widget/tile/notebook.rb +93 -0
- data/lib/ffi-tk/widget/tile/panedwindow.rb +9 -0
- data/lib/ffi-tk/widget/tile/progressbar.rb +59 -0
- data/lib/ffi-tk/widget/tile/radiobutton.rb +8 -0
- data/lib/ffi-tk/widget/tile/scale.rb +8 -0
- data/lib/ffi-tk/widget/tile/scrollbar.rb +41 -0
- data/lib/ffi-tk/widget/tile/separator.rb +23 -0
- data/lib/ffi-tk/widget/tile/sizegrip.rb +24 -0
- data/lib/ffi-tk/widget/tile/style.rb +114 -0
- data/lib/ffi-tk/widget/tile/treeview.rb +414 -0
- data/lib/ffi-tk/widget/toplevel.rb +14 -0
- data/spec/ffi-tk/command/bindtags.rb +18 -0
- data/spec/ffi-tk/command/clipboard.rb +18 -0
- data/spec/ffi-tk/command/font.rb +67 -0
- data/spec/ffi-tk/command/grid.rb +6 -0
- data/spec/ffi-tk/command/image.rb +26 -0
- data/spec/ffi-tk/command/pack.rb +20 -0
- data/spec/ffi-tk/command/place.rb +20 -0
- data/spec/ffi-tk/command/selection.rb +13 -0
- data/spec/ffi-tk/command/vars.rb +32 -0
- data/spec/ffi-tk/command/winfo.rb +233 -0
- data/spec/ffi-tk/command/wm.rb +185 -0
- data/spec/ffi-tk/event.rb +95 -0
- data/spec/ffi-tk/tile/button.rb +51 -0
- data/spec/ffi-tk/tile/checkbutton.rb +13 -0
- data/spec/ffi-tk/tile/combobox.rb +65 -0
- data/spec/ffi-tk/tile/entry.rb +61 -0
- data/spec/ffi-tk/tile/frame.rb +65 -0
- data/spec/ffi-tk/tile/label.rb +17 -0
- data/spec/ffi-tk/tile/labelframe.rb +13 -0
- data/spec/ffi-tk/tile/menubutton.rb +13 -0
- data/spec/ffi-tk/tile/notebook.rb +103 -0
- data/spec/ffi-tk/tile/panedwindow.rb +13 -0
- data/spec/ffi-tk/tile/progressbar.rb +78 -0
- data/spec/ffi-tk/tile/radiobutton.rb +13 -0
- data/spec/ffi-tk/tile/scale.rb +13 -0
- data/spec/ffi-tk/tile/scrollbar.rb +43 -0
- data/spec/ffi-tk/tile/separator.rb +22 -0
- data/spec/ffi-tk/tile/sizegrip.rb +13 -0
- data/spec/ffi-tk/tile/style.rb +161 -0
- data/spec/ffi-tk/tile/treeview.rb +101 -0
- data/spec/ffi-tk/variable.rb +24 -0
- data/spec/ffi-tk/widget/button.rb +22 -0
- data/spec/ffi-tk/widget/canvas.rb +169 -0
- data/spec/ffi-tk/widget/checkbutton.rb +44 -0
- data/spec/ffi-tk/widget/entry.rb +155 -0
- data/spec/ffi-tk/widget/frame.rb +8 -0
- data/spec/ffi-tk/widget/label.rb +16 -0
- data/spec/ffi-tk/widget/labelframe.rb +12 -0
- data/spec/ffi-tk/widget/listbox.rb +19 -0
- data/spec/ffi-tk/widget/menu.rb +12 -0
- data/spec/ffi-tk/widget/menubutton.rb +12 -0
- data/spec/ffi-tk/widget/message.rb +12 -0
- data/spec/ffi-tk/widget/panedwindow.rb +12 -0
- data/spec/ffi-tk/widget/radiobutton.rb +12 -0
- data/spec/ffi-tk/widget/root.rb +9 -0
- data/spec/ffi-tk/widget/scale.rb +12 -0
- data/spec/ffi-tk/widget/scrollbar.rb +12 -0
- data/spec/ffi-tk/widget/spinbox.rb +12 -0
- data/spec/ffi-tk/widget/text.rb +246 -0
- data/spec/ffi-tk/widget/toplevel.rb +12 -0
- data/spec/helper.rb +3 -0
- data/tasks/authors.rake +21 -0
- data/tasks/bacon.rake +66 -0
- data/tasks/changelog.rake +18 -0
- data/tasks/gem.rake +22 -0
- data/tasks/gem_setup.rake +113 -0
- data/tasks/grancher.rake +12 -0
- data/tasks/manifest.rake +4 -0
- data/tasks/rcov.rake +17 -0
- data/tasks/release.rake +65 -0
- data/tasks/reversion.rake +8 -0
- data/tasks/setup.rake +12 -0
- data/tasks/ycov.rake +84 -0
- metadata +261 -0
data/spec/helper.rb
ADDED
data/tasks/authors.rake
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Once git has a fix for the glibc in handling .mailmap and another fix for
|
|
2
|
+
# allowing empty mail address to be mapped in .mailmap we won't have to handle
|
|
3
|
+
# them manually.
|
|
4
|
+
|
|
5
|
+
desc 'Update AUTHORS'
|
|
6
|
+
task :authors do
|
|
7
|
+
authors = Hash.new(0)
|
|
8
|
+
|
|
9
|
+
`git shortlog -nse`.scan(/(\d+)\s(.+)\s<(.*)>$/) do |count, name, email|
|
|
10
|
+
authors[[name, email]] += count.to_i
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
File.open('AUTHORS', 'w+') do |io|
|
|
14
|
+
io.puts "Following persons have contributed to #{GEMSPEC.name}."
|
|
15
|
+
io.puts '(Sorted by number of submitted patches, then alphabetically)'
|
|
16
|
+
io.puts ''
|
|
17
|
+
authors.sort_by{|(n,e),c| [-c, n.downcase] }.each do |(name, email), count|
|
|
18
|
+
io.puts("%6d %s <%s>" % [count, name, email])
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
data/tasks/bacon.rake
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
desc 'Run all bacon specs with pretty output'
|
|
2
|
+
task :bacon => :setup do
|
|
3
|
+
require 'open3'
|
|
4
|
+
require 'scanf'
|
|
5
|
+
require 'matrix'
|
|
6
|
+
|
|
7
|
+
specs = PROJECT_SPECS
|
|
8
|
+
|
|
9
|
+
some_failed = false
|
|
10
|
+
specs_size = specs.size
|
|
11
|
+
len = specs.map{|s| s.size }.sort.last
|
|
12
|
+
total_tests = total_assertions = total_failures = total_errors = 0
|
|
13
|
+
totals = Vector[0, 0, 0, 0]
|
|
14
|
+
|
|
15
|
+
red, yellow, green = "\e[31m%s\e[0m", "\e[33m%s\e[0m", "\e[32m%s\e[0m"
|
|
16
|
+
left_format = "%4d/%d: %-#{len + 11}s"
|
|
17
|
+
spec_format = "%d specifications (%d requirements), %d failures, %d errors"
|
|
18
|
+
|
|
19
|
+
specs.each_with_index do |spec, idx|
|
|
20
|
+
print(left_format % [idx + 1, specs_size, spec])
|
|
21
|
+
|
|
22
|
+
Open3.popen3(RUBY, spec) do |sin, sout, serr|
|
|
23
|
+
out = sout.read.strip
|
|
24
|
+
err = serr.read.strip
|
|
25
|
+
|
|
26
|
+
# this is conventional, see spec/innate/state/fiber.rb for usage
|
|
27
|
+
if out =~ /^Bacon::Error: (needed .*)/
|
|
28
|
+
puts(yellow % ("%6s %s" % ['', $1]))
|
|
29
|
+
else
|
|
30
|
+
total = nil
|
|
31
|
+
|
|
32
|
+
out.each_line do |line|
|
|
33
|
+
scanned = line.scanf(spec_format)
|
|
34
|
+
|
|
35
|
+
next unless scanned.size == 4
|
|
36
|
+
|
|
37
|
+
total = Vector[*scanned]
|
|
38
|
+
break
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
if total
|
|
42
|
+
totals += total
|
|
43
|
+
tests, assertions, failures, errors = total_array = total.to_a
|
|
44
|
+
|
|
45
|
+
if tests > 0 && failures + errors == 0
|
|
46
|
+
puts((green % "%6d passed") % tests)
|
|
47
|
+
else
|
|
48
|
+
some_failed = true
|
|
49
|
+
puts(red % " failed")
|
|
50
|
+
puts out unless out.empty?
|
|
51
|
+
puts err unless err.empty?
|
|
52
|
+
end
|
|
53
|
+
else
|
|
54
|
+
some_failed = true
|
|
55
|
+
puts(red % " failed")
|
|
56
|
+
puts out unless out.empty?
|
|
57
|
+
puts err unless err.empty?
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
total_color = some_failed ? red : green
|
|
64
|
+
puts(total_color % (spec_format % totals.to_a))
|
|
65
|
+
exit 1 if some_failed
|
|
66
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
desc 'update changelog'
|
|
2
|
+
task :changelog do
|
|
3
|
+
File.open('CHANGELOG', 'w+') do |changelog|
|
|
4
|
+
`git log -z --abbrev-commit`.split("\0").each do |commit|
|
|
5
|
+
next if commit =~ /^Merge: \d*/
|
|
6
|
+
ref, author, time, _, title, _, message = commit.split("\n", 7)
|
|
7
|
+
ref = ref[/commit ([0-9a-f]+)/, 1]
|
|
8
|
+
author = author[/Author: (.*)/, 1].strip
|
|
9
|
+
time = Time.parse(time[/Date: (.*)/, 1]).utc
|
|
10
|
+
title.strip!
|
|
11
|
+
|
|
12
|
+
changelog.puts "[#{ref} | #{time}] #{author}"
|
|
13
|
+
changelog.puts '', " * #{title}"
|
|
14
|
+
changelog.puts '', message.rstrip if message
|
|
15
|
+
changelog.puts
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
data/tasks/gem.rake
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'rake/gempackagetask'
|
|
2
|
+
|
|
3
|
+
task :gemspec => [:manifest, :changelog] do
|
|
4
|
+
gemspec_file = "#{GEMSPEC.name}.gemspec"
|
|
5
|
+
File.open(gemspec_file, 'w+'){|gs| gs.puts(GEMSPEC.to_ruby) }
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
desc "package and install from gemspec"
|
|
9
|
+
task :install => [:gemspec] do
|
|
10
|
+
sh "gem build #{GEMSPEC.name}.gemspec"
|
|
11
|
+
sh "gem install #{GEMSPEC.name}-#{GEMSPEC.version}.gem"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
desc "uninstall the gem"
|
|
15
|
+
task :uninstall => [:clean] do
|
|
16
|
+
sh %{gem uninstall -x #{GEMSPEC.name}}
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
Rake::GemPackageTask.new(GEMSPEC) do |p|
|
|
20
|
+
p.need_tar = true
|
|
21
|
+
p.need_zip = true
|
|
22
|
+
end
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
task :gem_setup do
|
|
2
|
+
class GemSetup
|
|
3
|
+
def initialize(options = {}, &block)
|
|
4
|
+
@gems = []
|
|
5
|
+
@options = options.dup
|
|
6
|
+
@verbose = @options.delete(:verbose)
|
|
7
|
+
|
|
8
|
+
run(&block)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def run(&block)
|
|
12
|
+
return unless block_given?
|
|
13
|
+
instance_eval(&block)
|
|
14
|
+
setup
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def gem(name, version = nil, options = {})
|
|
18
|
+
if version.respond_to?(:merge!)
|
|
19
|
+
options = version
|
|
20
|
+
else
|
|
21
|
+
options[:version] = version
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
@gems << [name, options]
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# all gems defined, let's try to load/install them
|
|
28
|
+
def setup
|
|
29
|
+
require 'rubygems'
|
|
30
|
+
require 'rubygems/dependency_installer'
|
|
31
|
+
|
|
32
|
+
@gems.each do |name, options|
|
|
33
|
+
setup_gem(name, options)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def setup_gemspec(gemspec)
|
|
38
|
+
gemspec.dependencies.each do |dependency|
|
|
39
|
+
dependency.version_requirements.as_list.each do |version|
|
|
40
|
+
gem(dependency.name, version)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
setup
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# First try to activate.
|
|
48
|
+
# If activation fails, try to install and activate again.
|
|
49
|
+
# If the second activation also fails, try to require as it may just as
|
|
50
|
+
# well be in $LOAD_PATH.
|
|
51
|
+
def setup_gem(name, options)
|
|
52
|
+
version = [options[:version]].compact
|
|
53
|
+
lib_name = options[:lib] || name
|
|
54
|
+
|
|
55
|
+
log "activating #{name}"
|
|
56
|
+
|
|
57
|
+
Gem.activate(name, *version)
|
|
58
|
+
rescue Gem::LoadError
|
|
59
|
+
log "activating #{name} failed, try to install"
|
|
60
|
+
|
|
61
|
+
install_gem(name, version, options)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# tell rubygems to install a gem
|
|
65
|
+
def install_gem(name, version, options)
|
|
66
|
+
installer = Gem::DependencyInstaller.new(options)
|
|
67
|
+
|
|
68
|
+
temp_argv(options[:extconf]) do
|
|
69
|
+
log "installing #{name}"
|
|
70
|
+
installer.install(name, *version)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
Gem.activate(name, *version)
|
|
74
|
+
|
|
75
|
+
log "install and final activation successful"
|
|
76
|
+
rescue Gem::GemNotFoundException => ex
|
|
77
|
+
log "installation failed: #{ex}, use normal require"
|
|
78
|
+
|
|
79
|
+
require(options[:lib] || name)
|
|
80
|
+
|
|
81
|
+
log "require successful, cannot verify version though"
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# prepare ARGV for rubygems installer
|
|
85
|
+
def temp_argv(extconf)
|
|
86
|
+
if extconf ||= @options[:extconf]
|
|
87
|
+
old_argv = ARGV.clone
|
|
88
|
+
ARGV.replace(extconf.split(' '))
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
yield
|
|
92
|
+
|
|
93
|
+
ensure
|
|
94
|
+
ARGV.replace(old_argv) if extconf
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
private
|
|
98
|
+
|
|
99
|
+
def log(msg)
|
|
100
|
+
return unless @verbose
|
|
101
|
+
|
|
102
|
+
if defined?(Log)
|
|
103
|
+
Log.info(msg)
|
|
104
|
+
else
|
|
105
|
+
puts(msg)
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def rubyforge; 'http://gems.rubyforge.org/' end
|
|
110
|
+
def github; 'http://gems.github.com/' end
|
|
111
|
+
def gemcutter; 'http://gemcutter.org' end
|
|
112
|
+
end
|
|
113
|
+
end
|
data/tasks/grancher.rake
ADDED
data/tasks/manifest.rake
ADDED
data/tasks/rcov.rake
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
desc 'code coverage'
|
|
2
|
+
task :rcov => :clean do
|
|
3
|
+
specs = Dir['spec/ffi-tk/**/*.rb']
|
|
4
|
+
|
|
5
|
+
# we ignore adapter as this has extensive specs in rack already.
|
|
6
|
+
ignore = %w[ gem bacon ]
|
|
7
|
+
|
|
8
|
+
ignored = ignore.join(',')
|
|
9
|
+
|
|
10
|
+
cmd = "rcov --aggregate coverage.data --sort coverage -t --%s -x '#{ignored}' %s"
|
|
11
|
+
|
|
12
|
+
while spec = specs.shift
|
|
13
|
+
puts '', "Gather coverage for #{spec} ..."
|
|
14
|
+
html = specs.empty? ? 'html' : 'no-html'
|
|
15
|
+
sh(cmd % [html, spec])
|
|
16
|
+
end
|
|
17
|
+
end
|
data/tasks/release.rake
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
namespace :release do
|
|
2
|
+
task :prepare => [:reversion, :authors, :gemspec]
|
|
3
|
+
task :all => ['release:github', 'release:rubyforge', 'release:gemcutter']
|
|
4
|
+
|
|
5
|
+
desc 'Release on github'
|
|
6
|
+
task :github => :prepare do
|
|
7
|
+
name, version = GEMSPEC.name, GEMSPEC.version
|
|
8
|
+
|
|
9
|
+
sh('git', 'add',
|
|
10
|
+
'MANIFEST', 'CHANGELOG', 'AUTHORS',
|
|
11
|
+
"#{name}.gemspec",
|
|
12
|
+
"lib/#{name}/version.rb")
|
|
13
|
+
|
|
14
|
+
puts <<-INSTRUCTIONS
|
|
15
|
+
================================================================================
|
|
16
|
+
|
|
17
|
+
I added the relevant files, you can commit them, tag the commit, and push:
|
|
18
|
+
|
|
19
|
+
git commit -m 'Version #{version}'
|
|
20
|
+
git tag -a -m '#{version}' '#{version}'
|
|
21
|
+
git push
|
|
22
|
+
|
|
23
|
+
================================================================================
|
|
24
|
+
INSTRUCTIONS
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
desc 'Release on rubyforge'
|
|
28
|
+
task :rubyforge => ['release:prepare', :package] do
|
|
29
|
+
name, version = GEMSPEC.name, GEMSPEC.version
|
|
30
|
+
|
|
31
|
+
pkgs = Dir["pkg/#{name}-#{version}.{tgz,zip}"].map{|file|
|
|
32
|
+
"rubyforge add_file #{name} #{name} '#{version}' '#{file}'"
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
puts <<-INSTRUCTIONS
|
|
36
|
+
================================================================================
|
|
37
|
+
|
|
38
|
+
To publish to rubyforge do following:
|
|
39
|
+
|
|
40
|
+
rubyforge login
|
|
41
|
+
rubyforge add_release #{name} #{name} '#{version}' pkg/#{name}-#{version}.gem
|
|
42
|
+
|
|
43
|
+
To publish the archives for distro packagers:
|
|
44
|
+
|
|
45
|
+
#{pkgs.join "\n"}
|
|
46
|
+
|
|
47
|
+
================================================================================
|
|
48
|
+
INSTRUCTIONS
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
desc 'Release on gemcutter'
|
|
52
|
+
task :gemcutter => ['release:prepare', :package] do
|
|
53
|
+
name, version = GEMSPEC.name, GEMSPEC.version
|
|
54
|
+
|
|
55
|
+
puts <<-INSTRUCTIONS
|
|
56
|
+
================================================================================
|
|
57
|
+
|
|
58
|
+
To publish to gemcutter do following:
|
|
59
|
+
|
|
60
|
+
gem push pkg/#{name}-#{version}.gem
|
|
61
|
+
|
|
62
|
+
================================================================================
|
|
63
|
+
INSTRUCTIONS
|
|
64
|
+
end
|
|
65
|
+
end
|
data/tasks/setup.rake
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
desc 'install dependencies from gemspec'
|
|
2
|
+
task :setup => [:gem_setup] do
|
|
3
|
+
GemSetup.new :verbose => false do
|
|
4
|
+
DEPENDENCIES.each do |name, options|
|
|
5
|
+
gem(name, options)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
DEVELOPMENT_DEPENDENCIES.each do |name, options|
|
|
9
|
+
gem(name, options)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
data/tasks/ycov.rake
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
begin
|
|
2
|
+
require 'yard'
|
|
3
|
+
|
|
4
|
+
task 'Show Documentation coverage'
|
|
5
|
+
task :ycov => ['.yardoc'] do
|
|
6
|
+
YARD::Registry.load_yardoc
|
|
7
|
+
code_objects = YARD::Registry.paths.map{|path| YARD::Registry.at(path) }
|
|
8
|
+
code_objects.delete_if{|obj| obj.type == :root }
|
|
9
|
+
without_doc, with_doc = code_objects.partition{|obj| obj.docstring.empty? }
|
|
10
|
+
|
|
11
|
+
documented = with_doc.size
|
|
12
|
+
undocumented = without_doc.size
|
|
13
|
+
total = documented + undocumented
|
|
14
|
+
percentage = (documented / 0.01) / total
|
|
15
|
+
|
|
16
|
+
puts "Documentation coverage is %d/%d (%3.1f%%)" % [documented, total, percentage]
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
task 'ycov-full' => ['.yardoc'] do
|
|
20
|
+
require 'builder'
|
|
21
|
+
|
|
22
|
+
YARD::Registry.load_yardoc
|
|
23
|
+
code_objects = YARD::Registry.paths.map{|path| YARD::Registry.at(path) }
|
|
24
|
+
code_objects.delete_if{|obj| obj.type == :root }
|
|
25
|
+
without_doc, with_doc = code_objects.partition{|obj| obj.docstring.empty? }
|
|
26
|
+
|
|
27
|
+
list_objects = lambda{|body, list|
|
|
28
|
+
body.table(:width => '100%') do |table|
|
|
29
|
+
list.group_by{|obj| obj.type }.
|
|
30
|
+
sort_by{|k,v| k.to_s }.each do |type, objects|
|
|
31
|
+
|
|
32
|
+
table.tr do |tr|
|
|
33
|
+
tr.th(type.to_s, :colspan => 2)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
objects.sort_by{|obj| obj.path }.each do |obj|
|
|
37
|
+
table.tr do |tr|
|
|
38
|
+
tr.td obj.path
|
|
39
|
+
tr.td "#{obj.file} +#{obj.line}"
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
File.open('ycov.html', 'w+') do |ycov|
|
|
47
|
+
builder = Builder::XmlMarkup.new(:target => ycov, :indent=>2)
|
|
48
|
+
builder.html do |html|
|
|
49
|
+
html.head do |head|
|
|
50
|
+
head.title 'YARD Coverage report'
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
html.body do |body|
|
|
54
|
+
body.h1 'YARD Coverage report'
|
|
55
|
+
|
|
56
|
+
body.h2 "#{without_doc.size} Undocumented objects"
|
|
57
|
+
list_objects[body, without_doc]
|
|
58
|
+
|
|
59
|
+
body.h2 "#{with_doc.size} Documented objects"
|
|
60
|
+
list_objects[body, with_doc]
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
file '.yardoc' => FileList['lib/**/*.rb'] do
|
|
67
|
+
files = ['lib/**/*.rb']
|
|
68
|
+
options = ['--no-output', '--private']
|
|
69
|
+
YARD::CLI::Yardoc.run(*(options + files))
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
desc 'Generate YARD documentation'
|
|
73
|
+
task :yardoc => ['.yardoc'] do
|
|
74
|
+
files = ['lib/**/*.rb']
|
|
75
|
+
options = [
|
|
76
|
+
'--output-dir', 'ydoc',
|
|
77
|
+
'--readme', PROJECT_README,
|
|
78
|
+
'--db', '.yardoc',
|
|
79
|
+
'--private']
|
|
80
|
+
YARD::CLI::Yardoc.run(*(options + files))
|
|
81
|
+
end
|
|
82
|
+
rescue LoadError
|
|
83
|
+
# you'll survive
|
|
84
|
+
end
|