simpletable 0.1.1 → 0.2.0

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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YzY0YmY5OWYzNTA5MjBjYmE3ZjZmNTU3NjU4NmJhYThlZjBjZWI0Nw==
4
+ ZTk0MTBlYzY0Y2JhNDJkMzk5YTJhYTI1OGNjYTIyYzE2ZmQ3YWJiYw==
5
5
  data.tar.gz: !binary |-
6
- ZDI1OTU0MzVhZTkzMTIyMDkwZjUyYTZmMmQ0YWI0MTRmMmFjMzA2Yg==
6
+ ZTY2MzliYmNkOTJmYjQ2OTRjMDdmZGZiOWRjNTE1YzQ1MWM3MzcyNw==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- NjVkM2MwYjU0NDYyNzIyZjg3NGY4OWM2NjY2Yzk2ZGY0MTVlNzIzNDA4NDYw
10
- MTAxNGIzNWE0YmI2MDYyZThiNzZiM2FmMjE3MjUzYzk1ZmE5Yzk0NjIyNjNl
11
- MmM3MjU1MzAyOTEzMGRjNGM0MmM2N2QzNWVkMGRhMjA2NDA2YTk=
9
+ MTI5Y2NmMjQzODZjNmRhNTVhNjIwZWMxYWNjOTJlYTM0ZmNkMDBkY2IyZTM0
10
+ ZGUyNmE4MjI1MGQ5YmI1YjUyZWI3OTY4YTRmYjdmYmQ1OTZjZjkyMjQxZWE2
11
+ YmVlMjBhMmJkZGFhZGFiMjE5NGNkZWZlYzhhMjYzNDNkOGEzZmI=
12
12
  data.tar.gz: !binary |-
13
- OTE1MGM2M2NlMGMzYTNkOWM1YzIyMWIxNDA2MzM0MDgxOTczYjA4ZWU5OTAw
14
- NWYyNjIxMTU4ZDNhNzMyODMxODI3NDE4OTJhMTMzMjFhMmQ1MzVkZTkxODEx
15
- MGYwZDQ5NTMzMDAwOGNhOTgxMDI4NDBlMWI3NDJjNWUxY2VmNDc=
13
+ OGU3MzQzMmQ0ZTIxMThjYjgyOGQ4ZDNlYjRmZWM4MzE2MTg5MWE2YTg3Zjg0
14
+ NzI2N2RjZDIwZTNhZDI2OGNlYTUwODNkMDc3ZTFiNTA5ODBiNDUzN2NkYjFk
15
+ MTY0NDhmOTZjZTdkMjJmNzAzNjVkZGE3ZjcwOWFjMjA0M2RjN2I=
data/README.md CHANGED
@@ -1,29 +1,28 @@
1
- # simpletable
1
+ simpletable
2
+ ========
3
+ A Ruby library for easily formatting tables.
4
+
5
+ * simpletable on RubyGems: https://rubygems.org/gems/simpletable
6
+
7
+ Installation
8
+ ----
9
+ ```
10
+ gem install simpletable
11
+ ```
12
+
13
+ Basic Usage
14
+ -----
15
+ See [lib/test.rb](lib/test.rb) for usage samples.
16
+
17
+ Development
18
+ -----
19
+ #### Build:
20
+ ```
21
+ rake build
22
+ ```
23
+
24
+ #### Install:
25
+ ```
26
+ rake install
27
+ ```
2
28
 
3
- TODO: Write a gem description
4
-
5
- ## Installation
6
-
7
- Add this line to your application's Gemfile:
8
-
9
- gem 'simpletable'
10
-
11
- And then execute:
12
-
13
- $ bundle
14
-
15
- Or install it yourself as:
16
-
17
- $ gem install simpletable
18
-
19
- ## Usage
20
-
21
- TODO: Write usage instructions here
22
-
23
- ## Contributing
24
-
25
- 1. Fork it
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 new Pull Request
data/lib/simpletable.rb CHANGED
@@ -3,30 +3,50 @@ require "simpletable/version"
3
3
  DEFAULT_DIVIDER = "="
4
4
  DEFAULT_PADDING = 2
5
5
 
6
- module SimpleTable
7
- def create( objects, titles, methods, options = {} )
6
+ class SimpleTable
7
+ def from_objects( objects, titles, methods, options = {} )
8
8
  raise "Mismatched number of methods and column titles" if titles.length != methods.length
9
+ @objects = objects
10
+ @titles = titles
11
+ @methods = methods
12
+ @divider = options[:divider] || DEFAULT_DIVIDER
13
+ @padding = options[:padding] || DEFAULT_PADDING
14
+ self
15
+ end
9
16
 
10
- divider = options[:divider] || DEFAULT_DIVIDER
11
- padding = options[:padding] || DEFAULT_PADDING
12
-
17
+ def print_text
13
18
  widths = []
14
19
  # calculate column widths
15
- titles.zip(methods).each do |title,method|
16
- widths << objects.collect { |o| o.send(method).to_s }.push(title).group_by(&:size).max.first + padding
20
+ @titles.zip(@methods).each do |title,method|
21
+ widths << @objects.collect { |o| o.send(method).to_s }.push(title).group_by(&:size).max.first + @padding
17
22
  end
18
23
 
19
24
  # print table header
20
- print_row(titles,widths)
21
- puts divider * (widths.inject(:+) - padding) # sum of column widths - padding
25
+ print_row(@titles,widths)
26
+ puts @divider * (widths.inject(:+) - @padding) # sum of column widths - padding
22
27
 
23
28
  # print table body
24
- objects.each do |o|
25
- data = methods.collect{ |m| o.send(m) } # collect row data
29
+ @objects.each do |o|
30
+ data = @methods.collect{ |m| o.send(m) } # collect row data
26
31
  print_row(data,widths)
27
32
  end
28
33
  end
29
34
 
35
+ def print_csv(separator=",")
36
+ # quote strings w/ embedded separator characters
37
+ titles = []
38
+ @titles.each {|t| titles << (t.include?(separator) ? t.gsub(t,"\"#{t}\"") : t)}
39
+
40
+ # print table header
41
+ puts titles.join separator
42
+
43
+ # print table body
44
+ @objects.each do |o|
45
+ data = @methods.collect{ |m| o.send(m) } # collect row data
46
+ puts data.join separator
47
+ end
48
+ end
49
+
30
50
  private
31
51
  def print_row(data,widths)
32
52
  data.zip(widths).each { |d,w| print d.to_s.ljust(w) }
@@ -1,3 +1,3 @@
1
- module SimpleTable
2
- VERSION = "0.1.1"
1
+ module SimpleTableConst
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/test.rb CHANGED
@@ -11,10 +11,8 @@ class TestObject
11
11
  end
12
12
  end
13
13
 
14
- include SimpleTable
15
-
16
14
  titles = [ "Title A", "Title B is very long, the longest", "Title C" ]
17
- titles2 = [ "Title A", "Title B", "Title C is very long, the longest" ]
15
+ titles2 = [ "Title A", "Title B", "Title C is very long; the longest" ]
18
16
  methods = [ :p1, :p2, :p3 ]
19
17
 
20
18
  objs = []
@@ -24,7 +22,24 @@ objs << TestObject.new("eleven","twelve","thirteen")
24
22
  objs << TestObject.new("fourteen","fifteen","sixteen")
25
23
  objs << TestObject.new("thisisthebiggestword","thisisthebiggestword","thisisthebiggestword")
26
24
 
27
- SimpleTable.create(objs,titles,methods)
28
- SimpleTable.create(objs,titles,methods,{:divider=>"*"})
29
- SimpleTable.create(objs,titles,methods,{:divider=>"-",:padding=>5})
30
- SimpleTable.create(objs,titles2,methods,{:divider=>"-",:padding=>5})
25
+ t = SimpleTable.new
26
+
27
+ t.from_objects(objs,titles,methods).print_text
28
+ print "\n"
29
+ t.print_csv
30
+ print "\n"
31
+
32
+ t.from_objects(objs,titles,methods,{:divider=>"*"}).print_text
33
+ print "\n"
34
+ t.print_csv
35
+ print "\n"
36
+
37
+ t.from_objects(objs,titles,methods,{:divider=>"-",:padding=>5}).print_text
38
+ print "\n"
39
+ t.print_csv
40
+ print "\n"
41
+
42
+ t.from_objects(objs,titles2,methods,{:divider=>"-",:padding=>5}).print_text
43
+ print "\n"
44
+ t.print_csv(";")
45
+ print "\n"
data/simpletable.gemspec CHANGED
@@ -5,7 +5,7 @@ require 'simpletable/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "simpletable"
8
- spec.version = SimpleTable::VERSION
8
+ spec.version = SimpleTableConst::VERSION
9
9
  spec.authors = ["Brady Turner"]
10
10
  spec.email = ["bradyaturner@gmail.com"]
11
11
  spec.description = %q{Create and format tables}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simpletable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brady Turner