trials 0.0.7 → 0.1.0

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
  SHA256:
3
- metadata.gz: 25af488b8570325ce29e5b0ae57163527e09056253a293a2b33078b9e8fd9bd8
4
- data.tar.gz: '08fcfe278a7f2c9d2b6c55a7c71ec5e9e93345ea2e657028403de996b0468d66'
3
+ metadata.gz: 574015ebe59522f5c8269f49baa0f94c8ffd4510a992f75b03b3db0d02e4aede
4
+ data.tar.gz: 2b2d695cb64e9a2da338726f61d206e46b3b9bf693f57a7395a1185a8a58cc6d
5
5
  SHA512:
6
- metadata.gz: bad557deec771d0fe40f6ebe5e5bcafeca0ff679f52d70504edc3cfa2d4983774513d71c162461f738c2a37182f0ca767ce3a529b7c4acfbc391781137ee6653
7
- data.tar.gz: fbda083656430aa9e79bb429b743096964325aaa3d44d74b171a9c024cb8ff04ed752249556cd7656ab5472ca8a5c154aa15da43b80dfae1f99bfb4a125a4142
6
+ metadata.gz: 59eb34e02c11c2f3b26f00597eae0b3c55ba0c7299203928a69da64f64ee287a83278ab8f5ac9fe50ef73e39635ed7d6500b6d4b72eb3f98c86b8b35383ad624
7
+ data.tar.gz: 413eea94a00660664f744f3baca2e891ce5db54f4548437d110da0df99405f3e51f439b15a4dc5663037bf5ad5eadf936b26fc110335f1979a579c658c84d82e
@@ -0,0 +1,5 @@
1
+ class Array
2
+ def to_harray
3
+ HArray.new(self)
4
+ end
5
+ end
@@ -0,0 +1,48 @@
1
+ class Hash
2
+ def to_os(n = nil)
3
+ n ||= self
4
+
5
+ case n
6
+ when Array
7
+ n.map { |x| to_os(x) }
8
+ when NilClass, Hash
9
+ n
10
+ .map { |k, v| [k, to_os(v)] }
11
+ .to_h
12
+ .then { |x| OpenStruct.new(x) }
13
+ else
14
+ n
15
+ end
16
+ end
17
+
18
+ def sanitize_value(key, type, date_format: nil, datetime_format: nil)
19
+ self.merge(
20
+ key => or_nil do
21
+ case type
22
+ when :date
23
+ Date.strptime(*[self.dig(key), date_format].compact)
24
+ when :datetime
25
+ DateTime.parse(*[self.dig(key), datetime_format].compact)
26
+ when :integer, :int
27
+ self.dig(key).to_i
28
+ when :float
29
+ self.dig(key).to_f
30
+ when :string
31
+ self.dig(key).to_s
32
+ when :present?
33
+ self.dig(key).present?
34
+ when :blank?
35
+ self.dig(key).blank?
36
+ end
37
+ end
38
+ )
39
+ end
40
+
41
+ def sanitize(schema, date_format: '%Y-%m-%d')
42
+ cp = self.dup
43
+ schema.each do |key, type|
44
+ cp = cp.sanitize_value(key, type, date_format: date_format)
45
+ end
46
+ cp
47
+ end
48
+ end
@@ -0,0 +1,52 @@
1
+ class HArray < Array
2
+ def hashes
3
+ self
4
+ end
5
+
6
+ def count_by
7
+ hashes
8
+ .group_by { |x| yield(x) }
9
+ .map { |k, v| [k, v.length] }
10
+ .to_h
11
+ end
12
+
13
+ def rename_keys(**renames)
14
+ renames.each do |orig_key, new_key|
15
+ hashes.map do |h|
16
+ new_h = h.dup
17
+ new_h[new_key] = new_h.delete(orig_key)
18
+ new_h
19
+ end
20
+ end
21
+ end
22
+
23
+ def uniq_keys
24
+ hashes.flat_map(&:keys).uniq.compact
25
+ end
26
+
27
+ def merge(*groups, key:, join: :inner)
28
+ groups = [self, *groups].map do |group|
29
+ group
30
+ .map { |h| [h.dig(key), h] }
31
+ .to_h
32
+ end
33
+
34
+ keys = begin
35
+ case join
36
+ when :inner
37
+ groups.map(&:keys).reduce(&:&)
38
+ when :all
39
+ groups.flat_map(&:keys).uniq
40
+ when :first
41
+ groups.first.keys
42
+ end
43
+ end
44
+
45
+ keys.map do |key|
46
+ groups
47
+ .map { |g| g.dig(key) }
48
+ .compact
49
+ .reduce(&:merge)
50
+ end
51
+ end
52
+ end
data/lib/trials.rb CHANGED
@@ -32,5 +32,8 @@ require_relative 'trials/utils/benchmarking'
32
32
  require_relative 'trials/utils/rollbar'
33
33
  require_relative 'trials/utils/aws'
34
34
  require_relative 'trials/utils/google_drive'
35
+ require_relative 'trials/utils/h_array'
35
36
  require_relative 'trials/data_handling/addresses'
36
37
  require_relative 'trials/data_handling/names'
38
+ require_relative 'trials/extensions/hash'
39
+ require_relative 'trials/extensions/array'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trials
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - grahamotte
@@ -287,11 +287,14 @@ files:
287
287
  - lib/trials.rb
288
288
  - lib/trials/data_handling/addresses.rb
289
289
  - lib/trials/data_handling/names.rb
290
+ - lib/trials/extensions/array.rb
291
+ - lib/trials/extensions/hash.rb
290
292
  - lib/trials/utils/aws.rb
291
293
  - lib/trials/utils/benchmarking.rb
292
294
  - lib/trials/utils/csvs.rb
293
295
  - lib/trials/utils/files.rb
294
296
  - lib/trials/utils/google_drive.rb
297
+ - lib/trials/utils/h_array.rb
295
298
  - lib/trials/utils/hashes.rb
296
299
  - lib/trials/utils/jsons.rb
297
300
  - lib/trials/utils/logging.rb