queryable_pstore 0.0.6 → 0.0.7

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: f84e3e92baf6549c12c1bec54a36a155461b11aa
4
- data.tar.gz: d831ec8f2ab52d5911f70b06203857d85f5a8f7f
3
+ metadata.gz: 42e7acf8a72dd7e9de68bbe669c101bb9beee30d
4
+ data.tar.gz: eb8fa9814c3e75a29be7635205df0dcc7b2a4231
5
5
  SHA512:
6
- metadata.gz: 6cfb2ca00c225b53ca498ce78a250701e8b33c203d21d00b66e97399d0a11cb5a5e48499e98b486987f3c88a39335af98adfafa0600af349f9102261ac4f5526
7
- data.tar.gz: 2b71d3e531872a06a80b2a41f257fd50ae6a8a94a6c0b4a17f550010171a1ef3148df427538d35187aecaafcf08692a6fdf6d502e8f469df40d95602176c30b5
6
+ metadata.gz: 92a03d212cae19ea54199225aa4914f20e13ba3190c920d1973516b13b42ae929bd36fb5efaf422ab0d50c0a560405cbb81b51aa81c0e13a4dc975590c04676e
7
+ data.tar.gz: 905e16e37c196b7882537b3f4215a1ebd9f9884346c618ffe7287a1d6e53a2b9d0cd3c27fc8dd75410d54f0d67e8382b679f179d9253ac0a3bc2d757389057ac
data/lib/csv_converter.rb CHANGED
@@ -1,20 +1,20 @@
1
- class CSVConverter
2
- def initialize(convert)
3
- @key = convert.keys.first
4
- @conversion = convert[@key]
5
- end
6
-
7
- def convert(hash)
8
- case @conversion
9
- when :integer
10
- hash[@key] = hash[@key].to_i
11
- when :float
12
- hash[@key] = hash[@key].to_f
13
- else
14
- raise ArgumentError.new("Unknown converter: `#{@conversion}`")
15
- end
1
+ class CSVConverter
2
+ def initialize(convert)
3
+ @key = convert.keys.first
4
+ @conversion = convert[@key]
5
+ end
16
6
 
17
- hash
7
+ def convert(hash)
8
+ case @conversion
9
+ when :integer
10
+ hash[@key] = hash[@key].to_i
11
+ when :float
12
+ hash[@key] = hash[@key].to_f
13
+ else
14
+ raise ArgumentError.new("Unknown converter: `#{@conversion}`")
18
15
  end
19
16
 
17
+ hash
20
18
  end
19
+
20
+ end
@@ -0,0 +1,20 @@
1
+ class CSVImporter
2
+ def self.import_csv(filename, opts = {})
3
+ csv_converters = opts.fetch(:convert, []).map { |conversion| CSVConverter.new(conversion) }
4
+
5
+ csv = CSV.read(File.open(filename), headers: true, header_converters: -> (header) { convert_header_to_methodable_name(header) })
6
+
7
+ store = QueryablePStore.new("#{filename}.pstore")
8
+ store.transaction do
9
+ csv.each do |row|
10
+ store[SecureRandom.uuid] = csv_converters.inject(row.to_h) { |hash, converter| converter.convert(hash) }
11
+ end
12
+ end
13
+
14
+ store
15
+ end
16
+
17
+ def self.convert_header_to_methodable_name(header)
18
+ header.downcase.gsub(/[^a-z]/, "_").to_sym
19
+ end
20
+ end
@@ -5,23 +5,12 @@ require 'csv'
5
5
 
6
6
  require_relative 'query'
7
7
  require_relative 'csv_converter'
8
+ require_relative 'csv_importer'
8
9
 
9
10
  class QueryablePStore < PStore
10
- def self.import_csv(filename, opts = {})
11
- csv_converters = opts.fetch(:convert, []).map { |conversion| CSVConverter.new(conversion) }
11
+ extend SingleForwardable
12
+ def_delegator :CSVImporter, :import_csv
12
13
 
13
- csv = CSV.read(File.open(filename), headers: true, header_converters: -> (header) { header.downcase.to_sym })
14
-
15
- store = new("#{filename}.pstore")
16
- store.transaction do
17
- csv.each do |row|
18
- store[SecureRandom.uuid] = csv_converters.inject(row.to_h) { |hash, converter| converter.convert(hash) }
19
- end
20
- end
21
-
22
- store
23
- end
24
-
25
14
  def initialize(store_name)
26
15
  super(store_name)
27
16
  @queries = []
@@ -29,7 +18,7 @@ class QueryablePStore < PStore
29
18
 
30
19
  def records
31
20
  transaction do
32
- roots.map { |root| fetch(root) }
21
+ roots.map { |root| fetch(root) }
33
22
  end
34
23
  end
35
24
 
@@ -37,7 +26,7 @@ class QueryablePStore < PStore
37
26
  attribute = method.to_s.split("_")[0..-2].join("_").to_sym
38
27
  modifier = method.to_s.split("_")[-1].to_sym
39
28
 
40
- query = Query.new(attribute, modifier, argument || blk)
29
+ query = Query.new(attribute, modifier, argument || blk)
41
30
  @queries << query if query.valid?(records)
42
31
  self
43
32
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: queryable_pstore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jacob Smith
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-25 00:00:00.000000000 Z
11
+ date: 2017-03-04 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: 'This provides a very simple way of querying PStores. It allows you to
14
14
  write queries like: `pstore.age_gt(40).height_lt(1.8).results` Additional documentation
@@ -19,6 +19,7 @@ extensions: []
19
19
  extra_rdoc_files: []
20
20
  files:
21
21
  - lib/csv_converter.rb
22
+ - lib/csv_importer.rb
22
23
  - lib/query.rb
23
24
  - lib/queryable_pstore.rb
24
25
  homepage: https://github.com/jacobsmith/queryable_pstore