gemline 0.0.4 → 0.1.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.
- data/.travis.yml +6 -0
- data/README.rdoc +7 -0
- data/Rakefile +13 -0
- data/gemline.gemspec +2 -1
- data/lib/gemline.rb +23 -16
- data/spec/gemline_spec.rb +15 -3
- data/spec/samples/doesnotexist.json +0 -1
- data/spec/samples/nokogiri.json +1 -0
- data/spec/samples/yaml.json +1 -0
- metadata +44 -7
data/.travis.yml
ADDED
data/README.rdoc
CHANGED
@@ -17,3 +17,10 @@ If possible, we'll also copy that Gemfile line into the clipboard using pbcopy.
|
|
17
17
|
== Usage
|
18
18
|
|
19
19
|
# gemline [GEM NAME]
|
20
|
+
|
21
|
+
== Upcoming features
|
22
|
+
|
23
|
+
* A --pre option to grab the latest prerelease version
|
24
|
+
* An --open option to open the gem's rubygems.org page in the default browser
|
25
|
+
* Switching to a real command line parser instead of the lazy code in place now to allow the addition of the above options
|
26
|
+
|
data/Rakefile
CHANGED
@@ -1,2 +1,15 @@
|
|
1
1
|
#!/usr/bin/env rake
|
2
2
|
require "bundler/gem_tasks"
|
3
|
+
require 'rspec'
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
|
6
|
+
Bundler::GemHelper.install_tasks
|
7
|
+
|
8
|
+
desc 'Default: Run specs'
|
9
|
+
task :default => :spec
|
10
|
+
|
11
|
+
desc 'Run specs'
|
12
|
+
RSpec::Core::RakeTask.new(:spec)
|
13
|
+
|
14
|
+
desc 'Run specs (alias for Gem Testers)'
|
15
|
+
task :test => :spec
|
data/gemline.gemspec
CHANGED
@@ -13,8 +13,9 @@ Gem::Specification.new do |gem|
|
|
13
13
|
gem.name = "gemline"
|
14
14
|
gem.require_paths = ["lib"]
|
15
15
|
|
16
|
-
gem.version = '0.0
|
16
|
+
gem.version = '0.1.0'
|
17
17
|
|
18
18
|
gem.add_dependency('crack')
|
19
|
+
gem.add_development_dependency('rake') # For Travis CI
|
19
20
|
gem.add_development_dependency(%q<rspec>, [">= 2.7.0"])
|
20
21
|
end
|
data/lib/gemline.rb
CHANGED
@@ -1,18 +1,23 @@
|
|
1
|
+
Encoding.default_external = Encoding::UTF_8
|
2
|
+
|
1
3
|
require 'crack/json'
|
2
4
|
require 'net/http'
|
3
5
|
|
6
|
+
require 'yaml'
|
7
|
+
YAML::ENGINE.yamler = 'syck'
|
8
|
+
|
4
9
|
|
5
10
|
class Gemline
|
6
11
|
attr_accessor :gem, :gemline, :json, :response
|
7
12
|
|
8
|
-
def self.query(
|
9
|
-
|
10
|
-
check_input(
|
13
|
+
def self.query(gem_name)
|
14
|
+
gem_name = gem_name.to_s.gsub(/[^\w\-]+/,'')
|
15
|
+
check_input(gem_name)
|
11
16
|
|
12
|
-
g = Gemline.new(
|
13
|
-
|
17
|
+
g = Gemline.new(gem_name)
|
18
|
+
|
14
19
|
if g.gem_not_found?
|
15
|
-
puts "
|
20
|
+
puts "Ruby gem #{gem_name} was not found on rubygems.org"
|
16
21
|
exit
|
17
22
|
else
|
18
23
|
puts g.gemline
|
@@ -21,8 +26,8 @@ class Gemline
|
|
21
26
|
end
|
22
27
|
|
23
28
|
|
24
|
-
def initialize(
|
25
|
-
@gem =
|
29
|
+
def initialize(gem_name)
|
30
|
+
@gem = gem_name.to_s.gsub(/[^\w\-]+/,'') # Yeah, a little over-defensive.
|
26
31
|
@json = Gemline.get_rubygem_json(@gem)
|
27
32
|
unless gem_not_found?
|
28
33
|
@response = Crack::JSON.parse(@json)
|
@@ -31,28 +36,28 @@ class Gemline
|
|
31
36
|
end
|
32
37
|
|
33
38
|
def gem_not_found?
|
34
|
-
@json.match(/could not be found/)
|
39
|
+
@json.match(/(could not be found|does not exist)/)
|
35
40
|
end
|
36
41
|
|
37
42
|
|
38
43
|
private
|
39
44
|
|
40
|
-
def self.get_rubygem_json(
|
41
|
-
Net::HTTP.get(URI.parse("http://rubygems.org/api/v1/gems/#{
|
45
|
+
def self.get_rubygem_json(gem_name)
|
46
|
+
Net::HTTP.get(URI.parse("http://rubygems.org/api/v1/gems/#{gem_name}.json"))
|
42
47
|
end
|
43
48
|
|
44
|
-
def self.create_gemline(
|
45
|
-
%Q{gem "#{
|
49
|
+
def self.create_gemline(gem_name, version)
|
50
|
+
%Q{gem "#{gem_name}", "~> #{version}"}
|
46
51
|
end
|
47
52
|
|
48
|
-
def self.check_input(
|
49
|
-
if (
|
53
|
+
def self.check_input(gem_name)
|
54
|
+
if (gem_name.empty? || ['-h','--help','help'].include?(gem_name))
|
50
55
|
puts "Usage: gemline [GEM NAME]"
|
51
56
|
puts " Prints a Gemfile require line for a Ruby gem on Rubygems.org"
|
52
57
|
exit
|
53
58
|
end
|
54
59
|
|
55
|
-
# if (['-v','--version'].include?(
|
60
|
+
# if (['-v','--version'].include?(gem_name))
|
56
61
|
# puts "gemline #{Gemline::VERSION}"
|
57
62
|
# exit
|
58
63
|
# end
|
@@ -65,6 +70,8 @@ class Gemline
|
|
65
70
|
puts " Gem line copied to your clipboard. Ready to paste into your Gemfile"
|
66
71
|
end
|
67
72
|
rescue
|
73
|
+
## Yeah, I hate this too. But it does what I want -- silently fail if pbcopy isn't available.
|
74
|
+
## TODO: Use something more reliable and cross-platform.
|
68
75
|
end
|
69
76
|
end
|
70
77
|
|
data/spec/gemline_spec.rb
CHANGED
@@ -4,9 +4,10 @@ describe Gemline do
|
|
4
4
|
|
5
5
|
describe "querying rubygems" do
|
6
6
|
|
7
|
-
before do
|
8
|
-
|
9
|
-
|
7
|
+
before do
|
8
|
+
Dir.glob(File.join(File.dirname(__FILE__),'samples', '*.json')).each do |f|
|
9
|
+
gem_name = $1 if f =~ /\/([\w\-]+).json$/
|
10
|
+
Gemline.stub!(:get_rubygem_json).with(gem_name).and_return(IO.read(f))
|
10
11
|
end
|
11
12
|
end
|
12
13
|
|
@@ -20,6 +21,17 @@ describe Gemline do
|
|
20
21
|
g.gem_not_found?.should be_true
|
21
22
|
g.gemline.should be_nil
|
22
23
|
end
|
24
|
+
|
25
|
+
it "should properly detect a blocked gem name" do
|
26
|
+
g = Gemline.new('yaml')
|
27
|
+
g.gem_not_found?.should be_true
|
28
|
+
g.gemline.should be_nil
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should properly handle funny characters in the returned JSON" do
|
32
|
+
g = Gemline.new('nokogiri')
|
33
|
+
g.gemline.should == %Q{gem "nokogiri", "~> 1.5.5"}
|
34
|
+
end
|
23
35
|
end
|
24
36
|
|
25
37
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
{"name":"nokogiri","downloads":5007271,"version":"1.5.5","version_downloads":350,"authors":"Aaron Patterson, Mike Dalessio, Yoko Harada, Tim Elliott","info":"Nokogiri (\u00e9\u008b\u00b8) is an HTML, XML, SAX, and Reader parser. Among Nokogiri's\nmany features is the ability to search documents via XPath or CSS3 selectors.\n\nXML is like violence - if it doesn\u00e2\u0080\u0099t solve your problems, you are not using\nenough of it.","project_uri":"http://rubygems.org/gems/nokogiri","gem_uri":"http://rubygems.org/gems/nokogiri-1.5.5.gem","homepage_uri":"http://nokogiri.org","wiki_uri":"","documentation_uri":"http://nokogiri.org","mailing_list_uri":"http://groups.google.com/group/nokogiri-talk","source_code_uri":"https://github.com/sparklemotion/nokogiri","bug_tracker_uri":"https://github.com/sparklemotion/nokogiri/issues","dependencies":{"development":[{"name":"hoe","requirements":"~> 2.16"},{"name":"hoe-bundler","requirements":">= 1.1"},{"name":"hoe-debugging","requirements":">= 1.0.3"},{"name":"hoe-gemspec","requirements":">= 1.0"},{"name":"hoe-git","requirements":">= 1.4"},{"name":"mini_portile","requirements":">= 0.2.2"},{"name":"minitest","requirements":"~> 2.2.2"},{"name":"racc","requirements":">= 1.4.6"},{"name":"rake","requirements":">= 0.9"},{"name":"rake-compiler","requirements":"= 0.8.0"},{"name":"rdoc","requirements":"~> 3.10"},{"name":"rexical","requirements":">= 1.0.5"}],"runtime":[]}}
|
@@ -0,0 +1 @@
|
|
1
|
+
This gem does not exist.
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gemline
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-06-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: crack
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,31 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
25
46
|
- !ruby/object:Gem::Dependency
|
26
47
|
name: rspec
|
27
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
28
49
|
none: false
|
29
50
|
requirements:
|
30
51
|
- - ! '>='
|
@@ -32,7 +53,12 @@ dependencies:
|
|
32
53
|
version: 2.7.0
|
33
54
|
type: :development
|
34
55
|
prerelease: false
|
35
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 2.7.0
|
36
62
|
description: Grab the latest Gemfile 'gem' line for a specific Ruby gem
|
37
63
|
email:
|
38
64
|
- joe@joealba.com
|
@@ -42,6 +68,7 @@ extensions: []
|
|
42
68
|
extra_rdoc_files: []
|
43
69
|
files:
|
44
70
|
- .gitignore
|
71
|
+
- .travis.yml
|
45
72
|
- Gemfile
|
46
73
|
- README.rdoc
|
47
74
|
- Rakefile
|
@@ -50,7 +77,9 @@ files:
|
|
50
77
|
- lib/gemline.rb
|
51
78
|
- spec/gemline_spec.rb
|
52
79
|
- spec/samples/doesnotexist.json
|
80
|
+
- spec/samples/nokogiri.json
|
53
81
|
- spec/samples/rails.json
|
82
|
+
- spec/samples/yaml.json
|
54
83
|
- spec/spec_helper.rb
|
55
84
|
homepage: http://github.com/joealba/gemline
|
56
85
|
licenses: []
|
@@ -64,20 +93,28 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
64
93
|
- - ! '>='
|
65
94
|
- !ruby/object:Gem::Version
|
66
95
|
version: '0'
|
96
|
+
segments:
|
97
|
+
- 0
|
98
|
+
hash: -2384583455144954714
|
67
99
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
100
|
none: false
|
69
101
|
requirements:
|
70
102
|
- - ! '>='
|
71
103
|
- !ruby/object:Gem::Version
|
72
104
|
version: '0'
|
105
|
+
segments:
|
106
|
+
- 0
|
107
|
+
hash: -2384583455144954714
|
73
108
|
requirements: []
|
74
109
|
rubyforge_project:
|
75
|
-
rubygems_version: 1.8.
|
110
|
+
rubygems_version: 1.8.24
|
76
111
|
signing_key:
|
77
112
|
specification_version: 3
|
78
113
|
summary: ''
|
79
114
|
test_files:
|
80
115
|
- spec/gemline_spec.rb
|
81
116
|
- spec/samples/doesnotexist.json
|
117
|
+
- spec/samples/nokogiri.json
|
82
118
|
- spec/samples/rails.json
|
119
|
+
- spec/samples/yaml.json
|
83
120
|
- spec/spec_helper.rb
|