vertable 1.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 85d4651129e96420200cb3a46dfabf5a5886b21c
4
+ data.tar.gz: c05343ceda254f7c23e5534f45e5a7caa16ccb8e
5
+ SHA512:
6
+ metadata.gz: 245037ac88ad35b7dd5f2f84dfb1fecfae54e9c01774b401830f5c5d84635692ecd10f3fd2b0aa9d998d94b2232dd7535e48a9b25f1164ee74440ca8d7e5fc29
7
+ data.tar.gz: 0a7101d7dcf2baa1a2a7cb8ee161360c8c7423453334a229c60446945c346947ee5f2f4c4ddaa28727bf3a31ce68b6c6241640149a62df6f06ce4d67b4cb9939
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in vertable.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 David Brady
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,29 @@
1
+ # Vertable
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'vertable'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install vertable
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it ( https://github.com/[my-github-username]/vertable/fork )
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create a new Pull Request
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require_relative '../lib/vertable'
3
+ puts Vertable::Vertable.new($stdin.read.split(/\n/))
@@ -0,0 +1,82 @@
1
+ # vertable - Given a list of items, output that list as a vertically
2
+ # sorted table that fits on the console. I.e. it displays a list of
3
+ # strings on the console the same way that `ls` does. For example, if
4
+ # the console were 60 columns wide, and we gave it the following list:
5
+ #
6
+ # aardvark, aardwolf, Aaron, Aaronic, Aaronical, Aaronite, Aaronitic,
7
+ # Aaru, Ab, aba, Ababdeh, Ababua, abac, abaca, abacate, abacay,
8
+ # abacinate, abacination, abaciscus, abacist, aback, abactinal,
9
+ # abactinally, abaction, abactor, abaculus, abacus, Abadite, abaff,
10
+ # abaft
11
+
12
+
13
+ # The tabular output would look like this:
14
+ #
15
+ # |<-------------------------- (60) -------------------------->|
16
+ # |Aaron Ab aba abacination abaction |
17
+ # |Aaronic Ababdeh abac abaciscus abactor |
18
+ # |Aaronical Ababua abaca abacist abaculus |
19
+ # |Aaronite Abadite abacate aback abacus |
20
+ # |Aaronitic aardvark abacay abactinal abaff |
21
+ # |Aaru aardwolf abacinate abactinally abaft |
22
+ #
23
+ # TODO: Right now all columns are the same size, the way ls does. This
24
+ # is easy, but a waste of space. Size each column to fit in order to
25
+ # get more columns. For example, when dumping ruby methods, the first
26
+ # twenty or so methods are often "!", "!=", "!~", "<=>", "==", "===",
27
+ # etc, which fill up the first column. One braindead algorithm to try
28
+ # doing this is to do the standard division, then ask each word stack
29
+ # how wide it is. We sum these and add stacks-1, and if it's <= width,
30
+ # then it fits. So we forcibly increase the number of columns and
31
+ # remeasure. Beware that this also requires that each stack have its
32
+ # own format_string corresponding to its length.
33
+
34
+ require 'io/console'
35
+
36
+ module Vertable
37
+ class Vertable
38
+ attr_reader :wordlist, :width
39
+
40
+ def initialize(wordlist, width=$stdout.winsize.last)
41
+ @wordlist, @width = wordlist, width
42
+ end
43
+
44
+ # Number of columns of words on the screen. Add 1 to width to allow
45
+ # for the fact that column_width adds 1 space per word, but we don't
46
+ # need the last space--it pads against the right edge.
47
+ def num_columns
48
+ (width+1)/column_width
49
+ end
50
+
51
+ # Width of a column in characters--including the padding char
52
+ def column_width
53
+ longest_word_length + 1
54
+ end
55
+
56
+ def words_per_column
57
+ (wordlist.size.to_f / num_columns).ceil
58
+ end
59
+
60
+ def longest_word_length
61
+ @longest_word_length ||= longest_word.size
62
+ end
63
+
64
+ def longest_word
65
+ @longest_word ||= wordlist.sort_by(&:size).last
66
+ end
67
+
68
+ def format_string
69
+ "%-#{longest_word_length}s"
70
+ end
71
+
72
+ def to_s
73
+ str = ''
74
+ columns = wordlist.each_slice(words_per_column)
75
+ columns.first.size.times do |row_index|
76
+ str += columns.map { |column| format_string % column[row_index] } * ' '
77
+ str += "\n"
78
+ end
79
+ str
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,3 @@
1
+ module Vertable
2
+ VERSION = "1.0.1"
3
+ end
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'vertable/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "vertable"
8
+ spec.version = Vertable::VERSION
9
+ spec.authors = ["David Brady"]
10
+ spec.email = ["dbrady@shinybit.com"]
11
+ spec.summary = %q{Display list of strings in a vertically-sorted table}
12
+ spec.description = %q{Display list of strings in a vertically-sorted table, similar to ls}
13
+ spec.homepage = "https://github.com/dbrady/vertable"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.6"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ end
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vertable
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ platform: ruby
6
+ authors:
7
+ - David Brady
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-07-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description: Display list of strings in a vertically-sorted table, similar to ls
42
+ email:
43
+ - dbrady@shinybit.com
44
+ executables:
45
+ - vertable
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - ".gitignore"
50
+ - Gemfile
51
+ - LICENSE.txt
52
+ - README.md
53
+ - Rakefile
54
+ - bin/vertable
55
+ - lib/vertable.rb
56
+ - lib/vertable/version.rb
57
+ - vertable.gemspec
58
+ homepage: https://github.com/dbrady/vertable
59
+ licenses:
60
+ - MIT
61
+ metadata: {}
62
+ post_install_message:
63
+ rdoc_options: []
64
+ require_paths:
65
+ - lib
66
+ required_ruby_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ requirements: []
77
+ rubyforge_project:
78
+ rubygems_version: 2.2.2
79
+ signing_key:
80
+ specification_version: 4
81
+ summary: Display list of strings in a vertically-sorted table
82
+ test_files: []