dao 8.0.0 → 8.0.1
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.
- checksums.yaml +4 -4
- data/dao.gemspec +2 -17
- data/lib/dao.rb +14 -7
- data/lib/dao/_lib.rb +1 -1
- metadata +2 -12
- data/coerce-0.0.8/README +0 -28
- data/coerce-0.0.8/Rakefile +0 -392
- data/coerce-0.0.8/coerce.gemspec +0 -31
- data/coerce-0.0.8/lib/coerce.rb +0 -210
- data/wrap-1.5.2/README +0 -57
- data/wrap-1.5.2/Rakefile +0 -394
- data/wrap-1.5.2/lib/wrap.rb +0 -295
- data/wrap-1.5.2/test/testing.rb +0 -195
- data/wrap-1.5.2/test/wrap_test.rb +0 -397
- data/wrap-1.5.2/wrap.gemspec +0 -38
data/coerce-0.0.8/coerce.gemspec
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
## coerce.gemspec
|
2
|
-
#
|
3
|
-
|
4
|
-
Gem::Specification::new do |spec|
|
5
|
-
spec.name = "coerce"
|
6
|
-
spec.version = "0.0.8"
|
7
|
-
spec.platform = Gem::Platform::RUBY
|
8
|
-
spec.summary = "coerce"
|
9
|
-
spec.description = "description: coerce kicks the ass"
|
10
|
-
spec.license = "same as ruby's"
|
11
|
-
|
12
|
-
spec.files =
|
13
|
-
["README", "Rakefile", "coerce.gemspec", "lib", "lib/coerce.rb"]
|
14
|
-
|
15
|
-
spec.executables = []
|
16
|
-
|
17
|
-
spec.require_path = "lib"
|
18
|
-
|
19
|
-
spec.test_files = nil
|
20
|
-
|
21
|
-
|
22
|
-
spec.add_dependency(*["chronic", ">= 0.6.2"])
|
23
|
-
|
24
|
-
|
25
|
-
spec.extensions.push(*[])
|
26
|
-
|
27
|
-
spec.rubyforge_project = "codeforpeople"
|
28
|
-
spec.author = "Ara T. Howard"
|
29
|
-
spec.email = "ara.t.howard@gmail.com"
|
30
|
-
spec.homepage = "https://github.com/ahoward/coerce"
|
31
|
-
end
|
data/coerce-0.0.8/lib/coerce.rb
DELETED
@@ -1,210 +0,0 @@
|
|
1
|
-
module Coerce
|
2
|
-
## built-in
|
3
|
-
#
|
4
|
-
require 'uri'
|
5
|
-
require 'time'
|
6
|
-
require 'date'
|
7
|
-
require 'pathname'
|
8
|
-
require 'chronic'
|
9
|
-
|
10
|
-
## version
|
11
|
-
#
|
12
|
-
Coerce::Version = '0.0.8'
|
13
|
-
|
14
|
-
def self.version
|
15
|
-
Coerce::Version
|
16
|
-
end
|
17
|
-
|
18
|
-
## dependencies
|
19
|
-
#
|
20
|
-
def self.dependencies
|
21
|
-
{
|
22
|
-
'chronic' => [ 'chronic' , '>= 0.6.2' ]
|
23
|
-
}
|
24
|
-
end
|
25
|
-
|
26
|
-
begin
|
27
|
-
require 'rubygems'
|
28
|
-
rescue LoadError
|
29
|
-
nil
|
30
|
-
end
|
31
|
-
|
32
|
-
if defined?(gem)
|
33
|
-
self.dependencies.each do |lib, dependency|
|
34
|
-
gem(*dependency)
|
35
|
-
require(lib)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
##
|
40
|
-
#
|
41
|
-
def self.export m
|
42
|
-
module_function m
|
43
|
-
public m
|
44
|
-
end
|
45
|
-
|
46
|
-
List = []
|
47
|
-
|
48
|
-
def self.coerce m, &b
|
49
|
-
define_method m, &b
|
50
|
-
export m
|
51
|
-
List << m.to_s
|
52
|
-
end
|
53
|
-
|
54
|
-
coerce :boolean do |obj|
|
55
|
-
case obj.to_s
|
56
|
-
when %r/^(true|t|1|yes|y|on)$/i
|
57
|
-
true
|
58
|
-
when %r/^(false|f|0|no|n|off)$/i
|
59
|
-
false
|
60
|
-
else
|
61
|
-
!!obj
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
coerce :integer do |obj|
|
66
|
-
Float(obj).to_i
|
67
|
-
end
|
68
|
-
|
69
|
-
coerce :float do |obj|
|
70
|
-
Float obj
|
71
|
-
end
|
72
|
-
|
73
|
-
coerce :number do |obj|
|
74
|
-
Float obj rescue Integer obj
|
75
|
-
end
|
76
|
-
|
77
|
-
coerce :string do |obj|
|
78
|
-
String obj
|
79
|
-
end
|
80
|
-
|
81
|
-
coerce :symbol do |obj|
|
82
|
-
String(obj).to_sym
|
83
|
-
end
|
84
|
-
|
85
|
-
coerce :uri do |obj|
|
86
|
-
::URI.parse obj.to_s
|
87
|
-
end
|
88
|
-
|
89
|
-
coerce :url do |obj|
|
90
|
-
::URI.parse(obj.to_s).to_s
|
91
|
-
end
|
92
|
-
|
93
|
-
coerce :time do |obj|
|
94
|
-
::Chronic.parse(obj.to_s)
|
95
|
-
end
|
96
|
-
|
97
|
-
coerce :date do |obj|
|
98
|
-
begin
|
99
|
-
::Date.parse(::Chronic.parse(obj.to_s).to_s)
|
100
|
-
rescue
|
101
|
-
::Date.parse(obj.to_s)
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
coerce :pathname do |obj|
|
106
|
-
Pathname.new(obj.to_s)
|
107
|
-
end
|
108
|
-
|
109
|
-
coerce :path do |obj|
|
110
|
-
File.expand_path(obj.to_s)
|
111
|
-
end
|
112
|
-
|
113
|
-
coerce :input do |obj|
|
114
|
-
case obj.to_s
|
115
|
-
when '-'
|
116
|
-
io = STDIN.dup
|
117
|
-
io.fattr(:path){ '/dev/stdin' }
|
118
|
-
io
|
119
|
-
else
|
120
|
-
io = open(obj.to_s, 'r+')
|
121
|
-
at_exit{ io.close }
|
122
|
-
io
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
coerce :output do |obj|
|
127
|
-
case obj.to_s
|
128
|
-
when '-'
|
129
|
-
io = STDOUT.dup
|
130
|
-
io.fattr(:path){ '/dev/stdout' }
|
131
|
-
io
|
132
|
-
else
|
133
|
-
io = open(obj.to_s, 'w+')
|
134
|
-
at_exit{ io.close }
|
135
|
-
io
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
coerce :slug do |obj|
|
140
|
-
string = [obj].flatten.compact.join('-')
|
141
|
-
words = string.to_s.scan(%r/\w+/)
|
142
|
-
words.map!{|word| word.gsub %r/[^0-9a-zA-Z_-]/, ''}
|
143
|
-
words.delete_if{|word| word.nil? or word.strip.empty?}
|
144
|
-
String(words.join('-').downcase)
|
145
|
-
end
|
146
|
-
|
147
|
-
coerce :list do |*objs|
|
148
|
-
[*objs].flatten.join(',').split(/[\n,]/).map{|item| item.strip}.delete_if{|item| item.strip.empty?}
|
149
|
-
end
|
150
|
-
|
151
|
-
coerce :array do |*objs|
|
152
|
-
[*objs].flatten.join(',').split(/[\n,]/).map{|item| item.strip}.delete_if{|item| item.strip.empty?}
|
153
|
-
end
|
154
|
-
|
155
|
-
coerce :hash do |*objs|
|
156
|
-
list = Coerce.list(*objs)
|
157
|
-
hash = Hash.new
|
158
|
-
list.each do |pair|
|
159
|
-
k, v = pair.split(/[=:]+/, 2)
|
160
|
-
key = k.to_s.strip
|
161
|
-
val = v.to_s.strip
|
162
|
-
hash[key] = val
|
163
|
-
end
|
164
|
-
hash
|
165
|
-
end
|
166
|
-
|
167
|
-
# add list_of_xxx methods
|
168
|
-
#
|
169
|
-
List.dup.each do |type|
|
170
|
-
next if type.to_s =~ %r/list/
|
171
|
-
%W" list_of_#{ type } list_of_#{ type }s ".each do |m|
|
172
|
-
define_method m do |*objs|
|
173
|
-
list(*objs).map{|obj| send type, obj}
|
174
|
-
end
|
175
|
-
export m
|
176
|
-
List << m
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
|
-
# add list_of_xxx_from_file
|
181
|
-
#
|
182
|
-
List.dup.each do |type|
|
183
|
-
next if type.to_s =~ %r/list/
|
184
|
-
%W" list_of_#{ type }_from_file list_of_#{ type }s_from_file ".each do |m|
|
185
|
-
define_method m do |*args|
|
186
|
-
buf = nil
|
187
|
-
if args.size == 1 and args.first.respond_to?(:read)
|
188
|
-
buf = args.first.read
|
189
|
-
else
|
190
|
-
open(*args){|io| buf = io.read}
|
191
|
-
end
|
192
|
-
send(m.sub(/_from_file/, ''), buf)
|
193
|
-
end
|
194
|
-
export m
|
195
|
-
List << m
|
196
|
-
end
|
197
|
-
end
|
198
|
-
|
199
|
-
def self.[] sym
|
200
|
-
prefix = sym.to_s.downcase.to_sym
|
201
|
-
candidates = List.select{|m| m =~ %r/^#{ prefix }/i}
|
202
|
-
m = candidates.shift
|
203
|
-
raise ArgumentError, "unsupported coercion: #{ sym.inspect } (#{ List.join ',' })" unless
|
204
|
-
m
|
205
|
-
raise ArgumentError, "ambiguous coercion: #{ sym.inspect } (#{ List.join ',' })" unless
|
206
|
-
candidates.empty? or m.to_s == sym.to_s
|
207
|
-
this = self
|
208
|
-
lambda{|obj| method(m).call obj}
|
209
|
-
end
|
210
|
-
end
|
data/wrap-1.5.2/README
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
NAME
|
2
|
-
wrap
|
3
|
-
|
4
|
-
SYNOPSIS
|
5
|
-
non-sucking :before and :after filters for any ruby class
|
6
|
-
|
7
|
-
DESCRIPTION
|
8
|
-
yes yes, active_support does this. but crapily. with active_support you'll
|
9
|
-
need to do this
|
10
|
-
|
11
|
-
|
12
|
-
class Record
|
13
|
-
include ActiveSupport::Callbacks
|
14
|
-
define_callbacks :save
|
15
|
-
|
16
|
-
def save
|
17
|
-
run_callbacks :save do
|
18
|
-
puts "- save"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
but hey, if a subclass forgets to call 'super' or doesn't manually run
|
24
|
-
'run_callbacks' the codez are *screwed*. that sux. why not this?
|
25
|
-
|
26
|
-
|
27
|
-
class Record
|
28
|
-
include Wrap
|
29
|
-
|
30
|
-
wrap :save
|
31
|
-
end
|
32
|
-
|
33
|
-
|
34
|
-
yes, it's that simple. you can now do
|
35
|
-
|
36
|
-
class SubRecord < Record
|
37
|
-
before :save do
|
38
|
-
special_sauce
|
39
|
-
end
|
40
|
-
|
41
|
-
def save
|
42
|
-
no_special_sauce
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
did you get that? the :before and :after hooks will be called no matter
|
47
|
-
what the subclass does. the method will be wrapped, period. no special
|
48
|
-
work required. of course, if the sublcass messes with 'method_added' their
|
49
|
-
will be hell to pay. that's the price for simplicity.
|
50
|
-
|
51
|
-
the callbacks are very close, but not identical to active_supports. you can
|
52
|
-
return 'false' to halt the chain, but you can also simply call 'halt!'.
|
53
|
-
another neat trick is that :before callbacks will be called with the
|
54
|
-
arguments to the wrapped method itself iff possible and :after callbacks
|
55
|
-
will be called with the result of the wrapped method, iff possible.
|
56
|
-
|
57
|
-
the test suite reads pretty damn clean. have a go.
|
data/wrap-1.5.2/Rakefile
DELETED
@@ -1,394 +0,0 @@
|
|
1
|
-
This.rubyforge_project = 'codeforpeople'
|
2
|
-
This.author = "Ara T. Howard"
|
3
|
-
This.email = "ara.t.howard@gmail.com"
|
4
|
-
This.homepage = "https://github.com/ahoward/#{ This.lib }"
|
5
|
-
|
6
|
-
task :license do
|
7
|
-
open('LICENSE', 'w'){|fd| fd.puts "same as ruby's"}
|
8
|
-
end
|
9
|
-
|
10
|
-
task :default do
|
11
|
-
puts((Rake::Task.tasks.map{|task| task.name.gsub(/::/,':')} - ['default']).sort)
|
12
|
-
end
|
13
|
-
|
14
|
-
task :test do
|
15
|
-
run_tests!
|
16
|
-
end
|
17
|
-
|
18
|
-
namespace :test do
|
19
|
-
task(:unit){ run_tests!(:unit) }
|
20
|
-
task(:functional){ run_tests!(:functional) }
|
21
|
-
task(:integration){ run_tests!(:integration) }
|
22
|
-
end
|
23
|
-
|
24
|
-
def run_tests!(which = nil)
|
25
|
-
which ||= '**'
|
26
|
-
test_dir = File.join(This.dir, "test")
|
27
|
-
test_glob ||= File.join(test_dir, "#{ which }/**_test.rb")
|
28
|
-
test_rbs = Dir.glob(test_glob).sort
|
29
|
-
|
30
|
-
div = ('=' * 119)
|
31
|
-
line = ('-' * 119)
|
32
|
-
|
33
|
-
test_rbs.each_with_index do |test_rb, index|
|
34
|
-
testno = index + 1
|
35
|
-
command = "#{ This.ruby } -w -I ./lib -I ./test/lib #{ test_rb }"
|
36
|
-
|
37
|
-
puts
|
38
|
-
say(div, :color => :cyan, :bold => true)
|
39
|
-
say("@#{ testno } => ", :bold => true, :method => :print)
|
40
|
-
say(command, :color => :cyan, :bold => true)
|
41
|
-
say(line, :color => :cyan, :bold => true)
|
42
|
-
|
43
|
-
system(command)
|
44
|
-
|
45
|
-
say(line, :color => :cyan, :bold => true)
|
46
|
-
|
47
|
-
status = $?.exitstatus
|
48
|
-
|
49
|
-
if status.zero?
|
50
|
-
say("@#{ testno } <= ", :bold => true, :color => :white, :method => :print)
|
51
|
-
say("SUCCESS", :color => :green, :bold => true)
|
52
|
-
else
|
53
|
-
say("@#{ testno } <= ", :bold => true, :color => :white, :method => :print)
|
54
|
-
say("FAILURE", :color => :red, :bold => true)
|
55
|
-
end
|
56
|
-
say(line, :color => :cyan, :bold => true)
|
57
|
-
|
58
|
-
exit(status) unless status.zero?
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
|
63
|
-
task :gemspec do
|
64
|
-
ignore_extensions = ['git', 'svn', 'tmp', /sw./, 'bak', 'gem']
|
65
|
-
ignore_directories = ['pkg']
|
66
|
-
ignore_files = ['test/log']
|
67
|
-
|
68
|
-
shiteless =
|
69
|
-
lambda do |list|
|
70
|
-
list.delete_if do |entry|
|
71
|
-
next unless test(?e, entry)
|
72
|
-
extension = File.basename(entry).split(%r/[.]/).last
|
73
|
-
ignore_extensions.any?{|ext| ext === extension}
|
74
|
-
end
|
75
|
-
list.delete_if do |entry|
|
76
|
-
next unless test(?d, entry)
|
77
|
-
dirname = File.expand_path(entry)
|
78
|
-
ignore_directories.any?{|dir| File.expand_path(dir) == dirname}
|
79
|
-
end
|
80
|
-
list.delete_if do |entry|
|
81
|
-
next unless test(?f, entry)
|
82
|
-
filename = File.expand_path(entry)
|
83
|
-
ignore_files.any?{|file| File.expand_path(file) == filename}
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
lib = This.lib
|
88
|
-
object = This.object
|
89
|
-
version = This.version
|
90
|
-
files = shiteless[Dir::glob("**/**")]
|
91
|
-
executables = shiteless[Dir::glob("bin/*")].map{|exe| File.basename(exe)}
|
92
|
-
#has_rdoc = true #File.exist?('doc')
|
93
|
-
test_files = "test/#{ lib }.rb" if File.file?("test/#{ lib }.rb")
|
94
|
-
summary = object.respond_to?(:summary) ? object.summary : "summary: #{ lib } kicks the ass"
|
95
|
-
description = object.respond_to?(:description) ? object.description : "description: #{ lib } kicks the ass"
|
96
|
-
license = object.respond_to?(:license) ? object.license : "same as ruby's"
|
97
|
-
|
98
|
-
if This.extensions.nil?
|
99
|
-
This.extensions = []
|
100
|
-
extensions = This.extensions
|
101
|
-
%w( Makefile configure extconf.rb ).each do |ext|
|
102
|
-
extensions << ext if File.exists?(ext)
|
103
|
-
end
|
104
|
-
end
|
105
|
-
extensions = [extensions].flatten.compact
|
106
|
-
|
107
|
-
if This.dependencies.nil?
|
108
|
-
dependencies = []
|
109
|
-
else
|
110
|
-
case This.dependencies
|
111
|
-
when Hash
|
112
|
-
dependencies = This.dependencies.values
|
113
|
-
when Array
|
114
|
-
dependencies = This.dependencies
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
template =
|
119
|
-
if test(?e, 'gemspec.erb')
|
120
|
-
Template{ IO.read('gemspec.erb') }
|
121
|
-
else
|
122
|
-
Template {
|
123
|
-
<<-__
|
124
|
-
## <%= lib %>.gemspec
|
125
|
-
#
|
126
|
-
|
127
|
-
Gem::Specification::new do |spec|
|
128
|
-
spec.name = <%= lib.inspect %>
|
129
|
-
spec.version = <%= version.inspect %>
|
130
|
-
spec.platform = Gem::Platform::RUBY
|
131
|
-
spec.summary = <%= lib.inspect %>
|
132
|
-
spec.description = <%= description.inspect %>
|
133
|
-
spec.license = <%= license.inspect %>
|
134
|
-
|
135
|
-
spec.files =\n<%= files.sort.pretty_inspect %>
|
136
|
-
spec.executables = <%= executables.inspect %>
|
137
|
-
|
138
|
-
spec.require_path = "lib"
|
139
|
-
|
140
|
-
spec.test_files = <%= test_files.inspect %>
|
141
|
-
|
142
|
-
<% dependencies.each do |lib_version| %>
|
143
|
-
spec.add_dependency(*<%= Array(lib_version).flatten.inspect %>)
|
144
|
-
<% end %>
|
145
|
-
|
146
|
-
spec.extensions.push(*<%= extensions.inspect %>)
|
147
|
-
|
148
|
-
spec.rubyforge_project = <%= This.rubyforge_project.inspect %>
|
149
|
-
spec.author = <%= This.author.inspect %>
|
150
|
-
spec.email = <%= This.email.inspect %>
|
151
|
-
spec.homepage = <%= This.homepage.inspect %>
|
152
|
-
end
|
153
|
-
__
|
154
|
-
}
|
155
|
-
end
|
156
|
-
|
157
|
-
Fu.mkdir_p(This.pkgdir)
|
158
|
-
gemspec = "#{ lib }.gemspec"
|
159
|
-
open(gemspec, "w"){|fd| fd.puts(template)}
|
160
|
-
This.gemspec = gemspec
|
161
|
-
end
|
162
|
-
|
163
|
-
task :gem => [:clean, :gemspec] do
|
164
|
-
Fu.mkdir_p(This.pkgdir)
|
165
|
-
before = Dir['*.gem']
|
166
|
-
cmd = "gem build #{ This.gemspec }"
|
167
|
-
`#{ cmd }`
|
168
|
-
after = Dir['*.gem']
|
169
|
-
gem = ((after - before).first || after.first) or abort('no gem!')
|
170
|
-
Fu.mv(gem, This.pkgdir)
|
171
|
-
This.gem = File.join(This.pkgdir, File.basename(gem))
|
172
|
-
end
|
173
|
-
|
174
|
-
task :readme do
|
175
|
-
samples = ''
|
176
|
-
prompt = '~ > '
|
177
|
-
lib = This.lib
|
178
|
-
version = This.version
|
179
|
-
|
180
|
-
Dir['sample*/*'].sort.each do |sample|
|
181
|
-
samples << "\n" << " <========< #{ sample } >========>" << "\n\n"
|
182
|
-
|
183
|
-
cmd = "cat #{ sample }"
|
184
|
-
samples << Util.indent(prompt + cmd, 2) << "\n\n"
|
185
|
-
samples << Util.indent(`#{ cmd }`, 4) << "\n"
|
186
|
-
|
187
|
-
cmd = "ruby #{ sample }"
|
188
|
-
samples << Util.indent(prompt + cmd, 2) << "\n\n"
|
189
|
-
|
190
|
-
cmd = "ruby -e'STDOUT.sync=true; exec %(ruby -I ./lib #{ sample })'"
|
191
|
-
samples << Util.indent(`#{ cmd } 2>&1`, 4) << "\n"
|
192
|
-
end
|
193
|
-
|
194
|
-
template =
|
195
|
-
if test(?e, 'README.erb')
|
196
|
-
Template{ IO.read('README.erb') }
|
197
|
-
else
|
198
|
-
Template {
|
199
|
-
<<-__
|
200
|
-
NAME
|
201
|
-
#{ lib }
|
202
|
-
|
203
|
-
DESCRIPTION
|
204
|
-
|
205
|
-
INSTALL
|
206
|
-
gem install #{ lib }
|
207
|
-
|
208
|
-
SAMPLES
|
209
|
-
#{ samples }
|
210
|
-
__
|
211
|
-
}
|
212
|
-
end
|
213
|
-
|
214
|
-
open("README", "w"){|fd| fd.puts template}
|
215
|
-
end
|
216
|
-
|
217
|
-
|
218
|
-
task :clean do
|
219
|
-
Dir[File.join(This.pkgdir, '**/**')].each{|entry| Fu.rm_rf(entry)}
|
220
|
-
end
|
221
|
-
|
222
|
-
|
223
|
-
task :release => [:clean, :gemspec, :gem] do
|
224
|
-
gems = Dir[File.join(This.pkgdir, '*.gem')].flatten
|
225
|
-
raise "which one? : #{ gems.inspect }" if gems.size > 1
|
226
|
-
raise "no gems?" if gems.size < 1
|
227
|
-
|
228
|
-
cmd = "gem push #{ This.gem }"
|
229
|
-
puts cmd
|
230
|
-
puts
|
231
|
-
system(cmd)
|
232
|
-
abort("cmd(#{ cmd }) failed with (#{ $?.inspect })") unless $?.exitstatus.zero?
|
233
|
-
|
234
|
-
cmd = "rubyforge login && rubyforge add_release #{ This.rubyforge_project } #{ This.lib } #{ This.version } #{ This.gem }"
|
235
|
-
puts cmd
|
236
|
-
puts
|
237
|
-
system(cmd)
|
238
|
-
abort("cmd(#{ cmd }) failed with (#{ $?.inspect })") unless $?.exitstatus.zero?
|
239
|
-
end
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
BEGIN {
|
246
|
-
# support for this rakefile
|
247
|
-
#
|
248
|
-
$VERBOSE = nil
|
249
|
-
|
250
|
-
require 'ostruct'
|
251
|
-
require 'erb'
|
252
|
-
require 'fileutils'
|
253
|
-
require 'rbconfig'
|
254
|
-
require 'pp'
|
255
|
-
|
256
|
-
# fu shortcut
|
257
|
-
#
|
258
|
-
Fu = FileUtils
|
259
|
-
|
260
|
-
# cache a bunch of stuff about this rakefile/environment
|
261
|
-
#
|
262
|
-
This = OpenStruct.new
|
263
|
-
|
264
|
-
This.file = File.expand_path(__FILE__)
|
265
|
-
This.dir = File.dirname(This.file)
|
266
|
-
This.pkgdir = File.join(This.dir, 'pkg')
|
267
|
-
|
268
|
-
# grok lib
|
269
|
-
#
|
270
|
-
lib = ENV['LIB']
|
271
|
-
unless lib
|
272
|
-
lib = File.basename(Dir.pwd).sub(/[-].*$/, '')
|
273
|
-
end
|
274
|
-
This.lib = lib
|
275
|
-
|
276
|
-
# grok version
|
277
|
-
#
|
278
|
-
version = ENV['VERSION']
|
279
|
-
unless version
|
280
|
-
require "./lib/#{ This.lib }"
|
281
|
-
This.name = lib.capitalize
|
282
|
-
This.object = eval(This.name)
|
283
|
-
version = This.object.send(:version)
|
284
|
-
end
|
285
|
-
This.version = version
|
286
|
-
|
287
|
-
# see if dependencies are export by the module
|
288
|
-
#
|
289
|
-
if This.object.respond_to?(:dependencies)
|
290
|
-
This.dependencies = This.object.dependencies
|
291
|
-
end
|
292
|
-
|
293
|
-
# we need to know the name of the lib an it's version
|
294
|
-
#
|
295
|
-
abort('no lib') unless This.lib
|
296
|
-
abort('no version') unless This.version
|
297
|
-
|
298
|
-
# discover full path to this ruby executable
|
299
|
-
#
|
300
|
-
c = Config::CONFIG
|
301
|
-
bindir = c["bindir"] || c['BINDIR']
|
302
|
-
ruby_install_name = c['ruby_install_name'] || c['RUBY_INSTALL_NAME'] || 'ruby'
|
303
|
-
ruby_ext = c['EXEEXT'] || ''
|
304
|
-
ruby = File.join(bindir, (ruby_install_name + ruby_ext))
|
305
|
-
This.ruby = ruby
|
306
|
-
|
307
|
-
# some utils
|
308
|
-
#
|
309
|
-
module Util
|
310
|
-
def indent(s, n = 2)
|
311
|
-
s = unindent(s)
|
312
|
-
ws = ' ' * n
|
313
|
-
s.gsub(%r/^/, ws)
|
314
|
-
end
|
315
|
-
|
316
|
-
def unindent(s)
|
317
|
-
indent = nil
|
318
|
-
s.each_line do |line|
|
319
|
-
next if line =~ %r/^\s*$/
|
320
|
-
indent = line[%r/^\s*/] and break
|
321
|
-
end
|
322
|
-
indent ? s.gsub(%r/^#{ indent }/, "") : s
|
323
|
-
end
|
324
|
-
extend self
|
325
|
-
end
|
326
|
-
|
327
|
-
# template support
|
328
|
-
#
|
329
|
-
class Template
|
330
|
-
def initialize(&block)
|
331
|
-
@block = block
|
332
|
-
@template = block.call.to_s
|
333
|
-
end
|
334
|
-
def expand(b=nil)
|
335
|
-
ERB.new(Util.unindent(@template)).result((b||@block).binding)
|
336
|
-
end
|
337
|
-
alias_method 'to_s', 'expand'
|
338
|
-
end
|
339
|
-
def Template(*args, &block) Template.new(*args, &block) end
|
340
|
-
|
341
|
-
# colored console output support
|
342
|
-
#
|
343
|
-
This.ansi = {
|
344
|
-
:clear => "\e[0m",
|
345
|
-
:reset => "\e[0m",
|
346
|
-
:erase_line => "\e[K",
|
347
|
-
:erase_char => "\e[P",
|
348
|
-
:bold => "\e[1m",
|
349
|
-
:dark => "\e[2m",
|
350
|
-
:underline => "\e[4m",
|
351
|
-
:underscore => "\e[4m",
|
352
|
-
:blink => "\e[5m",
|
353
|
-
:reverse => "\e[7m",
|
354
|
-
:concealed => "\e[8m",
|
355
|
-
:black => "\e[30m",
|
356
|
-
:red => "\e[31m",
|
357
|
-
:green => "\e[32m",
|
358
|
-
:yellow => "\e[33m",
|
359
|
-
:blue => "\e[34m",
|
360
|
-
:magenta => "\e[35m",
|
361
|
-
:cyan => "\e[36m",
|
362
|
-
:white => "\e[37m",
|
363
|
-
:on_black => "\e[40m",
|
364
|
-
:on_red => "\e[41m",
|
365
|
-
:on_green => "\e[42m",
|
366
|
-
:on_yellow => "\e[43m",
|
367
|
-
:on_blue => "\e[44m",
|
368
|
-
:on_magenta => "\e[45m",
|
369
|
-
:on_cyan => "\e[46m",
|
370
|
-
:on_white => "\e[47m"
|
371
|
-
}
|
372
|
-
def say(phrase, *args)
|
373
|
-
options = args.last.is_a?(Hash) ? args.pop : {}
|
374
|
-
options[:color] = args.shift.to_s.to_sym unless args.empty?
|
375
|
-
keys = options.keys
|
376
|
-
keys.each{|key| options[key.to_s.to_sym] = options.delete(key)}
|
377
|
-
|
378
|
-
color = options[:color]
|
379
|
-
bold = options.has_key?(:bold)
|
380
|
-
|
381
|
-
parts = [phrase]
|
382
|
-
parts.unshift(This.ansi[color]) if color
|
383
|
-
parts.unshift(This.ansi[:bold]) if bold
|
384
|
-
parts.push(This.ansi[:clear]) if parts.size > 1
|
385
|
-
|
386
|
-
method = options[:method] || :puts
|
387
|
-
|
388
|
-
Kernel.send(method, parts.join)
|
389
|
-
end
|
390
|
-
|
391
|
-
# always run out of the project dir
|
392
|
-
#
|
393
|
-
Dir.chdir(This.dir)
|
394
|
-
}
|