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 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