bundle-try 1.4.0 → 1.5.0

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
  SHA1:
3
- metadata.gz: c1b32a10d7e8117cc1d9d00499815614cd4b11a2
4
- data.tar.gz: e334d1de0dcb7dc804cbc02c694926a7d0d6607f
3
+ metadata.gz: c79e8cb51b88982e36eca082184a16bd7578e434
4
+ data.tar.gz: 78faad3fa851535d8ae61a1dc139f94825a89d86
5
5
  SHA512:
6
- metadata.gz: c887b28f6f5aa615bf43cf0b7b811add59a1ae6d81d45d2c1d945df3871bd87545f99d498f1f80fa36c70d1866198c8f96b99b656d958bce816db1ee6f35c551
7
- data.tar.gz: 004f82cf4a358765f27eda3aee70d0f212330e841bc9a4d414113fd2dcd525f24070222a86c1868878315287787f89d1fa52d0cdc48cbe11b6f5ffd27e335f41
6
+ metadata.gz: 368d1c89153a049dcc4ce5be15b522b7c665961ad1b815a66e7b3172be7e106c13aec3a89fc64a5d2692f56d9fd7a089cfa4b8e547be831fb40d3735208b369e
7
+ data.tar.gz: 76aedae4fcff5374fffde380f6a893fee25427f46816e6a567e06eda8765e94ecb6368f996a6d6124e6eae6f2c17f4bbceb9a4f8ca417a9a9f8c8c27ffb59ca7
data/CHANGELOG.md ADDED
@@ -0,0 +1,15 @@
1
+ ## 1.5.0
2
+
3
+ ### Fixed
4
+
5
+ * Massive refactor
6
+
7
+ ### Added
8
+
9
+ * the changelog
10
+ * gist-support
11
+
12
+ $ bundle try rot13@https://gist.github.com/eval/66f7bfaf17d364ddd232
13
+ Bundling...
14
+ > "123".rot13
15
+
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.4.0'
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 'bundle_try/gemfile_generator'
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.0
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-20 00:00:00.000000000 Z
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