appraiser 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +5 -0
- data/README.md +2 -0
- data/Rakefile +8 -0
- data/appraiser.gemspec +2 -0
- data/lib/appraiser/version.rb +1 -1
- data/lib/rubygems/commands/appraiser_command.rb +23 -12
- data/spec/.travis.yml +4 -0
- data/spec/appraiser_spec.rb +220 -2
- data/spec/spec_helper.rb +1 -0
- metadata +85 -62
data/CHANGELOG
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
Appraiser = a simple rubygems subcommand for Gemfile
|
2
2
|
====================================================
|
3
3
|
|
4
|
+
[![Build Status](http://travis-ci.org/juno/appraiser.png)](http://travis-ci.org/juno/appraiser)
|
5
|
+
|
4
6
|
`appraiser` displays gem information from `./Gemfile`.
|
5
7
|
|
6
8
|
Like this:
|
data/Rakefile
CHANGED
data/appraiser.gemspec
CHANGED
@@ -36,5 +36,7 @@ appraiser installed as a rubygems subcommand.
|
|
36
36
|
s.add_dependency('colored', ['~> 1.2'])
|
37
37
|
s.add_dependency('json')
|
38
38
|
|
39
|
+
s.add_development_dependency('rake', ['~> 0.9'])
|
39
40
|
s.add_development_dependency('rspec', ['~> 2.3'])
|
41
|
+
s.add_development_dependency('webmock', ['~> 1.7'])
|
40
42
|
end
|
data/lib/appraiser/version.rb
CHANGED
@@ -6,13 +6,17 @@ require 'bundler'
|
|
6
6
|
require 'colored'
|
7
7
|
require 'json'
|
8
8
|
require 'open-uri'
|
9
|
+
require 'stringio'
|
9
10
|
|
10
11
|
require 'appraiser/version'
|
11
12
|
|
12
13
|
class Gem::Commands::AppraiserCommand < Gem::Command
|
14
|
+
|
13
15
|
RUBY_GEMS_URL = 'http://rubygems.org/api/v1/gems/%s.json'
|
16
|
+
|
14
17
|
LINE = '-' * 60
|
15
18
|
|
19
|
+
|
16
20
|
def initialize
|
17
21
|
super 'appraiser', 'Display gem information in ./Gemfile'
|
18
22
|
|
@@ -26,14 +30,22 @@ class Gem::Commands::AppraiserCommand < Gem::Command
|
|
26
30
|
end
|
27
31
|
|
28
32
|
def execute
|
33
|
+
process($stdout)
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
# @param [IO] output
|
40
|
+
def process(output)
|
29
41
|
group = (options[:group] || :default).to_sym
|
30
42
|
|
31
43
|
dependencies_for(group).each do |dependency|
|
32
44
|
json = load_json(dependency.name)
|
33
45
|
|
34
46
|
if json.empty?
|
35
|
-
puts dependency.name.green
|
36
|
-
puts "Source : #{dependency.source.to_s.cyan.underline}"
|
47
|
+
output.puts dependency.name.green
|
48
|
+
output.puts "Source : #{dependency.source.to_s.cyan.underline}"
|
37
49
|
else
|
38
50
|
name = json['name']
|
39
51
|
authors = json['authors']
|
@@ -43,20 +55,18 @@ class Gem::Commands::AppraiserCommand < Gem::Command
|
|
43
55
|
src_uri = json['source_code_uri']
|
44
56
|
info = json['info'].split("\n").first.strip
|
45
57
|
|
46
|
-
puts "#{name.green} (by #{authors})"
|
47
|
-
puts "Downloads: #{downloads.blue}"
|
48
|
-
puts "Project : #{project_uri.cyan.underline}" if project_uri
|
49
|
-
puts "Document : #{doc_uri.cyan.underline}" if doc_uri
|
50
|
-
puts "Source : #{src_uri.cyan.underline}" if src_uri
|
51
|
-
puts info
|
58
|
+
output.puts "#{name.green} (by #{authors})"
|
59
|
+
output.puts "Downloads: #{downloads.blue}"
|
60
|
+
output.puts "Project : #{project_uri.cyan.underline}" if project_uri
|
61
|
+
output.puts "Document : #{doc_uri.cyan.underline}" if doc_uri
|
62
|
+
output.puts "Source : #{src_uri.cyan.underline}" if src_uri
|
63
|
+
output.puts info
|
52
64
|
end
|
53
65
|
|
54
|
-
puts LINE
|
66
|
+
output.puts LINE
|
55
67
|
end
|
56
68
|
end
|
57
69
|
|
58
|
-
private
|
59
|
-
|
60
70
|
# @param [String] gem_name
|
61
71
|
# @return [Hash]
|
62
72
|
def load_json(gem_name)
|
@@ -68,7 +78,7 @@ class Gem::Commands::AppraiserCommand < Gem::Command
|
|
68
78
|
# @param [Symbol] group
|
69
79
|
# @return [Array<Bundler::Dependency>]
|
70
80
|
def dependencies_for(group)
|
71
|
-
Bundler.definition.dependencies.select{ |i| i.groups.include? group }
|
81
|
+
Bundler.definition.dependencies.select { |i| i.groups.include? group }
|
72
82
|
end
|
73
83
|
|
74
84
|
# @param [Integer] number
|
@@ -82,4 +92,5 @@ class Gem::Commands::AppraiserCommand < Gem::Command
|
|
82
92
|
rescue
|
83
93
|
number.to_s
|
84
94
|
end
|
95
|
+
|
85
96
|
end
|
data/spec/.travis.yml
ADDED
data/spec/appraiser_spec.rb
CHANGED
@@ -2,6 +2,224 @@
|
|
2
2
|
|
3
3
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
4
4
|
|
5
|
-
describe
|
6
|
-
|
5
|
+
describe Gem::Commands::AppraiserCommand do
|
6
|
+
|
7
|
+
before do
|
8
|
+
@rails_json = <<-EOD
|
9
|
+
{"dependencies":{"runtime":[{"name":"actionmailer","requirements":"= 3.0.9"},{"name":"actionpack","requirements":"= 3.0.9"},{"name":"activerecord","requirements":"= 3.0.9"},{"name":"activeresource","requirements":"= 3.0.9"},{"name":"activesupport","requirements":"= 3.0.9"},{"name":"bundler","requirements":"~> 1.0"},{"name":"railties","requirements":"= 3.0.9"}],"development":[]},"name":"rails","downloads":4977205,"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":306973,"version":"3.0.9","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.0.9.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"}
|
10
|
+
EOD
|
11
|
+
|
12
|
+
@empty_json = '{}'
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "Constants" do
|
16
|
+
describe "RUBY_GEMS_URL" do
|
17
|
+
subject { Gem::Commands::AppraiserCommand::RUBY_GEMS_URL }
|
18
|
+
it { should eq('http://rubygems.org/api/v1/gems/%s.json') }
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "LINE" do
|
22
|
+
subject { Gem::Commands::AppraiserCommand::LINE }
|
23
|
+
it { should eq('-' * 60) }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
# Instance methods
|
29
|
+
|
30
|
+
describe "#usage" do
|
31
|
+
let(:command) { Gem::Commands::AppraiserCommand.new }
|
32
|
+
subject { command.usage }
|
33
|
+
it { should eq('gem appraiser [-g group]') }
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "#execute" do
|
37
|
+
let(:command) { Gem::Commands::AppraiserCommand.new }
|
38
|
+
|
39
|
+
it "call #process with STDOUT as output" do
|
40
|
+
command.should_receive(:process).with($stdout)
|
41
|
+
command.execute
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
# private methods
|
47
|
+
|
48
|
+
describe "#process(output)" do
|
49
|
+
let(:command) { Gem::Commands::AppraiserCommand.new }
|
50
|
+
let(:output) { stub(IO).as_null_object }
|
51
|
+
|
52
|
+
context "response body is not empty json" do
|
53
|
+
before do
|
54
|
+
dependencies = []
|
55
|
+
dependencies << stub(Bundler::Dependency, :groups => [:default], :name => 'rails')
|
56
|
+
dependencies << stub(Bundler::Dependency, :groups => [:test], :name => 'rspec')
|
57
|
+
Bundler.stub_chain(:definition, :dependencies) { dependencies }
|
58
|
+
end
|
59
|
+
|
60
|
+
it "retrieves :default group dependency json from RubyGems API" do
|
61
|
+
stub_request(:get, 'http://rubygems.org/api/v1/gems/rails.json').
|
62
|
+
to_return(:status => 200, :body => @rails_json)
|
63
|
+
command.send(:process, output)
|
64
|
+
a_request(:get, 'http://rubygems.org/api/v1/gems/rails.json').should have_been_made.once
|
65
|
+
end
|
66
|
+
|
67
|
+
it "not retrieves :test group dependency json from RubyGems API" do
|
68
|
+
stub_request(:get, 'http://rubygems.org/api/v1/gems/rails.json').
|
69
|
+
to_return(:status => 200, :body => @rails_json)
|
70
|
+
command.send(:process, output)
|
71
|
+
a_request(:get, 'http://rubygems.org/api/v1/gems/rspec.json').should_not have_been_made
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
context "response body is empty json" do
|
76
|
+
before do
|
77
|
+
@dependency = stub(Bundler::Dependency,
|
78
|
+
:groups => [:default],
|
79
|
+
:name => 'rails',
|
80
|
+
:source => 'git://github.com/tenderlove/nokogiri.git')
|
81
|
+
Bundler.stub_chain(:definition, :dependencies) { [@dependency] }
|
82
|
+
|
83
|
+
stub_request(:get, 'http://rubygems.org/api/v1/gems/rails.json').
|
84
|
+
to_return(:status => 200, :body => @empty_json)
|
85
|
+
end
|
86
|
+
|
87
|
+
it "not raises exception" do
|
88
|
+
expect {
|
89
|
+
command.send(:process, output)
|
90
|
+
}.should_not raise_error
|
91
|
+
end
|
92
|
+
|
93
|
+
it "puts dependency source" do
|
94
|
+
@dependency.should_receive(:source) { 'git://github.com/tenderlove/nokogiri.git' }
|
95
|
+
command.send(:process, output)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe "#load_json(gem_name)" do
|
101
|
+
let(:command) { Gem::Commands::AppraiserCommand.new }
|
102
|
+
let(:gem_name) { 'rails' }
|
103
|
+
|
104
|
+
context "open() raises OpenURI::HTTPError exception" do
|
105
|
+
before do
|
106
|
+
stub_request(:get, 'http://rubygems.org/api/v1/gems/rails.json').
|
107
|
+
to_raise(OpenURI::HTTPError.new('error', stub(StringIO)))
|
108
|
+
end
|
109
|
+
|
110
|
+
subject { command.send(:load_json, gem_name) }
|
111
|
+
it { should be_kind_of(Hash) }
|
112
|
+
it { should be_empty }
|
113
|
+
end
|
114
|
+
|
115
|
+
context "open() returns JSON response" do
|
116
|
+
before do
|
117
|
+
stub_request(:get, 'http://rubygems.org/api/v1/gems/rails.json').
|
118
|
+
to_return(:status => 200, :body => @rails_json)
|
119
|
+
|
120
|
+
@result = command.send(:load_json, gem_name)
|
121
|
+
end
|
122
|
+
|
123
|
+
it "have key 'name'" do
|
124
|
+
@result.should have_key('name')
|
125
|
+
@result['name'].should eq('rails')
|
126
|
+
end
|
127
|
+
|
128
|
+
it "have key 'authors'" do
|
129
|
+
@result.should have_key('authors')
|
130
|
+
@result['authors'].should eq('David Heinemeier Hansson')
|
131
|
+
end
|
132
|
+
|
133
|
+
it "have key 'downloads'" do
|
134
|
+
@result.should have_key('downloads')
|
135
|
+
@result['downloads'].should eq(4977205)
|
136
|
+
end
|
137
|
+
|
138
|
+
it "have key 'project_uri'" do
|
139
|
+
@result.should have_key('project_uri')
|
140
|
+
@result['project_uri'].should eq('http://rubygems.org/gems/rails')
|
141
|
+
end
|
142
|
+
|
143
|
+
it "have key 'documentation_uri'" do
|
144
|
+
@result.should have_key('documentation_uri')
|
145
|
+
@result['documentation_uri'].should eq('http://api.rubyonrails.org')
|
146
|
+
end
|
147
|
+
|
148
|
+
it "have key 'source_code_uri'" do
|
149
|
+
@result.should have_key('source_code_uri')
|
150
|
+
@result['source_code_uri'].should eq('http://github.com/rails/rails')
|
151
|
+
end
|
152
|
+
|
153
|
+
it "have key 'info'" do
|
154
|
+
@result.should have_key('info')
|
155
|
+
@result['info'].should eq("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.")
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
describe "#dependencies_for(group)" do
|
161
|
+
let(:command) { Gem::Commands::AppraiserCommand.new }
|
162
|
+
let(:group) { :development }
|
163
|
+
|
164
|
+
it "should call Bundler.definition.dependencies.select" do
|
165
|
+
dependencies = []
|
166
|
+
dependencies << stub(Bundler::Dependency, :groups => [:default])
|
167
|
+
dependencies << stub(Bundler::Dependency, :groups => [:development])
|
168
|
+
dependencies << stub(Bundler::Dependency, :groups => [:development, :test])
|
169
|
+
Bundler.stub_chain(:definition, :dependencies) { dependencies }
|
170
|
+
|
171
|
+
result = command.send(:dependencies_for, group)
|
172
|
+
result.should have(2).dependencies
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
describe "#number_with_delimiter(number, delimiter = ',', separator = '.')" do
|
177
|
+
let(:command) { Gem::Commands::AppraiserCommand.new }
|
178
|
+
|
179
|
+
context "number is 0" do
|
180
|
+
let(:number) { 0 }
|
181
|
+
subject { command.send(:number_with_delimiter, number) }
|
182
|
+
it { should eq('0') }
|
183
|
+
end
|
184
|
+
|
185
|
+
context "number is 100" do
|
186
|
+
let(:number) { 100 }
|
187
|
+
subject { command.send(:number_with_delimiter, number) }
|
188
|
+
it { should eq('100') }
|
189
|
+
end
|
190
|
+
|
191
|
+
context "number is 1000" do
|
192
|
+
let(:number) { 1000 }
|
193
|
+
subject { command.send(:number_with_delimiter, number) }
|
194
|
+
it { should eq('1,000') }
|
195
|
+
end
|
196
|
+
|
197
|
+
context "number is 10000.99" do
|
198
|
+
let(:number) { 10000.99 }
|
199
|
+
subject { command.send(:number_with_delimiter, number) }
|
200
|
+
it { should eq('10,000.99') }
|
201
|
+
end
|
202
|
+
|
203
|
+
context "number is 1000000" do
|
204
|
+
let(:number) { 1000000 }
|
205
|
+
subject { command.send(:number_with_delimiter, number) }
|
206
|
+
it { should eq('1,000,000') }
|
207
|
+
end
|
208
|
+
|
209
|
+
context "number is 1000000, delimiter is '_'" do
|
210
|
+
let(:number) { 1000000 }
|
211
|
+
let(:delimiter) { '_' }
|
212
|
+
subject { command.send(:number_with_delimiter, number, delimiter) }
|
213
|
+
it { should eq('1_000_000') }
|
214
|
+
end
|
215
|
+
|
216
|
+
context "number is '1000000 00', delimiter is '_', separator is ' '" do
|
217
|
+
let(:number) { 1000000 }
|
218
|
+
let(:delimiter) { '_' }
|
219
|
+
let(:separator) { ' ' }
|
220
|
+
subject { command.send(:number_with_delimiter, number, delimiter, separator) }
|
221
|
+
it { should eq('1_000_000') }
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
7
225
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -4,6 +4,7 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
4
4
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
5
5
|
|
6
6
|
require 'rspec'
|
7
|
+
require 'webmock/rspec'
|
7
8
|
require 'rubygems/commands/appraiser_command'
|
8
9
|
|
9
10
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
metadata
CHANGED
@@ -1,72 +1,90 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: appraiser
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.6
|
4
5
|
prerelease:
|
5
|
-
version: 0.1.5
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Junya Ogura
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
dependencies:
|
16
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-08-16 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
17
15
|
name: bundler
|
18
|
-
|
19
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70340450938180 !ruby/object:Gem::Requirement
|
20
17
|
none: false
|
21
|
-
requirements:
|
18
|
+
requirements:
|
22
19
|
- - ~>
|
23
|
-
- !ruby/object:Gem::Version
|
24
|
-
version:
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.0'
|
25
22
|
type: :runtime
|
26
|
-
version_requirements: *id001
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: colored
|
29
23
|
prerelease: false
|
30
|
-
|
24
|
+
version_requirements: *70340450938180
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: colored
|
27
|
+
requirement: &70340450937280 !ruby/object:Gem::Requirement
|
31
28
|
none: false
|
32
|
-
requirements:
|
29
|
+
requirements:
|
33
30
|
- - ~>
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
version:
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '1.2'
|
36
33
|
type: :runtime
|
37
|
-
version_requirements: *id002
|
38
|
-
- !ruby/object:Gem::Dependency
|
39
|
-
name: json
|
40
34
|
prerelease: false
|
41
|
-
|
35
|
+
version_requirements: *70340450937280
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: json
|
38
|
+
requirement: &70340450936480 !ruby/object:Gem::Requirement
|
42
39
|
none: false
|
43
|
-
requirements:
|
44
|
-
- -
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version:
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
47
44
|
type: :runtime
|
48
|
-
|
49
|
-
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70340450936480
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rake
|
49
|
+
requirement: &70340450935120 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.9'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70340450935120
|
58
|
+
- !ruby/object:Gem::Dependency
|
50
59
|
name: rspec
|
60
|
+
requirement: &70340450934240 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ~>
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '2.3'
|
66
|
+
type: :development
|
51
67
|
prerelease: false
|
52
|
-
|
68
|
+
version_requirements: *70340450934240
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: webmock
|
71
|
+
requirement: &70340450933340 !ruby/object:Gem::Requirement
|
53
72
|
none: false
|
54
|
-
requirements:
|
73
|
+
requirements:
|
55
74
|
- - ~>
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
version:
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '1.7'
|
58
77
|
type: :development
|
59
|
-
|
60
|
-
|
61
|
-
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *70340450933340
|
80
|
+
description: ! '`appraiser` is a rubygems subcommand which displays gem information
|
81
|
+
in `./Gemfile`.'
|
82
|
+
email:
|
62
83
|
- junyaogura@gmail.com
|
63
84
|
executables: []
|
64
|
-
|
65
85
|
extensions: []
|
66
|
-
|
67
86
|
extra_rdoc_files: []
|
68
|
-
|
69
|
-
files:
|
87
|
+
files:
|
70
88
|
- .gitignore
|
71
89
|
- .rspec
|
72
90
|
- CHANGELOG
|
@@ -78,37 +96,42 @@ files:
|
|
78
96
|
- lib/appraiser/version.rb
|
79
97
|
- lib/rubygems/commands/appraiser_command.rb
|
80
98
|
- lib/rubygems_plugin.rb
|
99
|
+
- spec/.travis.yml
|
81
100
|
- spec/appraiser_spec.rb
|
82
101
|
- spec/spec_helper.rb
|
83
|
-
has_rdoc: true
|
84
102
|
homepage: https://github.com/juno/appraiser
|
85
|
-
licenses:
|
103
|
+
licenses:
|
86
104
|
- MIT
|
87
|
-
post_install_message: "\n\
|
88
|
-
|
105
|
+
post_install_message: ! "\nappraiser installed as a rubygems subcommand.\n\n (basic)\n
|
106
|
+
\ $ gem appraiser\n\n (shorthand)\n $ gem a\n\n (\"group\" option)\n $ gem a
|
107
|
+
-g test\n\n"
|
89
108
|
rdoc_options: []
|
90
|
-
|
91
|
-
require_paths:
|
109
|
+
require_paths:
|
92
110
|
- lib
|
93
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
111
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
94
112
|
none: false
|
95
|
-
requirements:
|
96
|
-
- -
|
97
|
-
- !ruby/object:Gem::Version
|
98
|
-
version:
|
99
|
-
|
113
|
+
requirements:
|
114
|
+
- - ! '>='
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
|
+
segments:
|
118
|
+
- 0
|
119
|
+
hash: 2701355711312284477
|
120
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
121
|
none: false
|
101
|
-
requirements:
|
102
|
-
- -
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
version:
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
segments:
|
127
|
+
- 0
|
128
|
+
hash: 2701355711312284477
|
105
129
|
requirements: []
|
106
|
-
|
107
130
|
rubyforge_project:
|
108
|
-
rubygems_version: 1.6
|
131
|
+
rubygems_version: 1.8.6
|
109
132
|
signing_key:
|
110
133
|
specification_version: 3
|
111
|
-
summary: `appraiser` is a simple rubygems subcommand for Gemfile.
|
112
|
-
test_files:
|
134
|
+
summary: ! '`appraiser` is a simple rubygems subcommand for Gemfile.'
|
135
|
+
test_files:
|
113
136
|
- spec/appraiser_spec.rb
|
114
137
|
- spec/spec_helper.rb
|