queryable_pstore 0.0.6 → 0.0.7

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