batch_factory 0.0.5 → 0.0.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/lib/batch_factory.rb +3 -3
- data/lib/batch_factory/hashed_worksheet.rb +3 -3
- data/lib/batch_factory/parser.rb +20 -17
- data/lib/batch_factory/version.rb +1 -1
- data/lib/spreadsheet_document.rb +2 -2
- data/spec/unit/batch_factory.rb +2 -1
- data/spec/unit/batch_factory/hashed_worksheet.rb +5 -5
- data/spec/unit/batch_factory/parser.rb +11 -13
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6f33676dbbb2880f05b0d68c8354d73842e800e8
|
4
|
+
data.tar.gz: 8b73db2c704de678ffe46edcde50e4e88f655fb6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3458d01dcee4626806d1cf1c002c0321376cac3d530973a96f479f9d57477c9fe3a7dc421e409154fe06e0ddc8d530622050c62433c5f719bcb9ad8e9643a629
|
7
|
+
data.tar.gz: 84957e02bb3382aab41a53eee4f594551988cb87da3c6b48f241cd8585d0b59501f5dc6b5a3f711d0e36165eabd275b923fda7918405bd5632497afb3215414b
|
data/lib/batch_factory.rb
CHANGED
@@ -9,11 +9,11 @@ require 'batch_factory/hashed_worksheet'
|
|
9
9
|
|
10
10
|
module BatchFactory
|
11
11
|
class << self
|
12
|
-
def from_file file_location
|
12
|
+
def from_file file_location, keys = nil
|
13
13
|
parser = BatchFactory::Parser.new
|
14
|
-
parser.open file_location
|
14
|
+
parser.open file_location, 0, keys
|
15
15
|
parser.parse!
|
16
|
-
|
16
|
+
|
17
17
|
parser.hashed_worksheet
|
18
18
|
end
|
19
19
|
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
module BatchFactory
|
2
2
|
class HashedWorksheet
|
3
3
|
attr_accessor :keys, :rows
|
4
|
-
|
4
|
+
|
5
5
|
def initialize(keys, rows)
|
6
6
|
@keys = keys
|
7
7
|
@rows = rows
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
def method_missing(method, *args, &block)
|
11
11
|
if (Enumerable.public_instance_methods + Array.public_instance_methods).include? method.to_sym
|
12
12
|
@rows.send(method, *args, &block)
|
@@ -14,6 +14,6 @@ module BatchFactory
|
|
14
14
|
super
|
15
15
|
end
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
end
|
19
19
|
end
|
data/lib/batch_factory/parser.rb
CHANGED
@@ -1,61 +1,64 @@
|
|
1
1
|
module BatchFactory
|
2
2
|
class Parser
|
3
|
-
attr_accessor :worksheet, :heading_keys, :column_bounds, :row_hashes
|
4
|
-
|
3
|
+
attr_accessor :worksheet, :user_heading_keys, :heading_keys, :column_bounds, :row_hashes
|
4
|
+
|
5
5
|
def initialize
|
6
6
|
@heading_keys = []
|
7
7
|
@column_bounds = []
|
8
8
|
@row_hashes = []
|
9
9
|
end
|
10
|
-
|
11
|
-
def open(file_location, sheet_number = 0)
|
10
|
+
|
11
|
+
def open(file_location, sheet_number = 0, user_keys = nil)
|
12
12
|
@worksheet = SpreadsheetDocument.new(file_location, sheet_number)
|
13
|
+
@user_heading_keys = user_keys
|
13
14
|
end
|
14
|
-
|
15
|
+
|
15
16
|
def parse!
|
16
17
|
@hashed_worksheet = nil
|
17
|
-
|
18
|
+
|
18
19
|
parse_column_bounds
|
19
20
|
parse_heading_keys
|
20
21
|
parse_data_rows
|
21
22
|
end
|
22
|
-
|
23
|
+
|
23
24
|
def parse_heading_keys
|
24
|
-
@heading_keys = worksheet.row(worksheet.first_row).map do |key|
|
25
|
+
@heading_keys = user_heading_keys || worksheet.row(worksheet.first_row).map do |key|
|
25
26
|
key.blank? ? nil : key.strip
|
26
27
|
end
|
27
28
|
end
|
28
|
-
|
29
|
+
|
29
30
|
def parse_column_bounds
|
30
31
|
@column_bounds = (@worksheet.first_column-1)..(@worksheet.last_column-1)
|
31
32
|
end
|
32
|
-
|
33
|
+
|
33
34
|
def parse_data_rows
|
34
35
|
@row_hashes = []
|
35
|
-
|
36
|
-
|
36
|
+
|
37
|
+
first_row_offset = user_heading_keys ? 0 : 1
|
38
|
+
|
39
|
+
rows_range = ((worksheet.first_row+first_row_offset)..worksheet.last_row)
|
37
40
|
rows_range.each do |idx|
|
38
41
|
row = worksheet.row(idx)
|
39
42
|
hash = HashWithIndifferentAccess.new
|
40
|
-
|
43
|
+
|
41
44
|
for cell_index in @column_bounds
|
42
45
|
if key = @heading_keys[cell_index] and
|
43
46
|
value = row[cell_index]
|
44
|
-
|
47
|
+
|
45
48
|
hash[key] = value if value.present?
|
46
49
|
end
|
47
50
|
end
|
48
|
-
|
51
|
+
|
49
52
|
@row_hashes << hash unless hash.empty?
|
50
53
|
end
|
51
54
|
end
|
52
|
-
|
55
|
+
|
53
56
|
def hashed_worksheet
|
54
57
|
@hashed_worksheet ||= HashedWorksheet.new(
|
55
58
|
@heading_keys,
|
56
59
|
@row_hashes
|
57
60
|
)
|
58
61
|
end
|
59
|
-
|
62
|
+
|
60
63
|
end
|
61
64
|
end
|
data/lib/spreadsheet_document.rb
CHANGED
@@ -9,11 +9,11 @@ class SpreadsheetDocument
|
|
9
9
|
when 'ods'
|
10
10
|
Roo::Openoffice.new(file_name)
|
11
11
|
else
|
12
|
-
Roo::
|
12
|
+
Roo::CSV.new(file_name)
|
13
13
|
end
|
14
14
|
@current_sheet = @spreadsheet.sheets[sheet_number]
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
def method_missing(method, *args, &block)
|
18
18
|
if @spreadsheet.respond_to? method.to_sym
|
19
19
|
args << @current_sheet
|
data/spec/unit/batch_factory.rb
CHANGED
@@ -5,8 +5,9 @@ describe BatchFactory do
|
|
5
5
|
context 'w/ class methods' do
|
6
6
|
it 'should open a file and return a hashed workbook' do
|
7
7
|
worksheet = BatchFactory.from_file VALID_SPREADSHEET
|
8
|
+
puts worksheet.inspect
|
8
9
|
worksheet.size.should == 1
|
9
|
-
worksheet[0][:age].should ==
|
10
|
+
worksheet[0][:age].should == 50
|
10
11
|
end
|
11
12
|
end
|
12
13
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe BatchFactory::HashedWorksheet do
|
4
|
-
|
4
|
+
|
5
5
|
context 'w/ instance methods' do
|
6
6
|
let(:worksheet) do
|
7
7
|
parser = BatchFactory::Parser.new
|
@@ -9,15 +9,15 @@ describe BatchFactory::HashedWorksheet do
|
|
9
9
|
parser.parse!
|
10
10
|
parser.hashed_worksheet
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
it 'should return an array of heading keys' do
|
14
14
|
worksheet.keys[0].should == 'name'
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
it 'should return an array of data hashes' do
|
18
18
|
worksheet.rows[0][:age].should == 50
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
it 'should iterate over the rows' do
|
22
22
|
worksheet.size.should == 1
|
23
23
|
worksheet.each_with_index do |hash, index|
|
@@ -25,5 +25,5 @@ describe BatchFactory::HashedWorksheet do
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
end
|
@@ -8,26 +8,26 @@ describe BatchFactory::Parser do
|
|
8
8
|
parser.open VALID_SPREADSHEET
|
9
9
|
parser.worksheet.should_not be_nil
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
context 'when parsing default worksheet' do
|
13
13
|
before do
|
14
14
|
parser.open VALID_SPREADSHEET
|
15
15
|
parser.parse!
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
it 'should parse column information' do
|
19
|
-
parser.column_bounds.should == (
|
19
|
+
parser.column_bounds.should == (0..5)
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
it 'should parse the heading keys' do
|
23
23
|
parser.heading_keys.should == ['name', 'address', nil, 'country', 'bid', 'age']
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
it 'should parse the data rows' do
|
27
27
|
parser.row_hashes[0]['age'].should == 50
|
28
28
|
parser.row_hashes.size.should == 1
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
it 'should return a hashed worksheet' do
|
32
32
|
worksheet = parser.hashed_worksheet
|
33
33
|
worksheet.rows.should == parser.row_hashes
|
@@ -40,20 +40,20 @@ describe BatchFactory::Parser do
|
|
40
40
|
parser.open VALID_SPREADSHEET, 1
|
41
41
|
parser.parse!
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
44
|
it 'should parse column information' do
|
45
|
-
parser.column_bounds.should == (
|
45
|
+
parser.column_bounds.should == (2..7)
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
48
|
it 'should parse the heading keys' do
|
49
49
|
parser.heading_keys.should == ['name', 'address', nil, 'country', 'bid', 'age']
|
50
50
|
end
|
51
|
-
|
51
|
+
|
52
52
|
it 'should parse the data rows' do
|
53
53
|
parser.row_hashes[0]['age'].should == 50
|
54
54
|
parser.row_hashes.size.should == 1
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
it 'should return a hashed worksheet' do
|
58
58
|
worksheet = parser.hashed_worksheet
|
59
59
|
worksheet.rows.should == parser.row_hashes
|
@@ -61,7 +61,5 @@ describe BatchFactory::Parser do
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
-
|
65
64
|
end
|
66
|
-
|
67
65
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: batch_factory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Denis Ivanov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-12-
|
11
|
+
date: 2014-12-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: roo
|