doctordata 0.2.2 → 0.3.0

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: e47b9d661e4af598baf2fd7c9d3aa5b2814ef431
4
- data.tar.gz: 18a2e9bad329273e48f9bacdd662caadde62d1fb
3
+ metadata.gz: e05423d70ba06c78abea9fa5cbaa603477907e43
4
+ data.tar.gz: 5b96d9dc76e7e734e94874191aa8de46ab2b472d
5
5
  SHA512:
6
- metadata.gz: 5791ca876286b3bf956d345df0f9b7797f5701c4fab653fc98e6a12172a8e23fcfd7bd379d1c45b61bbbd6d87b436b0ad00369a6dbc190659d6efcd59f86bed8
7
- data.tar.gz: 191671015f072137894294e351a830f64083b6c8a36dd77caf220f3da4fb0cb9bce74fde6be19363a7929fc7cd1050f88b22a3c63d5065ee65cfdde7b96817ab
6
+ metadata.gz: 37d44d08a1fa4b2795f23fbbf51a552812e713a70c6a6350c5fcb46fdd33a3c87bf2c43a2c346c6c9068b3e3f3daba0f88cfe42b1c83f20fa8d586888b3322af
7
+ data.tar.gz: 43dddd849ce6bed55e0044531cb8ca80443a89f25129fe3a4394f543559b6bba1bce8acd70f81c9ed7277089f06a6aba93398fdcffdab783651b3613ec8d22d2
data/README.md CHANGED
@@ -46,6 +46,8 @@ Doctordata::Parser.from_excel(excel_file_or_path)
46
46
 
47
47
  The result is a Hash. Top level key is sheet name, and value is array as same as csv example.
48
48
 
49
+ It skips if the sheet name starts with `#`.
50
+
49
51
  ## Development
50
52
 
51
53
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
data/doctordata.gemspec CHANGED
@@ -22,7 +22,6 @@ Gem::Specification.new do |spec|
22
22
  spec.require_paths = ["lib"]
23
23
 
24
24
  spec.add_dependency "roo", "~> 2"
25
- spec.add_dependency "faraday", "~> 0.12"
26
25
 
27
26
  spec.add_development_dependency "bundler", "~> 1.15"
28
27
  spec.add_development_dependency "rake", "~> 10.0"
data/lib/doctordata.rb CHANGED
@@ -1,22 +1,52 @@
1
1
  require "doctordata/version"
2
2
  require 'csv'
3
3
  require 'roo'
4
- require 'faraday'
5
4
 
6
5
  module Doctordata
7
6
  class Parser
8
7
  class << self
9
8
  def from_csv_table(table)
10
9
  # there is much room to do performance tuning
11
- table.
12
- map do |row|
13
- row.
14
- reject { |k, v| v == nil || v == '' }.
15
- reject { |k, v| k == nil || k == '' || k.start_with?('#') }.
16
- map { |k, v| "#{k}=#{v}" }.
17
- join('&')
18
- end.
19
- map { |s| Faraday::NestedParamsEncoder.decode(s) }
10
+ checked_table = table.by_col!.delete_if{ |k, v| k == nil || k == '' || k.start_with?('#') }
11
+ checked_table.by_row!.map do |row|
12
+ row.
13
+ reject { |k, v| v == nil || v == '' }
14
+ end.
15
+ map do |s|
16
+ result = {}
17
+ s.each do |k,v|
18
+ context = result
19
+ subkeys = k.scan(/[^\[\]]+(?:\]?\[\])?/)
20
+ subkeys.each_with_index do |subkey, i|
21
+ if i+1 != subkeys.length
22
+ value_type = Hash
23
+ if context[subkey] && !context[subkey].is_a?(value_type)
24
+ raise TypeError, "expected %s (got %s) for param `%s'" % [
25
+ value_type.name,
26
+ context[subkey].class.name,
27
+ subkey
28
+ ]
29
+ end
30
+ context = (context[subkey] ||= value_type.new)
31
+ else
32
+ context[subkey] = v
33
+ end
34
+ end
35
+ end
36
+ dehash(result, 0)
37
+ end
38
+ end
39
+
40
+ def dehash(hash, depth)
41
+ hash.each do |key, value|
42
+ hash[key] = dehash(value, depth + 1) if value.kind_of?(Hash)
43
+ end
44
+
45
+ if depth > 0 && !hash.empty? && hash.keys.all? { |k| k =~ /^\d+$/ }
46
+ hash.keys.sort.inject([]) { |all, key| all << hash[key] }
47
+ else
48
+ hash
49
+ end
20
50
  end
21
51
 
22
52
  def from_csv_path(path)
@@ -1,3 +1,3 @@
1
1
  module Doctordata
2
- VERSION = "0.2.2"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: doctordata
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - qsona
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-08-23 00:00:00.000000000 Z
11
+ date: 2017-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: roo
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2'
27
- - !ruby/object:Gem::Dependency
28
- name: faraday
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '0.12'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '0.12'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: bundler
43
29
  requirement: !ruby/object:Gem::Requirement