gemline 0.0.3 → 0.0.4
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/gemline.gemspec +4 -3
- data/lib/gemline.rb +53 -17
- data/spec/gemline_spec.rb +25 -0
- data/spec/samples/doesnotexist.json +2 -0
- data/spec/samples/rails.json +1 -0
- data/spec/spec_helper.rb +13 -0
- metadata +25 -6
data/gemline.gemspec
CHANGED
@@ -7,13 +7,14 @@ Gem::Specification.new do |gem|
|
|
7
7
|
gem.summary = %q{}
|
8
8
|
gem.homepage = "http://github.com/joealba/gemline"
|
9
9
|
|
10
|
-
gem.executables
|
10
|
+
gem.executables = ['gemline']
|
11
11
|
gem.files = `git ls-files`.split("\n")
|
12
12
|
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
13
13
|
gem.name = "gemline"
|
14
14
|
gem.require_paths = ["lib"]
|
15
|
-
|
15
|
+
|
16
|
+
gem.version = '0.0.4'
|
16
17
|
|
17
18
|
gem.add_dependency('crack')
|
18
|
-
|
19
|
+
gem.add_development_dependency(%q<rspec>, [">= 2.7.0"])
|
19
20
|
end
|
data/lib/gemline.rb
CHANGED
@@ -1,34 +1,70 @@
|
|
1
1
|
require 'crack/json'
|
2
2
|
require 'net/http'
|
3
3
|
|
4
|
+
|
4
5
|
class Gemline
|
6
|
+
attr_accessor :gem, :gemline, :json, :response
|
5
7
|
|
6
8
|
def self.query(gem)
|
7
9
|
gem = gem.to_s.gsub(/[^\w\-]+/,'')
|
8
|
-
|
9
|
-
puts "Usage: gemline [GEM NAME]"
|
10
|
-
puts " Prints a Gemfile require line for a Ruby gem on Rubygems.org"
|
11
|
-
exit
|
12
|
-
end
|
13
|
-
|
14
|
-
doc = Net::HTTP.get(URI.parse("http://rubygems.org/api/v1/gems/#{gem}.json"))
|
10
|
+
check_input(gem)
|
15
11
|
|
16
|
-
|
12
|
+
g = Gemline.new(gem)
|
13
|
+
|
14
|
+
if g.gem_not_found?
|
17
15
|
puts "Rubygem #{gem} was not found on rubygems.org"
|
18
16
|
exit
|
19
17
|
else
|
20
|
-
|
21
|
-
gemline
|
18
|
+
puts g.gemline
|
19
|
+
copy_to_clipboard(g.gemline)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
def initialize(gem)
|
25
|
+
@gem = gem.to_s.gsub(/[^\w\-]+/,'') # Yeah, a little over-defensive.
|
26
|
+
@json = Gemline.get_rubygem_json(@gem)
|
27
|
+
unless gem_not_found?
|
28
|
+
@response = Crack::JSON.parse(@json)
|
29
|
+
@gemline = Gemline.create_gemline(@gem, response['version'])
|
30
|
+
end
|
31
|
+
end
|
22
32
|
|
23
|
-
|
33
|
+
def gem_not_found?
|
34
|
+
@json.match(/could not be found/)
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def self.get_rubygem_json(gem)
|
41
|
+
Net::HTTP.get(URI.parse("http://rubygems.org/api/v1/gems/#{gem}.json"))
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.create_gemline(gem, version)
|
45
|
+
%Q{gem "#{gem}", "~> #{version}"}
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.check_input(gem)
|
49
|
+
if (gem.empty? || ['-h','--help','help'].include?(gem))
|
50
|
+
puts "Usage: gemline [GEM NAME]"
|
51
|
+
puts " Prints a Gemfile require line for a Ruby gem on Rubygems.org"
|
52
|
+
exit
|
53
|
+
end
|
54
|
+
|
55
|
+
# if (['-v','--version'].include?(gem))
|
56
|
+
# puts "gemline #{Gemline::VERSION}"
|
57
|
+
# exit
|
58
|
+
# end
|
59
|
+
end
|
24
60
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
rescue
|
61
|
+
def self.copy_to_clipboard(gemline)
|
62
|
+
begin
|
63
|
+
if clipboard = IO.popen('pbcopy', 'r+')
|
64
|
+
clipboard.puts gemline
|
65
|
+
puts " Gem line copied to your clipboard. Ready to paste into your Gemfile"
|
31
66
|
end
|
67
|
+
rescue
|
32
68
|
end
|
33
69
|
end
|
34
70
|
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Gemline do
|
4
|
+
|
5
|
+
describe "querying rubygems" do
|
6
|
+
|
7
|
+
before do
|
8
|
+
['rails','doesnotexist'].each do |arg|
|
9
|
+
Gemline.stub!(:get_rubygem_json).with(arg).and_return(IO.read(File.join(File.dirname(__FILE__),'samples',"#{arg}.json")))
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should be able to parse the version out of a good json string" do
|
14
|
+
g = Gemline.new('rails')
|
15
|
+
g.gemline.should == %Q{gem "rails", "~> 3.1.1"}
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should whine when the gem you are querying does not exist" do
|
19
|
+
g = Gemline.new('doesnotexist')
|
20
|
+
g.gem_not_found?.should be_true
|
21
|
+
g.gemline.should be_nil
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
{"dependencies":{"runtime":[{"name":"actionmailer","requirements":"= 3.1.1"},{"name":"actionpack","requirements":"= 3.1.1"},{"name":"activerecord","requirements":"= 3.1.1"},{"name":"activeresource","requirements":"= 3.1.1"},{"name":"activesupport","requirements":"= 3.1.1"},{"name":"bundler","requirements":"~> 1.0"},{"name":"railties","requirements":"= 3.1.1"}],"development":[]},"name":"rails","downloads":6177950,"info":"Ruby on Rails is a full-stack web framework optimized for programmer happiness and sustainable productivity. It encourages beautiful code by favoring convention over configuration.","version_downloads":176339,"version":"3.1.1","homepage_uri":"http://www.rubyonrails.org","bug_tracker_uri":"http://rails.lighthouseapp.com/projects/8994-ruby-on-rails","source_code_uri":"http://github.com/rails/rails","gem_uri":"http://rubygems.org/gems/rails-3.1.1.gem","project_uri":"http://rubygems.org/gems/rails","authors":"David Heinemeier Hansson","mailing_list_uri":"http://groups.google.com/group/rubyonrails-talk","documentation_uri":"http://api.rubyonrails.org","wiki_uri":"http://wiki.rubyonrails.org"}
|
data/spec/spec_helper.rb
ADDED
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.0.4
|
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: 2011-
|
12
|
+
date: 2011-11-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: crack
|
16
|
-
requirement: &
|
16
|
+
requirement: &70298176333640 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,18 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70298176333640
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rspec
|
27
|
+
requirement: &70298176333100 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 2.7.0
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70298176333100
|
25
36
|
description: Grab the latest Gemfile 'gem' line for a specific Ruby gem
|
26
37
|
email:
|
27
38
|
- joe@joealba.com
|
@@ -37,6 +48,10 @@ files:
|
|
37
48
|
- bin/gemline
|
38
49
|
- gemline.gemspec
|
39
50
|
- lib/gemline.rb
|
51
|
+
- spec/gemline_spec.rb
|
52
|
+
- spec/samples/doesnotexist.json
|
53
|
+
- spec/samples/rails.json
|
54
|
+
- spec/spec_helper.rb
|
40
55
|
homepage: http://github.com/joealba/gemline
|
41
56
|
licenses: []
|
42
57
|
post_install_message:
|
@@ -57,8 +72,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
57
72
|
version: '0'
|
58
73
|
requirements: []
|
59
74
|
rubyforge_project:
|
60
|
-
rubygems_version: 1.8.
|
75
|
+
rubygems_version: 1.8.10
|
61
76
|
signing_key:
|
62
77
|
specification_version: 3
|
63
78
|
summary: ''
|
64
|
-
test_files:
|
79
|
+
test_files:
|
80
|
+
- spec/gemline_spec.rb
|
81
|
+
- spec/samples/doesnotexist.json
|
82
|
+
- spec/samples/rails.json
|
83
|
+
- spec/spec_helper.rb
|