mandate 0.1.1 → 1.0.0.beta1

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
- SHA1:
3
- metadata.gz: 6bc2c241c950d6f4b31b4b425bbe49e1a663852a
4
- data.tar.gz: 9761af041c6f0c052d04055e5aec6f1be28fef10
2
+ SHA256:
3
+ metadata.gz: a3777f95eea23613ab020fee91200b2d2f74b158827c1c48920b7351718466d1
4
+ data.tar.gz: 13f9b05d1beb3ee5327301877f12055ce9e8a4237a96980fadf23a5e1d642806
5
5
  SHA512:
6
- metadata.gz: c8030c84e5c7a57f1418fa42a6e1e09117af1d14fecf828ff2a741b9d85f593a6c7839f4136603f88ee895be8e42b10956fa943fe461cbeba77bd53448a211c7
7
- data.tar.gz: 8db8fa6185037589f6e7573be7da0f60d4e21e0c1edb2fb6d80b29f5a38cbb14095d8e59ee07cc7f19b2e9da99f1e077df96cd9a44dcd6737dead9bbd730b2b1
6
+ metadata.gz: fa01cdd428d030e7eec7581318726731f2d3c72f8e7034876a3e9d1ae97f26a12a67c41ba9a80d115e260d7c1160d3e8018e5159151d67b57873598538628b23
7
+ data.tar.gz: 23f4e7d68149d6d4d27d4de21d82c9b64d64a2c420197e1cbc7bc1e9972a900a303b1d20a516bb44b3b7c95834576e34287308ac48914fafe284d70be09c7dd6
@@ -0,0 +1,28 @@
1
+ name: Rubocop
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ rubocop:
11
+ runs-on: ubuntu-20.04
12
+
13
+ steps:
14
+ - uses: actions/checkout@v2
15
+
16
+ - name: Set up Ruby
17
+ uses: ruby/setup-ruby@42817531497ae2ef0168458f709e451109306bd5
18
+ with:
19
+ ruby-version: 2.6.6
20
+
21
+ - name: Install gems
22
+ run: |
23
+ gem install rubocop
24
+ gem install rubocop-minitest
25
+ gem install rubocop-performance
26
+
27
+ - name: Run Rubocop
28
+ run: rubocop --except Metrics
@@ -0,0 +1,30 @@
1
+ name: Tests
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ test:
11
+ name: Ruby ${{ matrix.ruby-version }} - ${{ matrix.os }} - ${{ github.event_name }}
12
+ runs-on: ${{ matrix.os }}
13
+ strategy:
14
+ fail-fast: false
15
+ matrix:
16
+ os:
17
+ - ubuntu-20.04
18
+ ruby-version: [2.6, 2.7, 3.0]
19
+
20
+ steps:
21
+ - uses: actions/checkout@v2
22
+
23
+ - name: Set up Ruby
24
+ uses: ruby/setup-ruby@42817531497ae2ef0168458f709e451109306bd5
25
+ with:
26
+ ruby-version: ${{ matrix.ruby-version }}
27
+ bundler-cache: true
28
+
29
+ - name: Test
30
+ run: bundle exec rake test
data/.gitignore CHANGED
@@ -7,5 +7,6 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ /node_modules/
10
11
 
11
12
  *.gem
data/.rubocop.yml ADDED
@@ -0,0 +1,89 @@
1
+ require:
2
+ - rubocop-minitest
3
+ - rubocop-performance
4
+
5
+ AllCops:
6
+ NewCops: disable
7
+ Exclude:
8
+ - "bin/**/*"
9
+
10
+ Bundler/OrderedGems:
11
+ Enabled: false
12
+
13
+ Layout/DotPosition:
14
+ EnforcedStyle: trailing
15
+
16
+ Layout/EndOfLine:
17
+ EnforcedStyle: lf
18
+
19
+ Layout/MultilineMethodCallIndentation:
20
+ EnforcedStyle: indented
21
+
22
+ Layout/EmptyLinesAroundAccessModifier:
23
+ EnforcedStyle: only_before
24
+
25
+ #Layout/LineLength:
26
+ #Exclude:
27
+
28
+ Lint/SuppressedException:
29
+ Exclude:
30
+ - "test/**/*"
31
+ - "lib/tooling_invoker/runc_wrapper.rb"
32
+ - "lib/tooling_invoker/external_command.rb"
33
+
34
+ Metrics/BlockLength:
35
+ Exclude:
36
+ - "test/**/*"
37
+
38
+ Metrics/MethodLength:
39
+ # We probably want to bring this down but let's start here for now
40
+ Max: 20
41
+ Exclude:
42
+ - "test/**/*"
43
+
44
+ Naming/PredicateName:
45
+ Enabled: false
46
+
47
+ Style/StringLiterals:
48
+ Enabled: false
49
+
50
+ Style/FrozenStringLiteralComment:
51
+ Enabled: false
52
+
53
+ Style/Documentation:
54
+ Enabled: false
55
+
56
+ Style/DocumentationMethod:
57
+ Enabled: false
58
+
59
+ Style/GuardClause:
60
+ Exclude:
61
+ - lib/exercism_config/environment.rb
62
+
63
+ Style/IfUnlessModifier:
64
+ Exclude:
65
+ - "lib/exercism_config/setup_dynamodb_client.rb"
66
+
67
+ Style/NumericPredicate:
68
+ Enabled: false
69
+
70
+ Style/RedundantSelf:
71
+ Enabled: false
72
+
73
+ Style/ZeroLengthPredicate:
74
+ Enabled: false
75
+
76
+ # I don't mind this being enabled if
77
+ # someone fixes all the fails.
78
+ Style/ClassAndModuleChildren:
79
+ Enabled: false
80
+
81
+ Naming/FileName:
82
+ Exclude:
83
+ - "lib/exercism-config.rb"
84
+
85
+ Naming/VariableNumber:
86
+ EnforcedStyle: snake_case
87
+
88
+ Style/LambdaCall:
89
+ EnforcedStyle: braces
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.6.6
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ # 0.3.0 / 2019-09-06
2
+ * [FEATURE] Add success/failure callbacks
3
+
4
+ # 0.2.0 / 2018-08-11
5
+ * [FEATURE] Add initialize_with
data/Gemfile CHANGED
@@ -1,6 +1,11 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
3
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in mandate.gemspec
6
6
  gemspec
7
+
8
+ gem 'gem-release'
9
+ gem 'rubocop'
10
+ gem 'rubocop-minitest'
11
+ gem 'rubocop-performance'
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  # Mandate
2
- [![Build Status](https://travis-ci.org/ThalamusAI/mandate.svg?branch=master)](https://travis-ci.org/ThalamusAI/mandate)
2
+
3
+ ![Tests](https://github.com/iHiD/mandate/workflows/Tests/badge.svg)
3
4
 
4
5
  A simple command-pattern helper gem for Ruby.
5
6
 
@@ -25,11 +26,7 @@ Or install it yourself as:
25
26
  class Multiplies
26
27
  include Mandate
27
28
 
28
- attr_reader :number_1, :number_2
29
- def initialize(number_1, number_2)
30
- @number_1 = number_1
31
- @number_2 = number_2
32
- end
29
+ initialize_with :number_1, :number_2
33
30
 
34
31
  def call
35
32
  do_the_maths
@@ -48,6 +45,68 @@ Multiplies.(20, 3)
48
45
  # => 60
49
46
  ```
50
47
 
48
+ ### `initialize_with`
49
+
50
+ The `initialize_with` method creates an initializer and private attr_readers for the specified variables.
51
+
52
+ For example `initialize_with :foo, :bar` is the equivalent of:
53
+
54
+ ```ruby
55
+ def initialize(foo, bar)
56
+ @foo = foo
57
+ @bar = bar
58
+ end
59
+
60
+ private
61
+ attr_reader :foo, :bar
62
+ ```
63
+
64
+ ### Using on_success/on_failure callbacks
65
+
66
+ Sometimes it is helpful for the class to return on_success/on_failure callbacks rather than just the resulting value.
67
+ This can be achieved by including the `Mandate::Callbacks` module as follows:
68
+
69
+ ```ruby
70
+ class Sumer
71
+ include Mandate
72
+ include Mandate::Callbacks
73
+
74
+ initialize_with :num1, :num2
75
+
76
+ def call
77
+ abort!("num1 must be an Integer") unless num1.is_a?(Integer)
78
+ abort!("num2 must be an Integer") unless num2.is_a?(Integer)
79
+
80
+ num1 + num2
81
+ end
82
+ end
83
+
84
+ res = Sumer.(1,2)
85
+ res.on_success { |result| p result } # puts 3
86
+ res.on_failure { |errors| p errors } # Noop
87
+ res.succeeded? # true
88
+ res.result # 3
89
+ res.errors # []
90
+
91
+ res = Sumer.("1","2")
92
+ res.on_success { |result| p result } # Noop
93
+ res.on_failure { |errors| p errors } # puts ["num1 must be an Integer"]
94
+
95
+ res = Sumer.("1","2")
96
+ res.on_failure { |errors| p errors } # puts ["num1 must be an Integer", "num2 must be an Integer"]
97
+ res.errors # ["num1 must be an Integer", "num2 must be an Integer"]
98
+ ```
99
+
100
+ It is also possible to chain methods, for example:
101
+
102
+ ```ruby
103
+ Sumer.(1,2).
104
+ on_success { |result| p result }.
105
+ on_failure { |errors| p errors }
106
+ ```
107
+
108
+ The `succeeded?` method is also aliased as `success?`.
109
+
51
110
  ## Development
52
111
 
53
112
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -56,4 +115,4 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
56
115
 
57
116
  ## Contributing
58
117
 
59
- Bug reports and pull requests are welcome on GitHub at https://github.com/ThalamusAI/mandate.
118
+ Bug reports and pull requests are welcome on GitHub at https://github.com/iHiD/mandate.
data/Rakefile CHANGED
@@ -7,4 +7,4 @@ Rake::TestTask.new(:test) do |t|
7
7
  t.test_files = FileList["test/**/*_test.rb"]
8
8
  end
9
9
 
10
- task :default => :test
10
+ task default: :test
data/bin/release ADDED
@@ -0,0 +1,3 @@
1
+ #!/bin/bash
2
+
3
+ gem bump -c -v minor -t -p -r
data/bin/rubocop-quick ADDED
@@ -0,0 +1,4 @@
1
+ #!/bin/bash
2
+
3
+ git diff --name-status --staged | grep '^[MA]' | grep -o '\s\+.*rb' | xargs bundle exec rubocop --except Metrics --auto-correct --format quiet --force-exclusion Gemfile.lock && \
4
+ git diff --name-status --staged | grep '^[MA]' | grep -o '\s\+.*rb' | xargs git add
data/lib/mandate.rb CHANGED
@@ -1,10 +1,13 @@
1
1
  require "mandate/version"
2
2
  require "mandate/memoize"
3
3
  require "mandate/call_injector"
4
+ require "mandate/initializer_injector"
5
+ require "mandate/callbacks"
4
6
 
5
7
  module Mandate
6
8
  def self.included(base)
7
9
  base.extend(Memoize)
8
10
  base.extend(CallInjector)
11
+ base.extend(InitializerInjector)
9
12
  end
10
13
  end
@@ -7,10 +7,17 @@ module Mandate
7
7
  # Foobar.new(some, args).call()
8
8
  class << base
9
9
  def call(*args)
10
- new(*args).call
10
+ # If the last argument is a hash and the last param is a keyword params (signified by
11
+ # its type being :key, the we should pass the hash in in using the **kwords syntax.
12
+ # This fixes a deprecation issue in Ruby 2.7.
13
+ if args.last.is_a?(Hash) &&
14
+ instance_method(:initialize).parameters.last&.first == :key
15
+ new(*args[0..-2], **args[-1]).()
16
+ else
17
+ new(*args).()
18
+ end
11
19
  end
12
20
  end
13
21
  end
14
22
  end
15
23
  end
16
-
@@ -0,0 +1,92 @@
1
+ module Mandate
2
+ module Callbacks
3
+ class AbortError < RuntimeError
4
+ end
5
+
6
+ class Results
7
+ attr_reader :result, :errors
8
+
9
+ def initialize
10
+ @succeeded = false
11
+ @errors = []
12
+ end
13
+
14
+ def succeeded!(result)
15
+ @result = result
16
+ @succeeded = true
17
+ end
18
+
19
+ def add_error(error)
20
+ errors << error
21
+ end
22
+
23
+ def succeeded?
24
+ !!succeeded
25
+ end
26
+ alias success? succeeded?
27
+
28
+ def on_success
29
+ yield(result) if succeeded?
30
+ self
31
+ end
32
+
33
+ def on_failure
34
+ yield(errors) unless succeeded?
35
+ self
36
+ end
37
+
38
+ private
39
+ attr_reader :succeeded
40
+ end
41
+
42
+ def self.included(base)
43
+ # Override self.call to call the internal call_with_callbacks
44
+ # function which returns a method with on_success/on_failure callbacks
45
+ class << base
46
+ # Remove the existing created by the "include Mandate"
47
+ remove_method(:call)
48
+
49
+ # Define a new call methods which calls the instance call
50
+ # method but with the added callbacks needed for on_success/on_failure
51
+ def call(*args)
52
+ new(*args).call_with_callbacks
53
+ end
54
+ end
55
+
56
+ base.extend(Callbacks)
57
+ end
58
+
59
+ def self.extended(base)
60
+ base.send(:define_method, :call_with_callbacks) do
61
+ begin
62
+ # Create results object
63
+ @__mandate_results = Results.new
64
+
65
+ # Run the actual command
66
+ # If call fails, succeeded! will never get called
67
+ @__mandate_results.succeeded!(call)
68
+ rescue AbortError
69
+ # Used for flow handling
70
+ end
71
+
72
+ @__mandate_results
73
+ end
74
+
75
+ base.send(:define_method, :add_error!) do |error|
76
+ @__mandate_results.add_error(error)
77
+ end
78
+ base.send(:private, :add_error!)
79
+
80
+ base.send(:define_method, :abort!) do |error = nil|
81
+ add_error!(error) if error
82
+ raise AbortError
83
+ end
84
+ base.send(:private, :abort!)
85
+
86
+ base.send(:define_method, :abort_if_errored!) do
87
+ raise AbortError if @__mandate_results.errors.size > 0
88
+ end
89
+ base.send(:private, :abort_if_errored!)
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,55 @@
1
+ module Mandate
2
+ module InitializerInjector
3
+ def self.extended(base)
4
+ class << base
5
+ def initialize_with(*attrs, **kwattrs)
6
+ if kwattrs.empty?
7
+ define_method :initialize do |*args|
8
+ unless args.length == attrs.length
9
+ raise ArgumentError, "wrong number of arguments (given #{args.length}, expected #{attrs.length})"
10
+ end
11
+
12
+ attrs.zip(args).each do |attr, arg|
13
+ instance_variable_set("@#{attr}", arg)
14
+ end
15
+ end
16
+ else
17
+ define_method :initialize do |*args, **kwargs|
18
+ unless args.length == attrs.length
19
+ raise ArgumentError, "wrong number of arguments (given #{args.length}, expected #{attrs.length})"
20
+ end
21
+
22
+ attrs.zip(args).each do |attr, arg|
23
+ instance_variable_set("@#{attr}", arg)
24
+ end
25
+
26
+ kwargs.each do |name, value|
27
+ raise ArgumentError, "unknown keyword: #{name}" unless kwattrs.key?(name)
28
+
29
+ instance_variable_set("@#{name}", value)
30
+ end
31
+ end
32
+ end
33
+
34
+ attrs.each do |attr|
35
+ define_method attr do
36
+ instance_variable_get("@#{attr}")
37
+ end
38
+ private attr
39
+ end
40
+
41
+ kwattrs.each do |attr, default|
42
+ define_method attr do
43
+ if instance_variable_defined?("@#{attr}")
44
+ instance_variable_get("@#{attr}")
45
+ else
46
+ default
47
+ end
48
+ end
49
+ private attr
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -1,6 +1,5 @@
1
1
  module Mandate
2
2
  module Memoize
3
-
4
3
  # This method is called on the line before a
5
4
  # define statement. It puts mandate into memoizing mode
6
5
  def memoize
@@ -9,15 +8,15 @@ module Mandate
9
8
 
10
9
  # Intercept a method being added.
11
10
  # Create the method as normal, then if we are in
12
- # memoize mode, call out to the memozie function and
13
- # reset out of memozing mode.
11
+ # memoize mode, call out to the memoize function and
12
+ # reset out of memoizing mode.
14
13
  def method_added(method_name)
15
14
  super
16
15
 
17
- if @__mandate_memoizing
18
- __mandate_memoize(method_name)
19
- @__mandate_memoizing = false
20
- end
16
+ return unless instance_variable_defined?("@__mandate_memoizing") && @__mandate_memoizing
17
+
18
+ __mandate_memoize(method_name)
19
+ @__mandate_memoizing = false
21
20
  end
22
21
 
23
22
  # Create an anonymous module that defines a method
@@ -29,6 +28,15 @@ module Mandate
29
28
  # We then prepend this module so that its method
30
29
  # comes first in the method-lookup chain.
31
30
  def __mandate_memoize(method_name)
31
+ # Capture the access level of the method outside the module
32
+ # then set the method inside the module to have the same
33
+ # access later.
34
+ if private_instance_methods.include?(method_name)
35
+ access_modifier = :private
36
+ elsif protected_instance_methods.include?(method_name)
37
+ access_modifier = :protected
38
+ end
39
+
32
40
  memoizer = Module.new do
33
41
  define_method method_name do
34
42
  @__mandate_memoized_results ||= {}
@@ -39,9 +47,10 @@ module Mandate
39
47
  @__mandate_memoized_results[method_name] = super()
40
48
  end
41
49
  end
50
+
51
+ send(access_modifier, method_name) if access_modifier
42
52
  end
43
53
  prepend memoizer
44
54
  end
45
55
  end
46
56
  end
47
-
@@ -1,3 +1,3 @@
1
1
  module Mandate
2
- VERSION = "0.1.1"
2
+ VERSION = "1.0.0.beta1".freeze
3
3
  end
data/mandate.gemspec CHANGED
@@ -1,18 +1,18 @@
1
- # coding: utf-8
2
- lib = File.expand_path("../lib", __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require "mandate/version"
5
4
 
6
5
  Gem::Specification.new do |spec|
6
+ spec.required_ruby_version = '>= 2.6.0'
7
7
  spec.name = "mandate"
8
8
  spec.version = Mandate::VERSION
9
9
  spec.authors = ["Jeremy Walker"]
10
10
  spec.email = ["jez.walker@gmail.com"]
11
- spec.licenses = ['MIT']
11
+ spec.licenses = ['MIT']
12
12
 
13
- spec.summary = %q{A simple command-pattern helper gem for Ruby}
14
- spec.description = %q{This Ruby Gem adds functionality for the command pattern in Ruby, and for memoization.}
15
- spec.homepage = "https://github.com/thalamusai/mandate"
13
+ spec.summary = 'A simple command-pattern helper gem for Ruby'
14
+ spec.description = 'This Ruby Gem adds functionality for the command pattern in Ruby, and for memoization.'
15
+ spec.homepage = "https://github.com/iHiD/mandate"
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
18
  f.match(%r{^(test|spec|features)/})
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
23
23
 
24
- spec.add_development_dependency "bundler", "~> 1.15"
25
- spec.add_development_dependency "rake", "~> 10.0"
24
+ spec.add_development_dependency "bundler", "~> 2.1"
26
25
  spec.add_development_dependency "minitest", "~> 5.0"
26
+ spec.add_development_dependency "rake", "~> 12.3"
27
27
  end
data/package.json ADDED
@@ -0,0 +1,12 @@
1
+ {
2
+ "devDependencies": {
3
+ "husky": "^4.2.5",
4
+ "pretty-quick": "^2.0.1",
5
+ "prettier": "^2.0.5"
6
+ },
7
+ "husky": {
8
+ "hooks": {
9
+ "pre-commit": "pretty-quick --staged && ./bin/rubocop-quick"
10
+ }
11
+ }
12
+ }
data/yarn.lock ADDED
@@ -0,0 +1,555 @@
1
+ # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2
+ # yarn lockfile v1
3
+
4
+
5
+ "@babel/code-frame@^7.0.0":
6
+ version "7.12.13"
7
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658"
8
+ integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==
9
+ dependencies:
10
+ "@babel/highlight" "^7.12.13"
11
+
12
+ "@babel/helper-validator-identifier@^7.12.11":
13
+ version "7.12.11"
14
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed"
15
+ integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==
16
+
17
+ "@babel/highlight@^7.12.13":
18
+ version "7.12.13"
19
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.12.13.tgz#8ab538393e00370b26271b01fa08f7f27f2e795c"
20
+ integrity sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==
21
+ dependencies:
22
+ "@babel/helper-validator-identifier" "^7.12.11"
23
+ chalk "^2.0.0"
24
+ js-tokens "^4.0.0"
25
+
26
+ "@types/minimatch@^3.0.3":
27
+ version "3.0.3"
28
+ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
29
+ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
30
+
31
+ "@types/parse-json@^4.0.0":
32
+ version "4.0.0"
33
+ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
34
+ integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
35
+
36
+ ansi-styles@^3.2.1:
37
+ version "3.2.1"
38
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
39
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
40
+ dependencies:
41
+ color-convert "^1.9.0"
42
+
43
+ ansi-styles@^4.1.0:
44
+ version "4.3.0"
45
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
46
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
47
+ dependencies:
48
+ color-convert "^2.0.1"
49
+
50
+ array-differ@^3.0.0:
51
+ version "3.0.0"
52
+ resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b"
53
+ integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==
54
+
55
+ array-union@^2.1.0:
56
+ version "2.1.0"
57
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
58
+ integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
59
+
60
+ arrify@^2.0.1:
61
+ version "2.0.1"
62
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
63
+ integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
64
+
65
+ balanced-match@^1.0.0:
66
+ version "1.0.0"
67
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
68
+ integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
69
+
70
+ brace-expansion@^1.1.7:
71
+ version "1.1.11"
72
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
73
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
74
+ dependencies:
75
+ balanced-match "^1.0.0"
76
+ concat-map "0.0.1"
77
+
78
+ callsites@^3.0.0:
79
+ version "3.1.0"
80
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
81
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
82
+
83
+ chalk@^2.0.0, chalk@^2.4.2:
84
+ version "2.4.2"
85
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
86
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
87
+ dependencies:
88
+ ansi-styles "^3.2.1"
89
+ escape-string-regexp "^1.0.5"
90
+ supports-color "^5.3.0"
91
+
92
+ chalk@^4.0.0:
93
+ version "4.1.0"
94
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
95
+ integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
96
+ dependencies:
97
+ ansi-styles "^4.1.0"
98
+ supports-color "^7.1.0"
99
+
100
+ ci-info@^2.0.0:
101
+ version "2.0.0"
102
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
103
+ integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
104
+
105
+ color-convert@^1.9.0:
106
+ version "1.9.3"
107
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
108
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
109
+ dependencies:
110
+ color-name "1.1.3"
111
+
112
+ color-convert@^2.0.1:
113
+ version "2.0.1"
114
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
115
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
116
+ dependencies:
117
+ color-name "~1.1.4"
118
+
119
+ color-name@1.1.3:
120
+ version "1.1.3"
121
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
122
+ integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
123
+
124
+ color-name@~1.1.4:
125
+ version "1.1.4"
126
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
127
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
128
+
129
+ compare-versions@^3.6.0:
130
+ version "3.6.0"
131
+ resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62"
132
+ integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==
133
+
134
+ concat-map@0.0.1:
135
+ version "0.0.1"
136
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
137
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
138
+
139
+ cosmiconfig@^7.0.0:
140
+ version "7.0.0"
141
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3"
142
+ integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==
143
+ dependencies:
144
+ "@types/parse-json" "^4.0.0"
145
+ import-fresh "^3.2.1"
146
+ parse-json "^5.0.0"
147
+ path-type "^4.0.0"
148
+ yaml "^1.10.0"
149
+
150
+ cross-spawn@^7.0.0:
151
+ version "7.0.3"
152
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
153
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
154
+ dependencies:
155
+ path-key "^3.1.0"
156
+ shebang-command "^2.0.0"
157
+ which "^2.0.1"
158
+
159
+ end-of-stream@^1.1.0:
160
+ version "1.4.4"
161
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
162
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
163
+ dependencies:
164
+ once "^1.4.0"
165
+
166
+ error-ex@^1.3.1:
167
+ version "1.3.2"
168
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
169
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
170
+ dependencies:
171
+ is-arrayish "^0.2.1"
172
+
173
+ escape-string-regexp@^1.0.5:
174
+ version "1.0.5"
175
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
176
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
177
+
178
+ execa@^2.1.0:
179
+ version "2.1.0"
180
+ resolved "https://registry.yarnpkg.com/execa/-/execa-2.1.0.tgz#e5d3ecd837d2a60ec50f3da78fd39767747bbe99"
181
+ integrity sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw==
182
+ dependencies:
183
+ cross-spawn "^7.0.0"
184
+ get-stream "^5.0.0"
185
+ is-stream "^2.0.0"
186
+ merge-stream "^2.0.0"
187
+ npm-run-path "^3.0.0"
188
+ onetime "^5.1.0"
189
+ p-finally "^2.0.0"
190
+ signal-exit "^3.0.2"
191
+ strip-final-newline "^2.0.0"
192
+
193
+ find-up@^4.1.0:
194
+ version "4.1.0"
195
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
196
+ integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
197
+ dependencies:
198
+ locate-path "^5.0.0"
199
+ path-exists "^4.0.0"
200
+
201
+ find-up@^5.0.0:
202
+ version "5.0.0"
203
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
204
+ integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
205
+ dependencies:
206
+ locate-path "^6.0.0"
207
+ path-exists "^4.0.0"
208
+
209
+ find-versions@^4.0.0:
210
+ version "4.0.0"
211
+ resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-4.0.0.tgz#3c57e573bf97769b8cb8df16934b627915da4965"
212
+ integrity sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==
213
+ dependencies:
214
+ semver-regex "^3.1.2"
215
+
216
+ get-stream@^5.0.0:
217
+ version "5.2.0"
218
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
219
+ integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
220
+ dependencies:
221
+ pump "^3.0.0"
222
+
223
+ has-flag@^3.0.0:
224
+ version "3.0.0"
225
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
226
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
227
+
228
+ has-flag@^4.0.0:
229
+ version "4.0.0"
230
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
231
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
232
+
233
+ husky@^4.2.5:
234
+ version "4.3.8"
235
+ resolved "https://registry.yarnpkg.com/husky/-/husky-4.3.8.tgz#31144060be963fd6850e5cc8f019a1dfe194296d"
236
+ integrity sha512-LCqqsB0PzJQ/AlCgfrfzRe3e3+NvmefAdKQhRYpxS4u6clblBoDdzzvHi8fmxKRzvMxPY/1WZWzomPZww0Anow==
237
+ dependencies:
238
+ chalk "^4.0.0"
239
+ ci-info "^2.0.0"
240
+ compare-versions "^3.6.0"
241
+ cosmiconfig "^7.0.0"
242
+ find-versions "^4.0.0"
243
+ opencollective-postinstall "^2.0.2"
244
+ pkg-dir "^5.0.0"
245
+ please-upgrade-node "^3.2.0"
246
+ slash "^3.0.0"
247
+ which-pm-runs "^1.0.0"
248
+
249
+ ignore@^5.1.4:
250
+ version "5.1.8"
251
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
252
+ integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
253
+
254
+ import-fresh@^3.2.1:
255
+ version "3.3.0"
256
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
257
+ integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
258
+ dependencies:
259
+ parent-module "^1.0.0"
260
+ resolve-from "^4.0.0"
261
+
262
+ is-arrayish@^0.2.1:
263
+ version "0.2.1"
264
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
265
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
266
+
267
+ is-stream@^2.0.0:
268
+ version "2.0.0"
269
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
270
+ integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
271
+
272
+ isexe@^2.0.0:
273
+ version "2.0.0"
274
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
275
+ integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
276
+
277
+ js-tokens@^4.0.0:
278
+ version "4.0.0"
279
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
280
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
281
+
282
+ json-parse-even-better-errors@^2.3.0:
283
+ version "2.3.1"
284
+ resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
285
+ integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
286
+
287
+ lines-and-columns@^1.1.6:
288
+ version "1.1.6"
289
+ resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
290
+ integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
291
+
292
+ locate-path@^5.0.0:
293
+ version "5.0.0"
294
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
295
+ integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
296
+ dependencies:
297
+ p-locate "^4.1.0"
298
+
299
+ locate-path@^6.0.0:
300
+ version "6.0.0"
301
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
302
+ integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
303
+ dependencies:
304
+ p-locate "^5.0.0"
305
+
306
+ merge-stream@^2.0.0:
307
+ version "2.0.0"
308
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
309
+ integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
310
+
311
+ mimic-fn@^2.1.0:
312
+ version "2.1.0"
313
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
314
+ integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
315
+
316
+ minimatch@^3.0.4:
317
+ version "3.0.4"
318
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
319
+ integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
320
+ dependencies:
321
+ brace-expansion "^1.1.7"
322
+
323
+ mri@^1.1.4:
324
+ version "1.1.6"
325
+ resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.6.tgz#49952e1044db21dbf90f6cd92bc9c9a777d415a6"
326
+ integrity sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==
327
+
328
+ multimatch@^4.0.0:
329
+ version "4.0.0"
330
+ resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3"
331
+ integrity sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==
332
+ dependencies:
333
+ "@types/minimatch" "^3.0.3"
334
+ array-differ "^3.0.0"
335
+ array-union "^2.1.0"
336
+ arrify "^2.0.1"
337
+ minimatch "^3.0.4"
338
+
339
+ npm-run-path@^3.0.0:
340
+ version "3.1.0"
341
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-3.1.0.tgz#7f91be317f6a466efed3c9f2980ad8a4ee8b0fa5"
342
+ integrity sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==
343
+ dependencies:
344
+ path-key "^3.0.0"
345
+
346
+ once@^1.3.1, once@^1.4.0:
347
+ version "1.4.0"
348
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
349
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
350
+ dependencies:
351
+ wrappy "1"
352
+
353
+ onetime@^5.1.0:
354
+ version "5.1.2"
355
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
356
+ integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
357
+ dependencies:
358
+ mimic-fn "^2.1.0"
359
+
360
+ opencollective-postinstall@^2.0.2:
361
+ version "2.0.3"
362
+ resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259"
363
+ integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==
364
+
365
+ p-finally@^2.0.0:
366
+ version "2.0.1"
367
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561"
368
+ integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==
369
+
370
+ p-limit@^2.2.0:
371
+ version "2.3.0"
372
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
373
+ integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
374
+ dependencies:
375
+ p-try "^2.0.0"
376
+
377
+ p-limit@^3.0.2:
378
+ version "3.1.0"
379
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
380
+ integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
381
+ dependencies:
382
+ yocto-queue "^0.1.0"
383
+
384
+ p-locate@^4.1.0:
385
+ version "4.1.0"
386
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
387
+ integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
388
+ dependencies:
389
+ p-limit "^2.2.0"
390
+
391
+ p-locate@^5.0.0:
392
+ version "5.0.0"
393
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
394
+ integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
395
+ dependencies:
396
+ p-limit "^3.0.2"
397
+
398
+ p-try@^2.0.0:
399
+ version "2.2.0"
400
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
401
+ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
402
+
403
+ parent-module@^1.0.0:
404
+ version "1.0.1"
405
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
406
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
407
+ dependencies:
408
+ callsites "^3.0.0"
409
+
410
+ parse-json@^5.0.0:
411
+ version "5.2.0"
412
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
413
+ integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
414
+ dependencies:
415
+ "@babel/code-frame" "^7.0.0"
416
+ error-ex "^1.3.1"
417
+ json-parse-even-better-errors "^2.3.0"
418
+ lines-and-columns "^1.1.6"
419
+
420
+ path-exists@^4.0.0:
421
+ version "4.0.0"
422
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
423
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
424
+
425
+ path-key@^3.0.0, path-key@^3.1.0:
426
+ version "3.1.1"
427
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
428
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
429
+
430
+ path-type@^4.0.0:
431
+ version "4.0.0"
432
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
433
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
434
+
435
+ pkg-dir@^5.0.0:
436
+ version "5.0.0"
437
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-5.0.0.tgz#a02d6aebe6ba133a928f74aec20bafdfe6b8e760"
438
+ integrity sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==
439
+ dependencies:
440
+ find-up "^5.0.0"
441
+
442
+ please-upgrade-node@^3.2.0:
443
+ version "3.2.0"
444
+ resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942"
445
+ integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==
446
+ dependencies:
447
+ semver-compare "^1.0.0"
448
+
449
+ prettier@^2.0.5:
450
+ version "2.2.1"
451
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5"
452
+ integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==
453
+
454
+ pretty-quick@^2.0.1:
455
+ version "2.0.2"
456
+ resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-2.0.2.tgz#4e44d6489ed513ef111bee501f63688d854584e6"
457
+ integrity sha512-aLb6vtOTEfJDwi1w+MBTeE20GwPVUYyn6IqNg6TtGpiOB1W3y6vKcsGFjqGeaaEtQgMLSPXTWONqh33UBuwG8A==
458
+ dependencies:
459
+ chalk "^2.4.2"
460
+ execa "^2.1.0"
461
+ find-up "^4.1.0"
462
+ ignore "^5.1.4"
463
+ mri "^1.1.4"
464
+ multimatch "^4.0.0"
465
+
466
+ pump@^3.0.0:
467
+ version "3.0.0"
468
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
469
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
470
+ dependencies:
471
+ end-of-stream "^1.1.0"
472
+ once "^1.3.1"
473
+
474
+ resolve-from@^4.0.0:
475
+ version "4.0.0"
476
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
477
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
478
+
479
+ semver-compare@^1.0.0:
480
+ version "1.0.0"
481
+ resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
482
+ integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
483
+
484
+ semver-regex@^3.1.2:
485
+ version "3.1.2"
486
+ resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-3.1.2.tgz#34b4c0d361eef262e07199dbef316d0f2ab11807"
487
+ integrity sha512-bXWyL6EAKOJa81XG1OZ/Yyuq+oT0b2YLlxx7c+mrdYPaPbnj6WgVULXhinMIeZGufuUBu/eVRqXEhiv4imfwxA==
488
+
489
+ shebang-command@^2.0.0:
490
+ version "2.0.0"
491
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
492
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
493
+ dependencies:
494
+ shebang-regex "^3.0.0"
495
+
496
+ shebang-regex@^3.0.0:
497
+ version "3.0.0"
498
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
499
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
500
+
501
+ signal-exit@^3.0.2:
502
+ version "3.0.3"
503
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
504
+ integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
505
+
506
+ slash@^3.0.0:
507
+ version "3.0.0"
508
+ resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
509
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
510
+
511
+ strip-final-newline@^2.0.0:
512
+ version "2.0.0"
513
+ resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
514
+ integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
515
+
516
+ supports-color@^5.3.0:
517
+ version "5.5.0"
518
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
519
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
520
+ dependencies:
521
+ has-flag "^3.0.0"
522
+
523
+ supports-color@^7.1.0:
524
+ version "7.2.0"
525
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
526
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
527
+ dependencies:
528
+ has-flag "^4.0.0"
529
+
530
+ which-pm-runs@^1.0.0:
531
+ version "1.0.0"
532
+ resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb"
533
+ integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=
534
+
535
+ which@^2.0.1:
536
+ version "2.0.2"
537
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
538
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
539
+ dependencies:
540
+ isexe "^2.0.0"
541
+
542
+ wrappy@1:
543
+ version "1.0.2"
544
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
545
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
546
+
547
+ yaml@^1.10.0:
548
+ version "1.10.0"
549
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e"
550
+ integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==
551
+
552
+ yocto-queue@^0.1.0:
553
+ version "0.1.0"
554
+ resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
555
+ integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mandate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 1.0.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Walker
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-10-21 00:00:00.000000000 Z
11
+ date: 2021-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,42 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.15'
19
+ version: '2.1'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.15'
26
+ version: '2.1'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
28
+ name: minitest
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '5.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '5.0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: minitest
42
+ name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '5.0'
47
+ version: '12.3'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '5.0'
54
+ version: '12.3'
55
55
  description: This Ruby Gem adds functionality for the command pattern in Ruby, and
56
56
  for memoization.
57
57
  email:
@@ -60,24 +60,34 @@ executables: []
60
60
  extensions: []
61
61
  extra_rdoc_files: []
62
62
  files:
63
+ - ".github/workflows/rubocop.yml"
64
+ - ".github/workflows/tests.yml"
63
65
  - ".gitignore"
64
- - ".travis.yml"
66
+ - ".rubocop.yml"
67
+ - ".ruby-version"
68
+ - CHANGELOG.md
65
69
  - Gemfile
66
70
  - LICENCE
67
71
  - README.md
68
72
  - Rakefile
69
73
  - bin/console
74
+ - bin/release
75
+ - bin/rubocop-quick
70
76
  - bin/setup
71
77
  - lib/mandate.rb
72
78
  - lib/mandate/call_injector.rb
79
+ - lib/mandate/callbacks.rb
80
+ - lib/mandate/initializer_injector.rb
73
81
  - lib/mandate/memoize.rb
74
82
  - lib/mandate/version.rb
75
83
  - mandate.gemspec
76
- homepage: https://github.com/thalamusai/mandate
84
+ - package.json
85
+ - yarn.lock
86
+ homepage: https://github.com/iHiD/mandate
77
87
  licenses:
78
88
  - MIT
79
89
  metadata: {}
80
- post_install_message:
90
+ post_install_message:
81
91
  rdoc_options: []
82
92
  require_paths:
83
93
  - lib
@@ -85,17 +95,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
85
95
  requirements:
86
96
  - - ">="
87
97
  - !ruby/object:Gem::Version
88
- version: '0'
98
+ version: 2.6.0
89
99
  required_rubygems_version: !ruby/object:Gem::Requirement
90
100
  requirements:
91
- - - ">="
101
+ - - ">"
92
102
  - !ruby/object:Gem::Version
93
- version: '0'
103
+ version: 1.3.1
94
104
  requirements: []
95
- rubyforge_project:
96
- rubygems_version: 2.6.13
97
- signing_key:
105
+ rubygems_version: 3.0.3
106
+ signing_key:
98
107
  specification_version: 4
99
108
  summary: A simple command-pattern helper gem for Ruby
100
109
  test_files: []
101
- has_rdoc:
data/.travis.yml DELETED
@@ -1,5 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.3.3
5
- before_install: gem install bundler -v 1.15.4