dependanot 0.1.7 → 0.1.11
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 +4 -4
- data/README.md +33 -17
- data/dependabot.gemspec +11 -4
- data/lib/dependabot/bundler/update.rb +6 -1
- data/lib/dependabot/callback.rb +13 -0
- data/lib/dependabot/cli/scan.rb +4 -1
- data/lib/dependabot/cli.rb +2 -0
- data/lib/dependabot/git.rb +10 -2
- data/lib/dependabot/npm/update.rb +21 -0
- data/lib/dependabot/publish.rb +29 -39
- data/lib/dependabot/pull_request.rb +48 -0
- data/lib/dependabot/templates/pull.md.erb +9 -0
- data/lib/dependabot/version.rb +1 -1
- data/lib/dependabot.rb +16 -11
- data/lib/github.rb +4 -0
- metadata +16 -13
- data/lib/dependabot/tracer.rb +0 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e5badfc35fefa1a5209ee7e9495d8051990d5c64c379a1653aeb4e1075c3bce6
|
4
|
+
data.tar.gz: 85c462d293de42633139a913aa28e73e13460745ccd421cd0ba02898749b2be7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a9189f9292c94bac7e08ab53c6039e7a305d03f4fe631f13558807ec27703446e3c55b636c5e97f9e34a10b1cb0de83abeabd0576c49f2ddcac6e33257f3f9f1
|
7
|
+
data.tar.gz: b172ac7a995ad36e83c480db71d5046a95e97b2f66aa872046bf3b5045f77d0de62b9aa6490c32dafead65530aee7a200d1cb7e245742bd8fe233316323381f2
|
data/README.md
CHANGED
@@ -1,28 +1,41 @@
|
|
1
|
-
#
|
1
|
+
# Dependanot
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
TODO: Delete this and the text above, and describe your gem
|
3
|
+
Dependanot is definitely not [Dependabot](https://github.com/dependabot).
|
6
4
|
|
7
5
|
## Installation
|
8
6
|
|
9
|
-
|
10
|
-
|
11
|
-
```ruby
|
12
|
-
gem 'dependabot'
|
13
|
-
```
|
14
|
-
|
15
|
-
And then execute:
|
16
|
-
|
17
|
-
$ bundle install
|
7
|
+
Install `dependanot` from https://rubygems.org.
|
18
8
|
|
19
|
-
|
20
|
-
|
21
|
-
$ gem install dependabot
|
9
|
+
$ gem install dependanot
|
22
10
|
|
23
11
|
## Usage
|
24
12
|
|
25
|
-
|
13
|
+
`dependanot` is a CLI that can be invoked via `$ dependabot`. However, it's
|
14
|
+
meant to be used from a GitHub Action.
|
15
|
+
|
16
|
+
This following example can be added to your repo as `.github/workflows/dependanot.yml`.
|
17
|
+
|
18
|
+
```yaml
|
19
|
+
name: dependanot
|
20
|
+
on:
|
21
|
+
schedule:
|
22
|
+
- cron: '42 * * * *'
|
23
|
+
jobs:
|
24
|
+
bundler:
|
25
|
+
runs-on: ubuntu-latest
|
26
|
+
steps:
|
27
|
+
- uses: actions/checkout@v2
|
28
|
+
- uses: ruby/setup-ruby@v1
|
29
|
+
with:
|
30
|
+
ruby-version: 3.0
|
31
|
+
- run: gem install dependanot
|
32
|
+
- run: dependabot scan --recursive --push $GITHUB_WORKSPACE
|
33
|
+
env:
|
34
|
+
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
35
|
+
```
|
36
|
+
|
37
|
+
That's it! Consult the [GitHub Actions Documentation][1] to customize the
|
38
|
+
workflow or check out the [Examples repo][2].
|
26
39
|
|
27
40
|
## Development
|
28
41
|
|
@@ -37,3 +50,6 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/depend
|
|
37
50
|
## License
|
38
51
|
|
39
52
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
53
|
+
|
54
|
+
[1]: https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions
|
55
|
+
[2]: https://github.com/dependanot/examples
|
data/dependabot.gemspec
CHANGED
@@ -5,10 +5,17 @@ require_relative "lib/dependabot/version"
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.authors = ["mo khan"]
|
7
7
|
spec.bindir = "exe"
|
8
|
-
spec.description = "
|
8
|
+
spec.description = "Definitely not Dependabot"
|
9
9
|
spec.email = ["xlgmokha@github.com"]
|
10
10
|
spec.executables = ["dependabot"]
|
11
|
-
spec.files = Dir.glob(
|
11
|
+
spec.files = Dir.glob([
|
12
|
+
"*.gemspec",
|
13
|
+
"LICENSE.txt",
|
14
|
+
"README.md",
|
15
|
+
"exe/*",
|
16
|
+
"lib/**/*.erb",
|
17
|
+
"lib/**/*.rb",
|
18
|
+
])
|
12
19
|
spec.homepage = "https://github.com/dependanot/cli"
|
13
20
|
spec.license = "MIT"
|
14
21
|
spec.metadata["homepage_uri"] = spec.homepage
|
@@ -16,12 +23,12 @@ Gem::Specification.new do |spec|
|
|
16
23
|
spec.name = "dependanot"
|
17
24
|
spec.require_paths = ["lib"]
|
18
25
|
spec.required_ruby_version = ">= 3.0.0"
|
19
|
-
spec.summary = "
|
26
|
+
spec.summary = "Definitely not Dependabot"
|
20
27
|
spec.version = Dependabot::VERSION
|
21
28
|
spec.add_dependency "bundler", "~> 2.0"
|
22
29
|
spec.add_dependency "octokit", "~> 4.0"
|
23
30
|
spec.add_dependency "rugged", "~> 1.2"
|
24
31
|
spec.add_dependency "spandx", ">= 0.18.3"
|
32
|
+
spec.add_dependency "straw", "~> 0.1"
|
25
33
|
spec.add_dependency "thor", "~> 1.1"
|
26
|
-
spec.add_development_dependency "debug", "~> 1.4"
|
27
34
|
end
|
@@ -3,14 +3,19 @@
|
|
3
3
|
module Dependabot
|
4
4
|
module Bundler
|
5
5
|
class Update < ::Spandx::Core::Plugin
|
6
|
+
def match?(dependency)
|
7
|
+
dependency.package_manager == :rubygems
|
8
|
+
end
|
9
|
+
|
6
10
|
def enhance(dependency)
|
7
|
-
return unless dependency
|
11
|
+
return dependency unless match?(dependency)
|
8
12
|
|
9
13
|
Dir.chdir(dependency.path.parent) do
|
10
14
|
::Bundler.with_unbundled_env do
|
11
15
|
system({ "RUBYOPT" => "-W0" }, "bundle update #{dependency.name} --conservative --quiet")
|
12
16
|
end
|
13
17
|
end
|
18
|
+
dependency
|
14
19
|
end
|
15
20
|
end
|
16
21
|
end
|
data/lib/dependabot/cli/scan.rb
CHANGED
@@ -31,8 +31,11 @@ module Dependabot
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def update(dependency)
|
34
|
-
::Dependabot.logger.
|
34
|
+
::Dependabot.logger.info("Updating #{dependency.name}…")
|
35
35
|
::Dependabot::Publish.new(dependency).update!(push: options[:push])
|
36
|
+
rescue StandardError => boom
|
37
|
+
Dependabot.logger.error(boom)
|
38
|
+
boom.backtrace.each { |x| Dependabot.logger.debug(x) }
|
36
39
|
end
|
37
40
|
|
38
41
|
def match?(dependency)
|
data/lib/dependabot/cli.rb
CHANGED
@@ -11,7 +11,9 @@ module Dependabot
|
|
11
11
|
method_option :dependency, aliases: "-d", type: :string, desc: "Update a specific dependency", default: nil
|
12
12
|
method_option :push, aliases: "-p", type: :boolean, desc: "Push the update as a pull request. Default: --no-push", default: false
|
13
13
|
method_option :recursive, aliases: "-r", type: :boolean, desc: "Perform a recursive. Default: --no-recursive", default: false
|
14
|
+
method_option :verbose, aliases: "-v", type: :boolean, desc: "Increase verbosity. Default: --no-verbose", default: false
|
14
15
|
def scan(path = Pathname.pwd)
|
16
|
+
Dependabot.logger.level = :debug if options[:verbose]
|
15
17
|
::Dependabot::CLI::Scan.new(path, options).run
|
16
18
|
end
|
17
19
|
|
data/lib/dependabot/git.rb
CHANGED
@@ -5,17 +5,24 @@ module Dependabot
|
|
5
5
|
attr_reader :repo
|
6
6
|
|
7
7
|
def initialize(path)
|
8
|
-
@path = path
|
9
8
|
@repo = Rugged::Repository.discover(path)
|
10
9
|
end
|
11
10
|
|
11
|
+
def self.for(dependency)
|
12
|
+
new(dependency.path.parent)
|
13
|
+
end
|
14
|
+
|
12
15
|
def checkout(branch:)
|
13
|
-
repo.create_branch(branch, repo.head.name)
|
16
|
+
repo.create_branch(branch, repo.head.name) unless repo.branches[branch]
|
14
17
|
repo.checkout(branch)
|
15
18
|
end
|
16
19
|
|
17
20
|
def push(remote: "origin", branch: "HEAD")
|
18
21
|
repo.push(remote, ["refs/heads/#{branch}"], credentials: credentials_for(remote))
|
22
|
+
rescue StandardError
|
23
|
+
Dir.chdir(File.dirname(repo.path)) do
|
24
|
+
system("git push #{remote} #{branch}", exception: true)
|
25
|
+
end
|
19
26
|
end
|
20
27
|
|
21
28
|
def patch
|
@@ -42,6 +49,7 @@ module Dependabot
|
|
42
49
|
end
|
43
50
|
|
44
51
|
def credentials_for(remote)
|
52
|
+
Dependabot.logger.debug(repo.remotes[remote].url)
|
45
53
|
if ssh?(repo.remotes[remote].url)
|
46
54
|
Rugged::Credentials::SshKeyFromAgent.new(username: "git")
|
47
55
|
else
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Dependabot
|
4
|
+
module Npm
|
5
|
+
class Update < ::Spandx::Core::Plugin
|
6
|
+
def match?(dependency)
|
7
|
+
dependency.package_manager == :npm
|
8
|
+
end
|
9
|
+
|
10
|
+
def enhance(dependency)
|
11
|
+
return dependency unless match?(dependency)
|
12
|
+
|
13
|
+
Dir.chdir(dependency.path.parent) do
|
14
|
+
system("rm -fr node_modules/#{dependency.name}")
|
15
|
+
system("npm update #{dependency.name}")
|
16
|
+
end
|
17
|
+
dependency
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/dependabot/publish.rb
CHANGED
@@ -2,62 +2,52 @@
|
|
2
2
|
|
3
3
|
module Dependabot
|
4
4
|
class Publish
|
5
|
-
attr_reader :dependency
|
5
|
+
attr_reader :dependency, :git, :pull_request
|
6
6
|
|
7
|
-
def initialize(dependency)
|
7
|
+
def initialize(dependency, git: Dependabot::Git.for(dependency))
|
8
8
|
@dependency = dependency
|
9
|
+
@git = git
|
10
|
+
@pull_request = PullRequest.new(
|
11
|
+
nwo: GitHub.name_with_owner_from(git.repo.remotes["origin"].url),
|
12
|
+
base: git.repo.head.name,
|
13
|
+
head: "dependanot/#{dependency.package_manager}/#{dependency.name}",
|
14
|
+
dependency: dependency
|
15
|
+
)
|
9
16
|
end
|
10
17
|
|
11
18
|
def update!(push: false)
|
12
|
-
|
19
|
+
transaction(push: push) do |after_commit|
|
13
20
|
::Spandx::Core::Plugin.enhance(dependency)
|
14
|
-
|
21
|
+
after_commit.new do
|
22
|
+
Dependabot.logger.debug(git.patch)
|
23
|
+
Dependabot.github.create(pull_request)
|
24
|
+
end
|
15
25
|
end
|
16
26
|
end
|
17
27
|
|
18
28
|
private
|
19
29
|
|
20
|
-
def
|
21
|
-
|
22
|
-
|
30
|
+
def transaction(push:)
|
31
|
+
git.checkout(branch: pull_request.head)
|
32
|
+
callback = yield Callback
|
33
|
+
return if no_changes?
|
34
|
+
|
35
|
+
git.commit(all: true, message: pull_request.commit_message)
|
36
|
+
return unless push
|
23
37
|
|
24
|
-
|
25
|
-
|
26
|
-
default_branch = git.repo.head.name
|
27
|
-
git.checkout(branch: branch_name)
|
28
|
-
yield git
|
29
|
-
publish_pull_request_for(dependency, default_branch, branch_name, git, push) unless git.patch.empty?
|
38
|
+
git.push(remote: "origin", branch: pull_request.head)
|
39
|
+
callback.call
|
30
40
|
ensure
|
31
|
-
|
32
|
-
git.repo.checkout(default_branch)
|
41
|
+
reset
|
33
42
|
end
|
34
43
|
|
35
|
-
def
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
<details>
|
40
|
-
<summary>Changelog</summary>
|
41
|
-
</details>
|
42
|
-
|
43
|
-
<details>
|
44
|
-
<summary>Commits</summary>
|
45
|
-
</details>
|
46
|
-
MARKDOWN
|
44
|
+
def reset
|
45
|
+
git.repo.checkout_head(strategy: :force)
|
46
|
+
git.repo.checkout(pull_request.base)
|
47
47
|
end
|
48
48
|
|
49
|
-
def
|
50
|
-
git.
|
51
|
-
return unless push
|
52
|
-
|
53
|
-
git.push(remote: "origin", branch: branch_name)
|
54
|
-
Dependabot.octokit.create_pull_request(
|
55
|
-
GitHub.name_with_owner_from(git.repo.remotes["origin"].url),
|
56
|
-
default_branch,
|
57
|
-
branch_name,
|
58
|
-
"chore(deps): bump #{dependency}",
|
59
|
-
description_for(dependency)
|
60
|
-
)
|
49
|
+
def no_changes?
|
50
|
+
git.patch.empty?
|
61
51
|
end
|
62
52
|
end
|
63
53
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Dependabot
|
4
|
+
class PullRequest
|
5
|
+
include ::Straw::Memoizable
|
6
|
+
|
7
|
+
attr_reader :base, :head
|
8
|
+
|
9
|
+
def initialize(nwo:, base:, head:, dependency:)
|
10
|
+
@nwo = nwo
|
11
|
+
@base = base
|
12
|
+
@head = head
|
13
|
+
@dependency = dependency
|
14
|
+
end
|
15
|
+
|
16
|
+
def commit_message
|
17
|
+
memoize(:commit_message) do
|
18
|
+
<<~COMMIT
|
19
|
+
#{title}
|
20
|
+
|
21
|
+
#{description}
|
22
|
+
COMMIT
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def run_against(api)
|
27
|
+
api.create_pull_request(nwo, base, head, title, description)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
attr_reader :nwo, :dependency
|
33
|
+
|
34
|
+
def title
|
35
|
+
memoize(:title) do
|
36
|
+
"chore(deps): bump #{dependency.name} from #{dependency.version}"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def description
|
41
|
+
memoize(:description) do
|
42
|
+
ERB
|
43
|
+
.new(File.read(File.join(__dir__, "templates/pull.md.erb")))
|
44
|
+
.result(binding)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/dependabot/version.rb
CHANGED
data/lib/dependabot.rb
CHANGED
@@ -1,31 +1,26 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "bundler"
|
4
|
+
require "erb"
|
4
5
|
require "github"
|
5
|
-
require "logger"
|
6
6
|
require "octokit"
|
7
7
|
require "rugged"
|
8
8
|
require "spandx"
|
9
|
+
require "straw"
|
9
10
|
|
10
11
|
require_relative "dependabot/bundler/update"
|
12
|
+
require_relative "dependabot/npm/update"
|
13
|
+
require_relative "dependabot/callback"
|
11
14
|
require_relative "dependabot/git"
|
12
15
|
require_relative "dependabot/publish"
|
13
|
-
require_relative "dependabot/
|
16
|
+
require_relative "dependabot/pull_request"
|
14
17
|
require_relative "dependabot/version"
|
15
18
|
|
16
19
|
module Dependabot
|
17
20
|
class Error < StandardError; end
|
18
21
|
|
19
22
|
def self.logger
|
20
|
-
|
21
|
-
x.formatter = proc do |_severity, _datetime, _progname, message|
|
22
|
-
"[v#{VERSION}] #{message}\n"
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def self.tracer
|
28
|
-
@tracer ||= Tracer.new(logger)
|
23
|
+
::Straw.logger
|
29
24
|
end
|
30
25
|
|
31
26
|
def self.octokit
|
@@ -42,3 +37,13 @@ module Dependabot
|
|
42
37
|
@github ||= GitHub.new
|
43
38
|
end
|
44
39
|
end
|
40
|
+
|
41
|
+
module Spandx
|
42
|
+
module Core
|
43
|
+
class LicensePlugin
|
44
|
+
def enhance(dependency)
|
45
|
+
dependency
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/github.rb
CHANGED
@@ -18,6 +18,10 @@ class GitHub
|
|
18
18
|
@workspace = workspace
|
19
19
|
end
|
20
20
|
|
21
|
+
def create(action)
|
22
|
+
action.run_against(Dependabot.octokit)
|
23
|
+
end
|
24
|
+
|
21
25
|
class << self
|
22
26
|
def name_with_owner_from(url)
|
23
27
|
regex = %r{(?<x>(?<scheme>https|ssh)://)?(?<username>git@)?github.com[:|/](?<nwo>\w+/\w+)(?<extension>\.git)?}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dependanot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- mo khan
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-12-
|
11
|
+
date: 2021-12-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -67,34 +67,34 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 0.18.3
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: straw
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '0.1'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '0.1'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: thor
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '1.
|
90
|
-
type: :
|
89
|
+
version: '1.1'
|
90
|
+
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '1.
|
97
|
-
description:
|
96
|
+
version: '1.1'
|
97
|
+
description: Definitely not Dependabot
|
98
98
|
email:
|
99
99
|
- xlgmokha@github.com
|
100
100
|
executables:
|
@@ -108,11 +108,14 @@ files:
|
|
108
108
|
- exe/dependabot
|
109
109
|
- lib/dependabot.rb
|
110
110
|
- lib/dependabot/bundler/update.rb
|
111
|
+
- lib/dependabot/callback.rb
|
111
112
|
- lib/dependabot/cli.rb
|
112
113
|
- lib/dependabot/cli/scan.rb
|
113
114
|
- lib/dependabot/git.rb
|
115
|
+
- lib/dependabot/npm/update.rb
|
114
116
|
- lib/dependabot/publish.rb
|
115
|
-
- lib/dependabot/
|
117
|
+
- lib/dependabot/pull_request.rb
|
118
|
+
- lib/dependabot/templates/pull.md.erb
|
116
119
|
- lib/dependabot/version.rb
|
117
120
|
- lib/github.rb
|
118
121
|
homepage: https://github.com/dependanot/cli
|
@@ -136,8 +139,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
136
139
|
- !ruby/object:Gem::Version
|
137
140
|
version: '0'
|
138
141
|
requirements: []
|
139
|
-
rubygems_version: 3.2.
|
142
|
+
rubygems_version: 3.2.33
|
140
143
|
signing_key:
|
141
144
|
specification_version: 4
|
142
|
-
summary:
|
145
|
+
summary: Definitely not Dependabot
|
143
146
|
test_files: []
|
data/lib/dependabot/tracer.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Dependabot
|
4
|
-
class Tracer
|
5
|
-
def initialize(logger)
|
6
|
-
@logger = logger
|
7
|
-
end
|
8
|
-
|
9
|
-
def trace(defaults = {})
|
10
|
-
tracer = TracePoint.new(:call) do |x|
|
11
|
-
@logger.debug(defaults.merge({ path: x.path, lineno: x.lineno, clazz: x.defined_class, method: x.method_id, args: args_from(x), locals: locals_from(x) }))
|
12
|
-
rescue StandardError => boom
|
13
|
-
@logger.error(defaults.merge({ message: boom.message, stacktrace: boom.backtrace }))
|
14
|
-
end
|
15
|
-
tracer.enable
|
16
|
-
yield
|
17
|
-
ensure
|
18
|
-
tracer.disable
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def args_from(trace)
|
24
|
-
trace.parameters.map(&:last).map { |x| [x, trace.binding.eval(x.to_s)] }.to_h
|
25
|
-
end
|
26
|
-
|
27
|
-
def locals_from(trace)
|
28
|
-
trace.binding.local_variables.map { |x| [x, trace.binding.local_variable_get(x)] }.to_h
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|