roo-hasherize 0.1.2.pre.alpha

Sign up to get free protection for your applications and to get access to all the features.
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: