roo-hasherize 0.1.2.pre.alpha

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 903127a4662925db4b3132a2dbfdfb6e22750754
4
+ data.tar.gz: ab09f307df05a7c602a3e95e9cd8d90ca720abc9
5
+ SHA512:
6
+ metadata.gz: 1a1a9a631f39aea0c9f5a713e7893a89997160d85c8086f33e4b232c96b3a16c8227441bc09159602dc520a91345f16d707fb1176822f02a1853dab13491e41b
7
+ data.tar.gz: ab08fae5a9edfa9a6f799de964556492214a1aa772c8e122f59ba011ffad1ac26601a455be6b929a1139143952e504a1e587533c7430968ea7576f9187c0c759
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Vasiliy Yorkin
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
data/README.md ADDED
@@ -0,0 +1,58 @@
1
+ [![Build Status](https://travis-ci.org/vyorkin/roo-hasherize.svg)](https://travis-ci.org/vyorkin/roo-hasherize)
2
+
3
+ # roo-hasherize
4
+
5
+ Built on top of the roo gem for easy abstraction of
6
+ spreadsheet types supported by [roo](https://github.com/roo-rb/roo) as tabular data input.
7
+ Assumes the first row to be headings with keys and forms clean Ruby hashmaps for all consecutive rows using cells as values for respective keys.
8
+
9
+ ## Rationale
10
+
11
+ Originally it was a fork of [batch_factory repo](https://github.com/jumph4x/batch-factory).
12
+ Rewritten almost from scratch. The main reason is to provide faster and predictable release cycles.
13
+
14
+ ## Installation
15
+
16
+ Add this line to your Gemfile
17
+
18
+ ```ruby
19
+ gem 'roo-hasherize'
20
+ ```
21
+
22
+ or
23
+
24
+ ```ruby
25
+ gem install roo-hasherize
26
+ ```
27
+
28
+ ## Usage examples
29
+
30
+ ```ruby
31
+ hash = Roo::Hasherize.call(target, options)
32
+ ```
33
+
34
+ options are:
35
+ * `keys` - Use it only if your dataset doesn't contain headers
36
+ * `sheet` - Number of sheet to hasherize (only makes sense for spreadsheets)
37
+ * `extension` - To explicityly specify file format
38
+
39
+ Spreadsheet type is detected by the file extension (`xls`, `xlsx`, `ods`),
40
+ files without extension considered `csv`.
41
+ Also, this can be specified explicitly with the `extension` option:
42
+
43
+ All other (roo specific) options are passed as is down to a corresponding file type handler class,
44
+ e.g. `csv_options` is passed to `Roo::CSV`
45
+
46
+ ## Development
47
+
48
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
49
+
50
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
51
+
52
+ ## Contributing
53
+
54
+ 1. Fork it ( https://github.com/[my-github-username]/xftp/fork )
55
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
56
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
57
+ 4. Push to the branch (`git push origin my-new-feature`)
58
+ 5. Create a new Pull Request
@@ -0,0 +1,13 @@
1
+ require 'roo/hasherize/version'
2
+ require 'roo/hasherize/worksheet'
3
+ require 'roo/hasherize/parser'
4
+
5
+ module Roo
6
+ # Main gem module.
7
+ # Also acts as a facade / public API
8
+ module Hasherize
9
+ def self.call(target, options = {})
10
+ Parser.call(target, options)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,55 @@
1
+ require 'uri'
2
+ require 'active_support/core_ext/object/blank'
3
+ require 'active_support/hash_with_indifferent_access'
4
+ require 'roo-xls'
5
+
6
+ module Roo
7
+ module Hasherize
8
+ # Parses & "hasherizes" given spreadsheet
9
+ # @api private
10
+ class Parser
11
+ def self.call(target, options = {})
12
+ new.call(target, options)
13
+ end
14
+
15
+ def call(target, options = {})
16
+ @worksheet = Worksheet.new(target, options)
17
+ @user_keys = options[:keys]
18
+ @keys = parse_keys
19
+
20
+ rows.map { |row| HashWithIndifferentAccess[parse_row(row)] }
21
+ end
22
+
23
+ private
24
+
25
+ def parse_keys
26
+ source_keys = @user_keys || @worksheet.row(@worksheet.first_row)
27
+ source_keys.map { |key| key.blank? ? nil : key.strip }
28
+ end
29
+
30
+ def parse_row(row)
31
+ @keys.zip(row).reject { |key, value| key.blank? || value.blank? }
32
+ end
33
+
34
+ def rows
35
+ row_bounds.map { |index| @worksheet.row(index) }
36
+ end
37
+
38
+ def row_bounds
39
+ (first_row..@worksheet.last_row)
40
+ end
41
+
42
+ def column_bounds
43
+ (@worksheet.first_column - 1)..(@worksheet.last_column - 1)
44
+ end
45
+
46
+ def first_row
47
+ @worksheet.first_row + first_row_offset
48
+ end
49
+
50
+ def first_row_offset
51
+ @user_keys ? 0 : 1
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,14 @@
1
+ module Roo
2
+ module Hasherize
3
+ # Gem version builder module
4
+ module VERSION
5
+ MAJOR = 0
6
+ MINOR = 1
7
+ PATCH = 2
8
+ SUFFIX = '-alpha'
9
+
10
+ NUMBER = [MAJOR, MINOR, PATCH].compact.join('.')
11
+ STRING = "#{NUMBER}#{SUFFIX}"
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,25 @@
1
+ require 'roo'
2
+
3
+ module Roo
4
+ module Hasherize
5
+ # Acts as a ghost proxy for Roo::Spreadsheet
6
+ # @api private
7
+ class Worksheet
8
+ attr_reader :name, :sheet
9
+
10
+ def initialize(target, options = {})
11
+ @sheet = options.delete(:sheet) || 0
12
+ @spreadsheet = Roo::Spreadsheet.open(target, options)
13
+ @name = @spreadsheet.sheets[@sheet]
14
+ end
15
+
16
+ def respond_to_missing?(method, _include_private)
17
+ @spreadsheet.respond_to? method.to_sym
18
+ end
19
+
20
+ def method_missing(method, *args, &block)
21
+ @spreadsheet.send(method, *(args + [@name]), &block)
22
+ end
23
+ end
24
+ end
25
+ end
metadata ADDED
@@ -0,0 +1,245 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: roo-hasherize
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2.pre.alpha
5
+ platform: ruby
6
+ authors:
7
+ - Vasiliy Yorkin
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-06-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: roo
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 2.0.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '2.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 2.0.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: roo-xls
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.0'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 1.0.0
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.0'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 1.0.0
53
+ - !ruby/object:Gem::Dependency
54
+ name: activesupport
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: '3.0'
60
+ - - "<"
61
+ - !ruby/object:Gem::Version
62
+ version: '5.0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '3.0'
70
+ - - "<"
71
+ - !ruby/object:Gem::Version
72
+ version: '5.0'
73
+ - !ruby/object:Gem::Dependency
74
+ name: bundler
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: 1.7.6
80
+ type: :development
81
+ prerelease: false
82
+ version_requirements: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: 1.7.6
87
+ - !ruby/object:Gem::Dependency
88
+ name: rake
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - "~>"
92
+ - !ruby/object:Gem::Version
93
+ version: '10.0'
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '10.0'
97
+ type: :development
98
+ prerelease: false
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '10.0'
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: '10.0'
107
+ - !ruby/object:Gem::Dependency
108
+ name: rspec
109
+ requirement: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - "~>"
112
+ - !ruby/object:Gem::Version
113
+ version: '3.2'
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: 3.2.0
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '3.2'
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: 3.2.0
127
+ - !ruby/object:Gem::Dependency
128
+ name: rspec-its
129
+ requirement: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - "~>"
132
+ - !ruby/object:Gem::Version
133
+ version: '1.2'
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: 1.2.0
137
+ type: :development
138
+ prerelease: false
139
+ version_requirements: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - "~>"
142
+ - !ruby/object:Gem::Version
143
+ version: '1.2'
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: 1.2.0
147
+ - !ruby/object:Gem::Dependency
148
+ name: yard
149
+ requirement: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "~>"
152
+ - !ruby/object:Gem::Version
153
+ version: '0.8'
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ version: 0.8.7
157
+ type: :development
158
+ prerelease: false
159
+ version_requirements: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - "~>"
162
+ - !ruby/object:Gem::Version
163
+ version: '0.8'
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: 0.8.7
167
+ - !ruby/object:Gem::Dependency
168
+ name: yard-rspec
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '0.1'
174
+ - - ">="
175
+ - !ruby/object:Gem::Version
176
+ version: '0.1'
177
+ type: :development
178
+ prerelease: false
179
+ version_requirements: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - "~>"
182
+ - !ruby/object:Gem::Version
183
+ version: '0.1'
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ version: '0.1'
187
+ - !ruby/object:Gem::Dependency
188
+ name: simplecov
189
+ requirement: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - "~>"
192
+ - !ruby/object:Gem::Version
193
+ version: '0.10'
194
+ - - ">="
195
+ - !ruby/object:Gem::Version
196
+ version: 0.10.0
197
+ type: :development
198
+ prerelease: false
199
+ version_requirements: !ruby/object:Gem::Requirement
200
+ requirements:
201
+ - - "~>"
202
+ - !ruby/object:Gem::Version
203
+ version: '0.10'
204
+ - - ">="
205
+ - !ruby/object:Gem::Version
206
+ version: 0.10.0
207
+ description: Meaningful spreadsheet access
208
+ email:
209
+ - vasiliy.yorkin@gmail.com
210
+ executables: []
211
+ extensions: []
212
+ extra_rdoc_files: []
213
+ files:
214
+ - LICENSE
215
+ - README.md
216
+ - lib/roo/hasherize.rb
217
+ - lib/roo/hasherize/parser.rb
218
+ - lib/roo/hasherize/version.rb
219
+ - lib/roo/hasherize/worksheet.rb
220
+ homepage: https://github.com/vyorkin/roo-hasherize
221
+ licenses:
222
+ - MIT
223
+ metadata: {}
224
+ post_install_message:
225
+ rdoc_options: []
226
+ require_paths:
227
+ - lib
228
+ required_ruby_version: !ruby/object:Gem::Requirement
229
+ requirements:
230
+ - - ">="
231
+ - !ruby/object:Gem::Version
232
+ version: '0'
233
+ required_rubygems_version: !ruby/object:Gem::Requirement
234
+ requirements:
235
+ - - ">"
236
+ - !ruby/object:Gem::Version
237
+ version: 1.3.1
238
+ requirements: []
239
+ rubyforge_project:
240
+ rubygems_version: 2.2.2
241
+ signing_key:
242
+ specification_version: 4
243
+ summary: roo-hasherize-0.1.2-alpha
244
+ test_files: []
245
+ has_rdoc: