irbtab 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
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: []