shared 1.1.0 → 1.1.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.
Files changed (5) hide show
  1. checksums.yaml +15 -0
  2. data/Rakefile +177 -29
  3. data/lib/shared.rb +5 -1
  4. data/shared.gemspec +10 -6
  5. metadata +26 -36
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ M2U5MTJjNDcyOTI3N2NkZWRjYWVkNjc4ZjJkMGEzYzkyYTI3Y2VhMQ==
5
+ data.tar.gz: !binary |-
6
+ MzAyNzE1ZTE2NWUwODc1MzJjMTYyZWYzMWRiMDgwM2ExOThhOGE2Nw==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ YTQ1OTBmN2Y0NjZmYTM5YTExMzc4OTk5NGZkYmQ5NGY0OWJmYzJjMDdhYjVj
10
+ N2NiMjBlYjBkYjZmNGM1ZDM0OTExM2NlYjI1ODY5YjhlYWMwZWE3ZjAyYWY1
11
+ YTVmMmQwNWQ1NjRlN2Y3YWMxNjY4NmJmYzliMDgyZGM5NWRmN2Y=
12
+ data.tar.gz: !binary |-
13
+ ZTBkMTk3NmZjOWZjOWMyZDNmM2JhNDhiOWNlNTg5MzUxYzZjNjBjZTA2NGM0
14
+ ZmUzYzI4ZGFiNWRjOTBjZDc4YWFiYjc5YThlMmM5ZjY3MmJjMzE5MTAyMTVm
15
+ ZmMwOWMyOTY5MzVlM2E2ZTMxOTNjYTQ4NmQ1NGRlMTRlZTdmMGM=
data/Rakefile CHANGED
@@ -1,19 +1,69 @@
1
-
2
1
  This.rubyforge_project = 'codeforpeople'
3
2
  This.author = "Ara T. Howard"
4
3
  This.email = "ara.t.howard@gmail.com"
5
- This.homepage = "http://github.com/ahoward/#{ This.lib }/tree/master"
4
+ This.homepage = "https://github.com/ahoward/#{ This.lib }"
6
5
 
6
+ task :license do
7
+ open('LICENSE', 'w'){|fd| fd.puts "same as ruby's"}
8
+ end
7
9
 
8
10
  task :default do
9
- puts(Rake::Task.tasks.map{|task| task.name} - ['default'])
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
10
60
  end
11
61
 
12
62
 
13
63
  task :gemspec do
14
- ignore_extensions = 'git', 'svn', 'tmp', /sw./, 'bak', 'gem'
15
- ignore_directories = 'pkg'
16
- ignore_files = 'test/log'
64
+ ignore_extensions = ['git', 'svn', 'tmp', /sw./, 'bak', 'gem']
65
+ ignore_directories = ['pkg']
66
+ ignore_files = ['test/log']
17
67
 
18
68
  shiteless =
19
69
  lambda do |list|
@@ -35,14 +85,19 @@ task :gemspec do
35
85
  end
36
86
 
37
87
  lib = This.lib
88
+ object = This.object
38
89
  version = This.version
39
90
  files = shiteless[Dir::glob("**/**")]
40
91
  executables = shiteless[Dir::glob("bin/*")].map{|exe| File.basename(exe)}
41
- has_rdoc = true #File.exist?('doc')
92
+ #has_rdoc = true #File.exist?('doc')
42
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"
43
97
 
44
- extensions = This.extensions
45
- if extensions.nil?
98
+ if This.extensions.nil?
99
+ This.extensions = []
100
+ extensions = This.extensions
46
101
  %w( Makefile configure extconf.rb ).each do |ext|
47
102
  extensions << ext if File.exists?(ext)
48
103
  end
@@ -63,16 +118,18 @@ task :gemspec do
63
118
  spec.version = #{ version.inspect }
64
119
  spec.platform = Gem::Platform::RUBY
65
120
  spec.summary = #{ lib.inspect }
121
+ spec.description = #{ description.inspect }
122
+ spec.license = #{ license.inspect }
66
123
 
67
- spec.files = #{ files.inspect }
124
+ spec.files =\n#{ files.sort.pretty_inspect }
68
125
  spec.executables = #{ executables.inspect }
69
126
 
70
127
  spec.require_path = "lib"
71
128
 
72
- spec.has_rdoc = #{ has_rdoc.inspect }
73
129
  spec.test_files = #{ test_files.inspect }
74
- #spec.add_dependency 'lib', '>= version'
75
- #spec.add_dependency 'fattr'
130
+
131
+ ### spec.add_dependency 'lib', '>= version'
132
+ #### spec.add_dependency 'map'
76
133
 
77
134
  spec.extensions.push(*#{ extensions.inspect })
78
135
 
@@ -85,19 +142,21 @@ task :gemspec do
85
142
  }
86
143
  end
87
144
 
88
- open("#{ lib }.gemspec", "w"){|fd| fd.puts template}
89
- This.gemspec = "#{ lib }.gemspec"
145
+ Fu.mkdir_p(This.pkgdir)
146
+ gemspec = "#{ lib }.gemspec"
147
+ open(gemspec, "w"){|fd| fd.puts(template)}
148
+ This.gemspec = gemspec
90
149
  end
91
150
 
92
151
  task :gem => [:clean, :gemspec] do
93
- Fu.mkdir_p This.pkgdir
152
+ Fu.mkdir_p(This.pkgdir)
94
153
  before = Dir['*.gem']
95
154
  cmd = "gem build #{ This.gemspec }"
96
155
  `#{ cmd }`
97
156
  after = Dir['*.gem']
98
157
  gem = ((after - before).first || after.first) or abort('no gem!')
99
- Fu.mv gem, This.pkgdir
100
- This.gem = File.basename(gem)
158
+ Fu.mv(gem, This.pkgdir)
159
+ This.gem = File.join(This.pkgdir, File.basename(gem))
101
160
  end
102
161
 
103
162
  task :readme do
@@ -116,13 +175,13 @@ task :readme do
116
175
  cmd = "ruby #{ sample }"
117
176
  samples << Util.indent(prompt + cmd, 2) << "\n\n"
118
177
 
119
- cmd = "ruby -e'STDOUT.sync=true; exec %(ruby -Ilib #{ sample })'"
178
+ cmd = "ruby -e'STDOUT.sync=true; exec %(ruby -I ./lib #{ sample })'"
120
179
  samples << Util.indent(`#{ cmd } 2>&1`, 4) << "\n"
121
180
  end
122
181
 
123
182
  template =
124
- if test(?e, 'readme.erb')
125
- Template{ IO.read('readme.erb') }
183
+ if test(?e, 'README.erb')
184
+ Template{ IO.read('README.erb') }
126
185
  else
127
186
  Template {
128
187
  <<-__
@@ -153,9 +212,18 @@ task :release => [:clean, :gemspec, :gem] do
153
212
  gems = Dir[File.join(This.pkgdir, '*.gem')].flatten
154
213
  raise "which one? : #{ gems.inspect }" if gems.size > 1
155
214
  raise "no gems?" if gems.size < 1
156
- cmd = "rubyforge login && rubyforge add_release #{ This.rubyforge_project } #{ This.lib } #{ This.version } #{ This.pkgdir }/#{ This.gem }"
215
+
216
+ cmd = "gem push #{ This.gem }"
217
+ puts cmd
218
+ puts
219
+ system(cmd)
220
+ abort("cmd(#{ cmd }) failed with (#{ $?.inspect })") unless $?.exitstatus.zero?
221
+
222
+ cmd = "rubyforge login && rubyforge add_release #{ This.rubyforge_project } #{ This.lib } #{ This.version } #{ This.gem }"
157
223
  puts cmd
158
- system cmd
224
+ puts
225
+ system(cmd)
226
+ abort("cmd(#{ cmd }) failed with (#{ $?.inspect })") unless $?.exitstatus.zero?
159
227
  end
160
228
 
161
229
 
@@ -163,37 +231,63 @@ end
163
231
 
164
232
 
165
233
  BEGIN {
234
+ # support for this rakefile
235
+ #
166
236
  $VERBOSE = nil
167
237
 
168
238
  require 'ostruct'
169
239
  require 'erb'
170
240
  require 'fileutils'
241
+ require 'rbconfig'
242
+ require 'pp'
171
243
 
244
+ # fu shortcut
245
+ #
172
246
  Fu = FileUtils
173
247
 
248
+ # cache a bunch of stuff about this rakefile/environment
249
+ #
174
250
  This = OpenStruct.new
175
251
 
176
252
  This.file = File.expand_path(__FILE__)
177
253
  This.dir = File.dirname(This.file)
178
254
  This.pkgdir = File.join(This.dir, 'pkg')
179
255
 
256
+ # grok lib
257
+ #
180
258
  lib = ENV['LIB']
181
259
  unless lib
182
- lib = File.basename(Dir.pwd)
260
+ lib = File.basename(Dir.pwd).sub(/[-].*$/, '')
183
261
  end
184
262
  This.lib = lib
185
263
 
264
+ # grok version
265
+ #
186
266
  version = ENV['VERSION']
187
267
  unless version
188
- name = lib.capitalize
189
- require "./lib/#{ lib }"
190
- version = eval(name).send(:version)
268
+ require "./lib/#{ This.lib }"
269
+ This.name = lib.capitalize
270
+ This.object = eval(This.name)
271
+ version = This.object.send(:version)
191
272
  end
192
273
  This.version = version
193
274
 
275
+ # we need to know the name of the lib an it's version
276
+ #
194
277
  abort('no lib') unless This.lib
195
278
  abort('no version') unless This.version
196
279
 
280
+ # discover full path to this ruby executable
281
+ #
282
+ c = Config::CONFIG
283
+ bindir = c["bindir"] || c['BINDIR']
284
+ ruby_install_name = c['ruby_install_name'] || c['RUBY_INSTALL_NAME'] || 'ruby'
285
+ ruby_ext = c['EXEEXT'] || ''
286
+ ruby = File.join(bindir, (ruby_install_name + ruby_ext))
287
+ This.ruby = ruby
288
+
289
+ # some utils
290
+ #
197
291
  module Util
198
292
  def indent(s, n = 2)
199
293
  s = unindent(s)
@@ -203,7 +297,7 @@ BEGIN {
203
297
 
204
298
  def unindent(s)
205
299
  indent = nil
206
- s.each do |line|
300
+ s.each_line do |line|
207
301
  next if line =~ %r/^\s*$/
208
302
  indent = line[%r/^\s*/] and break
209
303
  end
@@ -212,17 +306,71 @@ BEGIN {
212
306
  extend self
213
307
  end
214
308
 
309
+ # template support
310
+ #
215
311
  class Template
216
312
  def initialize(&block)
217
313
  @block = block
218
314
  @template = block.call.to_s
219
315
  end
220
316
  def expand(b=nil)
221
- ERB.new(Util.unindent(@template)).result(b||@block)
317
+ ERB.new(Util.unindent(@template)).result((b||@block).binding)
222
318
  end
223
319
  alias_method 'to_s', 'expand'
224
320
  end
225
321
  def Template(*args, &block) Template.new(*args, &block) end
226
322
 
323
+ # colored console output support
324
+ #
325
+ This.ansi = {
326
+ :clear => "\e[0m",
327
+ :reset => "\e[0m",
328
+ :erase_line => "\e[K",
329
+ :erase_char => "\e[P",
330
+ :bold => "\e[1m",
331
+ :dark => "\e[2m",
332
+ :underline => "\e[4m",
333
+ :underscore => "\e[4m",
334
+ :blink => "\e[5m",
335
+ :reverse => "\e[7m",
336
+ :concealed => "\e[8m",
337
+ :black => "\e[30m",
338
+ :red => "\e[31m",
339
+ :green => "\e[32m",
340
+ :yellow => "\e[33m",
341
+ :blue => "\e[34m",
342
+ :magenta => "\e[35m",
343
+ :cyan => "\e[36m",
344
+ :white => "\e[37m",
345
+ :on_black => "\e[40m",
346
+ :on_red => "\e[41m",
347
+ :on_green => "\e[42m",
348
+ :on_yellow => "\e[43m",
349
+ :on_blue => "\e[44m",
350
+ :on_magenta => "\e[45m",
351
+ :on_cyan => "\e[46m",
352
+ :on_white => "\e[47m"
353
+ }
354
+ def say(phrase, *args)
355
+ options = args.last.is_a?(Hash) ? args.pop : {}
356
+ options[:color] = args.shift.to_s.to_sym unless args.empty?
357
+ keys = options.keys
358
+ keys.each{|key| options[key.to_s.to_sym] = options.delete(key)}
359
+
360
+ color = options[:color]
361
+ bold = options.has_key?(:bold)
362
+
363
+ parts = [phrase]
364
+ parts.unshift(This.ansi[color]) if color
365
+ parts.unshift(This.ansi[:bold]) if bold
366
+ parts.push(This.ansi[:clear]) if parts.size > 1
367
+
368
+ method = options[:method] || :puts
369
+
370
+ Kernel.send(method, parts.join)
371
+ end
372
+
373
+ # always run out of the project dir
374
+ #
227
375
  Dir.chdir(This.dir)
228
376
  }
data/lib/shared.rb CHANGED
@@ -38,9 +38,13 @@
38
38
 
39
39
  unless defined?(Shared)
40
40
  module Shared
41
- Shared::VERSION = '1.1.0' unless defined?(Shared::VERSION)
41
+ Shared::VERSION = '1.1.1' unless defined?(Shared::VERSION)
42
42
  def version() Shared::VERSION end
43
43
 
44
+ def Shared.description
45
+ 'a clean way to factor class/instance mixins in ruby'
46
+ end
47
+
44
48
  Code = {}
45
49
 
46
50
  def load key
data/shared.gemspec CHANGED
@@ -3,24 +3,28 @@
3
3
 
4
4
  Gem::Specification::new do |spec|
5
5
  spec.name = "shared"
6
- spec.version = "1.1.0"
6
+ spec.version = "1.1.1"
7
7
  spec.platform = Gem::Platform::RUBY
8
8
  spec.summary = "shared"
9
+ spec.description = "a clean way to factor class/instance mixins in ruby"
10
+ spec.license = "same as ruby's"
11
+
12
+ spec.files =
13
+ ["README", "Rakefile", "lib", "lib/shared.rb", "readme.erb", "shared.gemspec"]
9
14
 
10
- spec.files = ["lib", "lib/shared.rb", "Rakefile", "README", "readme.erb", "shared.gemspec"]
11
15
  spec.executables = []
12
16
 
13
17
  spec.require_path = "lib"
14
18
 
15
- spec.has_rdoc = true
16
19
  spec.test_files = nil
17
- #spec.add_dependency 'lib', '>= version'
18
- #spec.add_dependency 'fattr'
20
+
21
+ ### spec.add_dependency 'lib', '>= version'
22
+ #### spec.add_dependency 'map'
19
23
 
20
24
  spec.extensions.push(*[])
21
25
 
22
26
  spec.rubyforge_project = "codeforpeople"
23
27
  spec.author = "Ara T. Howard"
24
28
  spec.email = "ara.t.howard@gmail.com"
25
- spec.homepage = "http://github.com/ahoward/shared/tree/master"
29
+ spec.homepage = "https://github.com/ahoward/shared"
26
30
  end
metadata CHANGED
@@ -1,58 +1,48 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: shared
3
- version: !ruby/object:Gem::Version
4
- version: 1.1.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.1
5
5
  platform: ruby
6
- authors:
6
+ authors:
7
7
  - Ara T. Howard
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
-
12
- date: 2009-07-28 00:00:00 -06:00
13
- default_executable:
11
+ date: 2014-02-15 00:00:00.000000000 Z
14
12
  dependencies: []
15
-
16
- description:
13
+ description: a clean way to factor class/instance mixins in ruby
17
14
  email: ara.t.howard@gmail.com
18
15
  executables: []
19
-
20
16
  extensions: []
21
-
22
17
  extra_rdoc_files: []
23
-
24
- files:
25
- - lib
26
- - lib/shared.rb
27
- - Rakefile
18
+ files:
28
19
  - README
20
+ - Rakefile
21
+ - lib/shared.rb
29
22
  - readme.erb
30
23
  - shared.gemspec
31
- has_rdoc: true
32
- homepage: http://github.com/ahoward/shared/tree/master
24
+ homepage: https://github.com/ahoward/shared
25
+ licenses:
26
+ - same as ruby's
27
+ metadata: {}
33
28
  post_install_message:
34
29
  rdoc_options: []
35
-
36
- require_paths:
30
+ require_paths:
37
31
  - lib
38
- required_ruby_version: !ruby/object:Gem::Requirement
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- version: "0"
43
- version:
44
- required_rubygems_version: !ruby/object:Gem::Requirement
45
- requirements:
46
- - - ">="
47
- - !ruby/object:Gem::Version
48
- version: "0"
49
- version:
32
+ required_ruby_version: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ! '>='
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ required_rubygems_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
50
42
  requirements: []
51
-
52
43
  rubyforge_project: codeforpeople
53
- rubygems_version: 1.3.1
44
+ rubygems_version: 2.0.3
54
45
  signing_key:
55
- specification_version: 2
46
+ specification_version: 4
56
47
  summary: shared
57
48
  test_files: []
58
-