excelxml 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 231b7f58c44f4a4b8b2139332fa1dcdcdff0a4f8
4
- data.tar.gz: 975f58c882c3ce58a2a95416eae60f0f76b8df95
3
+ metadata.gz: 1c4eb7cecd2cb4b642faebecc545b14760e9c274
4
+ data.tar.gz: fc9215986ce901f91f3ea256f6d837fd694773f7
5
5
  SHA512:
6
- metadata.gz: 936a3f99d7a689065a327e4ec700c229e82dc06c3598e053749362726bb76a62aa151f21e147f25010b771132d9e11ef54c4c01d204723eeb6152435587db3a2
7
- data.tar.gz: c3ac14007d6f65aac80d02ca5796a4ac0d9c2984ae08dea5a5b2bf8fb49bd18d5a34a941e9487050035d850218abbbf5f0ff2f8563b9a54aa464146d101742ec
6
+ metadata.gz: 8db3fd70f0be9fdf230f8d4b5b46c687d73d28a98dca2add94aba0fedb138c6cabc81092ae8c1127693838db5e4c55f49ecc975b9d490de6a95de8238fd8981b
7
+ data.tar.gz: ba7a943235fba4b9c526983c083515fc61350d358ae403f3b2383e1ba5f4cacc02fa0b0b5947fd6eb76e1c62e15ebc27a506431dd87b56fc1fcd7916f58691f0
@@ -1,3 +1,3 @@
1
1
  module ExcelXml
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -12,13 +12,13 @@ module ExcelXml
12
12
  class Parser
13
13
  attr_reader :unidentified_worksheets
14
14
  def initialize workbook_xml, opts={}
15
- only_these_worksheets = [opts.delete(:only_these_worksheets)].flatten.compact if opts[:only_these_worksheets]
15
+ only_these_worksheets = [opts.delete(:only_these_worksheets)].flatten.compact
16
16
  @worksheet_parser_classes = [opts.delete(:worksheet_parsers)].flatten.compact
17
17
  @worksheet_parser_hash = @worksheet_parser_classes.each_with_object({}) {|wspc, hsh| hsh[wspc] = [] }
18
18
  raise ArgumentError, "unknown options #{opts.keys.inspect}" unless opts.empty?
19
19
  @unidentified_worksheets = []
20
20
  ExcelXml::Workbook.parse(workbook_xml, single: true).worksheets.each do |worksheet|
21
- next if only_these_worksheets and !only_these_worksheets.include?(worksheet.name)
21
+ next if !only_these_worksheets.empty? and !only_these_worksheets.include?(worksheet.name)
22
22
  worksheet_identified = false
23
23
  worksheet.rows.each_with_index do |row, row_idx|
24
24
  worksheet_identifiers.each do |wsp|
@@ -21,7 +21,7 @@ module ExcelXml
21
21
  grid_col_idx = cell.index ? cell.index - 1 : grid_col_idx + 1
22
22
  (0..cell.merge_down).each do |down|
23
23
  (0..cell.merge_across).each do |across|
24
- grid[grid_row_idx+down][grid_col_idx+across] = cell.data
24
+ grid[grid_row_idx+down][grid_col_idx+across] = Field.new(cell.data || "")
25
25
  end
26
26
  end
27
27
  grid_col_idx += cell.merge_across
@@ -43,11 +43,15 @@ module ExcelXml
43
43
  def rows
44
44
  @rows ||= begin
45
45
  @worksheet.rows[(header_row_index+1)..-1].collect do |fields|
46
- Fields.new(fields, index_to_header_map)
46
+ Fields.new(self, fields)
47
47
  end
48
48
  end
49
49
  end
50
50
 
51
+ def has_header? header
52
+ index_to_header_map.find {|e| e.match header }
53
+ end
54
+
51
55
  def index_to_header_map
52
56
  @index_to_header_map ||= @worksheet.rows[header_row_index].collect {|h| h ? h.strip : nil }
53
57
  end
@@ -61,7 +65,7 @@ module ExcelXml
61
65
  end
62
66
 
63
67
  def is_header? row_number, fields
64
- return true if mandatory_columns.all? {|mc| fields.any? {|f| next unless f; f.match mc } }
68
+ return true if mandatory_columns.all? {|mc| fields.compact.any? {|f| f.match mc } }
65
69
  return false
66
70
  end
67
71
 
@@ -69,30 +73,35 @@ module ExcelXml
69
73
  end
70
74
 
71
75
  class Fields < Array
72
- def initialize *args
73
- super(*args[0..-2])
74
- @index_to_header_map = args.last
76
+ def initialize parser, raw_fields
77
+ super(raw_fields)
78
+ @parser = parser
75
79
  end
76
- def [] regexp
77
- return super unless regexp.is_a? Regexp
78
- idx = @index_to_header_map.find_index {|e| e.match regexp }
79
- raise "#{regexp.inspect} not found in #{@index_to_header_map.inspect}." if idx.nil?
80
- super(idx).extend Field
80
+ def has_header? header
81
+ @parser.has_header? header
82
+ end
83
+ def [] key
84
+ if idx = @parser.instance_eval { index_to_header_map.find_index {|e| e.match key } }
85
+ self[idx] = super(idx) || Field.new
86
+ end
81
87
  end
82
88
  end
83
89
 
84
- module Field
90
+ class Field < String
85
91
  def fixnum?
86
92
  return Integer(self)
87
93
  rescue
88
94
  return false
89
95
  end
90
96
  def content?
91
- return (self.is_a?(String) and !self.empty?)
97
+ return !self.empty?
92
98
  end
93
99
  def string?
94
100
  return (self.content? and !self.fixnum?)
95
101
  end
102
+ def to_nil
103
+ self.empty? ? nil : self
104
+ end
96
105
  end
97
106
 
98
107
  end
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: excelxml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Delsol
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-21 00:00:00.000000000 Z
11
+ date: 2014-05-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: happymapper
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
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: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.5'
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: '1.5'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - '>='
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  description: ''
@@ -58,7 +58,7 @@ executables: []
58
58
  extensions: []
59
59
  extra_rdoc_files: []
60
60
  files:
61
- - ".gitignore"
61
+ - .gitignore
62
62
  - Gemfile
63
63
  - LICENSE.txt
64
64
  - README.md
@@ -84,17 +84,17 @@ require_paths:
84
84
  - lib
85
85
  required_ruby_version: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">="
87
+ - - '>='
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  required_rubygems_version: !ruby/object:Gem::Requirement
91
91
  requirements:
92
- - - ">="
92
+ - - '>='
93
93
  - !ruby/object:Gem::Version
94
94
  version: '0'
95
95
  requirements: []
96
96
  rubyforge_project:
97
- rubygems_version: 2.2.2
97
+ rubygems_version: 2.0.3
98
98
  signing_key:
99
99
  specification_version: 4
100
100
  summary: Parses the data out of Excel XML 2003 workbooks/sheets.