skn_utils 5.1.3 → 5.2.0

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
  SHA1:
3
- metadata.gz: ab0d406a18ec9195e66f548bf411ac0180f3c5e9
4
- data.tar.gz: 940e9429c70622331c953c03029b31f1af5cae27
3
+ metadata.gz: 6626371d3c94b3bc3907c2076960641a49019628
4
+ data.tar.gz: 51fc2a420168d5d9d760cccc4dae8a2d7dbd4d13
5
5
  SHA512:
6
- metadata.gz: 62c4dd21348287fb7503b4b30ca15443ca2b1bfe188f9b4e89b22c520e45fde18008b2f3c08df1d505ee6e287a806df14abaaf6e382467e586f7ba8309d66af9
7
- data.tar.gz: a0821fe5d46bd2bb5cefa7829a77b0081383691fdd4ac0c75a9012294d34803da742c7ac1aacc8594b4b86a17c6a21e5d957c80ac0eb9d5f314755985a8286ec
6
+ metadata.gz: 5eee749ed9ad4ccc4f4fd7c5c9d464fd459650d197b3c30acbbeace7799b88ebff4e1774e3a75ad8ed24e3f0a0fdfd9f0f3ea213eca6b67ed0797610f4caac73
7
+ data.tar.gz: dda45c33fa7e7d6509f6369fb84504fb0f146baa698fffe3b5c42c95bb73b02d9d168509f0b380d259d5118dd5cacd3424715556d6f09b195e4c3663daa38885
data/README.rdoc CHANGED
@@ -232,3 +232,148 @@ $ bin/console
232
232
 
233
233
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
234
234
 
235
+ === Notes:
236
+ ```ruby
237
+ class ApplicationSchema < Dry::Validation::Schema
238
+ configure do |config|
239
+ option :record
240
+ option :machine_repository, Machine
241
+ option :user_repository, User
242
+ option :temporary_token_repository, TemporaryToken
243
+
244
+ config.messages_file = 'config/locales/validations.yml'
245
+ end
246
+
247
+ ...
248
+
249
+ end
250
+
251
+ module Sessions
252
+ AuthenticateUserSchema = Dry::Validation.Schema(ApplicationSchema) do
253
+ required(:email).filled(:str?)
254
+ required(:password).filled(:str?)
255
+
256
+ validate(exists?: :email) do |email|
257
+ user_repository.find_by(email: email).present?
258
+ end
259
+ end
260
+ end
261
+ ```
262
+
263
+ from: Andy Holland @AMHOL, roda-action
264
+ ```ruby
265
+ class Roda
266
+ ContainerError = Class.new(::Exception)
267
+
268
+ module RodaPlugins
269
+ # The container plugin allows your application to
270
+ # act as a container, you can register values
271
+ # with your application (container) and resolve them later.
272
+ #
273
+ # If you register something that responds to call, the result of
274
+ # call will be returned each time you resolve it.
275
+ #
276
+ # Example:
277
+ #
278
+ # plugin :container
279
+ #
280
+ # class UserRepository
281
+ # def self.first
282
+ # { name: 'Jack' }
283
+ # end
284
+ # end
285
+ #
286
+ # MyApplication.register(:user_repository, UserRepository)
287
+ # MyApplication.resolve(:user_repository).first
288
+ #
289
+ # class PersonRepository
290
+ # def first
291
+ # { name: 'Gill' }
292
+ # end
293
+ # end
294
+ #
295
+ # MyApplication.register(:person_repository, -> { PersonRepository.new })
296
+ # MyApplication.resolve(:person_repository).first
297
+ module Container
298
+ class Container < RodaCache
299
+ def register(key, contents = nil, options = {}, &block)
300
+ if block_given?
301
+ item = block
302
+ options = contents if contents.is_a?(::Hash)
303
+ else
304
+ item = contents
305
+ end
306
+
307
+ self[key] = Content.new(item, options)
308
+ end
309
+
310
+ def resolve(key)
311
+ content = self.fetch(key) do
312
+ fail ::Roda::ContainerError, "Nothing registered with the name #{key}"
313
+ end
314
+
315
+ content.call
316
+ end
317
+ end
318
+
319
+ class Content
320
+ attr_reader :item, :options
321
+
322
+ def initialize(item, options = {})
323
+ @item, @options = item, {
324
+ call: item.is_a?(::Proc)
325
+ }.merge(options)
326
+ end
327
+
328
+ def call
329
+ if options[:call] == true
330
+ item.call
331
+ else
332
+ item
333
+ end
334
+ end
335
+ end
336
+
337
+ module ClassMethods
338
+ attr_reader :container
339
+ private :container
340
+
341
+ def self.extended(subclass)
342
+ subclass.instance_variable_set(:@container, Container.new)
343
+ super
344
+ end
345
+
346
+ def inherited(subclass)
347
+ subclass.instance_variable_set(:@container, container)
348
+ super
349
+ end
350
+
351
+ def instance
352
+ Thread.current[:__container__]
353
+ end
354
+
355
+ def register(key, contents = nil, options = {}, &block)
356
+ container.register(key, contents, options, &block)
357
+ end
358
+
359
+ def resolve(key)
360
+ container.resolve(key)
361
+ end
362
+
363
+ def detach_container
364
+ @container = container.dup
365
+ end
366
+ end
367
+
368
+ module InstanceMethods
369
+ def call(*args, &block)
370
+ Thread.current[:__container__] = self.class.send(:container).dup
371
+ super
372
+ end
373
+ end
374
+ end
375
+
376
+ register_plugin(:container, Container)
377
+ end
378
+ end
379
+ ```
@@ -2,8 +2,8 @@
2
2
  module SknUtils
3
3
  class Version
4
4
  MAJOR = 5
5
- MINOR = 1
6
- PATCH = 3
5
+ MINOR = 2
6
+ PATCH = 0
7
7
 
8
8
  def self.to_s
9
9
  [MAJOR, MINOR, PATCH].join('.')
data/lib/skn_utils.rb CHANGED
@@ -6,6 +6,7 @@ require 'erb'
6
6
  require 'date'
7
7
  require 'time'
8
8
  require 'concurrent'
9
+ require 'colorize'
9
10
  unless defined?(Rails)
10
11
  begin
11
12
  require 'deep_merge'
@@ -31,6 +32,30 @@ require 'skn_registry'
31
32
  require 'skn_container'
32
33
  require 'skn_settings'
33
34
 
35
+
36
+
34
37
  module SknUtils
35
38
 
39
+ # Random Utils
40
+ # Retries block up to :retries times with a :pause_between, and returns Success/Failure object
41
+ #
42
+ def self.catch_exceptions(retries=3, pause_between=3, &block)
43
+ retry_count ||= 1
44
+ attempts = retries
45
+ begin
46
+
47
+ SknSuccess.( yield )
48
+
49
+ rescue StandardError => error
50
+ Kernel.puts "#{retry_count} - #{error.class.name}:#{error.message}".light_blue.italic
51
+ if retry_count <= attempts
52
+ retry_count+= 1
53
+ sleep(pause_between)
54
+ retry
55
+ else
56
+ SknFailure.( "RETRY ATTEMPTS FAILED - #{error.class.name}:#{error.message}" )
57
+ end
58
+ end
59
+ end # end method
60
+
36
61
  end
data/skn_utils.gemspec CHANGED
@@ -33,6 +33,7 @@ EOF
33
33
  spec.add_runtime_dependency 'deep_merge', '~> 1'
34
34
  spec.add_runtime_dependency 'concurrent-ruby', '~> 1'
35
35
  spec.add_runtime_dependency 'thor', '~> 0'
36
+ spec.add_runtime_dependency 'colorize', '~> 0'
36
37
 
37
38
  spec.add_development_dependency "bundler", "~> 1"
38
39
  spec.add_development_dependency "rake", "~> 10"
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.1.3
4
+ version: 5.2.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: 2018-10-17 00:00:00.000000000 Z
11
+ date: 2018-10-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: deep_merge
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: colorize
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: bundler
57
71
  requirement: !ruby/object:Gem::Requirement