simple_poller 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ *.DS_Store
6
+ .bundle
7
+ /.idea
8
+ .rvmrc
9
+ public/javascripts
10
+ spec/javascripts/*.js
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in simple_poller.gemspec
4
+ gemspec
data/Guardfile ADDED
@@ -0,0 +1,5 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard 'coffeescript', :input => 'app/assets/javascripts', :output => 'public/javascripts'
5
+ guard 'coffeescript', :input => 'spec/coffeescripts', :output => 'spec/javascripts'
data/README.md ADDED
@@ -0,0 +1,25 @@
1
+ ## Simple Poller
2
+
3
+ ### Introduction
4
+
5
+ Here goes introduction
6
+
7
+ ### Installation
8
+
9
+ Here goes installation
10
+
11
+ ### Contributing
12
+
13
+ All contributions are welcomed! :)
14
+
15
+ In order to install the gem for development you should:
16
+
17
+ - git clone the repository
18
+ - create a gemset and run bundle
19
+ - execute guard to compile all the coffeescript into javascript -> bundle exec guard
20
+ - Add jquery 1.9 to public directory
21
+ - execute jasmine to run the tests -> bundle exec rake jasmine (visit localhost:8888)
22
+
23
+
24
+
25
+
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ begin
4
+ require 'jasmine'
5
+ load 'jasmine/tasks/jasmine.rake'
6
+ rescue LoadError
7
+ task :jasmine do
8
+ abort "Jasmine is not available. In order to run jasmine, you must: (sudo) gem install jasmine"
9
+ end
10
+ end
@@ -0,0 +1,19 @@
1
+ #***** TURBOLINKS COMPATIBILITY **************
2
+
3
+ #$(window).bind('page:fetch', function () {
4
+ # stop_all_pollers();
5
+ #});
6
+
7
+ #***** END TURBOLINKS COMPATIBILITY **************
8
+
9
+ #Global Clocks Array
10
+ window.active_pollers = []
11
+
12
+ window.stop_all_pollers = ->
13
+ for poller in window.active_pollers
14
+ clearInterval(poller.clock_id)
15
+ window.active_pollers = []
16
+
17
+
18
+
19
+
@@ -0,0 +1,16 @@
1
+ class window.ResourceLoader
2
+
3
+ constructor: (request_url, resource) ->
4
+ @request_url = request_url
5
+ @resource = resource
6
+
7
+ load: ->
8
+ that = @
9
+ $.ajax
10
+ url: this.request_url
11
+ type: 'GET'
12
+ dataType: 'JSON'
13
+ success: (data) ->
14
+ that.resource.load_callback(data)
15
+ error: ->
16
+ #TODO Manage error
@@ -0,0 +1,32 @@
1
+ class window.SimplePoller
2
+
3
+ constructor: (resource_loader, timeout) ->
4
+ @resource_loader = resource_loader
5
+ @timeout = timeout
6
+ @clock_id = null
7
+
8
+ start: ->
9
+ @clock_id = @poll()
10
+ @add_poller_globally()
11
+
12
+ stop: ->
13
+ clearInterval(@clock_id)
14
+
15
+ update_timeout: (timeout) ->
16
+ clearInterval(@clock_id)
17
+ @timeout = timeout
18
+ @start()
19
+
20
+ # ------- Private -------
21
+
22
+ poll: ->
23
+ that = @
24
+ return setInterval(->
25
+ that.resource_loader.load()
26
+ , @timeout)
27
+
28
+ add_poller_globally: ->
29
+ window.active_pollers.push(@) if window.active_pollers
30
+
31
+
32
+
@@ -0,0 +1,8 @@
1
+ require "simple_poller/version"
2
+
3
+ module SimplePoller
4
+ module Rails
5
+ class Engine < ::Rails::Engine
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ module SimplePoller
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "simple_poller/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "simple_poller"
7
+ s.version = SimplePoller::VERSION
8
+ s.authors = ["jd-erreape"]
9
+ s.email = ["juandediosherrero@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Write a gem summary}
12
+ s.description = %q{Write a gem description}
13
+
14
+ s.rubyforge_project = "simple_poller"
15
+
16
+ s.files = `git ls-files`.split("\n")
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
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+ s.add_development_dependency 'guard'
23
+ s.add_development_dependency 'guard-coffeescript'
24
+ s.add_development_dependency 'jasmine'
25
+ # s.add_runtime_dependency "rest-client"
26
+ s.add_dependency 'railties', '~> 3.1'
27
+
28
+ end
@@ -0,0 +1,27 @@
1
+ describe 'Polling Manager Functions', ->
2
+
3
+ beforeEach ->
4
+ @resource_loader_1 = jasmine.createSpyObj('resource_loader',['load'])
5
+ @resource_loader_2 = jasmine.createSpyObj('resource_loader',['load'])
6
+ @timeout = 500
7
+ jasmine.Clock.useMock();
8
+ @simple_poller_1 = new SimplePoller(@resource_loader_1, @timeout)
9
+ @simple_poller_2 = new SimplePoller(@resource_loader_2, @timeout)
10
+
11
+ it 'can delete all the pollers', ->
12
+ @simple_poller_1.start()
13
+ @simple_poller_2.start()
14
+ expect(window.active_pollers.length).toBe(2)
15
+ window.stop_all_pollers()
16
+ expect(window.active_pollers.length).toBe(0)
17
+
18
+ it 'can stop all the pollers', ->
19
+ @simple_poller_1.start()
20
+ @simple_poller_2.start()
21
+ jasmine.Clock.tick(@timeout+1)
22
+ expect(@resource_loader_1.load.callCount).toBe(1)
23
+ expect(@resource_loader_2.load.callCount).toBe(1)
24
+ window.stop_all_pollers()
25
+ jasmine.Clock.tick(@timeout+1)
26
+ expect(@resource_loader_1.load.callCount).toBe(1)
27
+ expect(@resource_loader_2.load.callCount).toBe(1)
@@ -0,0 +1,17 @@
1
+ describe 'ResourceLoader', ->
2
+
3
+ beforeEach ->
4
+ that = @
5
+ @fakeData = {a: 1, b: 2, c: 3};
6
+ @fakeUrl = 'http://www.test.com/ajax'
7
+ spyOn($, "ajax").andCallFake( (e) ->
8
+ e.success(that.fakeData)
9
+ )
10
+
11
+ it 'perform an ajax request for a json and load a resource', ->
12
+ @resource = jasmine.createSpyObj('resource',['load_callback'])
13
+ @resource_loader = new ResourceLoader(@fakeUrl, @resource)
14
+ @resource_loader.load();
15
+ expect(@resource.load_callback).toHaveBeenCalledWith(@fakeData)
16
+
17
+
@@ -0,0 +1,66 @@
1
+ describe 'A SimplePoller', ->
2
+
3
+ beforeEach ->
4
+ @resource_loader = jasmine.createSpyObj('resource_loader',['load'])
5
+ @timeout = 500
6
+ jasmine.Clock.useMock();
7
+ @simple_clock = new SimplePoller(@resource_loader, @timeout)
8
+
9
+ it 'will load a resource given a timeout', ->
10
+ @simple_clock.start()
11
+ expect(@resource_loader.load).not.toHaveBeenCalled()
12
+ jasmine.Clock.tick((@timeout*2)+1)
13
+ expect(@resource_loader.load.callCount).toBe(2)
14
+
15
+ it 'will stop the load', ->
16
+ @simple_clock.start()
17
+ jasmine.Clock.tick(@timeout+1)
18
+ expect(@resource_loader.load.callCount).toBe(1)
19
+ @simple_clock.stop()
20
+ jasmine.Clock.tick(@timeout+1)
21
+ expect(@resource_loader.load.callCount).toBe(1)
22
+
23
+ it 'will update the timeout', ->
24
+ @simple_clock.start()
25
+ jasmine.Clock.tick(@timeout+1)
26
+ expect(@resource_loader.load.callCount).toBe(1)
27
+ @simple_clock.update_timeout(@timeout/2)
28
+ jasmine.Clock.tick(@timeout)
29
+ expect(@resource_loader.load.callCount).toBe(3)
30
+
31
+ describe 'Two SimplePollers', ->
32
+
33
+ beforeEach ->
34
+ @resource_loader_1 = jasmine.createSpyObj('resource_loader',['load'])
35
+ @resource_loader_2 = jasmine.createSpyObj('resource_loader',['load'])
36
+ @timeout = 500
37
+ jasmine.Clock.useMock();
38
+ @simple_poller_1 = new SimplePoller(@resource_loader_1, @timeout)
39
+ @simple_poller_2 = new SimplePoller(@resource_loader_2, @timeout)
40
+
41
+ it 'will start independently', ->
42
+ @simple_poller_1.start()
43
+ @simple_poller_2.start()
44
+ jasmine.Clock.tick(@timeout+1)
45
+ expect(@resource_loader_1.load.callCount).toBe(1)
46
+ expect(@resource_loader_2.load.callCount).toBe(1)
47
+
48
+ it 'will stop independently', ->
49
+ @simple_poller_1.start()
50
+ jasmine.Clock.tick(@timeout+1)
51
+ expect(@resource_loader_1.load.callCount).toBe(1)
52
+ expect(@resource_loader_2.load).not.toHaveBeenCalled()
53
+ @simple_poller_1.stop()
54
+ @simple_poller_2.start()
55
+ jasmine.Clock.tick(@timeout+1)
56
+ expect(@resource_loader_1.load.callCount).toBe(1)
57
+ expect(@resource_loader_2.load.callCount).toBe(1)
58
+
59
+ it 'will update timeouts independently', ->
60
+ @simple_poller_1.update_timeout(@timeout/2)
61
+ @simple_poller_2.start()
62
+ jasmine.Clock.tick(@timeout+1)
63
+ expect(@resource_loader_1.load.callCount).toBe(2)
64
+ expect(@resource_loader_2.load.callCount).toBe(1)
65
+
66
+
@@ -0,0 +1,9 @@
1
+ beforeEach(function() {
2
+ this.addMatchers({
3
+ toBePlaying: function(expectedSong) {
4
+ var player = this.actual;
5
+ return player.currentlyPlayingSong === expectedSong &&
6
+ player.isPlaying;
7
+ }
8
+ });
9
+ });
@@ -0,0 +1,88 @@
1
+ # src_files
2
+ #
3
+ # Return an array of filepaths relative to src_dir to include before jasmine specs.
4
+ # Default: []
5
+ #
6
+ # EXAMPLE:
7
+ #
8
+ # src_files:
9
+ # - lib/source1.js
10
+ # - lib/source2.js
11
+ # - dist/**/*.js
12
+ #
13
+ src_files:
14
+ - public/javascripts/**/*.js
15
+
16
+ # stylesheets
17
+ #
18
+ # Return an array of stylesheet filepaths relative to src_dir to include before jasmine specs.
19
+ # Default: []
20
+ #
21
+ # EXAMPLE:
22
+ #
23
+ # stylesheets:
24
+ # - css/style.css
25
+ # - stylesheets/*.css
26
+ #
27
+ stylesheets:
28
+
29
+ # helpers
30
+ #
31
+ # Return an array of filepaths relative to spec_dir to include before jasmine specs.
32
+ # Default: ["helpers/**/*.js"]
33
+ #
34
+ # EXAMPLE:
35
+ #
36
+ # helpers:
37
+ # - helpers/**/*.js
38
+ #
39
+ helpers:
40
+ - 'helpers/**/*.js'
41
+ # spec_files
42
+ #
43
+ # Return an array of filepaths relative to spec_dir to include.
44
+ # Default: ["**/*[sS]pec.js"]
45
+ #
46
+ # EXAMPLE:
47
+ #
48
+ # spec_files:
49
+ # - **/*[sS]pec.js
50
+ #
51
+ spec_files:
52
+ - '**/*[sS]pec.js'
53
+
54
+ # src_dir
55
+ #
56
+ # Source directory path. Your src_files must be returned relative to this path. Will use root if left blank.
57
+ # Default: project root
58
+ #
59
+ # EXAMPLE:
60
+ #
61
+ # src_dir: public
62
+ #
63
+ src_dir:
64
+
65
+ # spec_dir
66
+ #
67
+ # Spec directory path. Your spec_files must be returned relative to this path.
68
+ # Default: spec/javascripts
69
+ #
70
+ # EXAMPLE:
71
+ #
72
+ # spec_dir: spec/javascripts
73
+ #
74
+ spec_dir:
75
+
76
+ # spec_helper
77
+ #
78
+ # Ruby file that Jasmine server will require before starting.
79
+ # Returned relative to your root path
80
+ # Default spec/support/jasmine_helper.rb
81
+ #
82
+ # EXAMPLE:
83
+ #
84
+ # spec_helper: spec/support/jasmine_helper.rb
85
+ #
86
+ spec_helper: spec/support/jasmine_helper.rb
87
+
88
+
@@ -0,0 +1,11 @@
1
+ #Use this file to set/override Jasmine configuration options
2
+ #You can remove it if you don't need it.
3
+ #This file is loaded *after* jasmine.yml is interpreted.
4
+ #
5
+ #Example: using a different boot file.
6
+ #Jasmine.configure do |config|
7
+ # config.boot_dir = '/absolute/path/to/boot_dir'
8
+ # config.boot_files = lambda { ['/absolute/path/to/boot_dir/file.js'] }
9
+ #end
10
+ #
11
+
metadata ADDED
@@ -0,0 +1,114 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: simple_poller
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - jd-erreape
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-05-11 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: guard
16
+ requirement: &70171192964980 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70171192964980
25
+ - !ruby/object:Gem::Dependency
26
+ name: guard-coffeescript
27
+ requirement: &70171192964360 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70171192964360
36
+ - !ruby/object:Gem::Dependency
37
+ name: jasmine
38
+ requirement: &70171192963380 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70171192963380
47
+ - !ruby/object:Gem::Dependency
48
+ name: railties
49
+ requirement: &70171192962780 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '3.1'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *70171192962780
58
+ description: Write a gem description
59
+ email:
60
+ - juandediosherrero@gmail.com
61
+ executables: []
62
+ extensions: []
63
+ extra_rdoc_files: []
64
+ files:
65
+ - .gitignore
66
+ - Gemfile
67
+ - Guardfile
68
+ - README.md
69
+ - Rakefile
70
+ - app/assets/javascripts/polling_manager.js.coffee
71
+ - app/assets/javascripts/resource_loader.js.coffee
72
+ - app/assets/javascripts/simple_poller.js.coffee
73
+ - lib/simple_poller.rb
74
+ - lib/simple_poller/version.rb
75
+ - simple_poller.gemspec
76
+ - spec/coffeescripts/polling_manager_spec.js.coffee
77
+ - spec/coffeescripts/resource_loader_spec.js.coffee
78
+ - spec/coffeescripts/simple_poller_spec.js.coffee
79
+ - spec/javascripts/helpers/SpecHelper.js
80
+ - spec/javascripts/resource_loader_spec.js
81
+ - spec/javascripts/support/jasmine.yml
82
+ - spec/javascripts/support/jasmine_helper.rb
83
+ homepage: ''
84
+ licenses: []
85
+ post_install_message:
86
+ rdoc_options: []
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ! '>='
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ requirements: []
102
+ rubyforge_project: simple_poller
103
+ rubygems_version: 1.8.10
104
+ signing_key:
105
+ specification_version: 3
106
+ summary: Write a gem summary
107
+ test_files:
108
+ - spec/coffeescripts/polling_manager_spec.js.coffee
109
+ - spec/coffeescripts/resource_loader_spec.js.coffee
110
+ - spec/coffeescripts/simple_poller_spec.js.coffee
111
+ - spec/javascripts/helpers/SpecHelper.js
112
+ - spec/javascripts/resource_loader_spec.js
113
+ - spec/javascripts/support/jasmine.yml
114
+ - spec/javascripts/support/jasmine_helper.rb