irbtab 0.0.5

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. data/README +38 -0
  2. data/Rakefile +373 -0
  3. data/irbtab.gemspec +27 -0
  4. data/lib/irbtab.rb +70 -0
  5. metadata +83 -0
data/README ADDED
@@ -0,0 +1,38 @@
1
+ NAME
2
+ irbtab
3
+
4
+ DESCRIPTION
5
+ irbtab allows you to copy and paste from irb arrays to a spreadsheet (tab delimited)
6
+
7
+ it works on osx, linux and possibly windows.
8
+
9
+ SYNOPSIS
10
+ 0) install the gem
11
+
12
+ gem install irbtab
13
+
14
+ 1) in your .irbrc do
15
+
16
+ require 'rubygems' unless defined?(Gem)
17
+
18
+ require 'irbtab'
19
+
20
+ 2) now in irb you could do
21
+
22
+ irbt [['a', 'two dimentional'],['array', 'for your spreadsheet']]
23
+
24
+ 3) if you've copied something from a spreadsheet you can simply do
25
+
26
+ irbt
27
+
28
+ to paste it into an ruby array in irb
29
+
30
+ NOTES
31
+ - you can use the commands 'copy' and 'paste' if you love carpal tunnel
32
+
33
+ - windows past support is via
34
+
35
+ http://www.c3scripts.com/tutorials/msdos/paste.html#exe
36
+
37
+ LICENSE
38
+ MIT License
data/Rakefile ADDED
@@ -0,0 +1,373 @@
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
+
7
+ task :default do
8
+ puts((Rake::Task.tasks.map{|task| task.name.gsub(/::/,':')} - ['default']).sort)
9
+ end
10
+
11
+ task :test do
12
+ run_tests!
13
+ end
14
+
15
+ namespace :test do
16
+ task(:unit){ run_tests!(:unit) }
17
+ task(:functional){ run_tests!(:functional) }
18
+ task(:integration){ run_tests!(:integration) }
19
+ end
20
+
21
+ def run_tests!(which = nil)
22
+ which ||= '**'
23
+ test_dir = File.join(This.dir, "test")
24
+ test_glob ||= File.join(test_dir, "#{ which }/**_test.rb")
25
+ test_rbs = Dir.glob(test_glob).sort
26
+
27
+ div = ('=' * 119)
28
+ line = ('-' * 119)
29
+ helper = "-r ./test/helper.rb" if test(?e, "./test/helper.rb")
30
+
31
+ test_rbs.each_with_index do |test_rb, index|
32
+ testno = index + 1
33
+ command = "#{ This.ruby } -I ./lib -I ./test/lib #{ helper } #{ test_rb }"
34
+
35
+ puts
36
+ say(div, :color => :cyan, :bold => true)
37
+ say("@#{ testno } => ", :bold => true, :method => :print)
38
+ say(command, :color => :cyan, :bold => true)
39
+ say(line, :color => :cyan, :bold => true)
40
+
41
+ system(command)
42
+
43
+ say(line, :color => :cyan, :bold => true)
44
+
45
+ status = $?.exitstatus
46
+
47
+ if status.zero?
48
+ say("@#{ testno } <= ", :bold => true, :color => :white, :method => :print)
49
+ say("SUCCESS", :color => :green, :bold => true)
50
+ else
51
+ say("@#{ testno } <= ", :bold => true, :color => :white, :method => :print)
52
+ say("FAILURE", :color => :red, :bold => true)
53
+ end
54
+ say(line, :color => :cyan, :bold => true)
55
+
56
+ exit(status) unless status.zero?
57
+ end
58
+ end
59
+
60
+
61
+ task :gemspec do
62
+ ignore_extensions = ['git', 'svn', 'tmp', /sw./, 'bak', 'gem']
63
+ ignore_directories = ['pkg']
64
+ ignore_files = ['test/log']
65
+
66
+ shiteless =
67
+ lambda do |list|
68
+ list.delete_if do |entry|
69
+ next unless test(?e, entry)
70
+ extension = File.basename(entry).split(%r/[.]/).last
71
+ ignore_extensions.any?{|ext| ext === extension}
72
+ end
73
+ list.delete_if do |entry|
74
+ next unless test(?d, entry)
75
+ dirname = File.expand_path(entry)
76
+ ignore_directories.any?{|dir| File.expand_path(dir) == dirname}
77
+ end
78
+ list.delete_if do |entry|
79
+ next unless test(?f, entry)
80
+ filename = File.expand_path(entry)
81
+ ignore_files.any?{|file| File.expand_path(file) == filename}
82
+ end
83
+ end
84
+
85
+ lib = This.lib
86
+ object = This.object
87
+ version = This.version
88
+ files = shiteless[Dir::glob("**/**")]
89
+ executables = shiteless[Dir::glob("bin/*")].map{|exe| File.basename(exe)}
90
+ #has_rdoc = true #File.exist?('doc')
91
+ test_files = "test/#{ lib }.rb" if File.file?("test/#{ lib }.rb")
92
+ summary = object.respond_to?(:summary) ? object.summary : "summary: #{ lib } kicks the ass"
93
+ description = object.respond_to?(:description) ? object.description : "description: #{ lib } kicks the ass"
94
+
95
+ if This.extensions.nil?
96
+ This.extensions = []
97
+ extensions = This.extensions
98
+ %w( Makefile configure extconf.rb ).each do |ext|
99
+ extensions << ext if File.exists?(ext)
100
+ end
101
+ end
102
+ extensions = [extensions].flatten.compact
103
+
104
+ template =
105
+ if test(?e, 'gemspec.erb')
106
+ Template{ IO.read('gemspec.erb') }
107
+ else
108
+ Template {
109
+ <<-__
110
+ ## #{ lib }.gemspec
111
+ #
112
+
113
+ Gem::Specification::new do |spec|
114
+ spec.name = #{ lib.inspect }
115
+ spec.version = #{ version.inspect }
116
+ spec.platform = Gem::Platform::RUBY
117
+ spec.summary = #{ lib.inspect }
118
+ spec.description = #{ description.inspect }
119
+
120
+ spec.files =\n#{ files.sort.pretty_inspect }
121
+ spec.executables = #{ executables.inspect }
122
+
123
+ spec.require_path = "lib"
124
+
125
+ spec.test_files = #{ test_files.inspect }
126
+
127
+ ### spec.add_dependency 'lib', '>= version'
128
+ #### spec.add_dependency 'map'
129
+ spec.add_dependency 'systemu'
130
+
131
+ spec.extensions.push(*#{ extensions.inspect })
132
+
133
+ spec.rubyforge_project = #{ This.rubyforge_project.inspect }
134
+ spec.author = #{ This.author.inspect }
135
+ spec.email = #{ This.email.inspect }
136
+ spec.homepage = #{ This.homepage.inspect }
137
+ end
138
+ __
139
+ }
140
+ end
141
+
142
+ Fu.mkdir_p(This.pkgdir)
143
+ gemspec = "#{ lib }.gemspec"
144
+ open(gemspec, "w"){|fd| fd.puts(template)}
145
+ This.gemspec = gemspec
146
+ end
147
+
148
+ task :gem => [:clean, :gemspec] do
149
+ Fu.mkdir_p(This.pkgdir)
150
+ before = Dir['*.gem']
151
+ cmd = "gem build #{ This.gemspec }"
152
+ `#{ cmd }`
153
+ after = Dir['*.gem']
154
+ gem = ((after - before).first || after.first) or abort('no gem!')
155
+ Fu.mv(gem, This.pkgdir)
156
+ This.gem = File.join(This.pkgdir, File.basename(gem))
157
+ end
158
+
159
+ task :readme do
160
+ samples = ''
161
+ prompt = '~ > '
162
+ lib = This.lib
163
+ version = This.version
164
+
165
+ Dir['sample*/*'].sort.each do |sample|
166
+ samples << "\n" << " <========< #{ sample } >========>" << "\n\n"
167
+
168
+ cmd = "cat #{ sample }"
169
+ samples << Util.indent(prompt + cmd, 2) << "\n\n"
170
+ samples << Util.indent(`#{ cmd }`, 4) << "\n"
171
+
172
+ cmd = "ruby #{ sample }"
173
+ samples << Util.indent(prompt + cmd, 2) << "\n\n"
174
+
175
+ cmd = "ruby -e'STDOUT.sync=true; exec %(ruby -I ./lib #{ sample })'"
176
+ samples << Util.indent(`#{ cmd } 2>&1`, 4) << "\n"
177
+ end
178
+
179
+ template =
180
+ if test(?e, 'readme.erb')
181
+ Template{ IO.read('readme.erb') }
182
+ else
183
+ Template {
184
+ <<-__
185
+ NAME
186
+ #{ lib }
187
+
188
+ DESCRIPTION
189
+
190
+ INSTALL
191
+ gem install #{ lib }
192
+
193
+ SAMPLES
194
+ #{ samples }
195
+ __
196
+ }
197
+ end
198
+
199
+ open("README", "w"){|fd| fd.puts template}
200
+ end
201
+
202
+
203
+ task :clean do
204
+ Dir[File.join(This.pkgdir, '**/**')].each{|entry| Fu.rm_rf(entry)}
205
+ end
206
+
207
+
208
+ task :release => [:clean, :gemspec, :gem] do
209
+ gems = Dir[File.join(This.pkgdir, '*.gem')].flatten
210
+ raise "which one? : #{ gems.inspect }" if gems.size > 1
211
+ raise "no gems?" if gems.size < 1
212
+
213
+ cmd = "gem push #{ This.gem }"
214
+ puts cmd
215
+ puts
216
+ system(cmd)
217
+ abort("cmd(#{ cmd }) failed with (#{ $?.inspect })") unless $?.exitstatus.zero?
218
+
219
+ cmd = "rubyforge login && rubyforge add_release #{ This.rubyforge_project } #{ This.lib } #{ This.version } #{ This.gem }"
220
+ puts cmd
221
+ puts
222
+ system(cmd)
223
+ abort("cmd(#{ cmd }) failed with (#{ $?.inspect })") unless $?.exitstatus.zero?
224
+ end
225
+
226
+
227
+
228
+
229
+
230
+ BEGIN {
231
+ # support for this rakefile
232
+ #
233
+ $VERBOSE = nil
234
+
235
+ require 'ostruct'
236
+ require 'erb'
237
+ require 'fileutils'
238
+ require 'rbconfig'
239
+ require 'pp'
240
+
241
+ # fu shortcut
242
+ #
243
+ Fu = FileUtils
244
+
245
+ # cache a bunch of stuff about this rakefile/environment
246
+ #
247
+ This = OpenStruct.new
248
+
249
+ This.file = File.expand_path(__FILE__)
250
+ This.dir = File.dirname(This.file)
251
+ This.pkgdir = File.join(This.dir, 'pkg')
252
+
253
+ # grok lib
254
+ #
255
+ lib = ENV['LIB']
256
+ unless lib
257
+ lib = File.basename(Dir.pwd).sub(/[-].*$/, '')
258
+ end
259
+ This.lib = lib
260
+
261
+ # grok version
262
+ #
263
+ version = ENV['VERSION']
264
+ unless version
265
+ require "./lib/#{ This.lib }"
266
+ This.name = lib.capitalize
267
+ This.object = eval(This.name)
268
+ version = This.object.send(:version)
269
+ end
270
+ This.version = version
271
+
272
+ # we need to know the name of the lib an it's version
273
+ #
274
+ abort('no lib') unless This.lib
275
+ abort('no version') unless This.version
276
+
277
+ # discover full path to this ruby executable
278
+ #
279
+ c = Config::CONFIG
280
+ bindir = c["bindir"] || c['BINDIR']
281
+ ruby_install_name = c['ruby_install_name'] || c['RUBY_INSTALL_NAME'] || 'ruby'
282
+ ruby_ext = c['EXEEXT'] || ''
283
+ ruby = File.join(bindir, (ruby_install_name + ruby_ext))
284
+ This.ruby = ruby
285
+
286
+ # some utils
287
+ #
288
+ module Util
289
+ def indent(s, n = 2)
290
+ s = unindent(s)
291
+ ws = ' ' * n
292
+ s.gsub(%r/^/, ws)
293
+ end
294
+
295
+ def unindent(s)
296
+ indent = nil
297
+ s.each_line do |line|
298
+ next if line =~ %r/^\s*$/
299
+ indent = line[%r/^\s*/] and break
300
+ end
301
+ indent ? s.gsub(%r/^#{ indent }/, "") : s
302
+ end
303
+ extend self
304
+ end
305
+
306
+ # template support
307
+ #
308
+ class Template
309
+ def initialize(&block)
310
+ @block = block
311
+ @template = block.call.to_s
312
+ end
313
+ def expand(b=nil)
314
+ ERB.new(Util.unindent(@template)).result((b||@block).binding)
315
+ end
316
+ alias_method 'to_s', 'expand'
317
+ end
318
+ def Template(*args, &block) Template.new(*args, &block) end
319
+
320
+ # colored console output support
321
+ #
322
+ This.ansi = {
323
+ :clear => "\e[0m",
324
+ :reset => "\e[0m",
325
+ :erase_line => "\e[K",
326
+ :erase_char => "\e[P",
327
+ :bold => "\e[1m",
328
+ :dark => "\e[2m",
329
+ :underline => "\e[4m",
330
+ :underscore => "\e[4m",
331
+ :blink => "\e[5m",
332
+ :reverse => "\e[7m",
333
+ :concealed => "\e[8m",
334
+ :black => "\e[30m",
335
+ :red => "\e[31m",
336
+ :green => "\e[32m",
337
+ :yellow => "\e[33m",
338
+ :blue => "\e[34m",
339
+ :magenta => "\e[35m",
340
+ :cyan => "\e[36m",
341
+ :white => "\e[37m",
342
+ :on_black => "\e[40m",
343
+ :on_red => "\e[41m",
344
+ :on_green => "\e[42m",
345
+ :on_yellow => "\e[43m",
346
+ :on_blue => "\e[44m",
347
+ :on_magenta => "\e[45m",
348
+ :on_cyan => "\e[46m",
349
+ :on_white => "\e[47m"
350
+ }
351
+ def say(phrase, *args)
352
+ options = args.last.is_a?(Hash) ? args.pop : {}
353
+ options[:color] = args.shift.to_s.to_sym unless args.empty?
354
+ keys = options.keys
355
+ keys.each{|key| options[key.to_s.to_sym] = options.delete(key)}
356
+
357
+ color = options[:color]
358
+ bold = options.has_key?(:bold)
359
+
360
+ parts = [phrase]
361
+ parts.unshift(This.ansi[color]) if color
362
+ parts.unshift(This.ansi[:bold]) if bold
363
+ parts.push(This.ansi[:clear]) if parts.size > 1
364
+
365
+ method = options[:method] || :puts
366
+
367
+ Kernel.send(method, parts.join)
368
+ end
369
+
370
+ # always run out of the project dir
371
+ #
372
+ Dir.chdir(This.dir)
373
+ }
data/irbtab.gemspec ADDED
@@ -0,0 +1,27 @@
1
+ ## irbtab.gemspec
2
+
3
+ Gem::Specification::new do |spec|
4
+ spec.name = "irbtab"
5
+ spec.version = "0.0.5"
6
+ spec.platform = Gem::Platform::RUBY
7
+ spec.summary = "copy and paste from spreadsheet to ruby arrays in irb"
8
+ spec.description = "description: easy copy and paste between a spreadsheet and ruby arrays in irb or rails console. Based on irbcp by Ara T. Howard"
9
+
10
+ spec.files =["README", "Rakefile", "irbtab.gemspec", "lib", "lib/irbtab.rb"]
11
+
12
+ spec.executables = []
13
+
14
+ spec.require_path = "lib"
15
+
16
+ spec.test_files = nil
17
+
18
+ spec.add_dependency 'systemu'
19
+ spec.add_dependency 'fastercsv'
20
+
21
+ spec.extensions.push(*[])
22
+
23
+ spec.authors = ["Mark Suppes", "Ara T. Howard"]
24
+ spec.email = "famulus.fusion@gmail.com"
25
+ spec.homepage = "https://github.com/famulus/irbcp"
26
+ spec.license = 'MIT'
27
+ end
data/lib/irbtab.rb ADDED
@@ -0,0 +1,70 @@
1
+ require 'systemu'
2
+ if RUBY_VERSION < "1.9"
3
+ require "faster_csv"
4
+ CSV = FCSV
5
+ else
6
+ require "csv"
7
+ end
8
+
9
+
10
+
11
+ module Irbtab
12
+ Version = '0.0.5'
13
+
14
+ def Irbtab.version() Irbtab::Version end
15
+
16
+
17
+ case RUBY_PLATFORM
18
+ when /darwin/
19
+ Copy = 'pbcopy'
20
+ Paste = 'pbpaste'
21
+
22
+ when /linux/
23
+ Copy = 'xsel -clipboard -input'
24
+ Paste = 'xsel -clipboard -output'
25
+
26
+ when /windoze/
27
+ ## Windows Server 2003 , Windows Vista , Windows 7. Anything else don t have and don t matter anymore :)
28
+ #
29
+ Copy = 'clip.exe'
30
+ ## download paste.exe from http://www.c3scripts.com/tutorials/msdos/paste.html#exe
31
+ #
32
+ Paste = 'paste.exe'
33
+ end
34
+
35
+ def copy(args)
36
+ stdin = CSV.generate({:col_sep => "\t"}) do |csv|
37
+ args.each { |i| csv << i }
38
+ end
39
+
40
+
41
+ systemu(Copy, :stdin => stdin)
42
+ stdin
43
+ end
44
+
45
+ def paste(*args)
46
+ stdout = ''
47
+ systemu(Paste, :stdout => stdout)
48
+ CSV.parse(stdout, { :col_sep => "\t" })
49
+ end
50
+
51
+ def irbt(*args)
52
+ args.size==0 ? paste(*args) : copy(*args)
53
+ end
54
+
55
+
56
+ extend(self)
57
+ end
58
+
59
+ IrbTab = Irbtab
60
+
61
+ module Kernel
62
+ private
63
+ %w( copy paste irbt ).each do |method|
64
+ module_eval <<-__
65
+ def #{ method }(*args, &block)
66
+ Irbtab.#{ method }(*args, &block)
67
+ end
68
+ __
69
+ end
70
+ end
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: irbtab
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.5
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Mark Suppes
9
+ - Ara T. Howard
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2013-02-26 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: systemu
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
31
+ - !ruby/object:Gem::Dependency
32
+ name: fastercsv
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ type: :runtime
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ description: ! 'description: easy copy and paste between a spreadsheet and ruby arrays
48
+ in irb or rails console. Based on irbcp by Ara T. Howard'
49
+ email: famulus.fusion@gmail.com
50
+ executables: []
51
+ extensions: []
52
+ extra_rdoc_files: []
53
+ files:
54
+ - README
55
+ - Rakefile
56
+ - irbtab.gemspec
57
+ - lib/irbtab.rb
58
+ homepage: https://github.com/famulus/irbcp
59
+ licenses:
60
+ - MIT
61
+ post_install_message:
62
+ rdoc_options: []
63
+ require_paths:
64
+ - lib
65
+ required_ruby_version: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ requirements: []
78
+ rubyforge_project:
79
+ rubygems_version: 1.8.24
80
+ signing_key:
81
+ specification_version: 3
82
+ summary: copy and paste from spreadsheet to ruby arrays in irb
83
+ test_files: []