console_table 0.1.5 → 0.1.6
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 +4 -4
- data/.travis.yml +11 -0
- data/README.md +130 -1
- data/console_table.gemspec +0 -1
- data/lib/console_table.rb +38 -19
- data/test/test_console_table.rb +72 -5
- metadata +2 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 626c1c75fc83f5be630b35551e96d9bd318f41e5
|
4
|
+
data.tar.gz: c7b122ba03999438a6408ea10ac15c3c1dc7adc1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a5711b3beebcd41a3e353d2a3e3b842316e2201320f52a92e69fab8ac95badda818eda8d475c0cbfd6c03e285b9d18d2f6c05cd71db12300fdb73bfc164c13b1
|
7
|
+
data.tar.gz: 1f4f0a647a7db4da4b4cbd9b691b6ef9d7d4a03cd58bec59e366fe5cf83f10a44dea6d183176da40438d818b07ff18b517550e2fd2fb995c3600b2a0f58ea64a
|
data/.travis.yml
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
language: ruby
|
2
|
+
rvm:
|
3
|
+
- 1.9.3
|
4
|
+
deploy:
|
5
|
+
provider: rubygems
|
6
|
+
api_key:
|
7
|
+
secure: M1I+7IFuje77sZjtQbmvamzihT+NEJpCzb6Eco8AKbJu/swim+2DvojdJHJw3qpjBt+S2u6zPWWc8KqP6ME7YZzydhJKN/rftUow4lyPbJ6ut9wNg4J9EaZgawG/BOm7LESqtj6J5KWrEd2qRn86mLMHO6ZgLsvsKBWR+oMnb+U=
|
8
|
+
gem: console_table
|
9
|
+
on:
|
10
|
+
tags: true
|
11
|
+
repo: rodhilton/console_table
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# ConsoleTable
|
2
2
|
|
3
|
+
[](https://travis-ci.org/rodhilton/console_table)
|
4
|
+
|
3
5
|
ConsoleTable is a helper class that allows you to print data to a console in a clean, table-like fashion. It's intended for use
|
4
6
|
in commandline applications with information-dense output. It checks your terminal window size (or COLUMNS environment variable) to ensure
|
5
7
|
your data will fit, allows you to define table column sizes, and then just supply the ConsoleTable instance with data which will be
|
@@ -243,10 +245,137 @@ end
|
|
243
245
|
|
244
246
|
Note the alternative method of calling `<<` where you can supply an Array instead of a hash, and ConsoleTable will infer from the array order which value goes in what column
|
245
247
|
|
248
|
+
Here's a somewhat more practical example:
|
249
|
+
|
250
|
+
```ruby
|
251
|
+
require 'console_table'
|
252
|
+
|
253
|
+
require 'json'
|
254
|
+
require 'net/http'
|
255
|
+
require 'open-uri'
|
256
|
+
require 'colorize'
|
257
|
+
|
258
|
+
symbols = ["YHOO", "AAPL", "GOOG", "MSFT", "C", "MMM", "KO", "WMT", "GM", "IBM", "MCD", "VZ", "HD", "DIS", "INTC"]
|
259
|
+
|
260
|
+
params = symbols.collect{|s| "\"#{s}\"" }.join(",")
|
261
|
+
url = "http://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.quotes where symbol in (#{params})&env=http://datatables.org/alltables.env&format=json"
|
262
|
+
uri = URI.parse(URI::encode(url))
|
263
|
+
response = Net::HTTP.get_response(uri)
|
264
|
+
json = JSON.parse(response.body)
|
265
|
+
|
266
|
+
table_config = [
|
267
|
+
{:key=>:symbol, :title=>"Symbol", :size=>6},
|
268
|
+
{:key=>:name, :title=>"Name", :size=>17},
|
269
|
+
{:key=>:price, :title=>"Price", :size=>5, :justify=>:right},
|
270
|
+
{:key=>:change, :title=>"Change", :size=>7, :justify=>:right},
|
271
|
+
{:key=>:recommendation, :title=>"Recommendation", :size=>15, :justify=>:right}
|
272
|
+
]
|
273
|
+
|
274
|
+
ConsoleTable.define(table_config, :title=>"Stock Prices") do |table|
|
275
|
+
|
276
|
+
json["query"]["results"]["quote"].each do |j|
|
277
|
+
change = j["ChangeRealtime"]
|
278
|
+
if change.start_with?("+")
|
279
|
+
change = change.green
|
280
|
+
else
|
281
|
+
change = change.red
|
282
|
+
end
|
283
|
+
|
284
|
+
recommendation = (rand() <= 0.5) ? "BUY!".white.on_green.bold.underline : "Sell".yellow
|
285
|
+
|
286
|
+
table << [
|
287
|
+
j["Symbol"].magenta,
|
288
|
+
j["Name"],
|
289
|
+
j["LastTradePriceOnly"],
|
290
|
+
change,
|
291
|
+
recommendation
|
292
|
+
]
|
293
|
+
|
294
|
+
end
|
295
|
+
|
296
|
+
table.footer << "Recommendations randomly generated"
|
297
|
+
|
298
|
+
end
|
299
|
+
```
|
300
|
+
|
301
|
+
And the output:
|
302
|
+
|
303
|
+
```
|
304
|
+
======================================================
|
305
|
+
Stock Prices
|
306
|
+
Symbol Name Price Change Recommendation
|
307
|
+
------------------------------------------------------
|
308
|
+
YHOO Yahoo! Inc. 44.42 +0.495 Sell
|
309
|
+
AAPL Apple Inc. 127.0 +0.62 BUY!
|
310
|
+
GOOG Google Inc. 549.0 +6.08 BUY!
|
311
|
+
MSFT Microsoft Corpora 43.87 +0.78 Sell
|
312
|
+
C Citigroup, Inc. C 51.20 +0.31 BUY!
|
313
|
+
MMM 3M Company Common 165.9 +0.03 Sell
|
314
|
+
KO Coca-Cola Company 41.99 -0.18 BUY!
|
315
|
+
WMT Wal-Mart Stores, 85.81 -0.08 Sell
|
316
|
+
GM General Motors Co 37.62 -0.40 BUY!
|
317
|
+
IBM International Bus 160.4 +1.88 BUY!
|
318
|
+
MCD MCDONALD'S CORPOR 95.65 +0.56 BUY!
|
319
|
+
VZ Verizon Communica 49.31 -0.21 BUY!
|
320
|
+
HD Home Depot, Inc. 111.8 -0.27 BUY!
|
321
|
+
DIS Walt Disney Compa 104.1 +0.59 BUY!
|
322
|
+
INTC Intel Corporation 34.36 +0.235 Sell
|
323
|
+
------------------------------------------------------
|
324
|
+
Recommendations randomly generated
|
325
|
+
======================================================
|
326
|
+
```
|
327
|
+
|
328
|
+
And yes, you can make the table super-ugly and lame if you want by adding `:borders=>true` to the define call, like so:
|
329
|
+
|
330
|
+
`ConsoleTable.define(table_config, :title=>"Stock Prices", :borders=>true) do |table|`
|
331
|
+
|
332
|
+
Which will yield this, if you're into that sort of thing:
|
333
|
+
|
334
|
+
```
|
335
|
+
*======================================================*
|
336
|
+
| Stock Prices |
|
337
|
+
+------+-----------------+-----+-------+---------------+
|
338
|
+
|Symbol|Name |Price| Change| Recommendation|
|
339
|
+
+------+-----------------+-----+-------+---------------+
|
340
|
+
|YHOO |Yahoo! Inc. |44.42| +0.495| BUY!|
|
341
|
+
+------+-----------------+-----+-------+---------------+
|
342
|
+
|AAPL |Apple Inc. |127.0| +0.62| BUY!|
|
343
|
+
+------+-----------------+-----+-------+---------------+
|
344
|
+
|GOOG |Google Inc. |549.0| +6.08| Sell|
|
345
|
+
+------+-----------------+-----+-------+---------------+
|
346
|
+
|MSFT |Microsoft Corpora|43.87| +0.78| Sell|
|
347
|
+
+------+-----------------+-----+-------+---------------+
|
348
|
+
|C |Citigroup, Inc. C|51.20| +0.31| Sell|
|
349
|
+
+------+-----------------+-----+-------+---------------+
|
350
|
+
|MMM |3M Company Common|165.9| +0.03| BUY!|
|
351
|
+
+------+-----------------+-----+-------+---------------+
|
352
|
+
|KO |Coca-Cola Company|41.99| -0.18| Sell|
|
353
|
+
+------+-----------------+-----+-------+---------------+
|
354
|
+
|WMT |Wal-Mart Stores, |85.81| -0.08| BUY!|
|
355
|
+
+------+-----------------+-----+-------+---------------+
|
356
|
+
|GM |General Motors Co|37.62| -0.40| BUY!|
|
357
|
+
+------+-----------------+-----+-------+---------------+
|
358
|
+
|IBM |International Bus|160.4| +1.88| BUY!|
|
359
|
+
+------+-----------------+-----+-------+---------------+
|
360
|
+
|MCD |MCDONALD'S CORPOR|95.65| +0.56| Sell|
|
361
|
+
+------+-----------------+-----+-------+---------------+
|
362
|
+
|VZ |Verizon Communica|49.31| -0.21| BUY!|
|
363
|
+
+------+-----------------+-----+-------+---------------+
|
364
|
+
|HD |Home Depot, Inc. |111.8| -0.27| BUY!|
|
365
|
+
+------+-----------------+-----+-------+---------------+
|
366
|
+
|DIS |Walt Disney Compa|104.1| +0.59| BUY!|
|
367
|
+
+------+-----------------+-----+-------+---------------+
|
368
|
+
|INTC |Intel Corporation|34.36| +0.235| Sell|
|
369
|
+
+------+-----------------+-----+-------+---------------+
|
370
|
+
| Recommendations randomly generated|
|
371
|
+
*======================================================*
|
372
|
+
```
|
373
|
+
|
374
|
+
|
246
375
|
## Contributing
|
247
376
|
|
248
377
|
1. Fork it ( http://github.com/rodhilton/console_table/fork )
|
249
378
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
250
379
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
251
380
|
4. Push to the branch (`git push origin my-new-feature`)
|
252
|
-
5. Create new Pull Request
|
381
|
+
5. Create new Pull Request
|
data/console_table.gemspec
CHANGED
@@ -19,7 +19,6 @@ Gem::Specification.new do |spec|
|
|
19
19
|
|
20
20
|
spec.add_development_dependency "bundler", "~> 1.5"
|
21
21
|
spec.add_development_dependency 'rake', '~> 0'
|
22
|
-
spec.add_development_dependency 'simplecov', '~> 0.9'
|
23
22
|
spec.add_development_dependency 'minitest', '~> 5.5'
|
24
23
|
spec.add_development_dependency 'colorize', '~> 0.7'
|
25
24
|
|
data/lib/console_table.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
|
-
require 'terminfo'
|
2
|
-
|
3
1
|
module ConsoleTable
|
4
|
-
VERSION = "0.1.
|
2
|
+
VERSION = "0.1.6"
|
5
3
|
|
6
4
|
def self.define(layout, options={}, &block)
|
7
5
|
table = ConsoleTableClass.new(layout, options)
|
@@ -11,7 +9,6 @@ module ConsoleTable
|
|
11
9
|
end
|
12
10
|
|
13
11
|
class ConsoleTableClass
|
14
|
-
|
15
12
|
attr_reader :footer
|
16
13
|
|
17
14
|
def <<(options)
|
@@ -21,13 +18,29 @@ module ConsoleTable
|
|
21
18
|
protected
|
22
19
|
|
23
20
|
def initialize(column_layout, options={})
|
24
|
-
@original_column_layout =
|
25
|
-
|
26
|
-
|
21
|
+
@original_column_layout = []
|
22
|
+
column_layout.each_with_index do |layout, i|
|
23
|
+
if layout.is_a? String
|
24
|
+
@original_column_layout << {:key => "col#{i+1}".to_sym, :title=>layout, :size=>"*"}
|
25
|
+
elsif layout[:key].nil? and layout[:title].nil?
|
26
|
+
@original_column_layout << layout.merge({:key => "col#{i+1}".to_sym, :title=>"Column #{i+1}"})
|
27
|
+
elsif layout[:title].nil?
|
28
|
+
@original_column_layout << layout.merge({:title => layout[:key].to_s.capitalize})
|
29
|
+
elsif layout[:key].nil?
|
30
|
+
@original_column_layout << layout.merge({:key => "col#{i+1}".to_sym})
|
31
|
+
else
|
32
|
+
@original_column_layout << layout
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
#Mostly used for mocking/testing
|
27
37
|
@out = options[:output] || $stdout
|
28
|
-
@title = options[:title]
|
29
38
|
@set_width = options[:width]
|
39
|
+
|
40
|
+
@title = options[:title]
|
30
41
|
@borders = options[:borders] || false #Lines between every cell, implies outline
|
42
|
+
@left_margin = options[:left_margin] || 0
|
43
|
+
@right_margin = options[:right_margin] || 0
|
31
44
|
|
32
45
|
#Set outline, just the upper and lower lines
|
33
46
|
if @borders
|
@@ -39,7 +52,6 @@ module ConsoleTable
|
|
39
52
|
end
|
40
53
|
|
41
54
|
@footer = []
|
42
|
-
|
43
55
|
@headings_printed = false
|
44
56
|
@count = 0
|
45
57
|
|
@@ -48,6 +60,8 @@ module ConsoleTable
|
|
48
60
|
end
|
49
61
|
|
50
62
|
def print_header()
|
63
|
+
#Kind of weird but basically if there's a title, there will be a space between the top border and the actual data, meaning we don't
|
64
|
+
#want special characters printed for the "joining" of the lines. If there's no title, however, we do.
|
51
65
|
if @title.nil?
|
52
66
|
print_line("=", "*", false)
|
53
67
|
else
|
@@ -66,6 +80,7 @@ module ConsoleTable
|
|
66
80
|
|
67
81
|
def print_headings()
|
68
82
|
@headings_printed = true
|
83
|
+
|
69
84
|
@out.print " "*@left_margin
|
70
85
|
if @borders
|
71
86
|
@out.print "|"
|
@@ -73,8 +88,9 @@ module ConsoleTable
|
|
73
88
|
|
74
89
|
@column_widths.each_with_index do |column, i|
|
75
90
|
justify = column[:justify] || :left
|
76
|
-
|
77
|
-
|
91
|
+
ellipsize = column[:ellipsize] || false
|
92
|
+
title = column[:title].strip
|
93
|
+
@out.print format(column[:size], title, ellipsize, justify)
|
78
94
|
|
79
95
|
if @borders
|
80
96
|
@out.print "|"
|
@@ -84,7 +100,7 @@ module ConsoleTable
|
|
84
100
|
end
|
85
101
|
@out.print "\n"
|
86
102
|
|
87
|
-
print_line unless @borders #this line will be printed when the NEXT LINE prints out if borders are on
|
103
|
+
print_line unless @borders #this line will be printed when the NEXT LINE of actual data prints out if borders are on, because that call PRE-prints the separator line
|
88
104
|
end
|
89
105
|
|
90
106
|
def print_line(char="-", join_char="+", edge_join_only=false)
|
@@ -107,6 +123,8 @@ module ConsoleTable
|
|
107
123
|
end
|
108
124
|
end
|
109
125
|
|
126
|
+
#TODO: it's a little weird how, if a footer is too long, it simply doesn't print at all. This seems like not what someone would want to have happen.
|
127
|
+
#Could we take footer lines and split them every X characters where X is the working width, then use those? Long lines effectively wrap, but not on word boundaries
|
110
128
|
def print_footer()
|
111
129
|
if should_print_footer
|
112
130
|
print_line
|
@@ -220,9 +238,7 @@ module ConsoleTable
|
|
220
238
|
if string.nil?
|
221
239
|
nil
|
222
240
|
else
|
223
|
-
require 'pp'
|
224
241
|
normalized = string.to_s
|
225
|
-
|
226
242
|
normalized = normalized.sub(/^(\e\[\d[^m]*?m)(\s+)/, '\2\1') #Any leading spaces preceeded by a color code should be swapped with the color code itself, so the spaces themselves aren't colored
|
227
243
|
normalized = normalized.sub(/(\s+)(\e\[\d[^m]*?m)$/, '\2\1')
|
228
244
|
normalized = normalized.gsub(/\s+/, " ").strip #Primarily to remove any tabs or newlines
|
@@ -235,12 +251,15 @@ module ConsoleTable
|
|
235
251
|
|
236
252
|
total_width = @set_width
|
237
253
|
begin
|
254
|
+
require 'terminfo'
|
238
255
|
total_width = TermInfo.screen_columns
|
239
256
|
rescue => ex
|
240
257
|
total_width = ENV["COLUMNS"].to_i || 79
|
241
258
|
end if total_width.nil?
|
242
259
|
|
243
|
-
|
260
|
+
working_column_layout = []
|
261
|
+
|
262
|
+
keys = @original_column_layout.collect { |d| d[:key] }.uniq
|
244
263
|
if keys.length < @original_column_layout.length
|
245
264
|
raise("ConsoleTable configuration invalid, same key defined more than once")
|
246
265
|
end
|
@@ -300,7 +319,7 @@ module ConsoleTable
|
|
300
319
|
|
301
320
|
parts = text.scan(/(\e\[\d.*?m)|(.)/) #The idea here is to break the string up into control codes and single characters
|
302
321
|
#We're going to now count up until we hit goal length, but we're not going to ever count control codes against the count
|
303
|
-
#We're also going to keep track of if
|
322
|
+
#We're also going to keep track of if a non-resetting control code is 'active', so we know to reset at the end if need-be
|
304
323
|
|
305
324
|
#I can't think of a better way to do this, it's probably dumb
|
306
325
|
current_length = 0
|
@@ -331,15 +350,15 @@ module ConsoleTable
|
|
331
350
|
|
332
351
|
final_string_parts.join("")
|
333
352
|
else
|
353
|
+
space = length-uncolorized.length
|
334
354
|
if justify == :right
|
335
|
-
(" "*
|
355
|
+
(" "*space) + text
|
336
356
|
elsif justify == :center
|
337
|
-
space = length-uncolorized.length
|
338
357
|
left_side = space/2
|
339
358
|
right_side = space - left_side
|
340
359
|
(" " * left_side) + text + (" "*right_side)
|
341
360
|
else #assume left
|
342
|
-
text + (" "*
|
361
|
+
text + (" "*space)
|
343
362
|
end
|
344
363
|
end
|
345
364
|
end
|
data/test/test_console_table.rb
CHANGED
@@ -1,13 +1,12 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
require 'minitest/autorun'
|
2
|
-
require 'console_table'
|
3
|
-
require 'colorize'
|
4
|
-
|
5
|
-
#TODO: What happens if you have a linebreak in what you print?
|
6
|
-
# - what if it occurs inside of an active color code?
|
7
3
|
#TODO: trimming from different sides depending on justification?
|
8
4
|
|
9
5
|
class ConsoleTableTest < Minitest::Test
|
10
6
|
|
7
|
+
require 'console_table'
|
8
|
+
require 'colorize'
|
9
|
+
|
11
10
|
def setup
|
12
11
|
@mock_out = StringIO.new
|
13
12
|
end
|
@@ -960,6 +959,74 @@ Much mu... Normal,... Much mu...
|
|
960
959
|
assert_output_equal expected, @mock_out.string
|
961
960
|
end
|
962
961
|
|
962
|
+
def test_will_generate_default_column_keys_and_titles_and_sizes_if_not_provided
|
963
|
+
table_config = [
|
964
|
+
{:size=>20, :title=>"Column 1"},
|
965
|
+
{:key=>:col2, :size=>20, :title=>"Column 2"},
|
966
|
+
{:size=>20, :title=>"Column 3"},
|
967
|
+
{:key=>:col4, :size=>20},
|
968
|
+
{:size=>20},
|
969
|
+
{}
|
970
|
+
]
|
971
|
+
|
972
|
+
ConsoleTable.define(table_config, :width=> 125, :output=>@mock_out) do |table|
|
973
|
+
table << ["A", "B", "C", "D", "E", "F"]
|
974
|
+
|
975
|
+
end
|
976
|
+
|
977
|
+
expected=<<-END
|
978
|
+
=============================================================================================================================
|
979
|
+
Column 1 Column 2 Column 3 Col4 Column 5 Column 6
|
980
|
+
-----------------------------------------------------------------------------------------------------------------------------
|
981
|
+
A B C D E F
|
982
|
+
=============================================================================================================================
|
983
|
+
END
|
984
|
+
|
985
|
+
assert_output_equal expected, @mock_out.string
|
986
|
+
end
|
987
|
+
|
988
|
+
def test_can_use_a_string_instead_of_hash_to_default_everything
|
989
|
+
table_config = [
|
990
|
+
{:size=>20, :title=>"Column 1"},
|
991
|
+
"Simple Column",
|
992
|
+
{:size=>20, :title=>"Column 3"},
|
993
|
+
]
|
994
|
+
|
995
|
+
ConsoleTable.define(table_config, :width=> 70, :output=>@mock_out) do |table|
|
996
|
+
table << ["A", "B", "C"]
|
997
|
+
end
|
998
|
+
|
999
|
+
expected=<<-END
|
1000
|
+
======================================================================
|
1001
|
+
Column 1 Simple Column Column 3
|
1002
|
+
----------------------------------------------------------------------
|
1003
|
+
A B C
|
1004
|
+
======================================================================
|
1005
|
+
END
|
1006
|
+
|
1007
|
+
assert_output_equal expected, @mock_out.string
|
1008
|
+
end
|
1009
|
+
|
1010
|
+
def test_can_use_a_config_of_nothing_but_titles_if_you_really_want
|
1011
|
+
table_config = [
|
1012
|
+
"A Column", "B Column", "C Column"
|
1013
|
+
]
|
1014
|
+
|
1015
|
+
ConsoleTable.define(table_config, :width=> 30, :output=>@mock_out) do |table|
|
1016
|
+
table << ["A", "B", "C"]
|
1017
|
+
end
|
1018
|
+
|
1019
|
+
expected=<<-END
|
1020
|
+
=============================
|
1021
|
+
A Column B Column C Column
|
1022
|
+
-----------------------------
|
1023
|
+
A B C
|
1024
|
+
=============================
|
1025
|
+
END
|
1026
|
+
|
1027
|
+
assert_output_equal expected, @mock_out.string
|
1028
|
+
end
|
1029
|
+
|
963
1030
|
private
|
964
1031
|
def assert_output_equal(expected, actual)
|
965
1032
|
expected_lines = expected.split("\n")
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: console_table
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rod Hilton
|
@@ -38,20 +38,6 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: simplecov
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0.9'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0.9'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: minitest
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -104,6 +90,7 @@ extensions: []
|
|
104
90
|
extra_rdoc_files: []
|
105
91
|
files:
|
106
92
|
- ".gitignore"
|
93
|
+
- ".travis.yml"
|
107
94
|
- Gemfile
|
108
95
|
- LICENSE
|
109
96
|
- README.md
|