atv 0.0.7 → 0.0.9

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,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ZDJkNzQ5NWYzM2E5NTFiZDdkZjZkNmRmMDU5MTQ2N2EyZTlhN2NlNg==
5
- data.tar.gz: !binary |-
6
- YWFjMTdhOGQ3NDQyMmRlZmFhNjZiOWVlODllY2JlMmNiNzU3ZmMxOQ==
2
+ SHA1:
3
+ metadata.gz: b74da012d7232aae6f86f45060bd5d31adeb61a8
4
+ data.tar.gz: 8c5f5a6d427d2f6c480f890cd7702e53fcb8bfdc
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- MjcyMzhhOTJjYTYwZjYzN2QwODNhMzQ3NjRjNWQ4NzkzZGVmMDcyOGRjMzQy
10
- NGYyNmU3ZWZjYTIyMDEzNGQ1MTE2Y2FmZjNkMzkwOGQxNDUyNGZkNGViNTA0
11
- M2Q3MGFkOWQwMjQ5MjE1Zjc1OTlkODU3NzUwODk0MGQ3Y2RjM2U=
12
- data.tar.gz: !binary |-
13
- NmE0MzY2ZDQ3ODkzY2EwMjU1ZGI2ODU2YjMxY2MxYTJjZjFkOWI2NTVjMjhj
14
- OWVhZDRkYzUwZWZlNDljYjdhMWViMmMxMjQ0ODViZWZiNTcxZGVhYmJhZDc0
15
- NDU2ZWMzZWFmYjU2ZjRhMjRiYWY3ZDdlZDVkMGZlNDQ5MDFkNmI=
6
+ metadata.gz: bb77ad58f596a342344c223a467e9de184778e3af9f7ba81a611cbf0cb7fdeb9d22cd104fa541468b7998905b8f9412a28a979753144a93e305d4c67f7af3f6e
7
+ data.tar.gz: e71e57a0ffd7700b87561a17573c33d850fdc405f648231bd836031d85e33c02b990bab47b6b0a6aba0ff12f21bb264e6f9bc81d2ff2a0b1e3731824a298b7a2
data/.gitignore CHANGED
@@ -14,3 +14,5 @@
14
14
  mkmf.log
15
15
  /.idea
16
16
  *.gem
17
+ .ruby-version
18
+ .ruby-gemset
data/README.md CHANGED
@@ -13,6 +13,22 @@ It allows you to read data formatted like this:
13
13
  |------------------+--------------------|
14
14
  </pre>
15
15
 
16
+ or, without separators, like this:
17
+
18
+ <pre>
19
+ |------------------+--------------------|
20
+ | name | dob |
21
+ |------------------+--------------------|
22
+ | Malcolm Reynolds | September 20, 2468 |
23
+ | Zoe Washburne | February 15, 2484 |
24
+ |------------------+--------------------|
25
+ </pre>
26
+
27
+ In [Ascii Tables For Clearer Testing][1] I discuss using ascii tables to improve comprehension
28
+ of software tests.
29
+
30
+ [1]: http://technology.indiegogo.com/2015/01/ascii-tables-for-clearer-testing/
31
+
16
32
  ## Installation
17
33
 
18
34
  Add this line to your application's Gemfile:
@@ -31,7 +47,9 @@ Or install it yourself as:
31
47
 
32
48
  ## Usage
33
49
 
34
- Rows are returned or yielded as [CSV::Row][1] objects.
50
+ Rows are returned or yielded as [CSV::Row][2] objects.
51
+
52
+ [2]: http://www.ruby-doc.org/stdlib/libdoc/csv/rdoc/CSV/Row.html
35
53
 
36
54
  <pre>
37
55
  |-----------------------+------------------------------+-----------------------------------|
@@ -82,5 +100,3 @@ end
82
100
  3. Commit your changes (`git commit -am 'Add some feature'`)
83
101
  4. Push to the branch (`git push origin my-new-feature`)
84
102
  5. Create a new Pull Request
85
-
86
- [1]: http://www.ruby-doc.org/stdlib/libdoc/csv/rdoc/CSV/Row.html
data/Rakefile CHANGED
@@ -1,2 +1,7 @@
1
1
  require "bundler/gem_tasks"
2
+ require 'rake/testtask'
2
3
 
4
+ Rake::TestTask.new do |t|
5
+ t.libs << 'test'
6
+ t.pattern = "test/*_test.rb"
7
+ end
data/lib/atv.rb CHANGED
@@ -10,10 +10,12 @@ class ATV
10
10
  'null' => nil
11
11
  }
12
12
 
13
- attr_reader(:headers)
13
+ attr_reader :headers
14
14
 
15
15
  def initialize(io)
16
16
  @io = io
17
+ @has_separators = has_separators?(@io)
18
+ @io.rewind
17
19
  @io.readline
18
20
  @headers = split_table_line(@io.readline.chomp)
19
21
  @io.readline
@@ -23,7 +25,7 @@ class ATV
23
25
  line_data = []
24
26
  @io.each_line do |line|
25
27
  line.chomp!
26
- if line =~ /^\|\-/
28
+ if (!@has_separators && !line_data.empty?) || line =~ /^\|\-/
27
29
  csv_row = CSV::Row.new(@headers, line_data.
28
30
  transpose.
29
31
  map { |tokens| tokens.reject(&:empty?).join(' ') }.
@@ -31,7 +33,7 @@ class ATV
31
33
  ).delete_if {|k, v| v == ''}
32
34
  yield csv_row if csv_row.size > 0
33
35
  line_data = []
34
- next
36
+ next if @has_separators
35
37
  end
36
38
  line_data << split_table_line(line)
37
39
  end
@@ -47,4 +49,18 @@ class ATV
47
49
  return [] if line.empty?
48
50
  line[1..-1].split('|').map(&:strip)
49
51
  end
52
+
53
+ def has_separators?(io)
54
+ @io.readline
55
+ @io.readline
56
+ @io.readline
57
+ separator_count = 0
58
+ @io.each_line do |line|
59
+ if line =~ /^\|\-/
60
+ separator_count += 1
61
+ return true if separator_count > 1
62
+ end
63
+ end
64
+ false
65
+ end
50
66
  end
@@ -1,3 +1,3 @@
1
1
  module Atv
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.9"
3
3
  end
@@ -2,7 +2,9 @@ require 'minitest/autorun'
2
2
  require_relative '../lib/atv'
3
3
 
4
4
  describe ATV do
5
- DATA_AS_TABLE = <<-TEXT
5
+ describe 'with separators' do
6
+ before do
7
+ @data_as_table = <<-TEXT
6
8
  |-----------+--------------------+--------------|
7
9
  | name | dob | predictable? |
8
10
  |-----------+--------------------+--------------|
@@ -15,54 +17,91 @@ describe ATV do
15
17
  | Derrial | null | true |
16
18
  | Book | | |
17
19
  |-----------+--------------------+--------------|
20
+ TEXT
21
+ @expected = [
22
+ ['Malcolm Reynolds', 'September 20, 2468', false],
23
+ ['Zoe Washburne', 'February 15, 2484'],
24
+ ['Derrial Book', nil, true]
25
+ ]
26
+ end
18
27
 
19
- TEXT
20
-
21
- EXPECTED = [
22
- ['Malcolm Reynolds', 'September 20, 2468', false],
23
- ['Zoe Washburne', 'February 15, 2484'],
24
- ['Derrial Book', nil, true]
25
- ]
28
+ describe '#each' do
29
+ before do
30
+ @atv = ATV.new(StringIO.new(@data_as_table))
31
+ end
26
32
 
27
- describe '#each' do
28
- before do
29
- @atv = ATV.new(StringIO.new(DATA_AS_TABLE))
30
- end
33
+ it 'with a block it yields rows of data as CSV rows' do
34
+ i = 0
31
35
 
32
- it 'with a block it yields rows of data as CSV rows' do
33
- i = 0
36
+ @atv.each do |row|
37
+ row.fields.must_equal(@expected[i])
38
+ row[0].must_equal(@expected[i][0])
39
+ row['name'].must_equal(@expected[i][0])
40
+ row[1].must_equal(@expected[i][1])
41
+ row['dob'].must_equal(@expected[i][1])
42
+ row[2].must_equal(@expected[i][2])
43
+ row['predictable?'].must_equal(@expected[i][2])
44
+ i += 1
45
+ end
46
+ i.must_equal(3)
47
+ end
34
48
 
35
- @atv.each do |row|
36
- row.fields.must_equal(EXPECTED[i])
37
- row[0].must_equal(EXPECTED[i][0])
38
- row['name'].must_equal(EXPECTED[i][0])
39
- row[1].must_equal(EXPECTED[i][1])
40
- row['dob'].must_equal(EXPECTED[i][1])
41
- row[2].must_equal(EXPECTED[i][2])
42
- row['predictable?'].must_equal(EXPECTED[i][2])
43
- i += 1
49
+ it 'without a block it returns an enumerator of data as CSV rows' do
50
+ enum = @atv.enum_for
51
+ enum.map(&:fields).must_equal(@expected)
44
52
  end
45
- i.must_equal(3)
46
53
  end
47
54
 
48
- it 'without a block it returns an enumerator of data as CSV rows' do
49
- enum = @atv.enum_for
50
- enum.map(&:fields).must_equal(EXPECTED)
55
+ describe "#headers" do
56
+ it 'returns all the headers' do
57
+ ATV.new(StringIO.new(@data_as_table)).headers.must_equal(%w|name dob predictable?|)
58
+ end
51
59
  end
52
- end
53
60
 
54
- describe "#headers" do
55
- it 'returns all the headers' do
56
- ATV.new(StringIO.new(DATA_AS_TABLE)).headers.must_equal(%w|name dob predictable?|)
61
+ describe ".from_string(string)" do
62
+ it 'initializes ATV with an IO object' do
63
+ fussy = -> (io) { io.must_be_kind_of StringIO }
64
+
65
+ ATV.stub :new, fussy do
66
+ ATV.from_string(@data_as_table)
67
+ end
68
+ end
57
69
  end
58
70
  end
59
71
 
60
- describe ".from_string(string)" do
61
- it 'initializes ATV with an IO object' do
62
- fussy = -> (io) { io.must_be_kind_of StringIO }
72
+ describe 'without separators' do
73
+ describe '#each' do
74
+ it 'with a block it yields rows of data as CSV rows' do
75
+ data_as_table = <<-TEXT
76
+ |-----------+--------------------+--------------|
77
+ | name | dob | predictable? |
78
+ |-----------+--------------------+--------------|
79
+ | Malcolm | September 20, 2468 | false |
80
+ | Zoe | February 15, 2484 | |
81
+ | Derrial | null | true |
82
+ |-----------+--------------------+--------------|
83
+ TEXT
84
+
85
+ expected = [
86
+ ['Malcolm', 'September 20, 2468', false],
87
+ ['Zoe', 'February 15, 2484'],
88
+ ['Derrial', nil, true]
89
+ ]
90
+ @atv = ATV.new(StringIO.new(data_as_table))
91
+
92
+ i = 0
63
93
 
64
- ATV.stub :new, fussy do
65
- ATV.from_string(DATA_AS_TABLE)
94
+ @atv.each do |row|
95
+ row.fields.must_equal(expected[i])
96
+ row[0].must_equal(expected[i][0])
97
+ row['name'].must_equal(expected[i][0])
98
+ row[1].must_equal(expected[i][1])
99
+ row['dob'].must_equal(expected[i][1])
100
+ row[2].must_equal(expected[i][2])
101
+ row['predictable?'].must_equal(expected[i][2])
102
+ i += 1
103
+ end
104
+ i.must_equal(3)
66
105
  end
67
106
  end
68
107
  end
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: atv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kelly Felkins
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-30 00:00:00.000000000 Z
11
+ date: 2015-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.7'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.7'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '10.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
41
  description: Read data from an ascii table.
@@ -45,7 +45,7 @@ executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
- - .gitignore
48
+ - ".gitignore"
49
49
  - Gemfile
50
50
  - LICENSE.txt
51
51
  - README.md
@@ -64,17 +64,17 @@ require_paths:
64
64
  - lib
65
65
  required_ruby_version: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - ! '>='
67
+ - - ">="
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
70
  required_rubygems_version: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - ! '>='
72
+ - - ">="
73
73
  - !ruby/object:Gem::Version
74
74
  version: '0'
75
75
  requirements: []
76
76
  rubyforge_project:
77
- rubygems_version: 2.2.2
77
+ rubygems_version: 2.4.8
78
78
  signing_key:
79
79
  specification_version: 4
80
80
  summary: Read Ascii Table Values