gemlock 0.0.11 → 0.0.12

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/lib/gemlock.rb CHANGED
@@ -70,8 +70,8 @@ module Gemlock
70
70
  end
71
71
 
72
72
  def difference(version_a, version_b)
73
- major_a, minor_a, patch_a = version_a.split('.').collect(&:to_i)
74
- major_b, minor_b, patch_b = version_b.split('.').collect(&:to_i)
73
+ major_a, minor_a, patch_a = process_version(version_a)
74
+ major_b, minor_b, patch_b = process_version(version_b)
75
75
 
76
76
  if (major_a - major_b).abs > 0
77
77
  "major"
@@ -85,7 +85,8 @@ module Gemlock
85
85
  end
86
86
 
87
87
  # By default, check for updates every 2 weeks
88
- def initializer(update_interval = 60*60*24*7*2)
88
+ def initializer
89
+ update_interval = Gemlock.update_interval
89
90
  Thread.new(update_interval) do |interval|
90
91
  loop do
91
92
  puts "Checking for gem updates..."
@@ -108,6 +109,44 @@ module Gemlock
108
109
  end
109
110
  end
110
111
 
112
+ def update_interval
113
+ if parsed_config
114
+ if interval = parsed_config["interval"][0]
115
+ num_hours = interval.match(/\d*/)[0].to_i
116
+ if interval =~ /hour/
117
+ delay = 60*60
118
+ elsif interval =~ /day/
119
+ delay = 60*60*24
120
+ elsif interval =~ /week/
121
+ delay = 60*60*24*7
122
+ elsif interval =~ /month/
123
+ delay = 60*60*24*30
124
+ end
125
+ if delay && num_hours > 0
126
+ delay *= num_hours
127
+ return delay
128
+ elsif delay
129
+ return delay
130
+ end
131
+ end
132
+ end
133
+ 60*60*24*7 #Seconds in a week
134
+ end
135
+
136
+ private
137
+
138
+ def process_version(version_string)
139
+ version = version_string.split('.').collect(&:to_i)
140
+
141
+ if version.length < 3
142
+ (3 - version.length).times do
143
+ version << 0
144
+ end
145
+ end
146
+
147
+ version
148
+ end
149
+
111
150
  def sleep(length)
112
151
  Kernel.sleep(length)
113
152
  end
@@ -1,3 +1,3 @@
1
1
  module Gemlock
2
- VERSION = "0.0.11"
2
+ VERSION = "0.0.12"
3
3
  end
@@ -2,3 +2,5 @@ email: tester@example.com
2
2
  releases:
3
3
  - major
4
4
  - patch
5
+ interval:
6
+ - 2 weeks
data/spec/gemlock_spec.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Gemlock do
4
- describe "#locked_gemfile_specs" do
4
+ describe ".locked_gemfile_specs" do
5
5
  it "outputs the list of gems & version requirements" do
6
6
  Gemlock.stubs(:lockfile).returns((File.join(File.dirname(__FILE__), 'fixtures', 'Gemfile.lock')))
7
7
 
@@ -16,7 +16,7 @@ describe Gemlock do
16
16
  end
17
17
  end
18
18
 
19
- describe "#lockfile" do
19
+ describe ".lockfile" do
20
20
  it "loads Gemfile.lock from the Rails root if Rails is defined" do
21
21
  module Rails
22
22
  def self.root
@@ -39,7 +39,7 @@ describe Gemlock do
39
39
  end
40
40
  end
41
41
 
42
- describe "#lookup_version" do
42
+ describe ".lookup_version" do
43
43
  use_vcr_cassette
44
44
 
45
45
  it "looks up and return the latest version of a given gem" do
@@ -48,7 +48,7 @@ describe Gemlock do
48
48
  end
49
49
  end
50
50
 
51
- describe "#outdated" do
51
+ describe ".outdated" do
52
52
  use_vcr_cassette
53
53
 
54
54
  before do
@@ -82,7 +82,7 @@ describe Gemlock do
82
82
  end
83
83
  end
84
84
 
85
- describe "#config" do
85
+ describe ".config" do
86
86
  it "loads gemlock.yml from the config directory if Rails is defined" do
87
87
  module Rails
88
88
  def self.root
@@ -116,7 +116,7 @@ describe Gemlock do
116
116
  end
117
117
  end
118
118
 
119
- describe "#parsed_config" do
119
+ describe ".parsed_config" do
120
120
  it "returns nil if the config file is not present" do
121
121
  Gemlock.parsed_config.should be_nil
122
122
  end
@@ -128,11 +128,12 @@ describe Gemlock do
128
128
  end
129
129
  end
130
130
 
131
- describe "#difference" do
131
+ describe ".difference" do
132
132
  it "returns 'major' if there is a major version difference between the two gem versions" do
133
133
  Gemlock.difference("2.0.0", "3.0.0").should eql "major"
134
134
  Gemlock.difference("2.5.10", "3.1.0").should eql "major"
135
135
  Gemlock.difference("3.1.10", "2.5.8").should eql "major"
136
+ Gemlock.difference("3.0", "2.0" ).should eql "major"
136
137
  end
137
138
 
138
139
  it "returns 'minor' if there is a minor version difference between the two gem versions" do
@@ -154,7 +155,7 @@ describe Gemlock do
154
155
  end
155
156
  end
156
157
 
157
- describe '#initializer' do
158
+ describe '.initializer' do
158
159
  it "makes a thread" do
159
160
  Gemlock.stubs(:outdated).returns([])
160
161
 
@@ -178,15 +179,42 @@ describe Gemlock do
178
179
  @thread.kill
179
180
  end
180
181
  end
182
+ end
181
183
 
182
- it "sleeps for the given amount of time" do
183
- Gemlock.stubs(:outdated).returns([])
184
- Gemlock.expects(:sleep).with(1).at_least(1)
184
+ describe ".process_version" do
185
+ it "splits a version string into an array" do
186
+ Gemlock.send(:process_version, "3.0.0").class.should eql Array
187
+ end
185
188
 
186
- capture_stdout do
187
- @thread = Gemlock.initializer(1)
188
- sleep 1
189
- end
189
+ it "appends missing zeros to the end of a version if not given" do
190
+ Gemlock.send(:process_version, "3").should eql [3, 0, 0]
191
+ Gemlock.send(:process_version, "3.0").should eql [3, 0, 0]
192
+ end
193
+ end
194
+
195
+ describe ".update_interval" do
196
+ it "returns the number of seconds in a week if config_file is not present, or interval is not specified" do
197
+ Gemlock.update_interval.should eql 60*60*24*7
198
+ end
199
+
200
+ it "returns the number of seconds until the next number of hours as given" do
201
+ Gemlock.stubs(:parsed_config).returns({"interval" => ["8 hours"]})
202
+ Gemlock.update_interval.should eql 60*60*8
203
+ end
204
+
205
+ it "returns the number of seconds until the next number of days as given" do
206
+ Gemlock.stubs(:parsed_config).returns({"interval" => ["4 days"]})
207
+ Gemlock.update_interval.should eql 60*60*24*4
208
+ end
209
+
210
+ it "returns the number of seconds until the next number of weeks as given" do
211
+ Gemlock.stubs(:parsed_config).returns({"interval" => ["2 weeks"]})
212
+ Gemlock.update_interval.should eql 60*60*24*7*2
213
+ end
214
+
215
+ it "returns the number of seconds unil the next number of months as given" do
216
+ Gemlock.stubs(:parsed_config).returns({"interval" => ["3 months"]})
217
+ Gemlock.update_interval.should eql 60*60*24*30*3
190
218
  end
191
219
  end
192
220
 
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.11
4
+ version: 0.0.12
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-21 00:00:00.000000000Z
15
+ date: 2011-10-24 00:00:00.000000000Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: rake
19
- requirement: &70207373857980 !ruby/object:Gem::Requirement
19
+ requirement: &70118047777300 !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: *70207373857980
27
+ version_requirements: *70118047777300
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: bundler
30
- requirement: &70207373857480 !ruby/object:Gem::Requirement
30
+ requirement: &70118047776780 !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: *70207373857480
38
+ version_requirements: *70118047776780
39
39
  - !ruby/object:Gem::Dependency
40
40
  name: rest-client
41
- requirement: &70207373857080 !ruby/object:Gem::Requirement
41
+ requirement: &70118047776400 !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: *70207373857080
49
+ version_requirements: *70118047776400
50
50
  - !ruby/object:Gem::Dependency
51
51
  name: json
52
- requirement: &70207373856540 !ruby/object:Gem::Requirement
52
+ requirement: &70118047775940 !ruby/object:Gem::Requirement
53
53
  none: false
54
54
  requirements:
55
55
  - - ! '>='
@@ -57,10 +57,10 @@ dependencies:
57
57
  version: '0'
58
58
  type: :runtime
59
59
  prerelease: false
60
- version_requirements: *70207373856540
60
+ version_requirements: *70118047775940
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: rspec
63
- requirement: &70207373856020 !ruby/object:Gem::Requirement
63
+ requirement: &70118047775420 !ruby/object:Gem::Requirement
64
64
  none: false
65
65
  requirements:
66
66
  - - ~>
@@ -68,10 +68,10 @@ dependencies:
68
68
  version: 2.7.0
69
69
  type: :development
70
70
  prerelease: false
71
- version_requirements: *70207373856020
71
+ version_requirements: *70118047775420
72
72
  - !ruby/object:Gem::Dependency
73
73
  name: mocha
74
- requirement: &70207373855460 !ruby/object:Gem::Requirement
74
+ requirement: &70118047774880 !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: *70207373855460
82
+ version_requirements: *70118047774880
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: pry
85
- requirement: &70207373854900 !ruby/object:Gem::Requirement
85
+ requirement: &70118047774260 !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: *70207373854900
93
+ version_requirements: *70118047774260
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: vcr
96
- requirement: &70207373854340 !ruby/object:Gem::Requirement
96
+ requirement: &70118047771980 !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: *70207373854340
104
+ version_requirements: *70118047771980
105
105
  - !ruby/object:Gem::Dependency
106
106
  name: fakeweb
107
- requirement: &70207373853820 !ruby/object:Gem::Requirement
107
+ requirement: &70118047770800 !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: *70207373853820
115
+ version_requirements: *70118047770800
116
116
  description: When installed, allows a user to check for updates in their Rails application
117
117
  email:
118
118
  - mskalnik@gatech.edu