gemlock 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
@@ -19,6 +19,11 @@ Gemlock looks at what gems you've specified in your Gemfile, checks the version
19
19
  that that Bundler has set in Gemfile.lock, and lets you know if there's a newer
20
20
  version available.
21
21
 
22
+ If you're using Gemlock in a Rails project, whenever you start your server,
23
+ Gemlock will check for updates. Then, it will check again in 2 weeks or when
24
+ you restart your server, whichever comes first. In the future, both of these
25
+ should be configurable options.
26
+
22
27
  Installation
23
28
  ------------
24
29
 
@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
23
23
  s.add_dependency('rest-client')
24
24
  s.add_dependency('json')
25
25
 
26
- s.add_development_dependency('rspec' , '~> 2.6.0')
26
+ s.add_development_dependency('rspec' , '~> 2.7.0')
27
27
  s.add_development_dependency('mocha' , '~> 0.10.0')
28
28
  s.add_development_dependency('pry' , '>= 0.9.5')
29
29
  s.add_development_dependency('vcr' , '>= 1.11.0')
@@ -26,6 +26,16 @@ module Gemlock
26
26
  locked_gemfile_specs.delete_if { |spec| !gemfile_names.include?(spec.name) }
27
27
  end
28
28
 
29
+ def config
30
+ if defined?(Rails) && File.exists?(Rails.root.join('config', 'gemlock.yml'))
31
+ Rails.root.join('config', 'gemlock.yml')
32
+ end
33
+ end
34
+
35
+ def parsed_config
36
+ YAML.load_file(config) if config
37
+ end
38
+
29
39
  def lookup_version(name)
30
40
  json_hash = JSON.parse(RestClient.get("http://rubygems.org/api/v1/gems/#{name}.json"))
31
41
 
@@ -59,16 +69,6 @@ module Gemlock
59
69
  return_hash
60
70
  end
61
71
 
62
- def config
63
- if defined?(Rails) && File.exists?(Rails.root.join('config', 'gemlock.yml'))
64
- Rails.root.join('config', 'gemlock.yml')
65
- end
66
- end
67
-
68
- def parsed_config
69
- YAML.load_file(config) if config
70
- end
71
-
72
72
  def difference(version_a, version_b)
73
73
  major_a, minor_a, patch_a = version_a.split('.').collect(&:to_i)
74
74
  major_b, minor_b, patch_b = version_b.split('.').collect(&:to_i)
@@ -83,5 +83,33 @@ module Gemlock
83
83
  "none"
84
84
  end
85
85
  end
86
+
87
+ # By default, check for updates every 2 weeks
88
+ def initializer(update_interval = 60*60*24*7*2)
89
+ Thread.new(update_interval) do |interval|
90
+ loop do
91
+ puts "Checking for gem updates..."
92
+ outdated = Gemlock.outdated
93
+ if outdated.empty?
94
+ puts "All gems up to date!"
95
+ else
96
+ outdated.each_pair do |name, versions|
97
+ puts "#{name} is out of date!"
98
+ puts "Installed version: #{versions[:current]}. Latest version: #{versions[:latest]}"
99
+ puts "To update: bundle update #{name}"
100
+ end
101
+ puts ""
102
+ puts "To update all your gems via bundler:"
103
+ puts "bundle update"
104
+ end
105
+ puts "Checking for updates again in #{interval} seconds"
106
+ sleep interval
107
+ end
108
+ end
109
+ end
110
+
111
+ def sleep(length)
112
+ Kernel.sleep(length)
113
+ end
86
114
  end
87
115
  end
@@ -8,20 +8,7 @@ module Gemlock
8
8
  end
9
9
 
10
10
  initializer 'Check for updates using Gemlock' do
11
- puts "Checking for gem updates..."
12
- outdated = Gemlock.outdated
13
- if outdated.empty?
14
- puts "All gems up to date!"
15
- else
16
- outdated.each_pair do |name, versions|
17
- puts "#{name} is out of date!"
18
- puts "Installed version: #{versions[:current]}. Latest version: #{versions[:latest]}"
19
- puts "To update: bundle update #{name}"
20
- end
21
- puts ""
22
- puts "To update all your gems via bundler:"
23
- puts "bundle update"
24
- end
11
+ Gemlock.initializer
25
12
  end
26
13
  end
27
14
  end
@@ -1,3 +1,3 @@
1
1
  module Gemlock
2
- VERSION = "0.0.10"
2
+ VERSION = "0.0.11"
3
3
  end
@@ -153,4 +153,49 @@ describe Gemlock do
153
153
  Gemlock.difference("1.0.0", "1.0.0").should eql "none"
154
154
  end
155
155
  end
156
+
157
+ describe '#initializer' do
158
+ it "makes a thread" do
159
+ Gemlock.stubs(:outdated).returns([])
160
+
161
+ capture_stdout do
162
+ @thread = Gemlock.initializer
163
+
164
+ @thread.class.should eql Thread
165
+ @thread.kill
166
+ end
167
+ end
168
+
169
+ it "checks for updates" do
170
+ Gemlock.expects(:outdated).returns([])
171
+
172
+ capture_stdout do
173
+ @thread = Gemlock.initializer
174
+
175
+ while @thread.status != 'sleep' do
176
+ sleep 0.5
177
+ end
178
+ @thread.kill
179
+ end
180
+ end
181
+
182
+ it "sleeps for the given amount of time" do
183
+ Gemlock.stubs(:outdated).returns([])
184
+ Gemlock.expects(:sleep).with(1).at_least(1)
185
+
186
+ capture_stdout do
187
+ @thread = Gemlock.initializer(1)
188
+ sleep 1
189
+ end
190
+ end
191
+ end
192
+
193
+ def capture_stdout
194
+ io = StringIO.new
195
+ $stdout = io
196
+ yield
197
+ return io
198
+ ensure
199
+ $stdout = STDOUT
200
+ end
156
201
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gemlock
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.11
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,11 +12,11 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2011-10-19 00:00:00.000000000Z
15
+ date: 2011-10-21 00:00:00.000000000Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: rake
19
- requirement: &70330316853880 !ruby/object:Gem::Requirement
19
+ requirement: &70207373857980 !ruby/object:Gem::Requirement
20
20
  none: false
21
21
  requirements:
22
22
  - - ! '>='
@@ -24,10 +24,10 @@ dependencies:
24
24
  version: 0.8.7
25
25
  type: :runtime
26
26
  prerelease: false
27
- version_requirements: *70330316853880
27
+ version_requirements: *70207373857980
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: bundler
30
- requirement: &70330316853380 !ruby/object:Gem::Requirement
30
+ requirement: &70207373857480 !ruby/object:Gem::Requirement
31
31
  none: false
32
32
  requirements:
33
33
  - - ~>
@@ -35,10 +35,10 @@ dependencies:
35
35
  version: 1.0.0
36
36
  type: :runtime
37
37
  prerelease: false
38
- version_requirements: *70330316853380
38
+ version_requirements: *70207373857480
39
39
  - !ruby/object:Gem::Dependency
40
40
  name: rest-client
41
- requirement: &70330316853000 !ruby/object:Gem::Requirement
41
+ requirement: &70207373857080 !ruby/object:Gem::Requirement
42
42
  none: false
43
43
  requirements:
44
44
  - - ! '>='
@@ -46,10 +46,10 @@ dependencies:
46
46
  version: '0'
47
47
  type: :runtime
48
48
  prerelease: false
49
- version_requirements: *70330316853000
49
+ version_requirements: *70207373857080
50
50
  - !ruby/object:Gem::Dependency
51
51
  name: json
52
- requirement: &70330316852540 !ruby/object:Gem::Requirement
52
+ requirement: &70207373856540 !ruby/object:Gem::Requirement
53
53
  none: false
54
54
  requirements:
55
55
  - - ! '>='
@@ -57,21 +57,21 @@ dependencies:
57
57
  version: '0'
58
58
  type: :runtime
59
59
  prerelease: false
60
- version_requirements: *70330316852540
60
+ version_requirements: *70207373856540
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: rspec
63
- requirement: &70330316852040 !ruby/object:Gem::Requirement
63
+ requirement: &70207373856020 !ruby/object:Gem::Requirement
64
64
  none: false
65
65
  requirements:
66
66
  - - ~>
67
67
  - !ruby/object:Gem::Version
68
- version: 2.6.0
68
+ version: 2.7.0
69
69
  type: :development
70
70
  prerelease: false
71
- version_requirements: *70330316852040
71
+ version_requirements: *70207373856020
72
72
  - !ruby/object:Gem::Dependency
73
73
  name: mocha
74
- requirement: &70330316882500 !ruby/object:Gem::Requirement
74
+ requirement: &70207373855460 !ruby/object:Gem::Requirement
75
75
  none: false
76
76
  requirements:
77
77
  - - ~>
@@ -79,10 +79,10 @@ dependencies:
79
79
  version: 0.10.0
80
80
  type: :development
81
81
  prerelease: false
82
- version_requirements: *70330316882500
82
+ version_requirements: *70207373855460
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: pry
85
- requirement: &70330316882040 !ruby/object:Gem::Requirement
85
+ requirement: &70207373854900 !ruby/object:Gem::Requirement
86
86
  none: false
87
87
  requirements:
88
88
  - - ! '>='
@@ -90,10 +90,10 @@ dependencies:
90
90
  version: 0.9.5
91
91
  type: :development
92
92
  prerelease: false
93
- version_requirements: *70330316882040
93
+ version_requirements: *70207373854900
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: vcr
96
- requirement: &70330316881580 !ruby/object:Gem::Requirement
96
+ requirement: &70207373854340 !ruby/object:Gem::Requirement
97
97
  none: false
98
98
  requirements:
99
99
  - - ! '>='
@@ -101,10 +101,10 @@ dependencies:
101
101
  version: 1.11.0
102
102
  type: :development
103
103
  prerelease: false
104
- version_requirements: *70330316881580
104
+ version_requirements: *70207373854340
105
105
  - !ruby/object:Gem::Dependency
106
106
  name: fakeweb
107
- requirement: &70330316881120 !ruby/object:Gem::Requirement
107
+ requirement: &70207373853820 !ruby/object:Gem::Requirement
108
108
  none: false
109
109
  requirements:
110
110
  - - ! '>='
@@ -112,7 +112,7 @@ dependencies:
112
112
  version: 1.3.0
113
113
  type: :development
114
114
  prerelease: false
115
- version_requirements: *70330316881120
115
+ version_requirements: *70207373853820
116
116
  description: When installed, allows a user to check for updates in their Rails application
117
117
  email:
118
118
  - mskalnik@gatech.edu