k_util 0.0.8 → 0.0.17

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: c8615e74388467bff65c418f4367b9a6946ad9f1ed9dc7aaee45ccd81774a437
4
- data.tar.gz: 8c752c2c0210b4aea25afeb5a6d41847a138d11a2af5e16bcad0d8ea35499b5d
3
+ metadata.gz: b57165e4a0192dcffbfd3655e45b326bcc00db6ce32d1b72116516d32d8a5c07
4
+ data.tar.gz: 79ee2191737f976495009f303fb7db18f0ae9e52b6b344eb642dab5ae2884b6c
5
5
  SHA512:
6
- metadata.gz: ac0a9551cc6a4c8c463e0bdc8b4b209695d5d8a1fcfd7c633cdc33488725d81f9479f91e54ea3393d66312543135149a9838dce70eeb46943e1b868be564aa31
7
- data.tar.gz: 6512cfa298e0bf08f3b29776326dd8e8be3ebe8a0c3162c2be8764cf791748d5421ee4efd14606c65b8192351e3163a8249a610abd9481258744dae95e045d33
6
+ metadata.gz: 21de731f6f1d53e8d1a28df7e1f5d80058955a517d774960f0d7362c778062cac0e9445c5d6d2cde6a88a9ce1619810dce9d5103b8a5b62d83707fce34aaabc3
7
+ data.tar.gz: 6d062276df66896e21ffa92e07dd25d38f7951da46fcaba6ab5ced669cedd7decd669df11a7902b251589e2f17dda4bb2d7aaf61911f5c08277e20a208b6a314
data/lib/k_util.rb CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'k_util/version'
4
4
  require 'k_util/console_helper'
5
+ require 'k_util/data/instance_variables_to_h'
5
6
  require 'k_util/data_helper'
6
7
  require 'k_util/file_helper'
7
8
 
@@ -20,3 +21,10 @@ module KUtil
20
21
  KUtil.data = KUtil::DataHelper.new
21
22
  KUtil.file = KUtil::FileHelper.new
22
23
  end
24
+
25
+ if ENV['KLUE_DEBUG']&.to_s&.downcase == 'true'
26
+ namespace = 'KUtil::Version'
27
+ file_path = $LOADED_FEATURES.find { |f| f.include?('k_util/version') }
28
+ version = KUtil::VERSION.ljust(9)
29
+ puts "#{namespace.ljust(35)} : #{version.ljust(9)} : #{file_path}"
30
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Provide data object helper functions
4
+ module KUtil
5
+ module Data
6
+ # Helper methods attached to the namespace for working with Data
7
+ module InstanceVariablesToH
8
+ def to_h
9
+ hash = {}
10
+ instance_variables.each do |var|
11
+ value = instance_variable_get(var)
12
+
13
+ value = KUtil.data.to_hash(value) if KUtil.data.hash_convertible?(value)
14
+
15
+ hash[var.to_s.delete('@')] = value
16
+ end
17
+ hash
18
+ end
19
+ end
20
+ end
21
+ end
@@ -4,7 +4,24 @@
4
4
  module KUtil
5
5
  # Helper methods attached to the namespace for working with Data
6
6
  class DataHelper
7
+ # Convert JSON string into to_open_struct but designed to work with a JSON string
8
+ #
9
+ # https://docs.ruby-lang.org/en/master/JSON.html
10
+ # rubocop:disable Naming/MethodParameterName
11
+ def json_parse(json, as: :hash)
12
+ case as
13
+ when :hash
14
+ JSON.parse(json)
15
+ when :hash_symbolized
16
+ JSON.parse(json, symbolize_names: true)
17
+ when :open_struct
18
+ JSON.parse(json, object_class: OpenStruct)
19
+ end
20
+ end
21
+ # rubocop:enable Naming/MethodParameterName
22
+
7
23
  # Convert various data types (Hash, Array, Struct) into a deep nested OpenStruct
24
+ #
8
25
  # or an array of deep nested OpenStruct
9
26
  def to_open_struct(data)
10
27
  case data
@@ -23,32 +40,56 @@ module KUtil
23
40
  end
24
41
  end
25
42
 
26
- # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
43
+ # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
27
44
  def to_hash(data)
28
45
  # No test yet
29
46
  if data.is_a?(Array)
30
47
  return data.map { |v| v.is_a?(OpenStruct) ? to_hash(v) : v }
31
48
  end
32
49
 
50
+ return to_hash(data.to_h) if !data.is_a?(Hash) && data.respond_to?(:to_h)
51
+
33
52
  data.each_pair.with_object({}) do |(key, value), hash|
34
53
  case value
35
- when OpenStruct
54
+ when OpenStruct, Struct, Hash
36
55
  hash[key] = to_hash(value)
37
56
  when Array
38
57
  # No test yet
39
- values = value.map { |v| v.is_a?(OpenStruct) ? to_hash(v) : v }
58
+ values = value.map do |v|
59
+ v.is_a?(OpenStruct) || v.is_a?(Struct) || v.is_a?(Hash) ? to_hash(v) : v
60
+ end
40
61
  hash[key] = values
41
62
  else
42
63
  hash[key] = value
43
64
  end
44
65
  end
45
66
  end
46
- # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
67
+ # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
47
68
 
48
69
  def clean_symbol(value)
49
70
  return value if value.nil?
50
71
 
51
72
  value.is_a?(Symbol) ? value.to_s : value
52
73
  end
74
+
75
+ # Add if needed
76
+ # # Is the value a basic (aka primitive) type
77
+ # def basic_type?(value)
78
+ # value.is_a?(String) ||
79
+ # value.is_a?(Symbol) ||
80
+ # value.is_a?(FalseClass) ||
81
+ # value.is_a?(TrueClass) ||
82
+ # value.is_a?(Integer) ||
83
+ # value.is_a?(Float)
84
+ # end
85
+
86
+ # Is the value a complex container type, but not a regular class.
87
+ def hash_convertible?(value)
88
+ value.is_a?(Array) ||
89
+ value.is_a?(Hash) ||
90
+ value.is_a?(Struct) ||
91
+ value.is_a?(OpenStruct) ||
92
+ value.respond_to?(:to_h)
93
+ end
53
94
  end
54
95
  end
@@ -14,8 +14,17 @@ module KUtil
14
14
  end
15
15
  end
16
16
 
17
+ def home?(path)
18
+ path.start_with?('~/')
19
+ end
20
+
17
21
  def pathname_absolute?(pathname)
18
22
  Pathname.new(pathname).absolute?
19
23
  end
24
+ alias absolute? pathname_absolute?
25
+
26
+ def home_or_absolute?(path)
27
+ home?(path) || absolute?(path)
28
+ end
20
29
  end
21
30
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KUtil
4
- VERSION = '0.0.8'
4
+ VERSION = '0.0.17'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: k_util
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Cruwys
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-03-31 00:00:00.000000000 Z
11
+ date: 2021-07-12 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: " KUtil provides simple utility methods, such as file helpers, data
14
14
  object helpers and more.\n"
@@ -40,6 +40,7 @@ files:
40
40
  - k_util.gemspec
41
41
  - lib/k_util.rb
42
42
  - lib/k_util/console_helper.rb
43
+ - lib/k_util/data/instance_variables_to_h.rb
43
44
  - lib/k_util/data_helper.rb
44
45
  - lib/k_util/file_helper.rb
45
46
  - lib/k_util/version.rb