gem_stream 0.1.1 → 0.1.2
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 +4 -4
- data/Gemfile.lock +7 -1
- data/README.md +2 -2
- data/gem_stream.gemspec +1 -0
- data/lib/gem_stream/configuration.rb +8 -8
- data/lib/gem_stream/follower.rb +23 -15
- data/lib/gem_stream/version.rb +1 -1
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 883133d94b821f25d99587d020e56185d3f9841a53b5cd1d8b486845ceb547c8
|
4
|
+
data.tar.gz: 6c2732efcbe2870a3e47146392437860d4c8bfaa862c557b84db5faf72161962
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 208c3f8239331d9103cf38587039413785b5531480c2e070b0b2ffa9687eb138d3c5288e82ddd46a804c41e8b468812840793bf38c7281e4005a72a60e4b9072
|
7
|
+
data.tar.gz: 4bebd46c64e719871154b6c3b4b6f73a8143b1ac726fcb159ce9b81c93c8061de13d12959dd915160c1a2eef2c5111f1aed8abcbd93bad1c7345ccf479693f8f
|
data/Gemfile.lock
CHANGED
@@ -1,17 +1,22 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
gem_stream (0.1.
|
4
|
+
gem_stream (0.1.2)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
9
|
addressable (2.6.0)
|
10
10
|
public_suffix (>= 2.0.2, < 4.0)
|
11
|
+
coderay (1.1.2)
|
11
12
|
crack (0.4.3)
|
12
13
|
safe_yaml (~> 1.0.0)
|
13
14
|
diff-lcs (1.3)
|
14
15
|
hashdiff (0.4.0)
|
16
|
+
method_source (0.9.2)
|
17
|
+
pry (0.12.2)
|
18
|
+
coderay (~> 1.1.0)
|
19
|
+
method_source (~> 0.9.0)
|
15
20
|
public_suffix (3.1.1)
|
16
21
|
rake (10.5.0)
|
17
22
|
rspec (3.8.0)
|
@@ -41,6 +46,7 @@ PLATFORMS
|
|
41
46
|
DEPENDENCIES
|
42
47
|
bundler (~> 1.16)
|
43
48
|
gem_stream!
|
49
|
+
pry
|
44
50
|
rake (~> 10.0)
|
45
51
|
rspec (~> 3.0)
|
46
52
|
timecop (~> 0.9)
|
data/README.md
CHANGED
@@ -31,8 +31,8 @@ Example:
|
|
31
31
|
|
32
32
|
```ruby
|
33
33
|
GemStream.configure do |c|
|
34
|
-
c.on_version = -> (version) {
|
35
|
-
c.on_synced = -> () {
|
34
|
+
c.on_version = -> (version) { YourVersionHandler.handle(version) }
|
35
|
+
c.on_synced = -> () { YourSyncHandler.handle }
|
36
36
|
end
|
37
37
|
```
|
38
38
|
|
data/gem_stream.gemspec
CHANGED
@@ -22,6 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.require_paths = ["lib"]
|
23
23
|
|
24
24
|
spec.add_development_dependency "bundler", "~> 1.16"
|
25
|
+
spec.add_development_dependency "pry"
|
25
26
|
spec.add_development_dependency "rake", "~> 10.0"
|
26
27
|
spec.add_development_dependency "rspec", "~> 3.0"
|
27
28
|
spec.add_development_dependency "timecop", "~> 0.9"
|
@@ -17,19 +17,19 @@ module GemStream
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
def on_version=(
|
21
|
-
if
|
22
|
-
@on_version =
|
20
|
+
def on_version=(proc)
|
21
|
+
if proc.is_a?(Proc)
|
22
|
+
@on_version = proc
|
23
23
|
else
|
24
|
-
raise ArgumentError, "Please specify a Proc for the on_version
|
24
|
+
raise ArgumentError, "Please specify a Proc for the on_version proc"
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
def on_synced=(
|
29
|
-
if
|
30
|
-
@on_synced =
|
28
|
+
def on_synced=(proc)
|
29
|
+
if proc.is_a?(Proc)
|
30
|
+
@on_synced = proc
|
31
31
|
else
|
32
|
-
raise ArgumentError, "Please specify a Proc for the on_synced
|
32
|
+
raise ArgumentError, "Please specify a Proc for the on_synced proc"
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
data/lib/gem_stream/follower.rb
CHANGED
@@ -4,7 +4,6 @@ require 'net/http'
|
|
4
4
|
|
5
5
|
module GemStream
|
6
6
|
class Follower
|
7
|
-
SYNCED_IF_WITHIN_SECONDS_OF_PRESENT = 10
|
8
7
|
RUBYGEMS_ENDPOINT = 'https://rubygems.org/api/v1/timeframe_versions.json'.freeze
|
9
8
|
MAX_RUBY_GEMS_QUERY_RANGE_IN_SECONDS = 6 * 86400 # It's actually 7 days, but use 6 to be safe
|
10
9
|
|
@@ -12,8 +11,12 @@ module GemStream
|
|
12
11
|
self.new(start_time).follow
|
13
12
|
end
|
14
13
|
|
15
|
-
def initialize(
|
16
|
-
@synced_up_to_time =
|
14
|
+
def initialize(start_time)
|
15
|
+
@synced_up_to_time = start_time
|
16
|
+
@on_version = GemStream.configuration.on_version.dup
|
17
|
+
@on_synced = GemStream.configuration.on_synced.dup
|
18
|
+
@api_call_interval = GemStream.configuration.api_call_interval.dup
|
19
|
+
@keep_streaming = true
|
17
20
|
end
|
18
21
|
|
19
22
|
def follow
|
@@ -28,22 +31,16 @@ module GemStream
|
|
28
31
|
private
|
29
32
|
|
30
33
|
def keep_streaming?
|
31
|
-
|
34
|
+
@keep_streaming
|
32
35
|
end
|
33
36
|
|
34
37
|
def synced
|
35
|
-
|
38
|
+
@on_synced.call()
|
36
39
|
end
|
37
40
|
|
38
41
|
def query_rubygems(page: 1)
|
39
|
-
params = {
|
40
|
-
from: @synced_up_to_time.iso8601,
|
41
|
-
to: (@synced_up_to_time + MAX_RUBY_GEMS_QUERY_RANGE_IN_SECONDS).iso8601,
|
42
|
-
page: page
|
43
|
-
}
|
44
|
-
|
45
42
|
uri = URI(RUBYGEMS_ENDPOINT)
|
46
|
-
uri.query = URI.encode_www_form(
|
43
|
+
uri.query = URI.encode_www_form(query_params(page))
|
47
44
|
response = Net::HTTP.get_response(uri)
|
48
45
|
|
49
46
|
if response.code != '200'
|
@@ -53,13 +50,16 @@ module GemStream
|
|
53
50
|
|
54
51
|
versions = JSON.parse(response.body)
|
55
52
|
|
56
|
-
|
53
|
+
if versions.size == 0
|
54
|
+
@keep_streaming = page == 1
|
55
|
+
return
|
56
|
+
end
|
57
57
|
|
58
58
|
versions.each do |version|
|
59
|
-
|
59
|
+
@on_version.call(version)
|
60
60
|
end
|
61
61
|
|
62
|
-
sleep
|
62
|
+
sleep @api_call_interval
|
63
63
|
query_rubygems(page: page + 1)
|
64
64
|
end
|
65
65
|
|
@@ -69,5 +69,13 @@ module GemStream
|
|
69
69
|
Time.now
|
70
70
|
].min
|
71
71
|
end
|
72
|
+
|
73
|
+
def query_params(page)
|
74
|
+
{
|
75
|
+
from: @synced_up_to_time.iso8601,
|
76
|
+
to: (@synced_up_to_time + MAX_RUBY_GEMS_QUERY_RANGE_IN_SECONDS).iso8601,
|
77
|
+
page: page,
|
78
|
+
}
|
79
|
+
end
|
72
80
|
end
|
73
81
|
end
|
data/lib/gem_stream/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gem_stream
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fletcher Wilkens
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.16'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pry
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rake
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|