skn_utils 5.4.0 → 5.4.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: faaa010ea403a5bfbf20386ee86a9c68e8982da1
4
- data.tar.gz: 909be6bef4b46a41bfd293d35a3059396d4adba5
3
+ metadata.gz: a38f9d3fd144a0b4d591b492fd5dd4ba2c9e448a
4
+ data.tar.gz: 9d5bdceb553ee84f17d37c8f8b3c06d1126f831e
5
5
  SHA512:
6
- metadata.gz: 46f92868aaecee7ece92b3d1c4b5bc33b5643e8c2de3a5f442e5141edb2b45d5a4cb8d4bd29e24241a34001b253abec38fe381e8ca8d798dc8eb6d662fdc12c2
7
- data.tar.gz: 81c41c8dda9b50797a76005a29cb329b2d8bc9da0af585d1848124a54606ac1f3a9d8bb8bb1d6ec5b2806df0002d673849425ca68290121e4ac327c7b94f784d
6
+ metadata.gz: c1d14426f03a6b19cb668f596ccf777352e78295c3c36c7dbe11b56939e90e0b79adb3676b09ab16a61f3167b8089c2f97a40ef846185ac17b527bac04edab04
7
+ data.tar.gz: 296386960a3ee3d438334fb1a0ded9ae275632ce5bbf6f486cbdbdab18b5904d6f82c9b33373a0632e7c14e34156230ba2b6c1c9008c27305ba7541f15b0435b
data/lib/skn_container.rb CHANGED
@@ -1,4 +1,5 @@
1
- # ##
1
+ # frozen_string_literal: true
2
+
2
3
  # ##
3
4
  # SknContainer
4
5
  # - Key/Value Container where keys and/or values can be any valid Ruby Class, Proc, Instance, or object.
data/lib/skn_failure.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # ##
2
4
  # Bad Result
3
5
  #
data/lib/skn_hash.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ##
2
4
  #
3
5
 
data/lib/skn_registry.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # ##
2
4
  # SknRegistry
3
5
  # - Key/Value Container where keys and/or values can be any valid Ruby Class, Proc, Instance, or object.
data/lib/skn_settings.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ##
2
4
  # Initialize:
3
5
  # SknSettings.load_config_basename!('some_name')
data/lib/skn_success.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # ##
2
4
  # Good Result
3
5
  #
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ##
2
4
  # File: <gem-root>/lib/skn_utils/configurable.rb
3
5
  # Ref: https://www.toptal.com/ruby/ruby-dsl-metaprogramming-guide
@@ -25,7 +27,7 @@ module SknUtils
25
27
  # end
26
28
  #
27
29
  #################
28
- # During Definition
30
+ # -or- During Definition
29
31
  #################
30
32
  # class MyApp
31
33
  # include SknUtils::Configurable.with(:app_id, :title, :cookie_name, {root_enable: true})
@@ -36,6 +38,7 @@ module SknUtils
36
38
  # cookie_name { "#{app_id}_session" }
37
39
  # end
38
40
  #
41
+ # # these are the root_enable default settings
39
42
  # self.logger = Logger.new
40
43
  # self.env = ENV.fetch('RACK_ENV', 'development')
41
44
  # self.root = Dir.pwd
@@ -65,9 +68,9 @@ module SknUtils
65
68
 
66
69
  module Configurable
67
70
 
68
- def self.with(*attrs, **options)
71
+ def self.with(*config_attrs, **root_options)
69
72
  _not_provided = Object.new
70
- _app_main = options.empty? || options.values.any?{|v| v == true}
73
+ _root_options = root_options.empty? || root_options.values.any?{|v| v == true}
71
74
 
72
75
  # Define the config class/module methods
73
76
  config_class = Class.new do
@@ -79,7 +82,7 @@ module SknUtils
79
82
  instance_variable_set("@#{attr}", val)
80
83
  end
81
84
 
82
- attrs.each do |attr|
85
+ config_attrs.each do |attr|
83
86
  define_method attr do |value = _not_provided, &block|
84
87
  if value === _not_provided && block.nil?
85
88
  result = instance_variable_get("@#{attr}")
@@ -90,7 +93,7 @@ module SknUtils
90
93
  end
91
94
  end
92
95
 
93
- attr_writer *attrs
96
+ attr_writer *config_attrs
94
97
  end
95
98
 
96
99
  # Define the runtime access methods
@@ -101,7 +104,7 @@ module SknUtils
101
104
  def configure(&block)
102
105
  config.instance_eval(&block)
103
106
  end
104
- if _app_main
107
+ if _root_options
105
108
  # Enable Rails<Like>.env and Rails.logger like feature:
106
109
  # - MyClass.env.production? or MyClass.logger or MyClass.root
107
110
  def registry
@@ -142,3 +145,12 @@ module SknUtils
142
145
 
143
146
  end # end module
144
147
  end # End module
148
+
149
+ #
150
+ # def [](key)
151
+ # @internal_var[key]
152
+ # end
153
+ #
154
+ # def []=(key, value)
155
+ # @internal_var[key] = value
156
+ # end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # ##
2
4
  # lib/skn_utils/configuration.rb
3
5
  #
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # ##
2
4
  # File: ./lib/skn_utils/core_extensions.rb --
3
5
  # -- from: Rails 4.1 ActiveSupport:lib/active_support/core_ext/object/blank.rb
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  module SknUtils
3
4
  class DottedHash < NestedResult
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # File: ./lib/skn_utils/env_string_handler.rb
2
4
  #
3
5
  # Wrapping a string in this class gives you a prettier way to test
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ##
2
4
  # <project.root>/lib/skn_utils/nested_result.rb
3
5
  #
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #
2
4
  #
3
5
  # Ruby Notify like class
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #
2
4
  # lib/skn_utils/null_object.rb
3
5
  #
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
 
2
4
  module SknUtils
3
5
  class PageControls < NestedResult
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
 
2
4
  module SknUtils
3
5
  class ResultBean < NestedResult
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # A better way to say it
2
4
  module SknUtils
3
5
  class Version
4
6
  MAJOR = 5
5
7
  MINOR = 4
6
- PATCH = 0
8
+ PATCH = 1
7
9
 
8
10
  def self.to_s
9
11
  [MAJOR, MINOR, PATCH].join('.')
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ # ##
4
+ #
5
+ # Ref: https://blog.appsignal.com/2018/10/02/ruby-magic-class-level-instance-variables.html
6
+
7
+ module SknUtils
8
+
9
+ module Wrappable
10
+ def wrap(mod)
11
+ wrappers << mod
12
+ end
13
+
14
+ def wrappers
15
+ @wrappers ||= []
16
+ end
17
+
18
+ def inherited_wrappers
19
+ ancestors
20
+ .grep(Wrappable)
21
+ .reverse
22
+ .flat_map(&:wrappers)
23
+ end
24
+
25
+ def new(*arguments, &block)
26
+ instance = allocate
27
+ inherited_wrappers.each { |mod|instance.singleton_class.include(mod) }
28
+ instance.send(:initialize, *arguments, &block)
29
+ instance
30
+ end
31
+ end
32
+ end
data/lib/skn_utils.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
 
2
4
  require "skn_utils/version"
3
5
  require 'psych'
@@ -25,6 +27,7 @@ require 'skn_utils/null_object'
25
27
  require 'skn_utils/notifier_base'
26
28
  require 'skn_utils/configuration'
27
29
  require 'skn_utils/configurable'
30
+ require 'skn_utils/wrappable'
28
31
 
29
32
  require 'skn_hash'
30
33
  require 'skn_registry'
data/skn_utils.gemspec CHANGED
@@ -1,5 +1,6 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
+ # lib = File.expand_path('../lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'skn_utils/version'
5
6
 
@@ -2,51 +2,20 @@
2
2
  # spec/lib/skn_utils/configurable_spec.rb
3
3
  #
4
4
 
5
- class MyApp
6
- include SknUtils::Configurable.with( :app_id, :title, :cookie_name, enable_root: true) # No options hash defaults to true
7
- # - and accept defaults for #env=, #root=, #registry=, and #logger=
8
-
9
- # notice: self.logger=, the self is required when assigning values
10
- self.logger = Object.new
11
- self.registry = Object.new
12
-
13
- configure do
14
- app_id 'some app'
15
- title 'My Title'
16
- cookie_name 'Chocolate'
17
- end
18
-
19
- def null_value
20
- @app_id.dup
21
- end
22
- end
23
-
24
- module MyMod
25
- include SknUtils::Configurable.with(:app_id, :title, :cookie_name, enable_root: false)
26
-
27
- def self.null_value
28
- @app_id.dup
29
- end
30
- end
31
-
32
- MyMod.configure do
33
- app_id 'some module'
34
- title 'Some Title'
35
- cookie_name 'Caramel'
36
- end
5
+ require "support/configurables"
37
6
 
38
7
 
39
8
  describe SknUtils::Configurable, "Gem Configuration module." do
40
9
 
41
10
  let(:my_app) { MyApp.new }
42
11
 
43
- context "Top Level AppClass Extra Operational Features. " do
12
+ context "MyApp: Top Level AppClass Extra Operational Features. " do
44
13
 
45
14
  it "MyApp.env.test? returns expected value. " do
46
15
  expect( MyApp.env.test? ).to be true
47
16
  end
48
17
  it "MyApp.root returns expected value. " do
49
- expect( MyApp.root.realdirpath.to_s ).to eq( Dir.pwd )
18
+ expect( MyApp.root ).to eq( Dir.pwd )
50
19
  end
51
20
  it "MyApp.logger returns expected value. " do
52
21
  expect( MyApp.logger ).to be_instance_of(Object) # eq('No Logger Assigned.')
@@ -60,9 +29,11 @@ describe SknUtils::Configurable, "Gem Configuration module." do
60
29
 
61
30
  it "my_app#config.title returns expected value. " do
62
31
  expect( MyApp.config.title ).to eq( "My Title" )
32
+ expect( MyApp.config[:title] ).to eq( "My Title" )
63
33
  end
64
- it "my_app#config.app_id returns expected value. " do
65
- expect( MyApp.config.app_id ).to eq( "some app" )
34
+ it "my_app#config[:value] accepts and returns expected value. " do
35
+ expect( MyApp.config[:value]="New Attribute" ).to eq( "New Attribute" )
36
+ expect( MyApp.config[:value] ).to eq( "New Attribute" )
66
37
  end
67
38
 
68
39
  it "MyMod#config.app_id returns expected value. " do
@@ -70,6 +41,11 @@ describe SknUtils::Configurable, "Gem Configuration module." do
70
41
  end
71
42
  it "MyMod#config.cookie_name returns expected value. " do
72
43
  expect( MyMod.config.cookie_name ).to eq( 'Caramel' )
44
+ expect( MyMod.config[:cookie_name] ).to eq( 'Caramel' )
45
+ end
46
+ it "MyMod#config[:value] accepts and returns expected value. " do
47
+ expect( MyMod.config[:value]="New Attribute" ).to eq( "New Attribute" )
48
+ expect( MyMod.config[:value] ).to eq( "New Attribute" )
73
49
  end
74
50
 
75
51
  it "MyMod#logger raises NoMethodError as expected. " do
@@ -78,4 +54,15 @@ describe SknUtils::Configurable, "Gem Configuration module." do
78
54
 
79
55
  end
80
56
 
57
+ context "#config instance vars are accessable as expected. " do
58
+
59
+ it "MyApp#null_value to return expected value" do
60
+ expect(my_app.null_value).to eq "some app"
61
+ expect{ MyApp.null_value }.to raise_error(NoMethodError)
62
+ end
63
+
64
+ it "MyMod#null_value to return expected value" do
65
+ expect( MyMod.null_value ).to eq "some module"
66
+ end
67
+ end
81
68
  end
@@ -0,0 +1,80 @@
1
+ # ##
2
+ #
3
+
4
+ module Powered
5
+ def make_noise
6
+ puts "Powering up"
7
+ super
8
+ puts "Shutting down"
9
+ end
10
+ end
11
+
12
+ class Machine
13
+ extend SknUtils::Wrappable
14
+
15
+ wrap Powered
16
+
17
+ def make_noise
18
+ puts "Buzzzzzz"
19
+ end
20
+ end
21
+
22
+
23
+ module Logging
24
+ def make_noise
25
+ puts "Started making noise"
26
+ super
27
+ puts "Finished making noise"
28
+ end
29
+ end
30
+
31
+ class Bird
32
+ extend SknUtils::Wrappable
33
+
34
+ wrap Logging
35
+
36
+ def make_noise
37
+ puts "Chirp, chirp!"
38
+ end
39
+ end
40
+
41
+
42
+ module Flying
43
+ def make_noise
44
+ super
45
+ puts "Is flying away"
46
+ end
47
+ end
48
+
49
+ class Pigeon < Bird
50
+ wrap Flying
51
+
52
+ def make_noise
53
+ puts "Coo!"
54
+ end
55
+ end
56
+
57
+ describe 'SknUtils::Wrappable Module Handles Inheritance properly ' do
58
+
59
+ it '#make_noise handles Bird module. ' do
60
+ expect do
61
+ obj = Bird.new
62
+ obj.make_noise
63
+ end.to output("Started making noise\nChirp, chirp!\nFinished making noise\n").to_stdout
64
+ end
65
+
66
+ it '#make_noise handles Pigeon module. ' do
67
+ expect do
68
+ obj = Pigeon.new
69
+ obj.make_noise
70
+ end.to output("Started making noise\nCoo!\nFinished making noise\nIs flying away\n").to_stdout
71
+ end
72
+
73
+ it '#make_noise handles Machine module. ' do
74
+ expect do
75
+ obj = Machine.new
76
+ obj.make_noise
77
+ end.to output("Powering up\nBuzzzzzz\nShutting down\n").to_stdout
78
+ end
79
+
80
+ end
@@ -0,0 +1,36 @@
1
+ ##
2
+ # spec/support/configurables.rb
3
+ #
4
+
5
+ class MyApp
6
+ include SknUtils::Configurable.with( :app_id, :title, :cookie_name, enable_root: true) # No options hash defaults to true
7
+ # - and accept defaults for #env=, #root=, #registry=, and #logger=
8
+
9
+ # notice: self.logger=, the self is required when assigning values
10
+ self.logger = Object.new
11
+ self.registry = Object.new
12
+
13
+ configure do
14
+ app_id 'some app'
15
+ title 'My Title'
16
+ cookie_name 'Chocolate'
17
+ end
18
+
19
+ def null_value
20
+ self.class.config.app_id.dup
21
+ end
22
+ end
23
+
24
+ module MyMod
25
+ include SknUtils::Configurable.with(:app_id, :title, :cookie_name, enable_root: false)
26
+
27
+ def self.null_value
28
+ config.app_id.dup
29
+ end
30
+ end
31
+
32
+ MyMod.configure do
33
+ app_id 'some module'
34
+ title 'Some Title'
35
+ cookie_name 'Caramel'
36
+ end
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: 5.4.0
4
+ version: 5.4.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-12-16 00:00:00.000000000 Z
11
+ date: 2019-01-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: deep_merge
@@ -183,6 +183,7 @@ files:
183
183
  - lib/skn_utils/page_controls.rb
184
184
  - lib/skn_utils/result_bean.rb
185
185
  - lib/skn_utils/version.rb
186
+ - lib/skn_utils/wrappable.rb
186
187
  - skn_utils.gemspec
187
188
  - spec/factories/environments/development.yml
188
189
  - spec/factories/environments/production.yml
@@ -202,7 +203,9 @@ files:
202
203
  - spec/lib/skn_utils/null_object_spec.rb
203
204
  - spec/lib/skn_utils/registry_spec.rb
204
205
  - spec/lib/skn_utils/success_failure_value_container_spec.rb
206
+ - spec/lib/skn_utils/wrappers_spec.rb
205
207
  - spec/spec_helper.rb
208
+ - spec/support/configurables.rb
206
209
  homepage: https://github.com/skoona/skn_utils
207
210
  licenses:
208
211
  - MIT
@@ -250,4 +253,6 @@ test_files:
250
253
  - spec/lib/skn_utils/null_object_spec.rb
251
254
  - spec/lib/skn_utils/registry_spec.rb
252
255
  - spec/lib/skn_utils/success_failure_value_container_spec.rb
256
+ - spec/lib/skn_utils/wrappers_spec.rb
253
257
  - spec/spec_helper.rb
258
+ - spec/support/configurables.rb