simple_poller 0.0.1

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.
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