gemrat 0.1.4 → 0.2.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: 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