snoop 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5110d8e59d54d0852a8345496faf7c98a1b8499a
4
- data.tar.gz: 8fa5cda09082e4da2e339e5018aa12b7d216ac39
3
+ metadata.gz: 4cd732ffdcde8dc20c8859e3206b5d3b860e7865
4
+ data.tar.gz: 5ef83ae68a60de3e5ad236b9c6f4bbb757218769
5
5
  SHA512:
6
- metadata.gz: 5981dddcfee4514309c22cc7fb51c0256c3e2452adc5d5b7e3167a56f28cd922176bf4c5d3ba1b1249eabefe93683a72476087ea4d3ff571e5c68ee6bee675d3
7
- data.tar.gz: 9189b8ef3880a7d7a0d14aa20c5f5b82147ff5a2a4d8df23514cf0139f526f5990d9c28fdebfe9f83f1626caccafd08c7494c128f5a5048dca26e85ba4b1e8a0
6
+ metadata.gz: 50552b68abf7e15d0c19b7b5a38e6fd46c13404ba2a79c2833ecec87dd58f761349e0be0c4cf8873c6bcddae31fd5bd0e2c1af42716a6cfc27751432011bd9e4
7
+ data.tar.gz: 1a04911d8ed62afb356a253c87b0b36d6299c073798130042ad3c35f7dc31fcf86efbe98cdd4e460e050a16149692ea04789fdae168496dfec30ad485dd25b40
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- snoop (0.0.1)
4
+ snoop (0.0.2)
5
5
  httparty
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Snoop `wip`
2
- Monitor content for changes and be notified
2
+ Be notified when content changes.
3
+
4
+ Supported snoops:
5
+
6
+ - `HTTP`
3
7
 
4
8
  ## Installation
5
9
 
@@ -1,33 +1,28 @@
1
1
  require 'httparty'
2
2
 
3
3
  module Snoop
4
- class HttpMonitor
4
+ class Http
5
5
  UrlRequiredException = Class.new(StandardError)
6
6
 
7
- attr_reader :url, :notifier, :content, :http_client, :interval
7
+ attr_reader :url, :http_client, :interval, :content
8
8
  attr_accessor :content
9
9
 
10
- def initialize(
11
- url: nil, http_client: HTTParty, notifier: MacOSNotifier.new, interval: 1
12
- )
10
+ def initialize(url: nil, http_client: HTTParty)
13
11
  raise UrlRequiredException if url.nil?
12
+
14
13
  @url = url
15
14
  @http_client = http_client
16
- @notifier = notifier
17
- @interval = interval
18
15
  end
19
16
 
20
- def monitor
21
- while true
22
- notify
23
- sleep interval
17
+ def notify(
18
+ delay: 0, times: 1, while_true: -> { false }, while_false: -> { true }
19
+ )
20
+ while (times -= 1) >= 0 || while_true.call || !while_false.call
21
+ yield content if content_changed?
22
+ sleep delay
24
23
  end
25
24
  end
26
25
 
27
- def notify
28
- notifier.notify if content_changed?
29
- end
30
-
31
26
  def content_changed?
32
27
  old_content = @content
33
28
  @content = fetch_content
@@ -38,7 +33,4 @@ module Snoop
38
33
  http_client.get(url).body
39
34
  end
40
35
  end
41
-
42
- class MacOSNotifier
43
- end
44
36
  end
data/lib/snoop/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Snoop
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
data/lib/snoop.rb CHANGED
@@ -1,2 +1,2 @@
1
1
  require 'snoop/version'
2
- require 'snoop/http_monitor'
2
+ require 'snoop/http'
@@ -0,0 +1,30 @@
1
+ require 'snoop/http'
2
+ require 'support/http_server'
3
+
4
+ describe Snoop::Http do
5
+ with_http_server do |url|
6
+ it 'notifies when content has changed' do
7
+ snoop = described_class.new(url: "#{url}/dynamic-content")
8
+
9
+ notification_count = 0
10
+
11
+ snoop.notify times: 2 do
12
+ notification_count += 1
13
+ end
14
+
15
+ expect(notification_count).to eq 2
16
+ end
17
+
18
+ it 'does not notify when content has not changed' do
19
+ snoop = described_class.new(url: "#{url}/static-content")
20
+
21
+ notification_count = 0
22
+
23
+ snoop.notify times: 2 do
24
+ notification_count += 1
25
+ end
26
+
27
+ expect(notification_count).to eq 1
28
+ end
29
+ end
30
+ end
@@ -1,6 +1,6 @@
1
- require 'snoop/http_monitor'
1
+ require 'snoop/http'
2
2
 
3
- describe Snoop::HttpMonitor do
3
+ describe Snoop::Http do
4
4
  subject { described_class.new(url: url) }
5
5
 
6
6
  let(:url) { 'http://example.com' }
@@ -16,36 +16,69 @@ describe Snoop::HttpMonitor do
16
16
  it 'raises an exception' do
17
17
  expect {
18
18
  subject
19
- }.to raise_error Snoop::HttpMonitor::UrlRequiredException
19
+ }.to raise_error Snoop::Http::UrlRequiredException
20
20
  end
21
21
  end
22
22
  end
23
23
 
24
24
  describe '#notify' do
25
- let(:notifier) { stub }
25
+ let(:content) { 'abc123' }
26
+ let(:content_changed?) { true }
26
27
 
27
28
  before do
28
29
  subject.stub(
29
- content_changed?: content_changed?,
30
- notifier: notifier
30
+ content: content,
31
+ content_changed?: content_changed?
31
32
  )
32
33
  end
33
34
 
34
- context 'when the content changes' do
35
- let(:content_changed?) { true }
35
+ it 'notifies the requested number of times' do
36
+ notification_count = 0
36
37
 
37
- it 'triggers a notification' do
38
- notifier.should_receive(:notify)
39
- subject.notify
38
+ subject.notify times: 5 do
39
+ notification_count += 1
40
40
  end
41
+
42
+ expect(notification_count).to eq 5
43
+ end
44
+
45
+ it 'notifies while an expression is true' do
46
+ notification_count = 0
47
+
48
+ subject.notify while_true: -> { notification_count < 3 } do
49
+ notification_count += 1
50
+ end
51
+
52
+ expect(notification_count).to eq 3
53
+ end
54
+
55
+ it 'notifies while an expression is false' do
56
+ notification_count = 0
57
+
58
+ subject.notify while_false: -> { notification_count > 2 } do
59
+ notification_count += 1
60
+ end
61
+
62
+ expect(notification_count).to eq 3
63
+ end
64
+
65
+ it 'yields the content to the notification block' do
66
+ yielded_content = nil
67
+
68
+ subject.notify { |content| yielded_content = content }
69
+
70
+ expect(yielded_content).to eq content
41
71
  end
42
72
 
43
73
  context 'when the content does not change' do
44
74
  let(:content_changed?) { false }
45
75
 
46
- it 'does not trigger a notification' do
47
- notifier.should_not_receive(:notify)
48
- subject.notify
76
+ it 'does not yield the notification block' do
77
+ yielded = false
78
+
79
+ subject.notify { yielded = true }
80
+
81
+ expect(yielded).to be_false
49
82
  end
50
83
  end
51
84
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: snoop
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Hunt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-04-10 00:00:00.000000000 Z
11
+ date: 2013-04-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -108,12 +108,12 @@ files:
108
108
  - README.md
109
109
  - Rakefile
110
110
  - lib/snoop.rb
111
- - lib/snoop/http_monitor.rb
111
+ - lib/snoop/http.rb
112
112
  - lib/snoop/version.rb
113
113
  - snoop.gemspec
114
- - spec/acceptance/http_monitor_spec.rb
114
+ - spec/acceptance/http_spec.rb
115
115
  - spec/support/http_server.rb
116
- - spec/unit/http_monitor_spec.rb
116
+ - spec/unit/http_spec.rb
117
117
  homepage: https://github.com/chrishunt/snoop
118
118
  licenses:
119
119
  - MIT
@@ -139,6 +139,6 @@ signing_key:
139
139
  specification_version: 4
140
140
  summary: Monitor content for changes and be notified
141
141
  test_files:
142
- - spec/acceptance/http_monitor_spec.rb
142
+ - spec/acceptance/http_spec.rb
143
143
  - spec/support/http_server.rb
144
- - spec/unit/http_monitor_spec.rb
144
+ - spec/unit/http_spec.rb
@@ -1,40 +0,0 @@
1
- require 'snoop/http_monitor'
2
- require 'support/http_server'
3
-
4
- describe Snoop::HttpMonitor do
5
- class TestNotifier
6
- attr_reader :notification_count
7
-
8
- def initialize(notification_count = 0)
9
- @notification_count = notification_count
10
- end
11
-
12
- def notify
13
- @notification_count += 1
14
- end
15
- end
16
-
17
- let(:notifier) { TestNotifier.new }
18
-
19
- with_http_server do |url|
20
- it 'notifies when http content has changed' do
21
- monitor = described_class.new(
22
- url: "#{url}/dynamic-content",
23
- notifier: notifier
24
- )
25
-
26
- 2.times { monitor.notify }
27
- expect(notifier.notification_count).to eq 2
28
- end
29
-
30
- it 'does not notify when http content has not changed' do
31
- monitor = described_class.new(
32
- url: "#{url}/static-content",
33
- notifier: notifier
34
- )
35
-
36
- 2.times { monitor.notify }
37
- expect(notifier.notification_count).to eq 1
38
- end
39
- end
40
- end