batch_factory 0.0.2 → 0.0.3
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.
data/lib/batch_factory/parser.rb
CHANGED
@@ -8,9 +8,8 @@ module BatchFactory
|
|
8
8
|
@row_hashes = []
|
9
9
|
end
|
10
10
|
|
11
|
-
def open
|
12
|
-
|
13
|
-
@worksheet = workbook.worksheet(0)
|
11
|
+
def open(file_location, sheet_number = 0)
|
12
|
+
@worksheet = SpreadsheetDocument.new(file_location, sheet_number)
|
14
13
|
end
|
15
14
|
|
16
15
|
def parse!
|
@@ -22,26 +21,28 @@ module BatchFactory
|
|
22
21
|
end
|
23
22
|
|
24
23
|
def parse_heading_keys
|
25
|
-
@heading_keys = worksheet.row(
|
24
|
+
@heading_keys = worksheet.row(worksheet.first_row).map do |key|
|
26
25
|
key.blank? ? nil : key.strip
|
27
26
|
end
|
28
27
|
end
|
29
28
|
|
30
29
|
def parse_column_bounds
|
31
|
-
@column_bounds =
|
30
|
+
@column_bounds = @worksheet.first_column..@worksheet.last_column
|
32
31
|
end
|
33
32
|
|
34
33
|
def parse_data_rows
|
35
34
|
@row_hashes = []
|
36
35
|
|
37
|
-
worksheet.
|
36
|
+
rows_range = (worksheet.first_row+1..worksheet.last_row)
|
37
|
+
rows_range.each do |idx|
|
38
|
+
row = worksheet.row(idx)
|
38
39
|
hash = HashWithIndifferentAccess.new
|
39
40
|
|
40
|
-
for cell_index in @column_bounds
|
41
|
+
for cell_index in @column_bounds
|
41
42
|
if key = @heading_keys[cell_index] and
|
42
43
|
value = row[cell_index]
|
43
44
|
|
44
|
-
hash[key] =
|
45
|
+
hash[key] = value if value.present?
|
45
46
|
end
|
46
47
|
end
|
47
48
|
|
@@ -49,14 +50,6 @@ module BatchFactory
|
|
49
50
|
end
|
50
51
|
end
|
51
52
|
|
52
|
-
def sanitize_value value
|
53
|
-
if value.is_a? Spreadsheet::Formula
|
54
|
-
value.value
|
55
|
-
else
|
56
|
-
value.to_s.strip
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
53
|
def hashed_worksheet
|
61
54
|
@hashed_worksheet ||= HashedWorksheet.new(
|
62
55
|
@heading_keys,
|
data/lib/batch_factory.rb
CHANGED
@@ -2,6 +2,7 @@ require 'spreadsheet'
|
|
2
2
|
require 'active_support/core_ext/object/blank'
|
3
3
|
require 'active_support/core_ext/hash/indifferent_access'
|
4
4
|
|
5
|
+
require 'spreadsheet_document'
|
5
6
|
require 'batch_factory/version'
|
6
7
|
require 'batch_factory/parser'
|
7
8
|
require 'batch_factory/hashed_worksheet'
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'roo'
|
2
|
+
class SpreadsheetDocument
|
3
|
+
def initialize(file_name, sheet_number)
|
4
|
+
@spreadsheet = case file_name.split('.').last
|
5
|
+
when 'xls'
|
6
|
+
Excel.new(file_name)
|
7
|
+
when 'xlsx'
|
8
|
+
Excelx.new(file_name)
|
9
|
+
when 'ods'
|
10
|
+
Openoffice.new(file_name)
|
11
|
+
else
|
12
|
+
Csv.new(file_name)
|
13
|
+
end
|
14
|
+
@current_sheet = @spreadsheet.sheets[sheet_number]
|
15
|
+
end
|
16
|
+
|
17
|
+
def method_missing(method, *args, &block)
|
18
|
+
if @spreadsheet.respond_to? method.to_sym
|
19
|
+
args << @current_sheet
|
20
|
+
@spreadsheet.send(method, *args, &block)
|
21
|
+
else
|
22
|
+
super
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -9,14 +9,14 @@ describe BatchFactory::Parser do
|
|
9
9
|
parser.worksheet.should_not be_nil
|
10
10
|
end
|
11
11
|
|
12
|
-
context 'when parsing' do
|
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 == (1..6)
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'should parse the heading keys' do
|
@@ -24,7 +24,7 @@ describe BatchFactory::Parser do
|
|
24
24
|
end
|
25
25
|
|
26
26
|
it 'should parse the data rows' do
|
27
|
-
parser.row_hashes[0]['age'].should ==
|
27
|
+
parser.row_hashes[0]['age'].should == 50
|
28
28
|
parser.row_hashes.size.should == 1
|
29
29
|
end
|
30
30
|
|
@@ -34,6 +34,33 @@ describe BatchFactory::Parser do
|
|
34
34
|
worksheet.keys.should == parser.heading_keys
|
35
35
|
end
|
36
36
|
end
|
37
|
+
|
38
|
+
context 'when parsing second worksheet' do
|
39
|
+
before do
|
40
|
+
parser.open VALID_SPREADSHEET, 1
|
41
|
+
parser.parse!
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'should parse column information' do
|
45
|
+
parser.column_bounds.should == (3..8)
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should parse the heading keys' do
|
49
|
+
parser.heading_keys.should == ['name', 'address', nil, 'country', 'bid', 'age']
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'should parse the data rows' do
|
53
|
+
parser.row_hashes[0]['age'].should == 50
|
54
|
+
parser.row_hashes.size.should == 1
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'should return a hashed worksheet' do
|
58
|
+
worksheet = parser.hashed_worksheet
|
59
|
+
worksheet.rows.should == parser.row_hashes
|
60
|
+
worksheet.keys.should == parser.heading_keys
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
37
64
|
|
38
65
|
end
|
39
66
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
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.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,16 +9,16 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-03-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
15
|
+
name: roo
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 1.10.1
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
29
|
+
version: 1.10.1
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: activesupport
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,9 +67,10 @@ extensions: []
|
|
67
67
|
extra_rdoc_files: []
|
68
68
|
files:
|
69
69
|
- lib/batch_factory.rb
|
70
|
+
- lib/spreadsheet_document.rb
|
70
71
|
- lib/batch_factory/hashed_worksheet.rb
|
71
|
-
- lib/batch_factory/parser.rb
|
72
72
|
- lib/batch_factory/version.rb
|
73
|
+
- lib/batch_factory/parser.rb
|
73
74
|
- spec/spec_helper.rb
|
74
75
|
- spec/unit/batch_factory.rb
|
75
76
|
- spec/unit/batch_factory/hashed_worksheet.rb
|