gemrat 0.1.4 → 0.2.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: 04ef32ec38df44b33b05a9e318141d676a8e26bd
4
- data.tar.gz: 1f9d7451a9b1048e53318e1b559d8eebe71d0db6
3
+ metadata.gz: f6191b82c90172adf9d811210f46778867894adf
4
+ data.tar.gz: db0777e3a8b301013ab59705456ec976d289ef0d
5
5
  SHA512:
6
- metadata.gz: 30e6978b2a687d79744be4ef07e8fce3a95dfa9631778400b6bb3e803966a5ec297124ab939fd90b7c3a5e09ab4a6fb8b4091cf9e13c4ff4f0f1bfe2ff36b21c
7
- data.tar.gz: 3ad14a59964624d2650b61a5df3e9145a1cc7455292d8de9aafacf04b1f2cd316f00e590b23647851bf54c000850c2e951a05c52f30d860b39a5e01a230ec77e
6
+ metadata.gz: 497754fe392b1f63f7a9fd52c6fe9f2449160f9e104ccbb56b7edf4354ee8535bebade51ae28192c06ee205ac16036e4eb7b3b97f9d81f52bfb8cb63c695a69a
7
+ data.tar.gz: 96c08861afbbc3c7bf7263a1f543d7abf55828ad330e0b88c4c63ef73c5bf3efe14bba564c7b9dc0d8e2f20fe483c688d76b45c5cd34d7ddd999719220f8cf4f
data/README.md CHANGED
@@ -46,3 +46,11 @@ And then execute:
46
46
  Or install it yourself as:
47
47
 
48
48
  $ gem install gemrat
49
+
50
+ ## Development
51
+
52
+ Run the test suite with:
53
+
54
+ <pre>
55
+ $ rake
56
+ </pre>
data/Rakefile CHANGED
@@ -1 +1,7 @@
1
1
  require "bundler/gem_tasks"
2
+
3
+ require "rspec/core/rake_task"
4
+
5
+ RSpec::Core::RakeTask.new(:spec)
6
+
7
+ task :default => :spec
data/bin/gemrat CHANGED
@@ -4,6 +4,14 @@ require 'gemrat'
4
4
 
5
5
  include Gemrat
6
6
 
7
- add_gem ARGV[0]
8
- puts "Bundling...".green
9
- `bundle`
7
+ gem_name = ARGV[0]
8
+
9
+ begin
10
+ add_gem gem_name
11
+ puts "Bundling...".green
12
+ `bundle`
13
+ rescue ArgumentError
14
+ puts usage
15
+ rescue GemNotFound
16
+ puts gem_not_found(gem_name).red
17
+ end
@@ -1,3 +1,3 @@
1
1
  module Gemrat
2
- VERSION = "0.1.4"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/gemrat.rb CHANGED
@@ -2,19 +2,64 @@ require "gemrat/version"
2
2
  require "colored"
3
3
 
4
4
  module Gemrat
5
- def fetch_gem name
6
- gems_response = `gem search -r #{name}`
7
- gems_array = gems_response.split(/\n/)
8
- match = gems_array.find { |n| /^#{name} / =~ n }
9
- gem = ("gem " + match).gsub(/[()]/, "'")
10
- gem.gsub(/#{name}/, "'#{name}',")
11
- end
5
+ class GemNotFound < StandardError; end
12
6
 
13
7
  def add_gem(name, gemfile='Gemfile')
14
- gem = fetch_gem name
8
+ raise ArgumentError if name.nil?
9
+
10
+ gem = process name
15
11
  gemfile = File.open(gemfile, 'a')
16
12
  gemfile << "\n#{gem}"
17
13
  gemfile.close
18
14
  puts "#{gem} added to your Gemfile.".green
19
15
  end
16
+
17
+ private
18
+
19
+ def normalize_for_gemfile(rubygems_format)
20
+ gem_name = rubygems_format.split.first
21
+ normalized = ("gem " + rubygems_format).gsub(/[()]/, "'")
22
+ normalized.gsub(/#{gem_name}/, "'#{gem_name}',")
23
+ end
24
+
25
+ def find_exact_match(name)
26
+ find_all(name).reject { |n| /^#{name} / !~ n }.first
27
+ end
28
+
29
+ def find_all(name)
30
+ fetch_all(name).split(/\n/)
31
+ end
32
+
33
+ def fetch_all(name)
34
+ `gem search -r #{name}`
35
+ end
36
+
37
+ def process(name)
38
+ exact_match = find_exact_match name
39
+
40
+ raise GemNotFound if exact_match.nil?
41
+
42
+ normalize_for_gemfile exact_match
43
+ end
44
+
45
+ public
46
+
47
+ def usage
48
+ usage = <<-USAGE
49
+
50
+ Gemrat
51
+
52
+ Add gems to Gemfile from the command line.
53
+
54
+ Usage: gemrat GEM_NAME
55
+
56
+ USAGE
57
+ end
58
+
59
+ def gem_not_found(name)
60
+ message = <<-MESSAGE
61
+
62
+ Unable to find gem '#{name}' on Rubygems. Sorry about that.
63
+ MESSAGE
64
+ end
20
65
  end
data/spec/gemrat_spec.rb CHANGED
@@ -6,10 +6,15 @@ describe Gemrat do
6
6
  test_gemfile.close
7
7
 
8
8
  class DummyClass
9
+ include Gemrat
10
+
11
+ def stubbed_response(*args)
12
+ File.read("./spec/rubygems_response_shim")
13
+ end
14
+ alias_method :fetch_all, :stubbed_response
9
15
  end
10
16
 
11
17
  @dummy_class = DummyClass.new
12
- @dummy_class.extend(Gemrat)
13
18
  end
14
19
 
15
20
  def capture_stdout(&block)
@@ -29,16 +34,28 @@ describe Gemrat do
29
34
 
30
35
  describe "#add_gem" do
31
36
  it "adds lastest gem version to gemfile" do
32
- output = capture_stdout { @dummy_class.add_gem("sinatra", "TestGemfile") }
37
+ output = capture_stdout { @dummy_class.add_gem("sinatra", "TestGemfile") }
33
38
  output.should include("'sinatra', '1.4.3' added to your Gemfile")
34
39
  gemfile_contents = File.open('TestGemfile', 'r').read
35
40
  gemfile_contents.should include("\ngem 'sinatra', '1.4.3'")
36
41
  end
37
- end
38
42
 
39
- describe "#fetch_gem" do
40
- it "returns latest version of gem" do
41
- @dummy_class.fetch_gem("sinatra").should == "gem 'sinatra', '1.4.3'"
43
+ context "when name is not given in arguments" do
44
+ it "should raise ArgumentError" do
45
+ expect { @dummy_class.add_gem }.to raise_error(ArgumentError)
46
+ end
47
+ end
48
+
49
+ context "when gem is not found" do
50
+ before do
51
+ @dummy_class.stub(:find_exact_match)
52
+ end
53
+
54
+ it "raises GemNotFound" do
55
+ expect do
56
+ @dummy_class.add_gem("unexistent_gem", "TestGemfile")
57
+ end.to raise_error(Gemrat::GemNotFound)
58
+ end
42
59
  end
43
60
  end
44
61
  end
@@ -0,0 +1,261 @@
1
+ sinatra (1.4.3)
2
+ sinatra-accept-params (0.1.0)
3
+ sinatra-accept-params-d1plo1d (0.1.1)
4
+ sinatra-activerecord (1.2.2)
5
+ sinatra-advanced-routes (0.5.3)
6
+ sinatra-ajax_only (0.0.1)
7
+ sinatra-any (1.0.0)
8
+ sinatra-api-docs (0.1.1)
9
+ sinatra-arg (0.0.1)
10
+ sinatra-asset-pipeline (0.2.0)
11
+ sinatra-asset-snack (0.1.5)
12
+ sinatra-assetpack (0.2.5)
13
+ sinatra-assetpack-flexible-compression (0.0.1)
14
+ sinatra-assets (0.1.1)
15
+ sinatra-asterisk (0.0.3)
16
+ sinatra-auth (0.0.9)
17
+ sinatra-authentication (0.4.1)
18
+ sinatra-authentication-dmeiz (0.3.2)
19
+ sinatra-authentication-erb (0.0.1)
20
+ sinatra-authentication-gogolok (0.0.5)
21
+ sinatra-authentication-nedludd (0.0.1)
22
+ sinatra-authentication-oran (0.0.1.3)
23
+ sinatra-authorization (1.0.0)
24
+ sinatra-authorize (0.0.2)
25
+ sinatra-auto-reload (0.0.6)
26
+ sinatra-backbone (0.1.1)
27
+ sinatra-base (1.4.0)
28
+ sinatra-basic-auth (0.1.0)
29
+ sinatra-basicauth (0.0.1)
30
+ sinatra-block-html (0.0.4)
31
+ sinatra-blog (0.1.0)
32
+ sinatra-browserid (0.3)
33
+ sinatra-bundles (0.5.3)
34
+ sinatra-cache (0.3.7)
35
+ sinatra-cache-assets (0.0.3)
36
+ sinatra-cacher (1.0.0)
37
+ sinatra-can (0.2)
38
+ sinatra-captcha (0.1.0.0)
39
+ sinatra-cas (0.1.1)
40
+ sinatra-cell (0.1.1)
41
+ sinatra-charter (0.1.6)
42
+ sinatra-chassis (1.1.0)
43
+ sinatra-cigars (0.0.7)
44
+ sinatra-coffee (0.0.3)
45
+ sinatra-cometio (0.5.8)
46
+ sinatra-compass (0.5.0)
47
+ sinatra-config-file (1.0)
48
+ sinatra-content-for (0.1)
49
+ sinatra-content-for2 (0.3)
50
+ sinatra-contrib (1.4.0)
51
+ sinatra-controllers (0.2.3)
52
+ sinatra-cookie_thief (0.1.1)
53
+ sinatra-cqdocs (0.0.4)
54
+ sinatra-croon (0.2.1)
55
+ sinatra-cross_origin (0.2.0)
56
+ sinatra-css (0.1.5)
57
+ sinatra-dalli (0.1.0)
58
+ sinatra-datamapper (0.0.1)
59
+ sinatra-default-templates (1.0.0)
60
+ sinatra-default_charset (0.2.0)
61
+ sinatra-default_parameters (1.0.0)
62
+ sinatra-diet (0.1.0)
63
+ sinatra-diskcache (1.0.1)
64
+ sinatra-disqus (1.1.0)
65
+ sinatra-ditties (0.0.2)
66
+ sinatra-dm (0.1.4)
67
+ sinatra-dm-auth (0.0.1)
68
+ sinatra-doc (0.1.0)
69
+ sinatra-docdsl (0.3.0)
70
+ sinatra-documentation (0.0.2)
71
+ sinatra-doorman (0.1.0)
72
+ sinatra-editable (0.0.3)
73
+ sinatra-effigy (0.0.9)
74
+ sinatra-ember (0.0.2)
75
+ sinatra-env (0.0.2)
76
+ sinatra-erb (0.1.0)
77
+ sinatra-example (1.0)
78
+ sinatra-exceptional (0.0.1)
79
+ sinatra-export (1.0.1)
80
+ sinatra-exstatic-assets (2.0.0)
81
+ sinatra-extension (1.0)
82
+ sinatra-facebook-signed-request (0.1.0)
83
+ sinatra-filler (1.0.0)
84
+ sinatra-filtering_parameters (0.1.1)
85
+ sinatra-flash (0.3.0)
86
+ sinatra-flash-nicer (0.3.2)
87
+ sinatra-formhelpers (0.4.0)
88
+ sinatra-formhelpers-ng (1.7.0)
89
+ sinatra-formkeeper (0.0.7)
90
+ sinatra-geckoboard (0.1.3)
91
+ sinatra-gen (0.4.2)
92
+ sinatra-geoloqi (0.9.4)
93
+ sinatra-ghetto_i18n (0.1.0)
94
+ sinatra-google-auth (1.1.0)
95
+ sinatra-graph (0.1.3)
96
+ sinatra-group-items (0.0.1)
97
+ sinatra-haml (0.1.1)
98
+ sinatra-handlebars (0.0.4)
99
+ sinatra-has_scope (0.1.0)
100
+ sinatra-hashfix (0.1.0)
101
+ sinatra-hat (0.0.5)
102
+ sinatra-head (0.1.2)
103
+ sinatra-helpers (0.2.0)
104
+ sinatra-helpers-env-mode (0.1.0)
105
+ sinatra-helpers-escape (0.1.0)
106
+ sinatra-helpers-http-vary (0.1.0)
107
+ sinatra-i18n (0.1.0)
108
+ sinatra-ie6nomore (0.1.3)
109
+ sinatra-index (0.0.2)
110
+ sinatra-indextank (1.1.0)
111
+ sinatra-initializers (0.1.4)
112
+ sinatra-iphone-views (1.0.0)
113
+ sinatra-js (0.1.5)
114
+ sinatra-jsend (0.1.0)
115
+ sinatra-jsonapi (0.0.3)
116
+ sinatra-jsonp (0.4.2)
117
+ sinatra-kittens (0.0.4)
118
+ sinatra-linkeddata (1.0.0)
119
+ sinatra-linkedin (0.0.1)
120
+ sinatra-logentries (0.0.2)
121
+ sinatra-logger (0.1.1)
122
+ sinatra-mapper (0.1)
123
+ sinatra-mapping (1.2.0)
124
+ sinatra-maruku (1.0.0.2)
125
+ sinatra-memcache (0.1.1)
126
+ sinatra-minify (0.2.3)
127
+ sinatra-mobile-adsense (0.1.1)
128
+ sinatra-mongo (0.1.0)
129
+ sinatra-mongo-config (0.0.1)
130
+ sinatra-mongoid (0.0.2)
131
+ sinatra-mongoid-config (0.1.1)
132
+ sinatra-mongomapper (1.0.2)
133
+ sinatra-mongomatic (0.0.0)
134
+ sinatra-monk (0.0.9)
135
+ sinatra-more-server (0.5.0)
136
+ sinatra-multi-screen (0.0.7)
137
+ sinatra-mustache (0.1.0)
138
+ sinatra-muster (0.0.1)
139
+ sinatra-mvc (0.0.4)
140
+ sinatra-named-routes (0.1.1)
141
+ sinatra-named-routes-subdomains (0.1.7)
142
+ sinatra-named_routes (0.1.1)
143
+ sinatra-namespace (1.0)
144
+ sinatra-newyork (0.1)
145
+ sinatra-opencaptcha (1.0.0)
146
+ sinatra-outputbuffer (0.1.0)
147
+ sinatra-packrat (0.2.2)
148
+ sinatra-pages (1.5.3)
149
+ sinatra-pagin (0.0.3)
150
+ sinatra-paginate (0.1.0)
151
+ sinatra-param (0.1.3)
152
+ sinatra-params-validator (0.0.4)
153
+ sinatra-partial (0.4.0)
154
+ sinatra-path (0.0.0)
155
+ sinatra-promises (0.0.1)
156
+ sinatra-pubsub (0.0.2)
157
+ sinatra-r18n (1.1.5)
158
+ sinatra-rabbit (1.1.6)
159
+ sinatra-rdiscount (1.0.0.6)
160
+ sinatra-redirect-with-flash (0.2.0)
161
+ sinatra-redis (0.3.0)
162
+ sinatra-redis-auth (0.1.1)
163
+ sinatra-reloader (1.0)
164
+ sinatra-request-logger (0.2.2)
165
+ sinatra-resources (0.1.2)
166
+ sinatra-respond_to (0.9.0)
167
+ sinatra-responder (0.0.1)
168
+ sinatra-rest (0.3.3)
169
+ sinatra-rest-addons (1.0.0)
170
+ sinatra-rest-helpers (0.5.2)
171
+ sinatra-restful (0.0.5)
172
+ sinatra-rocketio (0.2.6)
173
+ sinatra-rocketio-linda (0.2.0)
174
+ sinatra-route-group (0.0.0)
175
+ sinatra-route-mapper (0.0.1)
176
+ sinatra-router (0.2.3)
177
+ sinatra-routes (0.1.1)
178
+ sinatra-routing-helpers (0.0.3)
179
+ sinatra-s3 (0.99)
180
+ sinatra-sammy (0.0.1)
181
+ sinatra-scope (0.1.3)
182
+ sinatra-scopes (1.0.0)
183
+ sinatra-security (0.2.1)
184
+ sinatra-seo (0.3.0)
185
+ sinatra-sequel (0.9.0)
186
+ sinatra-session (1.0.0)
187
+ sinatra-session-auth (0.1.1)
188
+ sinatra-sessionography (0.1.1)
189
+ sinatra-settings (0.1.2)
190
+ sinatra-shopify (1.0.0)
191
+ sinatra-simple-assets (0.0.5)
192
+ sinatra-simple-auth (0.5)
193
+ sinatra-simple-authentication (1.0.0)
194
+ sinatra-simple-navigation (3.6.0)
195
+ sinatra-simple-rdiscount (0.0.1)
196
+ sinatra-snap (0.3.2)
197
+ sinatra-spec (1.0.0)
198
+ sinatra-sprockets (0.0.2)
199
+ sinatra-sprockets-chain (0.0.1)
200
+ sinatra-sprockets-ext (0.0.5)
201
+ sinatra-sse (0.1)
202
+ sinatra-static (0.1.1)
203
+ sinatra-static-assets (1.0.4)
204
+ sinatra-static-bp (0.1.3)
205
+ sinatra-statsd-helper (0.2)
206
+ sinatra-subdomain (0.1.2)
207
+ sinatra-subroutes (0.0.1)
208
+ sinatra-sugar (0.5.1)
209
+ sinatra-support (1.2.2)
210
+ sinatra-symphony (0.5.2)
211
+ sinatra-synchrony (0.4.1)
212
+ sinatra-tag-helper (1.1.0)
213
+ sinatra-tag-helpers (0.0.2)
214
+ sinatra-tags (0.1.1)
215
+ sinatra-template (1.3.0)
216
+ sinatra-test-helper (1.0)
217
+ sinatra-tests (0.1.6)
218
+ sinatra-thumbnails (0.1.0)
219
+ sinatra-tinycache (0.1.3)
220
+ sinatra-torrent (0.0.6)
221
+ sinatra-trails (0.0.7)
222
+ sinatra-triforce (0.2.1)
223
+ sinatra-twilio (1.0.0)
224
+ sinatra-twitter-bootstrap (2.3.1.1)
225
+ sinatra-twitter-oauth (0.0.3)
226
+ sinatra-unit (0.1.1)
227
+ sinatra-url (0.0.1)
228
+ sinatra-verbs (0.0.6)
229
+ sinatra-view_helpers (0.1.4)
230
+ sinatra-views (0.4.1)
231
+ sinatra-wardrobe (0.0.3)
232
+ sinatra-websocket (0.3.0)
233
+ sinatra-websocketio (0.3.3)
234
+ sinatra-weixin-robot (0.0.4)
235
+ sinatra-whoami (0.0.1)
236
+ sinatra-xsendfile (0.4.0)
237
+ sinatra-xslview (0.1.1)
238
+ sinatra-zero_clipboard (1.0.0)
239
+ sinatra_ad_auth (0.25.20120401)
240
+ sinatra_app_gen (0.2.1)
241
+ sinatra_asset_packager (0.0.5)
242
+ sinatra_auth_github (0.13.3)
243
+ sinatra_auth_gmail (0.1.1)
244
+ sinatra_autoload (0.0.2)
245
+ sinatra_bootstrap (0.2.0)
246
+ sinatra_cyclist (0.0.2)
247
+ sinatra_debug_console (0.2.0)
248
+ sinatra_fake_webservice (0.9.1)
249
+ sinatra_fedora (1.2)
250
+ sinatra_more (0.3.43)
251
+ sinatra_omniauth (1.2.0)
252
+ sinatra_rake_tasks (0.2.0)
253
+ sinatra_resource (0.4.24)
254
+ sinatra_respond_to (0.3.7)
255
+ sinatra_warden (0.3.2)
256
+ sinatra_with_assets (0.0.2)
257
+ sinatra_wms (0.1.1)
258
+ sinatraband (0.1.6)
259
+ sinatragen (0.0.1)
260
+ sinatralli (0.0.3)
261
+ sinatras-hat (0.1.2)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gemrat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dru Riley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-19 00:00:00.000000000 Z
11
+ date: 2013-06-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colored
@@ -100,6 +100,7 @@ files:
100
100
  - lib/gemrat/version.rb
101
101
  - pkg/gemrat-0.1.2.gem
102
102
  - spec/gemrat_spec.rb
103
+ - spec/rubygems_response_shim
103
104
  - spec/spec_helper.rb
104
105
  homepage: https://github.com/DruRly/gemrat
105
106
  licenses:
@@ -127,4 +128,5 @@ specification_version: 4
127
128
  summary: Add the latest version of a gem to your Gemfile from the command line.
128
129
  test_files:
129
130
  - spec/gemrat_spec.rb
131
+ - spec/rubygems_response_shim
130
132
  - spec/spec_helper.rb