k_util 0.0.3 → 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
  SHA256:
3
- metadata.gz: c24b82f602689a2bc8c2b88781c49bfb8f7a3fec655259a2fef5dc1a07c19da5
4
- data.tar.gz: 1c919acdee3df2c1191fea1285cd7a9aac5167e2a9f87b4393c85e6f884bac48
3
+ metadata.gz: 88c89c4c9e613a825a162a59b8b4ea546d747f223d4d93ce93f26b3c734d49c2
4
+ data.tar.gz: 94b16c31d2149012c947e85a677f36b33f559cd914636269f8b5ce9bb9bc56bb
5
5
  SHA512:
6
- metadata.gz: 12ffdc1399c84b23bfbf30a16e3f1c7a219efe2d73ead337f2c52efb607a73bf1dbba72915a07105e577ca6da1bdf696cf52916b892faca5289631a970422226
7
- data.tar.gz: 97c12df77317c8ced436caa47fbf84915641d889ce1653540876b8d978ed6ad56403d628989a7ba77d74e8eadc20a206c7c473845166b63517c4e8cfd65c7912
6
+ metadata.gz: ca99065afbe8883d234c30a4cef1b56c69d2be2fd48860918158f0f1df8bc40cd77cc23b0a72a459ab765a1bb1c7b944f1ef6bc67b1c85a840a6df8c8a13cf24
7
+ data.tar.gz: fef92543798f378b9aedb86f1db84619b2a82fb0246f13ac1e99932def8e37a4bd391aa24a5411c3726aaea807b37cb22f33115fc47cc40c0ae404b67d8e4b2b
data/README.md CHANGED
@@ -26,7 +26,7 @@ gem install k_util
26
26
 
27
27
  ### Main Story
28
28
 
29
- As a Developer, I need simple utility helpers, to solve cross cutting issues
29
+ As a Developer, I need simple utility helpers, to solve cross cutting issues and simplify common access methods
30
30
 
31
31
  See all [stories](./STORIES.md)
32
32
 
@@ -36,12 +36,101 @@ See all [usage examples](./USAGE.md)
36
36
 
37
37
  ### Basic Example
38
38
 
39
- #### Basic example
39
+ #### Console Helpers
40
40
 
41
- Description for a basic example to be featured in the main README.MD file
41
+ Generate encoded strings that have meaning in the console
42
42
 
43
43
  ```ruby
44
- class SomeRuby; end
44
+ puts KUtil.console.hyperlink('Google', 'https://google.com')
45
+
46
+ # "Google"
47
+ # (clickable hyperlink to the google website)
48
+
49
+ puts KUtil.console.file_hyperlink('My File', '/somepath/my-file.txt')
50
+
51
+ # "My File"
52
+ # (clickable link to the a file in the file system)
53
+ ```
54
+
55
+ #### Data Helpers
56
+
57
+ Data object helpers such as any object to open struct and any object to hash
58
+
59
+ ```ruby
60
+ ThunderBirds = Struct.new(:action)
61
+
62
+ virgil =
63
+ OpenStruct.new(
64
+ name: 'Virgil Tracy', age: 73, thunder_bird: ThunderBirds.new(:are_grounded)
65
+ )
66
+ penny =
67
+ OpenStruct.new(
68
+ name: 'Lady Penelope', age: 69, thunder_bird: ThunderBirds.new(:are_go)
69
+ )
70
+
71
+ data = {
72
+ key1: 'David',
73
+ key2: 333,
74
+ key3: ThunderBirds.new(:are_go),
75
+ people: [virgil, penny]
76
+ }
77
+
78
+ data_open = KUtil.data.to_open_struct(data)
79
+ data_hash = KUtil.data.to_hash(data_open)
80
+
81
+ puts JSON.pretty_generate(data_hash)
82
+
83
+ # {
84
+ # "key1": "David",
85
+ # "key2": 333,
86
+ # "key3": {
87
+ # "action": "are_go"
88
+ # },
89
+ # "people": [
90
+ # {
91
+ # "name": "Virgil Tracy",
92
+ # "age": 73,
93
+ # "thunder_bird": {
94
+ # "action": "are_grounded"
95
+ # }
96
+ # },
97
+ # {
98
+ # "name": "Lady Penelope",
99
+ # "age": 69,
100
+ # "thunder_bird": {
101
+ # "action": "are_go"
102
+ # }
103
+ # }
104
+ # ]
105
+ # }
106
+ ```
107
+
108
+ #### File Helpers
109
+
110
+ ```ruby
111
+ puts KUtil.file.expand_path('file.rb')
112
+
113
+ # /current/folder/file.rb
114
+
115
+ puts KUtil.file.expand_path('/file.rb')
116
+
117
+ # /file.rb
118
+
119
+ puts KUtil.file.expand_path('~/file.rb')
120
+
121
+ # /Users/current-user/file.rb
122
+
123
+ puts KUtil.file.expand_path('file.rb', '/klue-less/xyz')
124
+
125
+ # /klue-less/xyz/file.rb
126
+
127
+ puts KUtil.file.pathname_absolute?('somepath/somefile.rb')
128
+
129
+ # false
130
+
131
+ puts KUtil.file.pathname_absolute?('/somepath/somefile.rb')
132
+
133
+ # true
45
134
  ```
46
135
 
47
136
  ## Development
@@ -68,10 +157,8 @@ Aaa::Bbb::Program.execute()
68
157
  To release a new version, update the version number in `version.rb`, build the gem and push the `.gem` file to [rubygems.org](https://rubygems.org).
69
158
 
70
159
  ```bash
71
- gem build
72
- gem push rspec-usecases-?.?.??.gem
73
- # or push the latest gem
74
- ls *.gem | sort -r | head -1 | xargs gem push
160
+ rake publish
161
+ rake clean
75
162
  ```
76
163
 
77
164
  ## Contributing
data/STORIES.md CHANGED
@@ -2,32 +2,27 @@
2
2
 
3
3
  > KUtil provides simple utility methods
4
4
 
5
- As a Developer, I need simple utility helpers, to solve cross cutting issues
5
+ As a Developer, I need simple utility helpers, to solve cross cutting issues and simplify common access methods
6
6
 
7
7
  ## Development radar
8
8
 
9
- ### Stories next on list
9
+ ## Stories and tasks
10
10
 
11
- As a Developer, I can DO_SOMETHING, so that I QUALITY_OF_LIFE
11
+ ### Stories - completed
12
12
 
13
- - Subtask
13
+ As a Developer, I need simple utility helpers, to solve cross cutting issues
14
14
 
15
- ### Tasks next on list
15
+ - Console helpers
16
+ - Data helpers
17
+ - File helpers
18
+
19
+ ### Tasks - completed
16
20
 
17
21
  Setup RubyGems and RubyDoc
18
22
 
19
23
  - Build and deploy gem to [rubygems.org](https://rubygems.org/gems/k_util)
20
24
  - Attach documentation to [rubydoc.info](https://rubydoc.info/github/to-do-/k_util/master)
21
25
 
22
- Setup GitHub Action (test and lint)
23
-
24
- - Setup Rspec action
25
- - Setup RuboCop action
26
-
27
- ## Stories and tasks
28
-
29
- ### Tasks - completed
30
-
31
26
  Setup project management, requirement and SCRUM documents
32
27
 
33
28
  - Setup readme file
@@ -35,6 +30,11 @@ Setup project management, requirement and SCRUM documents
35
30
  - Setup a project backlog
36
31
  - Setup an examples/usage document
37
32
 
33
+ Setup GitHub Action (test and lint)
34
+
35
+ - Setup Rspec action
36
+ - Setup RuboCop action
37
+
38
38
  Setup new Ruby GEM
39
39
 
40
40
  - Build out a standard GEM structure
data/USAGE.md CHANGED
@@ -2,18 +2,109 @@
2
2
 
3
3
  > KUtil provides simple utility methods
4
4
 
5
- As a Developer, I need simple utility helpers, to solve cross cutting issues
5
+ As a Developer, I need simple utility helpers, to solve cross cutting issues and simplify common access methods
6
6
 
7
7
  ## Usage
8
8
 
9
9
  ### Sample Classes
10
10
 
11
- #### Simple example
11
+ #### Console Helpers
12
12
 
13
- Description for a simple example that shows up in the USAGE.MD
13
+ Generate encoded strings that have meaning in the console
14
14
 
15
15
  ```ruby
16
- class SomeRuby
17
- def initialize; end
18
- end
16
+ puts KUtil.console.hyperlink('Google', 'https://google.com')
17
+
18
+ # "Google"
19
+ # (clickable hyperlink to the google website)
20
+
21
+ puts KUtil.console.file_hyperlink('My File', '/somepath/my-file.txt')
22
+
23
+ # "My File"
24
+ # (clickable link to the a file in the file system)
25
+ ```
26
+
27
+ #### File Helpers
28
+
29
+ ```ruby
30
+ # Expand Path
31
+
32
+ puts KUtil.file.expand_path('file.rb')
33
+
34
+ # /current/folder/file.rb
35
+
36
+ puts KUtil.file.expand_path('/file.rb')
37
+
38
+ # /file.rb
39
+
40
+ puts KUtil.file.expand_path('~/file.rb')
41
+
42
+ # /Users/current-user/file.rb
43
+
44
+ puts KUtil.file.expand_path('file.rb', '/klue-less/xyz')
45
+
46
+ # /klue-less/xyz/file.rb
47
+
48
+ # Absolute path/file name
49
+
50
+ puts KUtil.file.pathname_absolute?('somepath/somefile.rb')
51
+
52
+ # false
53
+
54
+ puts KUtil.file.pathname_absolute?('/somepath/somefile.rb')
55
+
56
+ # true
57
+ ```
58
+
59
+ #### Data Helpers
60
+
61
+ Data object helpers such as any object to open struct and any object to hash
62
+
63
+ ```ruby
64
+ ThunderBirds = Struct.new(:action)
65
+
66
+ virgil =
67
+ OpenStruct.new(
68
+ name: 'Virgil Tracy', age: 73, thunder_bird: ThunderBirds.new(:are_grounded)
69
+ )
70
+ penny =
71
+ OpenStruct.new(
72
+ name: 'Lady Penelope', age: 69, thunder_bird: ThunderBirds.new(:are_go)
73
+ )
74
+
75
+ data = {
76
+ key1: 'David',
77
+ key2: 333,
78
+ key3: ThunderBirds.new(:are_go),
79
+ people: [virgil, penny]
80
+ }
81
+
82
+ data_open = KUtil.data.to_open_struct(data)
83
+ data_hash = KUtil.data.to_hash(data_open)
84
+
85
+ puts JSON.pretty_generate(data_hash)
86
+
87
+ # {
88
+ # "key1": "David",
89
+ # "key2": 333,
90
+ # "key3": {
91
+ # "action": "are_go"
92
+ # },
93
+ # "people": [
94
+ # {
95
+ # "name": "Virgil Tracy",
96
+ # "age": 73,
97
+ # "thunder_bird": {
98
+ # "action": "are_grounded"
99
+ # }
100
+ # },
101
+ # {
102
+ # "name": "Lady Penelope",
103
+ # "age": 69,
104
+ # "thunder_bird": {
105
+ # "action": "are_go"
106
+ # }
107
+ # }
108
+ # ]
109
+ # }
19
110
  ```
data/k_util.gemspec CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
 
12
12
  spec.summary = 'KUtil provides simple utility methods'
13
13
  spec.description = <<-TEXT
14
- KUtil provides simple utility methods
14
+ KUtil provides simple utility methods, such as file helpers, data object helpers and more.
15
15
  TEXT
16
16
  spec.homepage = 'http://appydave.com/gems/k-util'
17
17
  spec.license = 'MIT'
data/lib/k_util.rb CHANGED
@@ -1,10 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'k_util/version'
4
+ require 'k_util/console_helper'
5
+ require 'k_util/data_helper'
6
+ require 'k_util/file_helper'
4
7
 
8
+ # Provide various helper functions
5
9
  module KUtil
6
10
  # raise KUtil::Error, 'Sample message'
7
- class Error < StandardError; end
8
-
9
- # Your code goes here...
11
+ # class Error < StandardError; end
10
12
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Provide console helper functions
4
+ module KUtil
5
+ class << self
6
+ attr_accessor :console
7
+ end
8
+
9
+ # Helper methods attached to the namespace for working with Console
10
+ class ConsoleHelper
11
+ # Convert a hash into a deep OpenStruct or array an array
12
+ # of objects into an array of OpenStruct
13
+ # Generate hyper link encoded string for the console
14
+ def self.file_hyperlink(text, file)
15
+ "\u001b]8;;file://#{file}\u0007#{text}\u001b]8;;\u0007"
16
+ end
17
+
18
+ def self.hyperlink(text, link)
19
+ "\u001b]8;;#{link}\u0007#{text}\u001b]8;;\u0007"
20
+ end
21
+ end
22
+ end
23
+
24
+ KUtil.console = KUtil::ConsoleHelper
@@ -1,64 +1,60 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # module KDsl
4
- # # File utilities
5
- # module Util
6
- # class << self
7
- # attr_accessor :data
8
- # end
9
-
10
- # # Helper methods attached to the namespace for working with Data
11
- # class DataHelper
12
- # # Convert a hash into a deep OpenStruct or array an array
13
- # # of objects into an array of OpenStruct
14
- # def self.to_struct(data)
15
- # if data.is_a?(Hash)
16
- # return OpenStruct.new(data.map { |k,v| [k, to_struct(v)] }.to_h )
17
-
18
- # elsif data.is_a?(Array)
19
- # return data.map { |o| to_struct(o) }
20
-
21
- # else
22
- # # Some primitave type: String, True/False, Symbol or an ObjectStruct
23
- # return data
24
- # end
25
- # end
26
-
27
- # def self.struct_to_hash(data)
28
- # # No test yet
29
- # if data.is_a?(Array)
30
- # return data.map { |v| v.is_a?(OpenStruct) ? struct_to_hash(v) : v }
31
- # end
32
-
33
- # data.each_pair.with_object({}) do |(key, value), hash|
34
- # if value.is_a?(OpenStruct)
35
- # hash[key] = struct_to_hash(value)
36
- # elsif value.is_a?(Array)
37
- # # No test yet
38
- # values = value.map { |v| v.is_a?(OpenStruct) ? struct_to_hash(v) : v }
39
- # hash[key] = values
40
- # else
41
- # hash[key] = value
42
- # end
43
- # end
44
- # end
45
-
46
- # # Generate hyper link encoded string for the console
47
- # def self.console_file_hyperlink(text, file)
48
- # "\u001b]8;;file://#{file}\u0007#{text}\u001b]8;;\u0007"
49
- # end
50
-
51
- # def self.console_hyperlink(text, link)
52
- # "\u001b]8;;#{link}\u0007#{text}\u001b]8;;\u0007"
53
- # end
54
-
55
- # def self.clean_symbol(value)
56
- # return value if value.nil?
57
-
58
- # value.is_a?(Symbol) ? value.to_s : value
59
- # end
60
- # end
61
- # end
62
- # end
63
-
64
- # KDsl::Util.data = KDsl::Util::DataHelper
3
+ # Provide data object helper functions
4
+ module KUtil
5
+ class << self
6
+ attr_accessor :data
7
+ end
8
+
9
+ # Helper methods attached to the namespace for working with Data
10
+ class DataHelper
11
+ # Convert various data types (Hash, Array, Struct) into a deep nested OpenStruct
12
+ # or an array of deep nested OpenStruct
13
+ def self.to_open_struct(data)
14
+ case data
15
+ when Hash
16
+ OpenStruct.new(data.transform_values { |v| to_open_struct(v) })
17
+
18
+ when Array
19
+ data.map { |o| to_open_struct(o) }
20
+
21
+ when Struct, OpenStruct
22
+ to_open_struct(data.to_h)
23
+
24
+ else
25
+ # Some primitave type: String, True/False or an ObjectStruct
26
+ data
27
+ end
28
+ end
29
+
30
+ # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
31
+ def self.to_hash(data)
32
+ # No test yet
33
+ if data.is_a?(Array)
34
+ return data.map { |v| v.is_a?(OpenStruct) ? to_hash(v) : v }
35
+ end
36
+
37
+ data.each_pair.with_object({}) do |(key, value), hash|
38
+ case value
39
+ when OpenStruct
40
+ hash[key] = to_hash(value)
41
+ when Array
42
+ # No test yet
43
+ values = value.map { |v| v.is_a?(OpenStruct) ? to_hash(v) : v }
44
+ hash[key] = values
45
+ else
46
+ hash[key] = value
47
+ end
48
+ end
49
+ end
50
+ # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
51
+
52
+ def self.clean_symbol(value)
53
+ return value if value.nil?
54
+
55
+ value.is_a?(Symbol) ? value.to_s : value
56
+ end
57
+ end
58
+ end
59
+
60
+ KUtil.data = KUtil::DataHelper
@@ -1,29 +1,27 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # module KDsl
4
- # # File utilities
5
- # module Util
6
- # class << self
7
- # attr_accessor :file
8
- # end
3
+ # Provide file helper functions
4
+ module KUtil
5
+ class << self
6
+ attr_accessor :file
7
+ end
9
8
 
10
- # # Helper methods attached to the namespace for working with Files
11
- # class FileHelper
12
- # def self.expand_path(filename, base_path)
13
- # if pathname_absolute?(filename)
14
- # filename
15
- # elsif filename.start_with?('~/')
16
- # File.expand_path(filename)
17
- # else
18
- # File.expand_path(filename, base_path)
19
- # end
20
- # end
9
+ # Helper methods attached to the namespace for working with Files
10
+ class FileHelper
11
+ def self.expand_path(filename, base_path = nil)
12
+ if pathname_absolute?(filename)
13
+ filename
14
+ elsif filename.start_with?('~/')
15
+ File.expand_path(filename)
16
+ else
17
+ File.expand_path(filename, base_path)
18
+ end
19
+ end
21
20
 
22
- # def self.pathname_absolute?(pathname)
23
- # Pathname.new(pathname).absolute?
24
- # end
25
- # end
26
- # end
27
- # end
21
+ def self.pathname_absolute?(pathname)
22
+ Pathname.new(pathname).absolute?
23
+ end
24
+ end
25
+ end
28
26
 
29
- # KDsl::Util.file = KDsl::Util::FileHelper
27
+ KUtil.file = KUtil::FileHelper
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KUtil
4
- VERSION = '0.0.3'
4
+ VERSION = '0.0.7'
5
5
  end
metadata CHANGED
@@ -1,16 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: k_util
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.7
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-30 00:00:00.000000000 Z
11
+ date: 2021-03-31 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: " KUtil provides simple utility methods\n"
13
+ description: " KUtil provides simple utility methods, such as file helpers, data
14
+ object helpers and more.\n"
14
15
  email:
15
16
  - david@ideasmen.com.au
16
17
  executables: []
@@ -38,6 +39,7 @@ files:
38
39
  - hooks/update-version
39
40
  - k_util.gemspec
40
41
  - lib/k_util.rb
42
+ - lib/k_util/console_helper.rb
41
43
  - lib/k_util/data_helper.rb
42
44
  - lib/k_util/file_helper.rb
43
45
  - lib/k_util/version.rb