doctordata 0.2.2 → 0.3.0

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 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