rgversion 1.0.1 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +11 -5
- data/exe/rgversion +2 -1
- data/lib/rgversion/application.rb +24 -5
- data/lib/rgversion/exceptions.rb +1 -0
- data/lib/rgversion/spider.rb +18 -7
- data/lib/rgversion/terminal.rb +52 -11
- data/lib/rgversion/version.rb +2 -2
- data/lib/rgversion.rb +8 -1
- data/rgversion.gemspec +5 -2
- metadata +64 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f679f5e8a92e54d3f4e1be4d4ade7b585d2afcf1e60803115c1a0e057ffa5439
|
4
|
+
data.tar.gz: e997b762436ef24f9921d4edbd0c9d23745d92ee0bd8d1bf71714fa8939d18ba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5446b3412ae516c1c77ea64a6eb1c3573888d63f5aeffe86c2b7b19389253b46edcc5ce725e7073129b2ca26da8e866e8cc75628f42126133566a07b3ac3a1bf
|
7
|
+
data.tar.gz: f731ded2e2ddcc1422eb4aaf97dfa8b41c988ed96db23312ecb79494d1788b708d5965f6841b39123864b2e265d09736ac4afd2c43a04eee919e0ebfd4804fbe
|
data/README.md
CHANGED
@@ -1,6 +1,9 @@
|
|
1
|
-
# Rgversion
|
1
|
+
# Rgversion
|
2
|
+
[![Gem](https://img.shields.io/gem/v/rgversion.svg)](https://rubygems.org/gems/rgversion) [![Build Status](https://img.shields.io/travis/vavgustov/rgversion/master.svg)](https://travis-ci.org/vavgustov/rgversion) [![Maintainability](https://api.codeclimate.com/v1/badges/b5d59c13b4d649c321ea/maintainability)](https://codeclimate.com/github/vavgustov/rgversion/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/b5d59c13b4d649c321ea/test_coverage)](https://codeclimate.com/github/vavgustov/rgversion/test_coverage)
|
2
3
|
|
3
|
-
This library allow you to
|
4
|
+
This library allow you to copy latest semantic versions of specified gems from terminal to your clipboard.
|
5
|
+
Versions will be taken from [`rubygems.org`](https://rubygems.org/). Then you can past them in your `Gemfile`
|
6
|
+
or whatever you want.
|
4
7
|
![image](https://user-images.githubusercontent.com/312873/28492511-d2dbf140-6f0d-11e7-9912-beb8b94a1ca7.png)
|
5
8
|
|
6
9
|
## Installation
|
@@ -9,11 +12,14 @@ This library allow you to quickly copy latest semantic versions of specified gem
|
|
9
12
|
gem install rgversion
|
10
13
|
```
|
11
14
|
|
12
|
-
|
15
|
+
### macOS / OS X
|
13
16
|
No further actions required.
|
14
17
|
|
15
|
-
|
16
|
-
|
18
|
+
### Ubuntu / Debian
|
19
|
+
You may need to install xclip for clipboard feature:
|
20
|
+
```bash
|
21
|
+
sudo apt-get install xclip
|
22
|
+
```
|
17
23
|
|
18
24
|
## Usage
|
19
25
|
Open terminal and execute ``rgversion`` with list of needed gems. E.g:
|
data/exe/rgversion
CHANGED
@@ -1,10 +1,29 @@
|
|
1
1
|
module Rgversion
|
2
|
-
|
3
|
-
def
|
4
|
-
|
2
|
+
class Application
|
3
|
+
def initialize(gems, selector)
|
4
|
+
@gems = gems
|
5
|
+
@selector = selector
|
6
|
+
end
|
7
|
+
|
8
|
+
def run
|
9
|
+
terminal = Terminal.new(command, results)
|
10
|
+
terminal.report
|
5
11
|
terminal.copy_to_clipboard
|
6
|
-
rescue
|
7
|
-
puts ex.message
|
12
|
+
rescue StandardError => ex
|
13
|
+
$stderr.puts ex.message
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def results
|
19
|
+
spider = Spider.new(@gems, @selector)
|
20
|
+
spider.walk
|
21
|
+
end
|
22
|
+
|
23
|
+
def command
|
24
|
+
return :pbcopy if OS.mac?
|
25
|
+
return :xclip if OS.linux?
|
26
|
+
nil
|
8
27
|
end
|
9
28
|
end
|
10
29
|
end
|
data/lib/rgversion/exceptions.rb
CHANGED
data/lib/rgversion/spider.rb
CHANGED
@@ -3,28 +3,39 @@ require "open-uri"
|
|
3
3
|
|
4
4
|
module Rgversion
|
5
5
|
class Spider
|
6
|
-
def initialize(gems)
|
6
|
+
def initialize(gems, selector)
|
7
|
+
raise NoArguments, error_messages(:arguments) if gems.blank?
|
7
8
|
@gems = gems
|
9
|
+
@selector = selector
|
8
10
|
end
|
9
11
|
|
10
|
-
def
|
11
|
-
|
12
|
+
def walk
|
13
|
+
lines = []
|
14
|
+
errors = []
|
12
15
|
@gems.each do |gem|
|
13
16
|
begin
|
14
|
-
|
17
|
+
lines << grab_version(gem)
|
15
18
|
rescue OpenURI::HTTPError
|
16
|
-
|
19
|
+
errors << "#{gem} not found"
|
17
20
|
end
|
18
21
|
end
|
19
|
-
|
22
|
+
{ gems: lines, errors: errors }
|
20
23
|
end
|
21
24
|
|
22
25
|
private
|
23
26
|
|
27
|
+
def error_messages(key)
|
28
|
+
{
|
29
|
+
arguments: "No gems passed as arguments. Try to use like this:\nrgversion rails sinatra",
|
30
|
+
selector: "Selector #{@selector} doesn't exists on the page.\nRgversion should be updated."
|
31
|
+
}[key].red
|
32
|
+
end
|
33
|
+
|
24
34
|
def grab_version(gem)
|
25
35
|
gem_url = "https://rubygems.org/gems/#{gem}"
|
26
36
|
gem_page = Nokogiri::HTML(open(gem_url))
|
27
|
-
gem_page.at(
|
37
|
+
raise WrongSelector, error_messages(:selector) if gem_page.at(@selector).nil?
|
38
|
+
gem_page.at(@selector)["value"]
|
28
39
|
end
|
29
40
|
end
|
30
41
|
end
|
data/lib/rgversion/terminal.rb
CHANGED
@@ -1,24 +1,65 @@
|
|
1
1
|
module Rgversion
|
2
2
|
class Terminal
|
3
|
-
def initialize(
|
4
|
-
|
5
|
-
@
|
3
|
+
def initialize(command, results)
|
4
|
+
@command = command
|
5
|
+
@results = results
|
6
|
+
end
|
7
|
+
|
8
|
+
def report
|
9
|
+
render_errors
|
10
|
+
render_output
|
6
11
|
end
|
7
12
|
|
8
13
|
def copy_to_clipboard
|
9
|
-
|
10
|
-
|
11
|
-
output
|
12
|
-
|
13
|
-
|
14
|
+
return if @output.blank?
|
15
|
+
if command_exists?
|
16
|
+
`echo "#{@output}" | #{@command}`
|
17
|
+
puts "Copied to your clipboard!".green
|
18
|
+
else
|
19
|
+
render_instructions
|
14
20
|
end
|
15
21
|
end
|
16
22
|
|
17
23
|
private
|
18
24
|
|
19
|
-
def
|
20
|
-
|
21
|
-
|
25
|
+
def render_errors
|
26
|
+
return if @results[:errors].blank?
|
27
|
+
puts @results[:errors].join("\n").red
|
28
|
+
puts
|
29
|
+
end
|
30
|
+
|
31
|
+
def render_output
|
32
|
+
return if @results[:gems].blank?
|
33
|
+
@output = @results[:gems].join("\n")
|
34
|
+
puts "#{@output}"
|
35
|
+
puts
|
36
|
+
end
|
37
|
+
|
38
|
+
def command_exists?
|
39
|
+
return false if which(@command.to_s).nil?
|
40
|
+
true
|
41
|
+
end
|
42
|
+
|
43
|
+
# based on https://stackoverflow.com/a/5471032
|
44
|
+
# let's avoid find_executable from mkmf because in this case we need to supress logs
|
45
|
+
def which(cmd)
|
46
|
+
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
47
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
48
|
+
exts.each do |ext|
|
49
|
+
exe = File.join(path, "#{cmd}#{ext}")
|
50
|
+
return exe if File.executable?(exe) && !File.directory?(exe)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
nil
|
54
|
+
end
|
55
|
+
|
56
|
+
def render_instructions
|
57
|
+
if command.nil?
|
58
|
+
puts "Rgversion doesn't support copy to clipboard feature if your OS isn't macOS or Linux. You can manually copy output above."
|
59
|
+
else
|
60
|
+
puts "Unable to copy to clipboard because #{@command} is missed. Try the command below if you are on Ubuntu/Debian:"
|
61
|
+
puts "sudo apt-get install #{command}"
|
62
|
+
end
|
22
63
|
end
|
23
64
|
end
|
24
65
|
end
|
data/lib/rgversion/version.rb
CHANGED
data/lib/rgversion.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
|
-
require "
|
1
|
+
require "active_support/core_ext/object/blank"
|
2
|
+
require "awesome_print"
|
3
|
+
require "os"
|
2
4
|
require "rgversion/application"
|
3
5
|
require "rgversion/exceptions"
|
4
6
|
require "rgversion/spider"
|
5
7
|
require "rgversion/terminal"
|
8
|
+
require "rgversion/version"
|
9
|
+
|
10
|
+
module Rgversion
|
11
|
+
SELECTOR = "#gemfile_text".freeze
|
12
|
+
end
|
data/rgversion.gemspec
CHANGED
@@ -24,10 +24,13 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
25
25
|
spec.require_paths = ["lib"]
|
26
26
|
|
27
|
+
spec.add_dependency "activesupport", "> 4.0", "< 6"
|
28
|
+
spec.add_dependency "awesome_print", "~> 1.8"
|
29
|
+
spec.add_dependency "nokogiri", "~> 1.8"
|
30
|
+
spec.add_dependency "os", "~> 1.0"
|
31
|
+
|
27
32
|
spec.add_development_dependency "bundler", "~> 1.16"
|
28
33
|
spec.add_development_dependency "rake", "~> 12.3"
|
29
34
|
spec.add_development_dependency "rspec", "~> 3.7"
|
30
35
|
spec.add_development_dependency "simplecov", "~> 0.15"
|
31
|
-
|
32
|
-
spec.add_runtime_dependency "nokogiri", "~> 1.8"
|
33
36
|
end
|
metadata
CHANGED
@@ -1,15 +1,77 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rgversion
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- vavgustov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-01-
|
11
|
+
date: 2018-01-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.0'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '6'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '4.0'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '6'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: awesome_print
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1.8'
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '1.8'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: nokogiri
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '1.8'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '1.8'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: os
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '1.0'
|
68
|
+
type: :runtime
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '1.0'
|
13
75
|
- !ruby/object:Gem::Dependency
|
14
76
|
name: bundler
|
15
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,20 +128,6 @@ dependencies:
|
|
66
128
|
- - "~>"
|
67
129
|
- !ruby/object:Gem::Version
|
68
130
|
version: '0.15'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: nokogiri
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '1.8'
|
76
|
-
type: :runtime
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '1.8'
|
83
131
|
description: This library allow you to quickly copy latest semantic versions of specified
|
84
132
|
gems to your clipboard.
|
85
133
|
email:
|