dynopoker 1.2.1 → 1.3.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a517653def897da013aac4e959cd295d69ea64f5
4
+ data.tar.gz: a2ea00e6a9c9cffafe6fd2af97df299db5acb876
5
+ SHA512:
6
+ metadata.gz: c4c5b44ff5b5c32a555882349fcd68d4eacae9d24367ab920c3f8d2529ffc368406f03ec98fd71811aba23a57f0b389109f80385876faf033b1d9ac9aef5f222
7
+ data.tar.gz: 5e8d23878eb81398de4658e1fd81aecab76daaaa03ae39b304c4e2e559a321dde80828a06ef9006693c02dfee84eed17fc7e7e10c388849c7168b412cd4bb7e3
@@ -0,0 +1,12 @@
1
+ script:
2
+ - bundle
3
+ rvm:
4
+ - 1.8.7
5
+ - 1.9.2
6
+ - 1.9.3
7
+ - 2.0.0
8
+ - ruby-head
9
+ notifications:
10
+ email:
11
+ on_success: always
12
+ on_failure: always
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- DynoPoker
1
+ DynoPoker [![Build Status](https://travis-ci.org/kubenstein/dynopoker.png?branch=master)](https://travis-ci.org/kubenstein/dynopoker)
2
2
  =============
3
3
 
4
4
  Dynopoker is a gem which prevent your Heroku dyno from falling asleep.
@@ -24,4 +24,8 @@ Add this configuration to your config file:
24
24
  # config.enable = false # default is true
25
25
  # config.poke_frequency = 123 # default is 1800s (30min)
26
26
  end
27
-
27
+
28
+ TODO
29
+ -----
30
+ Dynopoker is already doing what it was designed for. No extra features are needed. Code is very simple and well written.
31
+ I recently added specs but I feel that those specs could be written better. Feel free to contribute.
@@ -15,8 +15,10 @@ Gem::Specification.new do |s|
15
15
 
16
16
  s.files = `git ls-files`.split("\n")
17
17
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
18
  s.require_paths = ["lib"]
20
19
 
21
20
  s.add_dependency "logger"
21
+
22
+ s.add_development_dependency 'rspec', '~> 2.14.1'
23
+ s.add_development_dependency 'webmock', '~> 1.16.0'
22
24
  end
@@ -1,18 +1,23 @@
1
1
  require 'dynopoker/version'
2
2
  require 'open-uri'
3
+ require 'logger'
3
4
 
4
5
  module Dynopoker
5
6
 
6
- def self.configure
7
- Poker.new.tap { |p| yield p }.start!
7
+ def self.configure(poker_factory = Poker, execution_flow = $0)
8
+ poker_factory.new.tap do |p|
9
+ yield p
10
+ p.start! unless execution_flow =~ /rake/
11
+ end
8
12
  end
9
13
 
10
14
  class Poker
11
15
  attr_accessor :enable, :address, :poke_frequency, :logger
16
+ alias_method :enable?, :enable
12
17
 
13
18
  def start!
14
19
  merge_default_options!
15
- start_poking_thread! if should_poke?
20
+ start_poking_thread! if enable?
16
21
  end
17
22
 
18
23
 
@@ -41,12 +46,13 @@ module Dynopoker
41
46
  self.poke_frequency ||= 1800
42
47
  self.logger ||= Logger.new($stdout)
43
48
  self.enable = enable.nil? ? true : enable
44
- raise('Dynopoker: no address provided!') if !address && enable
49
+ raise('Dynopoker: no address provided!') if (enable? && !valid_address?)
45
50
  end
46
51
 
47
- def should_poke?
48
- !address.nil? && enable && !poke_frequency.nil?
52
+ def valid_address?
53
+ address && !address.empty?
49
54
  end
50
55
 
51
56
  end
57
+
52
58
  end
@@ -1,3 +1,3 @@
1
1
  module Dynopoker
2
- VERSION = "1.2.1"
2
+ VERSION = '1.3.2'
3
3
  end
@@ -0,0 +1,47 @@
1
+ #encoding: UTF-8
2
+ require 'spec_helper'
3
+ require 'ostruct'
4
+
5
+
6
+ describe Dynopoker do
7
+
8
+ subject { Dynopoker }
9
+ let(:fake_poker) { Struct.new(:enable, :address, :poke_frequency, :logger, :start!) }
10
+ let(:fake_logger) { OpenStruct.new(fake?: true) }
11
+
12
+ context 'configuration' do
13
+
14
+ it 'should pass config vars during configuration' do
15
+ new_instance_of_poker = subject.configure(fake_poker) do |config|
16
+ config.address = 'http://test.org'
17
+ config.enable = false
18
+ config.poke_frequency = 123
19
+ config.logger = fake_logger
20
+ end
21
+
22
+ new_instance_of_poker.address.should eq 'http://test.org'
23
+ new_instance_of_poker.enable.should be_false
24
+ new_instance_of_poker.poke_frequency.should eq 123
25
+ new_instance_of_poker.logger.should be_fake
26
+ end
27
+
28
+ it 'should pass start poking!' do
29
+ fake_poker.any_instance.should_receive(:start!).once
30
+ subject.configure(fake_poker) {}
31
+ end
32
+
33
+ end
34
+
35
+ context 'asset precompile process' do
36
+ it 'should not start while in asset precompile process' do
37
+ fake_poker.any_instance.should_not_receive(:start!)
38
+ subject.configure(fake_poker, '/bin/rake') {}
39
+ end
40
+
41
+ it 'should start while not in asset precompile process' do
42
+ fake_poker.any_instance.should_receive(:start!).once
43
+ subject.configure(fake_poker, '/bin/rails') {}
44
+ end
45
+ end
46
+
47
+ end
@@ -0,0 +1,91 @@
1
+ #encoding: UTF-8
2
+ require 'spec_helper'
3
+ require 'ostruct'
4
+
5
+
6
+ describe Dynopoker::Poker do
7
+
8
+ context 'default params' do
9
+ it 'should use default params if no other params are given' do
10
+ subject.stub(start_poking_thread!: false, address: 'http://test.org')
11
+ subject.start!
12
+ subject.poke_frequency.should eq 1800
13
+ subject.logger.class.name.should eq 'Logger'
14
+ subject.enable.should be_true
15
+ end
16
+ end
17
+
18
+ context 'no address provided error' do
19
+ it 'should raise exception if address is not given' do
20
+ expect { subject.start! }.to raise_error(Exception, 'Dynopoker: no address provided!')
21
+ end
22
+
23
+ it 'should raise exception if address is empty' do
24
+ subject.stub(address: '')
25
+ expect { subject.start! }.to raise_error(Exception, 'Dynopoker: no address provided!')
26
+ end
27
+
28
+ it 'should NOT raise exception if address is not given but poking is disabled' do
29
+ subject.stub(enable: false)
30
+ expect { subject.start! }.not_to raise_error(Exception, 'Dynopoker: no address provided!')
31
+ end
32
+
33
+ it 'should NOT raise exception if address is empty but poking is disabled' do
34
+ subject.stub(enable: false, address: '')
35
+ expect { subject.start! }.not_to raise_error(Exception, 'Dynopoker: no address provided!')
36
+ end
37
+ end
38
+
39
+ context 'thread' do
40
+ it 'should start thread' do
41
+ subject.stub(address: 'http://test.org')
42
+ Thread.should_receive(:new).once
43
+ subject.start!
44
+ end
45
+ end
46
+
47
+ context 'poking' do
48
+ before do
49
+ #
50
+ # testing while(true) in separate thread can be really tuff task
51
+ # first I skip thread itself by replacing 'start_poking_thread!' method with 'poking'
52
+ def subject.start_poking_thread!; poking end
53
+
54
+ #
55
+ # then I need to break while true loop...
56
+ # I replace sleep method in the loop to raise exception after x calls
57
+ def subject.sleep(_)
58
+ break_after_attempts = 2
59
+ @x ||= 0
60
+ raise('breaking while true loop') if ((@x+=1) == break_after_attempts)
61
+ end
62
+
63
+ #
64
+ # One thing that can not be tested in this configuration is poking frequency
65
+ end
66
+
67
+ it 'should poke address' do
68
+ stub_request(:get, 'http://test.org')
69
+ subject.stub(address: 'http://test.org')
70
+
71
+ expect {
72
+ subject.start!
73
+ }.to raise_error(Exception, 'breaking while true loop')
74
+
75
+ WebMock.should have_requested(:get, 'http://test.org').twice
76
+ end
77
+
78
+ it 'should write to logger error if any exception was raised during poking' do
79
+ fake_logger = double()
80
+ fake_logger.stub(:info)
81
+ fake_logger.stub(:error)
82
+ fake_logger.should_receive(:error).with('Dynopoker: poking error Errno::ENOENT: No such file or directory - INVALID_ADDRESS').twice
83
+
84
+ subject.stub(address: 'INVALID_ADDRESS', logger: fake_logger)
85
+ expect {
86
+ subject.start!
87
+ }.to raise_error(Exception, 'breaking while true loop')
88
+ end
89
+ end
90
+
91
+ end
@@ -0,0 +1,2 @@
1
+ require 'webmock/rspec'
2
+ require 'dynopoker'
metadata CHANGED
@@ -1,32 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dynopoker
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
5
- prerelease:
4
+ version: 1.3.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - kubenstein
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-11-22 00:00:00.000000000 Z
11
+ date: 2014-07-11 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: logger
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 2.14.1
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 2.14.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: webmock
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 1.16.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 1.16.0
30
55
  description: Dynopoker is a gem that will make your ruby based heroku app self pinging
31
56
  system, preventing single dyno from falling asleep
32
57
  email:
@@ -36,34 +61,40 @@ extensions: []
36
61
  extra_rdoc_files: []
37
62
  files:
38
63
  - .gitignore
64
+ - .travis.yml
39
65
  - Gemfile
40
66
  - README.md
41
67
  - Rakefile
42
68
  - dynopoker.gemspec
43
69
  - lib/dynopoker.rb
44
70
  - lib/dynopoker/version.rb
71
+ - spec/dynopoker_spec.rb
72
+ - spec/poker_spec.rb
73
+ - spec/spec_helper.rb
45
74
  homepage: https://github.com/kubenstein/dynopoker
46
75
  licenses: []
76
+ metadata: {}
47
77
  post_install_message:
48
78
  rdoc_options: []
49
79
  require_paths:
50
80
  - lib
51
81
  required_ruby_version: !ruby/object:Gem::Requirement
52
- none: false
53
82
  requirements:
54
- - - ! '>='
83
+ - - '>='
55
84
  - !ruby/object:Gem::Version
56
85
  version: '0'
57
86
  required_rubygems_version: !ruby/object:Gem::Requirement
58
- none: false
59
87
  requirements:
60
- - - ! '>='
88
+ - - '>='
61
89
  - !ruby/object:Gem::Version
62
90
  version: '0'
63
91
  requirements: []
64
92
  rubyforge_project: dynopoker
65
- rubygems_version: 1.8.25
93
+ rubygems_version: 2.1.11
66
94
  signing_key:
67
- specification_version: 3
68
- summary: ! 'Dynopoker: prevent your heroku dyno from falling asleep'
69
- test_files: []
95
+ specification_version: 4
96
+ summary: 'Dynopoker: prevent your heroku dyno from falling asleep'
97
+ test_files:
98
+ - spec/dynopoker_spec.rb
99
+ - spec/poker_spec.rb
100
+ - spec/spec_helper.rb