bundle-try 1.4.0 → 1.5.0
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/CHANGELOG.md +15 -0
- data/README.md +6 -0
- data/bundle-try.gemspec +2 -1
- data/exe/bundler-try +9 -4
- data/lib/bundle-try.rb +88 -1
- metadata +17 -3
- data/lib/bundle_try/gemfile_generator.rb +0 -66
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c79e8cb51b88982e36eca082184a16bd7578e434
|
4
|
+
data.tar.gz: 78faad3fa851535d8ae61a1dc139f94825a89d86
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 368d1c89153a049dcc4ce5be15b522b7c665961ad1b815a66e7b3172be7e106c13aec3a89fc64a5d2692f56d9fd7a089cfa4b8e547be831fb40d3735208b369e
|
7
|
+
data.tar.gz: 76aedae4fcff5374fffde380f6a893fee25427f46816e6a567e06eda8765e94ecb6368f996a6d6124e6eae6f2c17f4bbceb9a4f8ca417a9a9f8c8c27ffb59ca7
|
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
@@ -62,6 +62,12 @@ Prepend the gem-name when it can't be derived from the url:
|
|
62
62
|
$ bundle try redis@gh:redis/redis-rb
|
63
63
|
```
|
64
64
|
|
65
|
+
Gem in a gist (see [the gist](https://gist.github.com/eval/66f7bfaf17d364ddd232) as an example of a minimum viable gem):
|
66
|
+
|
67
|
+
```
|
68
|
+
$ bundle try rot13@https://gist.github.com/eval/66f7bfaf17d364ddd232
|
69
|
+
```
|
70
|
+
|
65
71
|
No Gemfile will be saved, so it's save to run from an existing project-folder.
|
66
72
|
But if you need it:
|
67
73
|
|
data/bundle-try.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "bundle-try"
|
7
|
-
spec.version = '1.
|
7
|
+
spec.version = '1.5.0'
|
8
8
|
spec.authors = ["Gert Goet"]
|
9
9
|
spec.email = ["gert@thinkcreate.nl"]
|
10
10
|
|
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.require_paths = ["lib"]
|
28
28
|
|
29
29
|
spec.add_dependency "bundler", "~> 1.6"
|
30
|
+
spec.add_dependency "mustache", '~> 0.99.1'
|
30
31
|
spec.add_development_dependency "rake", "~> 10.0"
|
31
32
|
spec.add_development_dependency "aruba", "~> 0.6.2"
|
32
33
|
end
|
data/exe/bundler-try
CHANGED
@@ -1,9 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require 'bundle-try'
|
3
|
-
require 'tempfile'
|
4
|
-
gemfile = Tempfile.new('bundle-try')
|
5
|
-
gemfile_content = BundleTry::GemfileGenerator.new(ARGV.dup).generate
|
6
|
-
File.write(gemfile.path, gemfile_content)
|
7
3
|
|
8
4
|
if ARGV.empty? || %w(-h --help help try).include?(ARGV.first)
|
9
5
|
puts(<<-EOH)
|
@@ -48,6 +44,10 @@ Prepend the gem-name when it can't be derived from the url:
|
|
48
44
|
|
49
45
|
$ bundle try redis@gh:redis/redis-rb
|
50
46
|
|
47
|
+
Gem in a gist (see [the gist](https://gist.github.com/eval/66f7bfaf17d364ddd232) as an example of a minimum viable gem):
|
48
|
+
|
49
|
+
$ bundle try rot13@https://gist.github.com/eval/66f7bfaf17d364ddd232
|
50
|
+
|
51
51
|
No Gemfile will be saved, so it's save to run from an existing project-folder.
|
52
52
|
But if you need it:
|
53
53
|
|
@@ -62,6 +62,11 @@ EOH
|
|
62
62
|
exit
|
63
63
|
end
|
64
64
|
|
65
|
+
require 'tempfile'
|
66
|
+
gemfile = Tempfile.new('bundle-try')
|
67
|
+
gemfile_content = BundleTry::Gemfile.render({:gemlines => BundleTry.argv_to_gemlines(ARGV.dup) })
|
68
|
+
File.write(gemfile.path, gemfile_content)
|
69
|
+
|
65
70
|
ENV['BUNDLE_GEMFILE'] = gemfile.path
|
66
71
|
|
67
72
|
if STDOUT.tty?
|
data/lib/bundle-try.rb
CHANGED
@@ -1 +1,88 @@
|
|
1
|
-
require '
|
1
|
+
require 'mustache'
|
2
|
+
|
3
|
+
module BundleTry
|
4
|
+
VERSION_LIKE_RE = [Gem::Requirement::PATTERN, /v?\d+\.\d+/, /^\h+$/].freeze
|
5
|
+
|
6
|
+
def self.parse_args(args)
|
7
|
+
args.each_with_object([]) do |arg, obj|
|
8
|
+
matches_arg = arg.method(:match).to_proc
|
9
|
+
if VERSION_LIKE_RE.detect(&matches_arg)
|
10
|
+
obj[-1] << arg
|
11
|
+
else
|
12
|
+
obj << [arg]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.argv_to_gemlines(argv)
|
18
|
+
parse_args(argv).map {|args| Gemline.new(*args) }
|
19
|
+
end
|
20
|
+
|
21
|
+
class Gemline
|
22
|
+
attr_reader :versionlike, :namelike
|
23
|
+
|
24
|
+
def initialize(namelike, versionlike = nil)
|
25
|
+
@namelike = namelike
|
26
|
+
@versionlike = versionlike
|
27
|
+
end
|
28
|
+
|
29
|
+
def name
|
30
|
+
case
|
31
|
+
when namelike[/@/]
|
32
|
+
namelike.split('@').first
|
33
|
+
when github?
|
34
|
+
github.split('/').last
|
35
|
+
when gist?
|
36
|
+
raise ArgumentError, "Provide the name of the gem that is contained in the gist. e.g. 'awesome_gem@#{namelike}'"
|
37
|
+
namelike.split('@').first
|
38
|
+
else
|
39
|
+
namelike
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def ref
|
44
|
+
github? && versionlike
|
45
|
+
end
|
46
|
+
|
47
|
+
def github?
|
48
|
+
namelike[/\/\/github\.com|gh:/]
|
49
|
+
end
|
50
|
+
|
51
|
+
def gist?
|
52
|
+
namelike[/gist\.github\.com/]
|
53
|
+
end
|
54
|
+
|
55
|
+
def regular?
|
56
|
+
namelike == name
|
57
|
+
end
|
58
|
+
|
59
|
+
def gist
|
60
|
+
namelike[/gist\.github\.com\/(.*)$/, 1]
|
61
|
+
end
|
62
|
+
|
63
|
+
def github
|
64
|
+
namelike[/(?:github\.com\/|gh:)(?:(.*)\.git|(.*))$/]
|
65
|
+
$1 || $2
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
class Gemfile < Mustache
|
70
|
+
def template
|
71
|
+
<<template
|
72
|
+
source "https://rubygems.org"
|
73
|
+
|
74
|
+
{{#gemlines}}
|
75
|
+
{{#github?}}
|
76
|
+
gem '{{ name }}', github: '{{ github }}'{{#ref}}, ref: '{{ref}}'{{/ref}}
|
77
|
+
{{/github?}}
|
78
|
+
{{#gist?}}
|
79
|
+
gem '{{ name }}', gist: '{{ gist }}'{{#ref}}, ref: '{{ref}}'{{/ref}}
|
80
|
+
{{/gist?}}
|
81
|
+
{{#regular?}}
|
82
|
+
gem '{{ name }}'{{#versionlike}}, '{{{ versionlike }}}'{{/versionlike}}
|
83
|
+
{{/regular?}}
|
84
|
+
{{/gemlines}}
|
85
|
+
template
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bundle-try
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gert Goet
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: mustache
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.99.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.99.1
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rake
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -63,6 +77,7 @@ files:
|
|
63
77
|
- ".gitignore"
|
64
78
|
- ".rspec"
|
65
79
|
- ".travis.yml"
|
80
|
+
- CHANGELOG.md
|
66
81
|
- CODE_OF_CONDUCT.md
|
67
82
|
- Gemfile
|
68
83
|
- LICENSE.txt
|
@@ -73,7 +88,6 @@ files:
|
|
73
88
|
- bundle-try.gemspec
|
74
89
|
- exe/bundler-try
|
75
90
|
- lib/bundle-try.rb
|
76
|
-
- lib/bundle_try/gemfile_generator.rb
|
77
91
|
homepage: https://github.com/eval/bundle-try
|
78
92
|
licenses:
|
79
93
|
- MIT
|
@@ -1,66 +0,0 @@
|
|
1
|
-
module BundleTry
|
2
|
-
class GemfileGenerator
|
3
|
-
def initialize(args)
|
4
|
-
@args = args
|
5
|
-
end
|
6
|
-
|
7
|
-
def grouped_args
|
8
|
-
@args.each_with_object([]) do |arg, obj|
|
9
|
-
if arg_is_version?(arg)
|
10
|
-
obj[-1] << arg
|
11
|
-
else
|
12
|
-
obj << [arg]
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def arg_is_version?(arg)
|
18
|
-
arg[/v?\d+\.\d+/] ||
|
19
|
-
arg[/^\h+$/] ||
|
20
|
-
arg[Gem::Requirement::PATTERN]
|
21
|
-
end
|
22
|
-
|
23
|
-
def group2gemline(group)
|
24
|
-
result = begin
|
25
|
-
case group.first
|
26
|
-
when /\/\/github\.com|gh:/
|
27
|
-
group.first[/(?:github\.com\/|gh:)(?:(.*)\.git|(.*))$/]
|
28
|
-
github = $1 || $2
|
29
|
-
name = if group.first.include?('@')
|
30
|
-
group.first.split('@').first
|
31
|
-
else
|
32
|
-
github.split('/').last
|
33
|
-
end
|
34
|
-
{ name: name, github: github, ref: group[1] }
|
35
|
-
else
|
36
|
-
{ name: group[0], requirement: group[1] }
|
37
|
-
end
|
38
|
-
end
|
39
|
-
result.delete_if {|_,v| v.nil? }
|
40
|
-
end
|
41
|
-
|
42
|
-
def gemlines
|
43
|
-
gemlines = grouped_args.map {|g| group2gemline(g) }
|
44
|
-
gemlines.map do |line|
|
45
|
-
case
|
46
|
-
when line[:github]
|
47
|
-
s = "gem '#{line[:name]}', github: '#{line[:github]}'"
|
48
|
-
s += ", ref: '#{line[:ref]}'" if line[:ref]
|
49
|
-
s
|
50
|
-
else
|
51
|
-
s = "gem '#{line[:name]}'"
|
52
|
-
s += ", '#{line[:requirement]}'" if line[:requirement]
|
53
|
-
s
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
def generate
|
59
|
-
return <<-EOF
|
60
|
-
source "https://rubygems.org"
|
61
|
-
|
62
|
-
#{gemlines.join("\n")}
|
63
|
-
EOF
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|