domreactor-redglass 0.0.6 → 0.0.7

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.
@@ -6,7 +6,7 @@ require 'domreactor-redglass/version'
6
6
  Gem::Specification.new do |s|
7
7
  s.name = 'domreactor-redglass'
8
8
  s.version = DomReactorRedGlass::VERSION
9
- s.date = '2013-11-14'
9
+ s.date = '2014-04-26'
10
10
  s.summary = 'DomReactor plugin for RedGlass.'
11
11
  s.description = 'Send RedGlass page archives to DomReactor for automated layout analysis.'
12
12
  s.authors = ["Frank O'Hara", "Chris Lamb"]
@@ -3,6 +3,7 @@ require 'domreactor-redglass/archive'
3
3
  require 'domreactor-redglass/archive_location'
4
4
  require 'domreactor-redglass/config'
5
5
  require 'domreactor-redglass/version'
6
+ require 'domreactor-redglass/report_poller'
6
7
 
7
8
  module DomReactorRedGlass
8
9
 
@@ -21,6 +22,12 @@ module DomReactorRedGlass
21
22
  @chain_reaction.post_archives(archive_location)
22
23
  end
23
24
 
25
+ def poll_report(opts={})
26
+ poller = ReportPoller.new(@chain_reaction, opts)
27
+ poller.poll_completion
28
+ poller.report
29
+ end
30
+
24
31
  def parse_json_file(path)
25
32
  json_str = File.open(path, 'rb') {|f| f.read}
26
33
  JSON.parse(json_str, symbolize_names: true)
@@ -23,7 +23,7 @@ module DomReactorRedGlass
23
23
  end
24
24
 
25
25
  def id
26
- id ||= info[:id]
26
+ @id ||= info[:id]
27
27
  end
28
28
 
29
29
  def info
@@ -0,0 +1,55 @@
1
+ require 'timeout'
2
+ require 'rest_client'
3
+
4
+ class ReportPoller
5
+ attr_reader :time_limit
6
+
7
+ def initialize(chain_reaction, opts={})
8
+ @chain_reaction = chain_reaction
9
+ @time_limit = opts[:time_limit] || 60
10
+ end
11
+
12
+ def params
13
+ @params ||= build_params(@chain_reaction)
14
+ end
15
+
16
+ def poll_completion
17
+ Timeout::timeout(@time_limit) {
18
+ percent_complete = @chain_reaction.info[:percent_complete]
19
+ until percent_complete == 100
20
+ percent_complete = fetch_percent_complete
21
+ sleep 1 unless percent_complete == 100
22
+ end
23
+ percent_complete
24
+ }
25
+ end
26
+
27
+ def report
28
+ fetch_report
29
+ end
30
+
31
+ private
32
+
33
+ def build_params(chain_reaction)
34
+ {
35
+ auth_token: chain_reaction.auth_token,
36
+ chain_reaction_id: chain_reaction.id,
37
+ content_type: 'application/json',
38
+ accept: :json
39
+ }
40
+ end
41
+
42
+ def fetch_percent_complete
43
+ fetch_chain_reaction[:percent_complete]
44
+ end
45
+
46
+ def fetch_chain_reaction
47
+ response = RestClient.get(@chain_reaction.chain_reaction_url, { params: params })
48
+ JSON.parse(response, symbolize_names: true)[:chain_reaction]
49
+ end
50
+
51
+ def fetch_report
52
+ response = RestClient.get("#{@chain_reaction.chain_reaction_url}/reports", { params: params })
53
+ JSON.parse(response, symbolize_names: true)[:reports].first
54
+ end
55
+ end
@@ -1,3 +1,3 @@
1
1
  module DomReactorRedGlass
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+ require 'timeout'
3
+
4
+ describe ReportPoller do
5
+ let(:chain_reaction) { DomReactorRedGlass::ChainReaction.new({}) }
6
+ before do
7
+ RestClient.stub(:post) { {chain_reaction: {id: 42, some_info: 'yay'}}.to_json }
8
+ ChainReaction.any_instance.stub(:baseline_browser) { {id: 1} }
9
+ end
10
+
11
+ it 'time limit defaults to 60 seconds' do
12
+ poller = ReportPoller.new(chain_reaction)
13
+ poller.time_limit.should eq 60
14
+ end
15
+
16
+ it 'times out' do
17
+ poller = ReportPoller.new(chain_reaction, { time_limit: 2 })
18
+ chain_reaction.should_receive(:info).and_return({ percent_complete: 0 })
19
+ poller.should_receive(:fetch_percent_complete).at_least(1).times.and_return(1)
20
+ expect{ poller.poll_completion }.to raise_error(TimeoutError)
21
+ end
22
+
23
+ it 'polls until completion' do
24
+ poller = ReportPoller.new(chain_reaction, { time_limit: 2 })
25
+ chain_reaction.should_receive(:info).and_return({ percent_complete: 0 })
26
+ poller.should_receive(:fetch_percent_complete).and_return(100)
27
+ poller.poll_completion.should eq 100
28
+ end
29
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: domreactor-redglass
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-11-14 00:00:00.000000000 Z
13
+ date: 2014-04-26 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rest-client
@@ -161,6 +161,7 @@ files:
161
161
  - lib/domreactor-redglass/archive_location.rb
162
162
  - lib/domreactor-redglass/chain_reaction.rb
163
163
  - lib/domreactor-redglass/config.rb
164
+ - lib/domreactor-redglass/report_poller.rb
164
165
  - lib/domreactor-redglass/version.rb
165
166
  - spec/archive_location_spec.rb
166
167
  - spec/archive_spec.rb
@@ -178,6 +179,7 @@ files:
178
179
  - spec/data/valid_archive/firefox_20.0_1369614644/screenshot.png
179
180
  - spec/data/valid_archive/firefox_20.0_1369614644/source.html
180
181
  - spec/domreactor_spec.rb
182
+ - spec/report_poller_spec.rb
181
183
  - spec/spec_helper.rb
182
184
  homepage: https://github.com/bimech/domreactor-redglass
183
185
  licenses:
@@ -221,4 +223,5 @@ test_files:
221
223
  - spec/data/valid_archive/firefox_20.0_1369614644/screenshot.png
222
224
  - spec/data/valid_archive/firefox_20.0_1369614644/source.html
223
225
  - spec/domreactor_spec.rb
226
+ - spec/report_poller_spec.rb
224
227
  - spec/spec_helper.rb