pls 1.0.1 → 1.0.2

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
2
  SHA256:
3
- metadata.gz: 3fa2ba719cfd78fadf6b1472179a1c406cbdadfda39b6453a2a5cc1f033aab0a
4
- data.tar.gz: 698fbb490d6d46877f7f53eb3224eb1041b9a779d4c548d8f1b408d943318232
3
+ metadata.gz: a55f2a42f7d5e96e9d80497133efa1ddae26ac7932ad47c8f8d699d1048ae41d
4
+ data.tar.gz: 49220cdc6ce4be829fe6d644a66843370c81f28fab6c8d41db6897cac791f21a
5
5
  SHA512:
6
- metadata.gz: 573d06a91c3896be1884c22fffab1e65e4ca59c06252b9619d4f630b21c351b211ae24b99b5298710415593fda89bdcb7f8a9ad8bd900da4ff31529e96010c38
7
- data.tar.gz: d90d81f0d8948889ccfc7c12459cfb58d8426c9f5c73e8a2b4002624577a513f35379e48365d61da14063b0de578a31b5a06c4bf3ab45dbbc75302b5c80f2da4
6
+ metadata.gz: 53141d1535df3a8223d6a231b9417b35b6155d4468b247518930bbbafef3aa98970dc2ad5c7d09c6171dd40d7ef018013115714b350a9a61e21a72506c401db1
7
+ data.tar.gz: 4df66404b9923208a8eed7c548ce11a0cf85ef9fe8889d3c0a3715b5c6bad847d3f4fc7715f2b74ff041b9dbbaee080451bf68b7384ea60801b94025317a22f6
@@ -22,16 +22,22 @@ module Pls
22
22
  end
23
23
 
24
24
  def initialize
25
+ ARGV << '-h' if ARGV.empty?
25
26
  @options = {}
26
27
  OptionParser.new do |o|
27
28
  o.banner = "Usage: #{File.basename($PROGRAM_NAME)} [options]."
28
29
  DIC.each { |f, p, d, t, k| o.on(f, p, t, d) { |i| @options[k] = i } }
29
30
  add(o)
30
31
  end.parse!
32
+ raise 'Please specify a package name with -p flag.' if pac.nil?
31
33
  end
32
34
 
33
- def dir
35
+ def pac
34
36
  @options[:pac]
35
37
  end
38
+
39
+ def url
40
+ 'https://registry.npmjs.org'
41
+ end
36
42
  end
37
43
  end
data/lib/pls/pls.rb CHANGED
@@ -3,19 +3,77 @@
3
3
  # vi:ts=2 sw=2 tw=79 et lbr wrap
4
4
  # Copyright 2021 by David Rabkin
5
5
 
6
+ require 'httparty'
7
+ require 'json'
6
8
  require_relative 'configurator'
7
9
  require_relative 'reporter'
8
10
 
9
11
  module Pls
10
- # Transcodes any video file to m4v format.
12
+ # Data structure is hash, key - package name, val - array of hashes:
13
+ # {
14
+ # aaa => [
15
+ # bbb => [],
16
+ # ccc => [
17
+ # ddd => [],
18
+ # eee => []
19
+ # ]
20
+ # ]
21
+ # }
11
22
  class Pls
12
23
  def initialize
13
24
  @cfg = Configurator.new
14
25
  @rep = Reporter.new
26
+ @dat = {}
27
+ @mut_dat = Mutex.new
28
+ end
29
+
30
+ def read_http(pac)
31
+ url = "#{@cfg.url}/#{pac}/latest"
32
+ res = HTTParty.get(url)
33
+ raise "Unable to continue with #{url}." unless res.code == 200
34
+
35
+ res.body
36
+ end
37
+
38
+ def build_dep(dep) # rubocop:disable Metrics/MethodLength
39
+ arr = []
40
+ threads = []
41
+ mut = Mutex.new
42
+ dep.each_key do |pac|
43
+ threads << Thread.new(pac, arr) do |p, a|
44
+ dat = build(p)
45
+ mut.synchronize { a << dat }
46
+ end
47
+ end
48
+ threads.each(&:join)
49
+ arr
50
+ end
51
+
52
+ # Consider time validation for cache data.
53
+ def read_cache(pac)
54
+ arr = []
55
+ @mut_dat.synchronize { arr = @dat[pac] }
56
+ arr
57
+ end
58
+
59
+ def write_cache(pac, arr)
60
+ @mut_dat.synchronize { @dat[pac] = arr }
61
+ end
62
+
63
+ def build(pac)
64
+ arr = read_cache(pac)
65
+ if arr.to_a.empty?
66
+ str = read_http(pac)
67
+ doc = JSON.parse(str)
68
+ dep = doc['dependencies']
69
+ arr = dep.to_a.empty? ? [] : build_dep(dep)
70
+ write_cache(pac, arr)
71
+ end
72
+ { pac => arr }
15
73
  end
16
74
 
17
75
  def do
18
- @rep.do
76
+ @rep.do(build(@cfg.pac))
19
77
  end
20
78
  end
21
79
  end
data/lib/pls/reporter.rb CHANGED
@@ -10,8 +10,17 @@ module Pls
10
10
  @beg = Time.now.to_i
11
11
  end
12
12
 
13
- def do
14
- puts "Done in #{Time.now.to_i - @beg}."
13
+ def out(pac, del)
14
+ key = pac.keys[0]
15
+ del.times { print ' ' }
16
+ print key
17
+ puts "\n"
18
+ pac[key].each { |sub| out(sub, del + 2) }
19
+ end
20
+
21
+ def do(dat)
22
+ out(dat, 0)
23
+ puts "Done in #{Time.now.to_i - @beg} seconds."
15
24
  end
16
25
  end
17
26
  end
data/lib/pls/version.rb CHANGED
@@ -4,6 +4,6 @@
4
4
  # Copyright 2021 by David Rabkin
5
5
 
6
6
  module Pls
7
- VERSION = '1.0.1'
8
- DATE = '2021-02-12'
7
+ VERSION = '1.0.2'
8
+ DATE = '2021-02-17'
9
9
  end
data/pls-1.0.1.gem ADDED
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pls
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Rabkin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-12 00:00:00.000000000 Z
11
+ date: 2021-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pidfile
@@ -86,6 +86,7 @@ files:
86
86
  - lib/pls/pls.rb
87
87
  - lib/pls/reporter.rb
88
88
  - lib/pls/version.rb
89
+ - pls-1.0.1.gem
89
90
  - pls.gemspec
90
91
  homepage: https://github.com/rdavid/pls
91
92
  licenses: