mandate 0.1.1 → 1.0.0.beta1

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
- 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