lapidarius 4.4.4 → 4.5.5
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 +24 -23
- data/lib/lapidarius/cli.rb +4 -36
- data/lib/lapidarius/cutter.rb +16 -12
- data/lib/lapidarius/gem.rb +5 -12
- data/lib/lapidarius/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 743d5d7b47e23ae05b54f761366dc7f7c6c8c03e082585f26be4e7a4fe965360
|
4
|
+
data.tar.gz: fb1e6fbf6e9e11e4ac6c3b96f6db20e73a95c477bb8662d736bea9d2ecf6b274
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '0909cbef4a840dbb432d603c00563a2da51968df8d27f3e865f1d86e6471dbbedbdc1306dbc1c35f735426a75652980506b378fa8447a38aa839262ca5c0426a'
|
7
|
+
data.tar.gz: 3e5898e9aa146c21063eb0dd30314c3c820f2875e3ef36e2a7610ed7248ce3474deeca415e2f275f759b757383ceb4b711186c59b9f233668f668e33373ffdbb
|
data/README.md
CHANGED
@@ -31,7 +31,7 @@ gem install lapidarius
|
|
31
31
|
```
|
32
32
|
|
33
33
|
## Usage
|
34
|
-
This library invokes the
|
34
|
+
This library invokes the [Gem::Commands::DependencyCommand](https://github.com/rubygems/rubygems/blob/master/lib/rubygems/commands/dependency_command.rb) class recursively to collect all the levels of dependency.
|
35
35
|
Both runtime and development dependencies are counted (identical dependencies are counted once), but just the former are printed on screen:
|
36
36
|
|
37
37
|
```shell
|
@@ -43,11 +43,11 @@ sinatra (2.0.0)
|
|
43
43
|
│ └── rack (>= 0)
|
44
44
|
└── tilt (~> 2.0)
|
45
45
|
|
46
|
-
4 runtime,
|
46
|
+
4 runtime, 5 development
|
47
47
|
```
|
48
48
|
|
49
49
|
### Version
|
50
|
-
By default this library scans for the
|
50
|
+
By default this library scans for the latest available version `>= 0` found at [rubygems.org](https://rubygems.org/).
|
51
51
|
In case you are interested on a specific version just specify the `-v` option:
|
52
52
|
```shell
|
53
53
|
lapidarius sinatra -v 1.4.7
|
@@ -63,35 +63,36 @@ sinatra (1.4.7)
|
|
63
63
|
### Remote
|
64
64
|
By default this library scan for local gems, warning if the gem is not found:
|
65
65
|
```shell
|
66
|
-
lapidarius rails -v 2.
|
67
|
-
No gems found matching rails (= 2.
|
66
|
+
lapidarius rails -v 1.2.6
|
67
|
+
No gems found matching rails (= 1.2.6)
|
68
68
|
```
|
69
69
|
|
70
70
|
If you want to scan for remote gems specify the `-r` option (be aware of slowness):
|
71
71
|
```shell
|
72
|
-
lapidarius rails -v 2.
|
73
|
-
rails (2.
|
74
|
-
├── actionmailer (=
|
75
|
-
│ └── actionpack (=
|
76
|
-
│
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
│
|
81
|
-
|
82
|
-
│ └──
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
72
|
+
lapidarius rails -v 1.2.6 -r
|
73
|
+
rails (1.2.6)
|
74
|
+
├── actionmailer (= 1.3.6)
|
75
|
+
│ └── actionpack (= 1.13.6)
|
76
|
+
│ └── activesupport (= 1.4.4)
|
77
|
+
├── actionpack (= 1.13.6)
|
78
|
+
│ └── activesupport (= 1.4.4)
|
79
|
+
├── actionwebservice (= 1.2.6)
|
80
|
+
│ ├── actionpack (= 1.13.6)
|
81
|
+
│ │ └── activesupport (= 1.4.4)
|
82
|
+
│ └── activerecord (= 1.15.6)
|
83
|
+
│ └── activesupport (= 1.4.4)
|
84
|
+
├── activerecord (= 1.15.6)
|
85
|
+
│ └── activesupport (= 1.4.4)
|
86
|
+
├── activesupport (= 1.4.4)
|
87
|
+
└── rake (>= 0.7.2)
|
87
88
|
|
88
|
-
|
89
|
+
6 runtime, 5 development
|
89
90
|
```
|
90
91
|
|
91
92
|
### Quiet
|
92
93
|
Some gems have several interdependencies that results in a multitude of tree branches.
|
93
94
|
In case you just dare to count dependencies without the visual noise, you can pass the `-q` option:
|
94
95
|
```shell
|
95
|
-
lapidarius rails -v 5.1.
|
96
|
-
|
96
|
+
lapidarius rails -v 5.1.5 -r -q
|
97
|
+
37 runtime, 48 development
|
97
98
|
```
|
data/lib/lapidarius/cli.rb
CHANGED
@@ -7,34 +7,29 @@ module Lapidarius
|
|
7
7
|
|
8
8
|
attr_reader :name, :version, :remote
|
9
9
|
|
10
|
-
def initialize(args: [], io: STDOUT, command: Command, cutter: Cutter,
|
11
|
-
tree: Tree, spinner: Spinner.new)
|
10
|
+
def initialize(args: [], io: STDOUT, command: Command, cutter: Cutter, tree: Tree)
|
12
11
|
@args = args
|
13
12
|
@io = io
|
14
13
|
@command = command
|
15
14
|
@cutter = cutter
|
16
15
|
@tree = tree
|
17
|
-
@spinner = spinner
|
18
16
|
@name = @args.shift unless help?
|
19
17
|
parser.parse!(@args)
|
20
18
|
end
|
21
19
|
|
22
20
|
def call
|
23
|
-
@
|
24
|
-
@output = cut
|
25
|
-
end
|
26
|
-
@io.puts @output
|
21
|
+
@io.puts out
|
27
22
|
end
|
28
23
|
|
29
24
|
private def cutter
|
30
25
|
@cutter.new(name: @name, cmd_klass: @command, version: @version, remote: @remote)
|
31
26
|
end
|
32
27
|
|
33
|
-
private def
|
28
|
+
private def out
|
34
29
|
return unless @name
|
35
30
|
gem = cutter.call
|
36
31
|
@tree::new(gem, @quiet).out
|
37
|
-
rescue Gem::NotInstalledError => e
|
32
|
+
rescue Gem::NotInstalledError, Gem::KindError => e
|
38
33
|
e.message
|
39
34
|
end
|
40
35
|
|
@@ -65,31 +60,4 @@ module Lapidarius
|
|
65
60
|
HELP_FLAGS.any? { |h| @args.first == h }
|
66
61
|
end
|
67
62
|
end
|
68
|
-
|
69
|
-
class Spinner
|
70
|
-
CHARS = %w[| / - \\]
|
71
|
-
|
72
|
-
def initialize(io = STDOUT, fps = 15, delay = 1.0)
|
73
|
-
@io = io
|
74
|
-
@fps = fps.to_i
|
75
|
-
@delay = delay.to_f / @fps
|
76
|
-
@iter = 0
|
77
|
-
end
|
78
|
-
|
79
|
-
def call
|
80
|
-
spinner = Thread.new do
|
81
|
-
while @iter do
|
82
|
-
@io.print CHARS[(@iter+=1) % CHARS.length]
|
83
|
-
sleep @delay
|
84
|
-
@io.print "\b"
|
85
|
-
@io.flush
|
86
|
-
end
|
87
|
-
end
|
88
|
-
ensure
|
89
|
-
yield.tap do
|
90
|
-
@iter = false
|
91
|
-
spinner.join
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
63
|
end
|
data/lib/lapidarius/cutter.rb
CHANGED
@@ -24,32 +24,36 @@ module Lapidarius
|
|
24
24
|
|
25
25
|
private def recurse(name: @name, gem: nil, version: @version)
|
26
26
|
tokens = tokenize(name, version, @remote)
|
27
|
-
|
28
|
-
gem ||= Gem.factory(
|
29
|
-
tokens.
|
30
|
-
|
31
|
-
gem << @cache.fetch(t) do
|
32
|
-
recurse(name: dep.name, gem: dep, version: dep.version)
|
33
|
-
@cache[t] = dep
|
34
|
-
end
|
27
|
+
parent = tokens.shift
|
28
|
+
gem ||= Gem.factory(parent)
|
29
|
+
tokens.reduce(gem) do |acc, token|
|
30
|
+
acc << dependency(token); acc
|
35
31
|
end
|
36
|
-
gem
|
37
32
|
end
|
38
33
|
|
39
34
|
def dev_count
|
40
35
|
@dev_deps.map { |e| e.split(" ").first }.uniq.count
|
41
36
|
end
|
42
37
|
|
38
|
+
private def dependency(token)
|
39
|
+
@cache.fetch(token) do
|
40
|
+
Gem.factory(token).tap do |dep|
|
41
|
+
recurse(name: dep.name, gem: dep, version: dep.version)
|
42
|
+
@cache[token] = dep
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
43
47
|
private def tokenize(name, version, remote)
|
44
48
|
src = @cmd.call(name, version, remote)
|
45
|
-
data =
|
49
|
+
data = latest_match(src)
|
46
50
|
dev, tokens = data.partition { |token| token.match(/#{DEVELOPMENT}/) }
|
47
51
|
@dev_deps.concat(dev)
|
48
52
|
tokens
|
49
53
|
end
|
50
54
|
|
51
|
-
private def
|
52
|
-
src.split(/\n\n/).map!(&:strip).
|
55
|
+
private def latest_match(src)
|
56
|
+
src.split(/\n\n/).map!(&:strip).last.split("\n").map(&:strip)
|
53
57
|
end
|
54
58
|
end
|
55
59
|
end
|
data/lib/lapidarius/gem.rb
CHANGED
@@ -3,7 +3,8 @@ require "lapidarius/tree"
|
|
3
3
|
|
4
4
|
module Lapidarius
|
5
5
|
class Gem
|
6
|
-
|
6
|
+
INVALID_VER_CHARS = %w[> < = ~ !]
|
7
|
+
DEFAULT_VER = ">= 0"
|
7
8
|
|
8
9
|
extend Forwardable
|
9
10
|
|
@@ -22,9 +23,10 @@ module Lapidarius
|
|
22
23
|
token.match(/([a-zA-Z0-9\-_]+) \((.+)\)/) do |m|
|
23
24
|
return new(name: m[1], version: m[2])
|
24
25
|
end
|
26
|
+
fail KindError, "no gem can be created from #{token}"
|
25
27
|
end
|
26
28
|
|
27
|
-
attr_reader :name, :deps
|
29
|
+
attr_reader :name, :deps, :version
|
28
30
|
attr_accessor :dev_count
|
29
31
|
|
30
32
|
def initialize(name:, version:, deps: [])
|
@@ -51,17 +53,8 @@ module Lapidarius
|
|
51
53
|
flatten_deps.size
|
52
54
|
end
|
53
55
|
|
54
|
-
def version
|
55
|
-
@version.gsub(/#{VER_STRIP_CHARS.join("|")}/, "").split(",").map(&:strip).min
|
56
|
-
end
|
57
|
-
|
58
56
|
protected def flatten_deps
|
59
|
-
deps.reduce(deps)
|
60
|
-
acc.concat dep.flatten_deps
|
61
|
-
end.tap do |deps|
|
62
|
-
deps.flatten!
|
63
|
-
deps.uniq!(&:name)
|
64
|
-
end
|
57
|
+
deps.reduce(deps) { |acc, dep| acc.concat dep.flatten_deps }.flatten.uniq(&:name)
|
65
58
|
end
|
66
59
|
|
67
60
|
private def gem?(gem)
|
data/lib/lapidarius/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lapidarius
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.5.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- costajob
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-02-
|
11
|
+
date: 2018-02-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|