batch_factory 0.0.6 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/batch_factory.rb +2 -2
- data/lib/batch_factory/hashed_worksheet.rb +8 -1
- data/lib/batch_factory/parser.rb +5 -4
- data/lib/batch_factory/version.rb +9 -1
- data/lib/spreadsheet_document.rb +16 -3
- data/spec/{unit/batch_factory.rb → batch_factory/batch_factory_spec.rb} +1 -2
- data/spec/{unit/batch_factory/hashed_worksheet.rb → batch_factory/hashed_worksheet_spec.rb} +1 -1
- data/spec/{unit/batch_factory/parser.rb → batch_factory/parser_spec.rb} +2 -2
- data/spec/batch_factory/spreadsheet_document_spec.rb +16 -0
- data/spec/spec_helper.rb +12 -1
- metadata +24 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 426ee0a9312cf54ccc7c7c8dba99955b2f3f7bb4
|
4
|
+
data.tar.gz: 866ca63ab2d7fb83584b4a244898a9f5c0af964e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf14a17f8bea356ce0ed6e7976213b6edffe92c45a84ae2f83728a29094ed20ac754af04faf729c9e1c3f6c5fd796a320fb35425032a9654d25fc89511d2b8fd
|
7
|
+
data.tar.gz: b586db47d5c3064cdc0fd2b1db6fe5b80497836e0de9e24f58ad3b82355d8ab905635b7b6e54c2a2f39c68596108249421cf39466987ea38380fceb09c1f983f
|
data/lib/batch_factory.rb
CHANGED
@@ -9,9 +9,9 @@ require 'batch_factory/hashed_worksheet'
|
|
9
9
|
|
10
10
|
module BatchFactory
|
11
11
|
class << self
|
12
|
-
def from_file
|
12
|
+
def from_file(file_location, options = {})
|
13
13
|
parser = BatchFactory::Parser.new
|
14
|
-
parser.open file_location,
|
14
|
+
parser.open file_location, options
|
15
15
|
parser.parse!
|
16
16
|
|
17
17
|
parser.hashed_worksheet
|
@@ -2,18 +2,25 @@ module BatchFactory
|
|
2
2
|
class HashedWorksheet
|
3
3
|
attr_accessor :keys, :rows
|
4
4
|
|
5
|
+
@@proxy_methods = Enumerable.public_instance_methods + Array.public_instance_methods
|
6
|
+
|
5
7
|
def initialize(keys, rows)
|
6
8
|
@keys = keys
|
7
9
|
@rows = rows
|
8
10
|
end
|
9
11
|
|
10
12
|
def method_missing(method, *args, &block)
|
11
|
-
if (
|
13
|
+
if should_proxy_method?(method.to_sym)
|
12
14
|
@rows.send(method, *args, &block)
|
13
15
|
else
|
14
16
|
super
|
15
17
|
end
|
16
18
|
end
|
17
19
|
|
20
|
+
private
|
21
|
+
|
22
|
+
def should_proxy_method?(method)
|
23
|
+
@@proxy_methods.include? method
|
24
|
+
end
|
18
25
|
end
|
19
26
|
end
|
data/lib/batch_factory/parser.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module BatchFactory
|
2
2
|
class Parser
|
3
|
-
attr_accessor :worksheet, :user_heading_keys,
|
3
|
+
attr_accessor :worksheet, :user_heading_keys,
|
4
|
+
:heading_keys, :column_bounds, :row_hashes
|
4
5
|
|
5
6
|
def initialize
|
6
7
|
@heading_keys = []
|
@@ -8,9 +9,9 @@ module BatchFactory
|
|
8
9
|
@row_hashes = []
|
9
10
|
end
|
10
11
|
|
11
|
-
def open(file_location,
|
12
|
-
@worksheet = SpreadsheetDocument.new(file_location,
|
13
|
-
@user_heading_keys =
|
12
|
+
def open(file_location, options = {})
|
13
|
+
@worksheet = SpreadsheetDocument.new(file_location, options)
|
14
|
+
@user_heading_keys = options[:keys]
|
14
15
|
end
|
15
16
|
|
16
17
|
def parse!
|
data/lib/spreadsheet_document.rb
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
require 'roo'
|
2
|
+
|
2
3
|
class SpreadsheetDocument
|
3
|
-
|
4
|
-
|
4
|
+
attr_reader :filetype, :sheet_number
|
5
|
+
|
6
|
+
def initialize(file_name, options = {})
|
7
|
+
@sheet_number = options[:sheet_number] || 0
|
8
|
+
@filetype = options[:filetype] || detect_filetype(file_name)
|
9
|
+
|
10
|
+
@spreadsheet = case @filetype
|
5
11
|
when 'xls'
|
6
12
|
Roo::Excel.new(file_name)
|
7
13
|
when 'xlsx'
|
@@ -11,7 +17,7 @@ class SpreadsheetDocument
|
|
11
17
|
else
|
12
18
|
Roo::CSV.new(file_name)
|
13
19
|
end
|
14
|
-
@current_sheet = @spreadsheet.sheets[sheet_number]
|
20
|
+
@current_sheet = @spreadsheet.sheets[@sheet_number]
|
15
21
|
end
|
16
22
|
|
17
23
|
def method_missing(method, *args, &block)
|
@@ -22,4 +28,11 @@ class SpreadsheetDocument
|
|
22
28
|
super
|
23
29
|
end
|
24
30
|
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def detect_filetype(file_name)
|
35
|
+
File.extname(file_name)[1..-1]
|
36
|
+
end
|
25
37
|
end
|
38
|
+
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe BatchFactory do
|
4
|
-
|
5
4
|
context 'w/ class methods' do
|
6
5
|
it 'should open a file and return a hashed workbook' do
|
7
6
|
worksheet = BatchFactory.from_file VALID_SPREADSHEET
|
@@ -10,5 +9,5 @@ describe BatchFactory do
|
|
10
9
|
worksheet[0][:age].should == 50
|
11
10
|
end
|
12
11
|
end
|
13
|
-
|
14
12
|
end
|
13
|
+
|
@@ -37,7 +37,7 @@ describe BatchFactory::Parser do
|
|
37
37
|
|
38
38
|
context 'when parsing second worksheet' do
|
39
39
|
before do
|
40
|
-
parser.open VALID_SPREADSHEET, 1
|
40
|
+
parser.open VALID_SPREADSHEET, sheet_number: 1
|
41
41
|
parser.parse!
|
42
42
|
end
|
43
43
|
|
@@ -60,6 +60,6 @@ describe BatchFactory::Parser do
|
|
60
60
|
worksheet.keys.should == parser.heading_keys
|
61
61
|
end
|
62
62
|
end
|
63
|
-
|
64
63
|
end
|
65
64
|
end
|
65
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SpreadsheetDocument do
|
4
|
+
context 'w/ filetype option' do
|
5
|
+
subject { described_class.new(VALID_SPREADSHEET) }
|
6
|
+
|
7
|
+
its(:filetype) { should eq('xls') }
|
8
|
+
end
|
9
|
+
|
10
|
+
context 'with filetype option' do
|
11
|
+
subject { described_class.new(VALID_SPREADSHEET, filetype: 'xls') }
|
12
|
+
|
13
|
+
its(:filetype) { should eq('xls') }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
require 'rspec'
|
2
|
+
require 'rspec/its'
|
3
|
+
|
2
4
|
require 'batch_factory'
|
3
5
|
|
4
|
-
ASSETS_DIR = File.expand_path File.join(File.dirname(__FILE__), 'files')
|
6
|
+
ASSETS_DIR = File.expand_path File.join(File.dirname(__FILE__), 'support', 'files')
|
5
7
|
VALID_SPREADSHEET = File.join(ASSETS_DIR, 'valid-spreadsheet.xls')
|
8
|
+
|
9
|
+
RSpec.configure do |config|
|
10
|
+
config.mock_with :rspec
|
11
|
+
config.order = 'random'
|
12
|
+
config.filter_run focus: true
|
13
|
+
config.run_all_when_everything_filtered = true
|
14
|
+
config.fail_fast = false
|
15
|
+
end
|
16
|
+
|
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.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Denis Ivanov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-04-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: roo
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '2.10'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec-its
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
description: Assumes first row to be keys and returns hashes for consecutive rows
|
56
70
|
email:
|
57
71
|
- visible@jumph4x.net
|
@@ -64,10 +78,11 @@ files:
|
|
64
78
|
- lib/batch_factory/parser.rb
|
65
79
|
- lib/batch_factory/version.rb
|
66
80
|
- lib/spreadsheet_document.rb
|
81
|
+
- spec/batch_factory/batch_factory_spec.rb
|
82
|
+
- spec/batch_factory/hashed_worksheet_spec.rb
|
83
|
+
- spec/batch_factory/parser_spec.rb
|
84
|
+
- spec/batch_factory/spreadsheet_document_spec.rb
|
67
85
|
- spec/spec_helper.rb
|
68
|
-
- spec/unit/batch_factory.rb
|
69
|
-
- spec/unit/batch_factory/hashed_worksheet.rb
|
70
|
-
- spec/unit/batch_factory/parser.rb
|
71
86
|
homepage: https://github.com/jumph4x/batch-factory
|
72
87
|
licenses: []
|
73
88
|
metadata: {}
|
@@ -92,7 +107,8 @@ signing_key:
|
|
92
107
|
specification_version: 4
|
93
108
|
summary: Meaningful spreadsheet access
|
94
109
|
test_files:
|
110
|
+
- spec/batch_factory/batch_factory_spec.rb
|
111
|
+
- spec/batch_factory/hashed_worksheet_spec.rb
|
112
|
+
- spec/batch_factory/parser_spec.rb
|
113
|
+
- spec/batch_factory/spreadsheet_document_spec.rb
|
95
114
|
- spec/spec_helper.rb
|
96
|
-
- spec/unit/batch_factory/hashed_worksheet.rb
|
97
|
-
- spec/unit/batch_factory/parser.rb
|
98
|
-
- spec/unit/batch_factory.rb
|