queryable_pstore 0.0.7 → 0.0.8

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: 42e7acf8a72dd7e9de68bbe669c101bb9beee30d
4
- data.tar.gz: eb8fa9814c3e75a29be7635205df0dcc7b2a4231
3
+ metadata.gz: 4ea6d2cc0b46d969b9696c064351b8f6ac70438c
4
+ data.tar.gz: 843721ce93a69ae6868a78d973411b71c99774b0
5
5
  SHA512:
6
- metadata.gz: 92a03d212cae19ea54199225aa4914f20e13ba3190c920d1973516b13b42ae929bd36fb5efaf422ab0d50c0a560405cbb81b51aa81c0e13a4dc975590c04676e
7
- data.tar.gz: 905e16e37c196b7882537b3f4215a1ebd9f9884346c618ffe7287a1d6e53a2b9d0cd3c27fc8dd75410d54f0d67e8382b679f179d9253ac0a3bc2d757389057ac
6
+ metadata.gz: 8aa31e61c7ed278c590adafb22ce818cfcc4baad60746384153c2a579ddf2e5f0a39a679211fc7150dbc87ec6f8b16b715ec04bb7d3c7696124cd459e73cbd5b
7
+ data.tar.gz: 146000712f4ae9b0912d7c5c19d712c77b6bbaebace3b3bbceb91e52be93b738896d2e07cc8b7ba3baea41ad8b77c7c63d07b4d5f30b6216b4378bf9f64f2b0f
data/lib/csv_importer.rb CHANGED
@@ -1,8 +1,27 @@
1
+ require 'pry'
1
2
  class CSVImporter
2
- def self.import_csv(filename, opts = {})
3
- csv_converters = opts.fetch(:convert, []).map { |conversion| CSVConverter.new(conversion) }
3
+ attr_reader :original_headers, :headers_and_type
4
4
 
5
+ def import_csv(filename, opts = {})
5
6
  csv = CSV.read(File.open(filename), headers: true, header_converters: -> (header) { convert_header_to_methodable_name(header) })
7
+ store = create_pstore(csv, opts, filename)
8
+ store.csv_importer = self
9
+ set_headers_and_type(@original_headers, store)
10
+
11
+ store
12
+ end
13
+
14
+ def import_csv_from_string(string, opts = {})
15
+ csv = CSV.parse(string, headers: true, header_converters: -> (header) { convert_header_to_methodable_name(header) })
16
+ store = create_pstore(csv, opts)
17
+ store.csv_importer = self
18
+ set_headers_and_type(@original_headers, store)
19
+
20
+ store
21
+ end
22
+
23
+ def create_pstore(csv, opts = {}, filename = SecureRandom.uuid)
24
+ csv_converters = opts.fetch(:convert, []).map { |conversion| CSVConverter.new(conversion) }
6
25
 
7
26
  store = QueryablePStore.new("#{filename}.pstore")
8
27
  store.transaction do
@@ -14,7 +33,24 @@ class CSVImporter
14
33
  store
15
34
  end
16
35
 
17
- def self.convert_header_to_methodable_name(header)
36
+ def convert_header_to_methodable_name(header)
37
+ @original_headers ||= []
38
+ @original_headers << header
39
+
18
40
  header.downcase.gsub(/[^a-z]/, "_").to_sym
19
41
  end
42
+
43
+ private
44
+
45
+ def set_headers_and_type(headers, store)
46
+ headers_and_type = {}
47
+ store.results.first.each_with_index do |key_value, index|
48
+ value = key_value.last
49
+
50
+ original_header = headers[index]
51
+ headers_and_type[original_header] = value.class
52
+ end
53
+
54
+ @headers_and_type = headers_and_type
55
+ end
20
56
  end
@@ -8,8 +8,20 @@ require_relative 'csv_converter'
8
8
  require_relative 'csv_importer'
9
9
 
10
10
  class QueryablePStore < PStore
11
- extend SingleForwardable
12
- def_delegator :CSVImporter, :import_csv
11
+ class << self
12
+ def import_csv(filename, opts = {})
13
+ CSVImporter.new.import_csv(filename, opts)
14
+ end
15
+
16
+ def import_csv_from_string(string, opts = {})
17
+ CSVImporter.new.import_csv_from_string(string, opts)
18
+ end
19
+ end
20
+
21
+ extend Forwardable
22
+ attr_accessor :csv_importer
23
+ def_delegator :@csv_importer, :original_headers
24
+ def_delegator :@csv_importer, :headers_and_type
13
25
 
14
26
  def initialize(store_name)
15
27
  super(store_name)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: queryable_pstore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jacob Smith