queryable_pstore 0.0.7 → 0.0.8

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