opal-pusher 0.1.0

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d40afbbb64eb993531724868b477c1e47fbb6da8
4
+ data.tar.gz: 525c37dabe776a93ea678f00874ff6f2b11f625c
5
+ SHA512:
6
+ metadata.gz: ad4636965c0bdf6fe9816ddaf5a5e8b948312ad11d015916b2fe1b08edbd4d64b950e928a8311b3c4e6c944d5c0721f47c47e4e22bd4ed820a06d2203783a81d
7
+ data.tar.gz: de3b3af4d03d20ab47cf5d318f101ac1fa73ce805605c38c79677aead2e1027e940908c3214b98f89c8d21ca0f610a20d21b6e70e54fbc60f2ffa9e691956106
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in opal-pusher.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,58 @@
1
+ # Opal-Pusher
2
+
3
+ Opal-Pusher is a set of Ruby bindings for the Pusher API.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'opal-pusher'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install opal-pusher
20
+
21
+ ## Usage
22
+
23
+ You'll need to pass your Pusher API key into your front-end app somehow. In Rails apps, I usually use the `gon` gem for this:
24
+
25
+ ```ruby
26
+ gon.push pusher_api_key: ENV.fetch('PUSHER_API_KEY')
27
+ ```
28
+
29
+ Once you have that accessible from the front-end, you can open up a Pusher connection in your Opal app like this:
30
+
31
+ ```ruby
32
+ require 'pusher' # Load this library
33
+
34
+ pusher = Pusher.new(`gon.pusher_api_key`)
35
+ channel = pusher.subscribe("my-pusher-channel")
36
+ channel.bind "my-pusher-event" do |data|
37
+ puts data # data is a hash
38
+ end
39
+ ```
40
+
41
+ I've been using this to set the attributes of models in Clearwater apps:
42
+
43
+ ```ruby
44
+ foo_channel.bind 'update' do |data|
45
+ FooRepository[data[:id]].set_attributes data
46
+ App.render # Rerender the app with new data
47
+ end
48
+ ```
49
+
50
+ ## Contributing
51
+
52
+ 1. Fork it ( https://github.com/jgaskins/opal-pusher/fork )
53
+ 2. Branch it (`git checkout -b brand-new-thing`)
54
+ 3. Hack it
55
+ 4. Save it
56
+ 5. Commit it (`git commit -am 'Do the thing'`)
57
+ 6. Push it (`git push origin brand-new-thing`)
58
+ 7. Pull-request it
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/setup ADDED
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,10 @@
1
+ require 'opal'
2
+ require "opal/pusher/version"
3
+
4
+ module Opal
5
+ module Pusher
6
+ # Your code goes here...
7
+ end
8
+ end
9
+
10
+ Opal.append_path File.expand_path(File.join('..', '..', '..', 'opal'), __FILE__)
@@ -0,0 +1,5 @@
1
+ module Opal
2
+ module Pusher
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'opal/pusher/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "opal-pusher"
8
+ spec.version = Opal::Pusher::VERSION
9
+ spec.authors = ["Jamie Gaskins"]
10
+ spec.email = ["jgaskins@gmail.com"]
11
+
12
+ spec.summary = %q{Opal bindings for the Pusher JS API}
13
+ spec.homepage = "https://github.com/jgaskins/opal-pusher"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
16
+ spec.bindir = "exe"
17
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_development_dependency "bundler", "~> 1.9"
21
+ spec.add_development_dependency "rake", "~> 10.0"
22
+
23
+ spec.add_runtime_dependency "opal", "~> 0.7"
24
+ end
data/opal/pusher.rb ADDED
@@ -0,0 +1,27 @@
1
+ class Pusher
2
+ def initialize(api_key)
3
+ if `!window.Pusher`
4
+ raise NotImplementedError, 'Pusher is not yet loaded. Make sure you load the Pusher JS library from the Pusher site before trying to instantiate it from your Opal app.'
5
+ end
6
+
7
+ @pusher = `new Pusher(api_key)`
8
+ end
9
+
10
+ def subscribe channel
11
+ Channel.new(`#@pusher.subscribe(channel)`)
12
+ end
13
+
14
+ class Channel
15
+ def initialize channel
16
+ @channel = channel
17
+ end
18
+
19
+ def bind event
20
+ handler = proc do |data|
21
+ yield Hash.new(data) if block_given?
22
+ end
23
+ `#@channel.bind(event, handler)`
24
+ end
25
+ end
26
+ end
27
+
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: opal-pusher
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Jamie Gaskins
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-05-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.9'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.9'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: opal
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.7'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.7'
55
+ description:
56
+ email:
57
+ - jgaskins@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - Gemfile
64
+ - README.md
65
+ - Rakefile
66
+ - bin/setup
67
+ - lib/opal/pusher.rb
68
+ - lib/opal/pusher/version.rb
69
+ - opal-pusher.gemspec
70
+ - opal/pusher.rb
71
+ homepage: https://github.com/jgaskins/opal-pusher
72
+ licenses: []
73
+ metadata: {}
74
+ post_install_message:
75
+ rdoc_options: []
76
+ require_paths:
77
+ - lib
78
+ required_ruby_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ requirements: []
89
+ rubyforge_project:
90
+ rubygems_version: 2.4.6
91
+ signing_key:
92
+ specification_version: 4
93
+ summary: Opal bindings for the Pusher JS API
94
+ test_files: []