skn_utils 4.0.0 → 4.0.1

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: 95950dfdf413d133698bc9614a5513cd5d91bf82
4
- data.tar.gz: 9fc06b3576d657326af58ad7d4caa7ce20613f40
3
+ metadata.gz: a3753d9ee00c1e673e9a0871893dcb890daf35f0
4
+ data.tar.gz: d4c099ccade3b20002992624012fc5281f5e7901
5
5
  SHA512:
6
- metadata.gz: dcb65cc5acde288729d5b11f0812ffd3a3c199ae1609492398fc06b96ce75246430ba21b945238494d28af65fe4e333193ec36baaa6797e84e55f8f5c984be4e
7
- data.tar.gz: 60788d945065c38d3c0ed1ff2e5a889533c89223ced661275b6ab94a49242aa9c09810316b666bf983b19a0de525041db30a0b7d7ce8f894dfca79254b17bcb2
6
+ metadata.gz: 4bba7536ad36ebcfb79bf9dd4f73757de8ce7c56ea99f6227dfcd5b29c3464e5c2d807c34cb1668c266aed078c80c4e15aefa98d1b75aa3606ee6edf67ad0f79
7
+ data.tar.gz: 5f41b41a42d3f15197122936145357e89109411f126c189c92f6bb33d1a240c74769e0bdccd529073934fd8d30fc58da9c9dc8740969934446ef7da5c0223a8b
data/README.md CHANGED
@@ -3,18 +3,46 @@
3
3
 
4
4
  # SknUtils
5
5
  #### SknUtils::NestedResult class; dynamic key/value container
6
- The intent of this gem is to be a container of data results or key/value pairs, with easy access to its contents, and on-demand transformation back to the hash (#to_hash).
6
+ The intent of this gem is to be a container of nestable data results or key/value pairs, with easy access to its contents and on-demand transformation back to the creating hash (#to_hash).
7
7
 
8
- Ruby Gem containing a Ruby PORO (Plain Old Ruby Object) that can be instantiated at runtime with an input hash. This library creates
9
- an Object with Dot or Hash notational accessors to each key's value. Additional key/value pairs can be added post-create
10
- by 'obj.my_new_var = "some value"', or simply assigning it.
8
+ A Ruby Gem containing a Ruby PORO (Plain Old Ruby Object) that can be instantiated at runtime with an input hash. This library creates
9
+ an Object with Dot and Hash notational accessors to each key's value. Additional key/value pairs can be added post-create
10
+ by simply assigning it; `obj.my_new_var = "some value"`
11
11
 
12
12
  * Transforms the initialing hash into accessible object instance values, with their keys as method names.
13
13
  * If the key's value is also a hash, it too will become an Object.
14
14
  * if the key's value is a Array of Hashes, or Array of Arrays of Hashes, each hash element of the Arrays will become an Object.
15
15
  * The current key/value (including nested) pairs are returned via #to_hash or #to_json when and if needed.
16
+ * Best described as dot notation wrapper over a Ruby (Concurrent-Ruby) Hash.
17
+
18
+ Ruby's Hash object is already extremely flexible, even more so with the addition of dot-notation. As I work more with Ruby outside of Rails, I'm finding more use cases for the capabilities of this gem. Here are a few examples:
19
+
20
+ 1. Application settings containers, SknSettings. Loads Yaml file based on `ENV['RACK_ENV']` value, or specified file-key.
21
+ - Replaces Config and/or RBConfig Gems for yaml based settings
22
+ 1. Substitute for Rails.root, via a little ERB/YAML/Marshal statement in settings.yml file, and a helper class
23
+ - settings.yml (YAML)
24
+ - `root: <%= Dir.pwd %>`
25
+ - enables `SknSettings.root`
26
+ - `env: !ruby/string:SknUtils::EnvStringHandler <%= ENV.fetch('RACK_ENV', 'development') %>`
27
+ - enables `SknSettings.env.production?` ...
28
+ 1. Since SknSettings is by necessity a global constant, it can serve as Session Storage to keep system objects; like a ROM-RB instance.
29
+ 1. In-Memory Key-Store, use it to cache active user objects, or active Integration passwords, and/or objects that are not serializable.
30
+ 1. Command registries used to displatch command requests to proper command handler. see example app [SknBase](https://github.com/skoona/skn_base/blob/master/strategy/services/content/command_handler.rb)
31
+ ```ruby
32
+ SknSettings.registry = {
33
+ Services::Content::Commands::RetrieveAvailableResources => method(:resources_metadata_service),
34
+ Services::Content::Commands::RetrieveResourceContent => method(:resource_content_service)
35
+ }
36
+ ...
37
+ SknSettings.registry[ cmd.class ].call( cmd )
38
+ -- or --
39
+ SknSettings.registry.key?( cmd.class ) && cmd.valid? ?
40
+ SknSettings.registry[ cmd.class ].call( cmd ) :
41
+ command_not_found_action()
42
+ ```
43
+ There are many more use cases for Ruby's Hash that this gem just makes easier to implement.
16
44
 
17
- #### Primary Classes
45
+ #### Available Classes
18
46
  * SknSettings
19
47
  * SknContainer
20
48
  * SknHash
@@ -26,7 +54,7 @@ Ruby Gem containing a Ruby PORO (Plain Old Ruby Object) that can be instantiated
26
54
  * SknUtils::EnvStringHandler
27
55
  * SknUtils::CoreObjectExtensions
28
56
 
29
- ## New Features
57
+ ## History
30
58
  02/04/2018 V4.0.0
31
59
  Added SknUtils::CoreObjectExtensions, this module contains those popular Rails ActiveSupport extensions like `:present?`.
32
60
  - However, it is contructed with the Ruby `:refine` and `using SknUtils::CoreObjectExtensions` constraints, so as not to intefer with existing monkey-patches.
@@ -82,7 +110,7 @@ Ruby Gem containing a Ruby PORO (Plain Old Ruby Object) that can be instantiated
82
110
 
83
111
 
84
112
  ## Public Components
85
- SknUtils::NestedResult # >= V 3.0.0 Primary Key/Value Container with Dot/Hash notiation support.
113
+ SknUtils::NestedResult # Primary Key/Value Container with Dot/Hash notiation support.
86
114
  SknHash # Wrapper for name only, WITHOUT SknUtils namespace, inherits from SknUtils::NestedResult
87
115
  SknUtils::ResultBean # Wrapper for name only, inherits from SknUtils::NestedResult
88
116
  SknUtils::PageControls # Wrapper for name only, inherits from SknUtils::NestedResult
@@ -3,7 +3,7 @@ module SknUtils
3
3
  class Version
4
4
  MAJOR = 4
5
5
  MINOR = 0
6
- PATCH = 0
6
+ PATCH = 1
7
7
 
8
8
  def self.to_s
9
9
  [MAJOR, MINOR, PATCH].join('.')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: skn_utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 4.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Scott Jr
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-05 00:00:00.000000000 Z
11
+ date: 2018-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: deep_merge
@@ -142,7 +142,6 @@ files:
142
142
  - README.rdoc
143
143
  - Rakefile
144
144
  - _config.yml
145
- - bin/bench_linklists.rb
146
145
  - bin/bench_nested_result.rb
147
146
  - bin/console
148
147
  - lib/skn_container.rb
@@ -1,94 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- #
4
- # Ref: https://github.com/evanphx/benchmark-ips
5
- #
6
-
7
- require 'bundler/setup'
8
- require 'skn_utils'
9
- require 'ostruct'
10
- require 'benchmark/ips'
11
-
12
- class GCSuite
13
- def warming(*)
14
- run_gc
15
- end
16
-
17
- def running(*)
18
- run_gc
19
- end
20
-
21
- def warmup_stats(*)
22
- end
23
-
24
- def add_report(*)
25
- end
26
-
27
- private
28
-
29
- def run_gc
30
- GC.enable
31
- GC.start
32
- GC.disable
33
- end
34
- end
35
-
36
- suite = GCSuite.new
37
-
38
- # Warming up --------------------------------------
39
- # LinkedList Ops 2.297k i/100ms
40
- # Array Ops 34.468k i/100ms
41
- # Calculating -------------------------------------
42
- # LinkedList Ops 17.015k (±35.2%) i/s - 71.207k in 5.100193s
43
- # Array Ops 377.943k (± 7.3%) i/s - 1.896M in 5.048217s
44
- #
45
- # Comparison:
46
- # Array Ops: 377942.7 i/s
47
- # LinkedList Ops: 17015.4 i/s - 22.21x slower
48
-
49
-
50
- Benchmark.ips do |x|
51
- x.config(:suite => suite)
52
-
53
- adders = [50, 10, 110, 6, 30, 101, 12, 33, 4]
54
- vargs = [70, 71, 72, 73, 74, 75, 76, 77, 78, 79]
55
- cproc = lambda {|a| a}
56
-
57
- x.report('Array Ops') do
58
- ary = Array.new(vargs)
59
- # adders.each {|x| ary.push(x) }
60
- adders.each {|x| ary.insert(5, x) }
61
- value = ary.sort!
62
- ary.first
63
- ary.clear
64
- end
65
-
66
- x.report('Single Ops') do
67
- ll = SknUtils::Lists::LinkedList.new(*vargs, &cproc)
68
- # adders.each {|x| ll.insert(x) }
69
- adders.each {|x| ll.insert_after(74, x) }
70
- value = ll.sort!
71
- ll.first
72
- ll.clear
73
- end
74
-
75
- x.report('Double Ops') do
76
- dll = SknUtils::Lists::DoublyLinkedList.new(*vargs, &cproc)
77
- # adders.each {|x| dll.insert(x) }
78
- adders.each {|x| dll.insert_after(74, x) }
79
- value = dll.sort!
80
- dll.first
81
- dll.clear
82
- end
83
-
84
- x.report('Circulat Ops') do
85
- cl = SknUtils::Lists::CircularLinkedList.new(*vargs, &cproc)
86
- # adders.each {|x| cl.insert(x) }
87
- adders.each {|x| cl.insert_after(74, x) }
88
- value = cl.sort!
89
- cl.first
90
- cl.clear
91
- end
92
-
93
- x.compare!
94
- end