ffi-tk 2009.11.29
Sign up to get free protection for your applications and to get access to all the features.
- 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
|