skn_utils 3.0.2 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -0
- data/bin/benchmark.rb +44 -0
- data/bin/console +3 -1
- data/lib/skn_settings.rb +11 -0
- data/lib/skn_utils/nested_result.rb +10 -6
- data/lib/skn_utils/skn_configuration.rb +47 -0
- data/lib/skn_utils/version.rb +2 -2
- data/lib/skn_utils.rb +2 -0
- data/skn_utils.gemspec +2 -1
- data/spec/factories/settings/test.local.yml +3 -0
- data/spec/factories/settings/test.yml +5 -0
- data/spec/factories/settings.yml +9 -0
- data/spec/lib/skn_settings_spec.rb +10 -0
- data/spec/spec_helper.rb +15 -3
- metadata +27 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b8101dc2b931c238b66774b58096c9220b04978e
|
4
|
+
data.tar.gz: 4250acac9028a89de948d8c82986191d6471db09
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a0c6456e74196bad005876f4ff2d9a24635a22ab3d3a40f98daa7444461b33cc1a9d7fc868f22dd77db3da99a22935062cf17639c40760fbf74139d1669c49c
|
7
|
+
data.tar.gz: 7ae18c76e710f02b873165afc916ae97da9b7571bae75eb171e6f86869de684774815878141c389de52d19735e046e4fbde818169cdeb3535c4ff87ef6c5439a
|
data/Gemfile
CHANGED
data/bin/benchmark.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'skn_utils'
|
5
|
+
require 'ostruct'
|
6
|
+
require 'psych'
|
7
|
+
require 'benchmark/ips'
|
8
|
+
|
9
|
+
Benchmark.ips do |x|
|
10
|
+
|
11
|
+
class RegularClass
|
12
|
+
attr_accessor :foo
|
13
|
+
end
|
14
|
+
|
15
|
+
class OpenStructClass < OpenStruct
|
16
|
+
end
|
17
|
+
|
18
|
+
x.report('regular class') do
|
19
|
+
r = RegularClass.new
|
20
|
+
r.foo = :bar
|
21
|
+
r.foo
|
22
|
+
end
|
23
|
+
|
24
|
+
x.report('OpenStruct class') do
|
25
|
+
o = OpenStructClass.new(foo: nil)
|
26
|
+
o.foo = :bar
|
27
|
+
o.foo
|
28
|
+
end
|
29
|
+
|
30
|
+
x.report('NestedResult class') do
|
31
|
+
n = SknUtils::NestedResult.new(foo: nil)
|
32
|
+
n.foo = :bar
|
33
|
+
n.foo
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Warming up --------------------------------------
|
38
|
+
# regular class 182.079k i/100ms
|
39
|
+
# OpenStruct class 12.129k i/100ms
|
40
|
+
# NestedResult class 11.075k i/100ms
|
41
|
+
# Calculating -------------------------------------
|
42
|
+
# regular class 4.140M (± 2.2%) i/s - 20.757M in 5.015689s
|
43
|
+
# OpenStruct class 129.418k (± 2.3%) i/s - 654.966k in 5.063580s
|
44
|
+
# NestedResult class 115.819k (± 2.3%) i/s - 586.975k in 5.070852s
|
data/bin/console
CHANGED
data/lib/skn_settings.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
##
|
2
|
+
# Initialize:
|
3
|
+
# SknSettings.load_config_basename!('some_name')
|
4
|
+
#
|
5
|
+
# Usage:
|
6
|
+
# SknSettings.<config.key>[.<config.key>]...
|
7
|
+
##
|
8
|
+
|
9
|
+
# This creates a global constant (and singleton) with a defaulted configuration
|
10
|
+
class << (SknSettings = SknUtils::SknConfiguration.new())
|
11
|
+
end
|
@@ -94,8 +94,7 @@ module SknUtils
|
|
94
94
|
class NestedResult
|
95
95
|
|
96
96
|
def initialize(params={})
|
97
|
-
|
98
|
-
initialize_for_speed(params)
|
97
|
+
reset_from_empty!(params)
|
99
98
|
end
|
100
99
|
|
101
100
|
def [](attr)
|
@@ -170,12 +169,17 @@ module SknUtils
|
|
170
169
|
def init_with(coder)
|
171
170
|
case coder.tag
|
172
171
|
when '!ruby/object:SknUtils::NestedResult', "!ruby/object:#{self.class.name}"
|
173
|
-
|
172
|
+
reset_from_empty!( coder.map['container'] )
|
174
173
|
end
|
175
174
|
end
|
176
175
|
|
177
176
|
protected
|
178
177
|
|
178
|
+
def reset_from_empty!(params={})
|
179
|
+
@container = {}
|
180
|
+
initialize_for_speed(params)
|
181
|
+
end
|
182
|
+
|
179
183
|
##
|
180
184
|
# Marshal.load()/.dump() support, chance to re-initialize value methods
|
181
185
|
#
|
@@ -185,7 +189,7 @@ module SknUtils
|
|
185
189
|
|
186
190
|
# Using the String from above create and return an instance of this class
|
187
191
|
def marshal_load(hash)
|
188
|
-
|
192
|
+
reset_from_empty!(hash)
|
189
193
|
end
|
190
194
|
|
191
195
|
def respond_to_missing?(method, incl_private=false)
|
@@ -316,10 +320,10 @@ module SknUtils
|
|
316
320
|
|
317
321
|
|
318
322
|
if method.to_s.end_with?("=") # add new key/value pair, transform value if Hash or Array
|
319
|
-
initialize_from_hash({method_nsym => args.first})
|
323
|
+
initialize_from_hash({method_nsym => args.first}) # Add Reader/Writer one first need
|
320
324
|
|
321
325
|
elsif container.key?(method_sym)
|
322
|
-
container[
|
326
|
+
container[method_sym] # Add Reader/Writer one first need
|
323
327
|
|
324
328
|
elsif method.to_s.end_with?('?') # order of tests is significant,
|
325
329
|
attribute?(method_nsym)
|
@@ -0,0 +1,47 @@
|
|
1
|
+
#
|
2
|
+
# @see SknSettings
|
3
|
+
|
4
|
+
module SknUtils
|
5
|
+
|
6
|
+
class SknConfiguration < NestedResult
|
7
|
+
|
8
|
+
def initialize(params={})
|
9
|
+
default_mode = defined?(Rails) ? Rails.env : ENV.fetch('RAILS_ENV', 'development')
|
10
|
+
@config_filename = params.is_a?(String) ? params : params.fetch(:config_filename, default_mode)
|
11
|
+
@base_path = @config_filename.eql?('test') ? './spec/factories/' : './config/'
|
12
|
+
load_config_basename!(@config_filename)
|
13
|
+
end
|
14
|
+
|
15
|
+
def load_config_basename!(conf)
|
16
|
+
reset_from_empty!(load_config(conf))
|
17
|
+
self
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def load_config(conf)
|
23
|
+
yname = "#{@base_path}settings.yml"
|
24
|
+
return {} unless File.exist?(yname)
|
25
|
+
f_base = load_yml_with_erb(yname)
|
26
|
+
|
27
|
+
yname = "#{@base_path}settings/#{conf}.yml"
|
28
|
+
f_env = load_yml_with_erb(yname) if File.exist?(yname)
|
29
|
+
f_base = f_base.deeper_merge!(f_env) unless (f_env.nil? || f_env.empty?)
|
30
|
+
|
31
|
+
yname = "#{@base_path}settings/#{conf}.local.yml"
|
32
|
+
f_local = load_yml_with_erb(yname) if File.exist?(yname)
|
33
|
+
f_base = f_base.deeper_merge!(f_local) unless (f_local.nil? || f_local.empty?)
|
34
|
+
|
35
|
+
f_base
|
36
|
+
end
|
37
|
+
|
38
|
+
def load_yml_with_erb(yml_file)
|
39
|
+
erb = ERB.new(File.read(yml_file)).result
|
40
|
+
erb.empty? ? {} : Psych.load(erb)
|
41
|
+
rescue => e
|
42
|
+
puts "#{self.class.name}##{__method__} Class: #{e.class}, Message: #{e.message}"
|
43
|
+
{}
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
data/lib/skn_utils/version.rb
CHANGED
data/lib/skn_utils.rb
CHANGED
@@ -2,8 +2,10 @@ require "skn_utils/version"
|
|
2
2
|
require 'skn_utils/nested_result'
|
3
3
|
require 'skn_utils/null_object'
|
4
4
|
require 'skn_utils/notifier_base'
|
5
|
+
require 'skn_utils/skn_configuration'
|
5
6
|
require 'skn_utils/exploring/commander'
|
6
7
|
require 'skn_utils/exploring/action_service'
|
8
|
+
require 'skn_settings'
|
7
9
|
|
8
10
|
module SknUtils
|
9
11
|
|
data/skn_utils.gemspec
CHANGED
@@ -31,10 +31,11 @@ EOF
|
|
31
31
|
spec.executables = []
|
32
32
|
spec.test_files = spec.files.grep(%r{^(spec)/})
|
33
33
|
spec.require_paths = ['lib']
|
34
|
-
|
34
|
+
|
35
35
|
spec.add_development_dependency "bundler", ">= 0"
|
36
36
|
spec.add_development_dependency "rake", ">= 0"
|
37
37
|
spec.add_development_dependency "rspec", '~> 3.0'
|
38
38
|
spec.add_development_dependency "pry", ">= 0"
|
39
39
|
spec.add_development_dependency "simplecov", ">= 0"
|
40
|
+
spec.add_development_dependency 'benchmark-ips'
|
40
41
|
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
#
|
2
|
+
|
3
|
+
describe SknSettings, "Application Configuration" do
|
4
|
+
|
5
|
+
it 'contains the test settings for the application' do
|
6
|
+
expect(SknSettings.Packaging.pomVersion).to eq SknUtils::VERSION
|
7
|
+
expect(SknSettings.Packaging.configName).to eq 'test.local'
|
8
|
+
expect(SknSettings.Packaging.isTest).to be true
|
9
|
+
end
|
10
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,4 +1,18 @@
|
|
1
|
-
ENV['RAILS_ENV']
|
1
|
+
ENV['RAILS_ENV'] = 'test'
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
|
5
|
+
require 'simplecov'
|
6
|
+
|
7
|
+
SimpleCov.start do
|
8
|
+
# any custom configs like groups and filters can be here at a central place
|
9
|
+
add_filter '/spec/'
|
10
|
+
end
|
11
|
+
|
12
|
+
require 'psych'
|
13
|
+
require 'json'
|
14
|
+
require 'erb'
|
15
|
+
require 'deep_merge/rails_compat'
|
2
16
|
|
3
17
|
require 'skn_utils'
|
4
18
|
require 'skn_utils/exploring/commander'
|
@@ -6,8 +20,6 @@ require 'skn_utils/exploring/action_service'
|
|
6
20
|
require 'skn_utils/exploring/configuration'
|
7
21
|
|
8
22
|
require 'rspec'
|
9
|
-
require 'psych'
|
10
|
-
require 'json'
|
11
23
|
|
12
24
|
# Shared Examples and Support Routines
|
13
25
|
Dir["./spec/support/**/*.rb"].sort.each { |f| require f}
|
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: 3.0
|
4
|
+
version: 3.1.0
|
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: 2017-
|
11
|
+
date: 2017-07-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: benchmark-ips
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
description: "The intent of the NestedResult class is to be a container of data results
|
84
98
|
or key/value pairs, \nwith easy access to its contents, and on-demand transformation
|
85
99
|
back to the hash (#to_hash).\n\nReview the RSpec tests, and or review the README
|
@@ -98,7 +112,9 @@ files:
|
|
98
112
|
- README.md
|
99
113
|
- README.rdoc
|
100
114
|
- Rakefile
|
115
|
+
- bin/benchmark.rb
|
101
116
|
- bin/console
|
117
|
+
- lib/skn_settings.rb
|
102
118
|
- lib/skn_utils.rb
|
103
119
|
- lib/skn_utils/exploring/action_service.rb
|
104
120
|
- lib/skn_utils/exploring/commander.rb
|
@@ -106,8 +122,13 @@ files:
|
|
106
122
|
- lib/skn_utils/nested_result.rb
|
107
123
|
- lib/skn_utils/notifier_base.rb
|
108
124
|
- lib/skn_utils/null_object.rb
|
125
|
+
- lib/skn_utils/skn_configuration.rb
|
109
126
|
- lib/skn_utils/version.rb
|
110
127
|
- skn_utils.gemspec
|
128
|
+
- spec/factories/settings.yml
|
129
|
+
- spec/factories/settings/test.local.yml
|
130
|
+
- spec/factories/settings/test.yml
|
131
|
+
- spec/lib/skn_settings_spec.rb
|
111
132
|
- spec/lib/skn_utils/exploring/action_service_spec.rb
|
112
133
|
- spec/lib/skn_utils/exploring/commander_spec.rb
|
113
134
|
- spec/lib/skn_utils/exploring/configuration_spec.rb
|
@@ -144,6 +165,10 @@ specification_version: 4
|
|
144
165
|
summary: SknUtils contains a small collection of Ruby utilities, the first being a
|
145
166
|
NestedResult a key/value container.
|
146
167
|
test_files:
|
168
|
+
- spec/factories/settings.yml
|
169
|
+
- spec/factories/settings/test.local.yml
|
170
|
+
- spec/factories/settings/test.yml
|
171
|
+
- spec/lib/skn_settings_spec.rb
|
147
172
|
- spec/lib/skn_utils/exploring/action_service_spec.rb
|
148
173
|
- spec/lib/skn_utils/exploring/commander_spec.rb
|
149
174
|
- spec/lib/skn_utils/exploring/configuration_spec.rb
|