boxcar_api 1.0.2 → 1.2.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.
- data/Manifest +1 -2
- data/README.mdown +46 -0
- data/Rakefile +90 -2
- data/lib/boxcar_api.rb +47 -72
- data/spec/boxcar_api_spec.rb +4 -0
- data/spec/provider_spec.rb +63 -0
- data/spec/settings.yml.sample +7 -0
- data/spec/spec_helper.rb +19 -0
- metadata +63 -53
- data.tar.gz.sig +0 -2
- data/README.rdoc +0 -12
- data/boxcar_api.gemspec +0 -38
- data/examples/send_as_provider.rb +0 -81
- data/examples/send_to_yourself.rb +0 -28
- metadata.gz.sig +0 -2
data/Manifest
CHANGED
data/README.mdown
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
boxcar_api
|
2
|
+
=================
|
3
|
+
|
4
|
+
|
5
|
+
Release Notes
|
6
|
+
----------
|
7
|
+
**Version 1.2**
|
8
|
+
|
9
|
+
Updated to support new API features.
|
10
|
+
|
11
|
+
|
12
|
+
The Boxcar API Gem
|
13
|
+
-----------------
|
14
|
+
boxcar_api is an easy way to add Boxcar notifications to your application.
|
15
|
+
|
16
|
+
Getting Started
|
17
|
+
-----------------
|
18
|
+
First, you'll need to create a provider [here](http://boxcar.io/site/providers). We'll give you a provider key and a provider secret. Once you have those, you can get started:
|
19
|
+
|
20
|
+
provider = BoxcarAPI::Provider.new('your_key', 'your_secret')
|
21
|
+
|
22
|
+
Subscribe a Boxcar user to your service:
|
23
|
+
|
24
|
+
provider.subscribe "user@example.com"
|
25
|
+
|
26
|
+
Then send that user a notification:
|
27
|
+
|
28
|
+
provider.notify("user@example.com", "Your product has shipped!")
|
29
|
+
|
30
|
+
You can also send a group of users a notification:
|
31
|
+
|
32
|
+
users = ["user1@example.com", "user2@example.com"]
|
33
|
+
provider.batch_notify(users, "Your account has been upgraded.")
|
34
|
+
|
35
|
+
Or reach all of your subscribers with a broadcast:
|
36
|
+
|
37
|
+
provider.broadcast "Maintenance has begun. We expect to be back up 15 minutes."
|
38
|
+
|
39
|
+
Want to know more? Check out our [API docs](http://boxcar.io/help/api/providers) and the [examples](https://github.com/boxcar/boxcar_api/blob/master/examples/send_as_provider.rb) for all the details.
|
40
|
+
|
41
|
+
|
42
|
+
Copyright
|
43
|
+
-----
|
44
|
+
|
45
|
+
Copyright (c) 2010 Boxcar. MIT Licensed.
|
46
|
+
|
data/Rakefile
CHANGED
@@ -1,8 +1,13 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'rake'
|
3
3
|
require 'echoe'
|
4
|
+
require 'rspec/core/rake_task'
|
4
5
|
|
5
|
-
|
6
|
+
RSpec::Core::RakeTask.new :spec do |t|
|
7
|
+
t.rspec_opts = %w(-fp --color)
|
8
|
+
end
|
9
|
+
|
10
|
+
Echoe.new('boxcar_api', '1.2.0') do |p|
|
6
11
|
p.description = "A simple way to send notifications to yourself, or your users through Boxcar."
|
7
12
|
p.url = "http://github.com/boxcar/boxcar_api"
|
8
13
|
p.author = "Jonathan George"
|
@@ -10,4 +15,87 @@ Echoe.new('boxcar_api', '1.0.2') do |p|
|
|
10
15
|
p.ignore_pattern = ["tmp/*", "script/*"]
|
11
16
|
p.development_dependencies = ["httparty"]
|
12
17
|
p.runtime_dependencies = ["httparty"]
|
13
|
-
end
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
require "rubygems"
|
22
|
+
require "rubygems/package_task"
|
23
|
+
require "rdoc/task"
|
24
|
+
|
25
|
+
require "rspec"
|
26
|
+
require "rspec/core/rake_task"
|
27
|
+
RSpec::Core::RakeTask.new do |t|
|
28
|
+
t.rspec_opts = %w(--format documentation --colour)
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
task :default => ["spec"]
|
33
|
+
|
34
|
+
# This builds the actual gem. For details of what all these options
|
35
|
+
# mean, and other ones you can add, check the documentation here:
|
36
|
+
#
|
37
|
+
# http://rubygems.org/read/chapter/20
|
38
|
+
#
|
39
|
+
spec = Gem::Specification.new do |s|
|
40
|
+
|
41
|
+
# Change these as appropriate
|
42
|
+
s.name = "boxcar_api"
|
43
|
+
s.version = "1.2.0"
|
44
|
+
s.summary = "A simple way to send notifications to yourself or your users through Boxcar."
|
45
|
+
s.author = "Kevin Griffin"
|
46
|
+
s.email = "kevin@boxcar.io"
|
47
|
+
s.homepage = "http://boxcar.io"
|
48
|
+
|
49
|
+
s.has_rdoc = false
|
50
|
+
s.extra_rdoc_files = %w(README.mdown)
|
51
|
+
s.rdoc_options = %w(--main README.mdown)
|
52
|
+
|
53
|
+
# Add any extra files to include in the gem
|
54
|
+
s.files = %w(init.rb LICENSE Manifest Rakefile README.mdown) + Dir.glob("{spec,lib}/**/*")
|
55
|
+
s.require_paths = ["lib"]
|
56
|
+
|
57
|
+
# If you want to depend on other gems, add them here, along with any
|
58
|
+
# relevant versions
|
59
|
+
s.add_dependency("httparty", ">= 0.6.1")
|
60
|
+
|
61
|
+
# If your tests use any gems, include them here
|
62
|
+
s.add_development_dependency("rspec")
|
63
|
+
s.add_development_dependency("yaml")
|
64
|
+
s.add_development_dependency("ephemeral_response")
|
65
|
+
end
|
66
|
+
|
67
|
+
# This task actually builds the gem. We also regenerate a static
|
68
|
+
# .gemspec file, which is useful if something (i.e. GitHub) will
|
69
|
+
# be automatically building a gem for this project. If you're not
|
70
|
+
# using GitHub, edit as appropriate.
|
71
|
+
#
|
72
|
+
# To publish your gem online, install the 'gemcutter' gem; Read more
|
73
|
+
# about that here: http://gemcutter.org/pages/gem_docs
|
74
|
+
Gem::PackageTask.new(spec) do |pkg|
|
75
|
+
pkg.gem_spec = spec
|
76
|
+
end
|
77
|
+
|
78
|
+
desc "Build the gemspec file #{spec.name}.gemspec"
|
79
|
+
task :gemspec do
|
80
|
+
file = File.dirname(__FILE__) + "/#{spec.name}.gemspec"
|
81
|
+
File.open(file, "w") {|f| f << spec.to_ruby }
|
82
|
+
end
|
83
|
+
|
84
|
+
# If you don't want to generate the .gemspec file, just remove this line. Reasons
|
85
|
+
# why you might want to generate a gemspec:
|
86
|
+
# - using bundler with a git source
|
87
|
+
# - building the gem without rake (i.e. gem build blah.gemspec)
|
88
|
+
# - maybe others?
|
89
|
+
task :package => :gemspec
|
90
|
+
|
91
|
+
# Generate documentation
|
92
|
+
RDoc::Task.new do |rd|
|
93
|
+
rd.main = "README.mdown"
|
94
|
+
rd.rdoc_files.include("README.mdown", "lib/**/*.rb")
|
95
|
+
rd.rdoc_dir = "rdoc"
|
96
|
+
end
|
97
|
+
|
98
|
+
desc 'Clear out RDoc and generated packages'
|
99
|
+
task :clean => [:clobber_rdoc, :clobber_package] do
|
100
|
+
rm "#{spec.name}.gemspec"
|
101
|
+
end
|
data/lib/boxcar_api.rb
CHANGED
@@ -1,99 +1,74 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'httparty'
|
3
|
-
require 'digest/md5'
|
4
3
|
|
5
4
|
module BoxcarAPI
|
6
5
|
|
7
|
-
|
6
|
+
# For Providers - http://boxcar.io/help/api/providers
|
8
7
|
class Provider
|
9
8
|
include HTTParty
|
10
|
-
attr_accessor :provider_key, :provider_secret
|
11
|
-
|
12
|
-
def initialize(provider_key, provider_secret)
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
9
|
+
attr_accessor :provider_key, :provider_secret, :screen_name
|
10
|
+
|
11
|
+
def initialize(provider_key ={}, provider_secret = nil, screen_name = nil)
|
12
|
+
if provider_key.kind_of? Hash
|
13
|
+
url = provider_key[:url]
|
14
|
+
url.chop! if url.end_with? '/'
|
15
|
+
|
16
|
+
@provider_key = url.match(/https?:\/\/\S+\/(.*)$/)[1]
|
17
|
+
self.class.base_uri(url + "/notifications")
|
18
|
+
else
|
19
|
+
@provider_key = provider_key
|
20
|
+
@provider_secret = provider_secret
|
21
|
+
@screen_name = screen_name
|
22
|
+
self.class.base_uri "https://boxcar.io/devices/providers/#{@provider_key}/notifications"
|
23
|
+
end
|
17
24
|
end
|
18
25
|
|
19
26
|
def subscribe(email)
|
20
|
-
|
21
|
-
self.class.post("/subscribe",
|
27
|
+
params = { :body => { :email => email } }
|
28
|
+
self.class.post("/subscribe", params)
|
22
29
|
end
|
23
30
|
|
24
|
-
def broadcast(message,
|
25
|
-
|
31
|
+
def broadcast(message, options = {:from_screen_name => screen_name, :from_remote_service_id => nil, :source_url => nil, :icon_url => nil})
|
32
|
+
params = { :body => { :secret => provider_secret,
|
26
33
|
:notification => {
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
}
|
34
|
+
:message => message,
|
35
|
+
:from_screen_name => options[:from_screen_name],
|
36
|
+
:from_remote_service_id => options[:from_remote_service_id],
|
37
|
+
:source_url => options[:source_url],
|
38
|
+
:icon_url => options[:icon_url]
|
39
|
+
}
|
34
40
|
}}
|
35
41
|
|
36
|
-
self.class.post("/broadcast",
|
42
|
+
self.class.post("/broadcast", params)
|
37
43
|
end
|
38
44
|
|
39
|
-
def notify(email, message,
|
40
|
-
|
45
|
+
def notify(email, message, options = {:from_screen_name => screen_name, :from_remote_service_id => nil, :source_url => nil, :icon_url => nil})
|
46
|
+
params = { :body => { :email => email,
|
41
47
|
:notification => {
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
}
|
48
|
+
:message => message,
|
49
|
+
:from_screen_name => options[:from_screen_name],
|
50
|
+
:from_remote_service_id => options[:from_remote_service_id],
|
51
|
+
:source_url => options[:source_url],
|
52
|
+
:icon_url => options[:icon_url]
|
53
|
+
}
|
49
54
|
}}
|
50
55
|
|
51
|
-
self.class.post("/",
|
56
|
+
self.class.post("/", params)
|
52
57
|
end
|
53
|
-
|
54
|
-
def
|
55
|
-
|
58
|
+
|
59
|
+
def batch_notify(emails, message, options = {:from_screen_name => screen_name, :from_remote_service_id => nil, :source_url => nil, :icon_url => nil})
|
60
|
+
params = { :body => { :emails => emails,
|
56
61
|
:notification => {
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
}
|
62
|
+
:message => message,
|
63
|
+
:from_screen_name => options[:from_screen_name],
|
64
|
+
:from_remote_service_id => options[:from_remote_service_id],
|
65
|
+
:source_url => options[:source_url],
|
66
|
+
:icon_url => options[:icon_url]
|
67
|
+
}
|
64
68
|
}}
|
65
69
|
|
66
|
-
self.class.post("/",
|
67
|
-
end
|
68
|
-
|
69
|
-
private
|
70
|
-
def hashed_email(email)
|
71
|
-
email =~ /@/ ? Digest::MD5.hexdigest(email) : email
|
70
|
+
self.class.post("/", params)
|
72
71
|
end
|
73
72
|
end
|
73
|
+
end
|
74
74
|
|
75
|
-
################### For Users - http://boxcar.io/help/api/users
|
76
|
-
class User
|
77
|
-
include HTTParty
|
78
|
-
attr_accessor :auth
|
79
|
-
base_uri "https://boxcar.io/notifications"
|
80
|
-
|
81
|
-
def initialize(email, password)
|
82
|
-
@auth = { :username => email, :password => password }
|
83
|
-
end
|
84
|
-
|
85
|
-
def notify(message, from_screen_name = nil, from_remote_service_id = nil, source_url = nil, icon_url = nil)
|
86
|
-
options = { :basic_auth => @auth, :body => {
|
87
|
-
:notification => {
|
88
|
-
:message => message,
|
89
|
-
:from_screen_name => from_screen_name,
|
90
|
-
:from_remote_service_id => from_remote_service_id,
|
91
|
-
:icon_url => icon_url,
|
92
|
-
:source_url => source_url
|
93
|
-
}
|
94
|
-
}}
|
95
|
-
|
96
|
-
self.class.post("/", options)
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe BoxcarAPI::Provider do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@config = YAML.load_file(File.join(File.dirname(__FILE__), 'settings.yml'))
|
7
|
+
@box = BoxcarAPI::Provider.new(@config['provider_key'], @config['provider_secret'])
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "#subscribe" do
|
11
|
+
it "should sending an invitation to subscribe" do
|
12
|
+
box = BoxcarAPI::Provider.new(@config['provider_key'], @config['provider_secret'])
|
13
|
+
box.subscribe(@config['email']).code.should == 200
|
14
|
+
end
|
15
|
+
it "should return error when invalid parameters" do
|
16
|
+
box = BoxcarAPI::Provider.new("invalidkey", "invalidsecret")
|
17
|
+
box.subscribe("invalid@email.com").code.should == 401
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "#broadcast" do
|
22
|
+
it "should broadcasting notifications to all services" do
|
23
|
+
@box.broadcast("This is an example message.", "from").code.should == 200
|
24
|
+
end
|
25
|
+
it "should accept from_screen_name" do
|
26
|
+
@box.broadcast("message with screen name", "jtadeulopes").code.should == 200
|
27
|
+
end
|
28
|
+
it "should accept from_remote_service_id" do
|
29
|
+
@box.broadcast("message with service id", "jtadeulopes", "unique").code.should == 200
|
30
|
+
end
|
31
|
+
it "should accept redirect_payload" do
|
32
|
+
@box.broadcast("message with redirect payload", "jtadeulopes", nil, "jdg").code.should == 200
|
33
|
+
end
|
34
|
+
it "should accept source_url" do
|
35
|
+
@box.broadcast("message with url", "jtadeulopes", nil, "jdg", "http://google.com").code.should == 200
|
36
|
+
end
|
37
|
+
it "should accept icon_url" do
|
38
|
+
@box.broadcast("message with icon", "jtadeulopes", nil, "jdg", "http://google.com", "http://graph.facebook.com/jtadeulopes/picture").code.should == 200
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "#notify" do
|
43
|
+
it "should creating individual notifications" do
|
44
|
+
@box.notify(@config['email'], "This is an example message.", "from").code.should == 200
|
45
|
+
end
|
46
|
+
it "should accept from_screen_name" do
|
47
|
+
@box.notify(@config['email'], "message with screen name", "jtadeulopes").code.should == 200
|
48
|
+
end
|
49
|
+
it "should accept from_remote_service_id" do
|
50
|
+
@box.notify(@config['email'], "bla bla", "jtadeulopes", "12345").code.should == 200
|
51
|
+
end
|
52
|
+
it "should accept redirect_payload" do
|
53
|
+
@box.notify(@config['email'], "message with redirect payload", "jtadeulopes", nil, "jdg").code.should == 200
|
54
|
+
end
|
55
|
+
it "should accept source_url" do
|
56
|
+
@box.notify(@config['email'], "message with url", "jtadeulopes", nil, "jdg", "http://google.com").code.should == 200
|
57
|
+
end
|
58
|
+
it "should accept icon_url" do
|
59
|
+
@box.notify(@config['email'], "message with icon", "jtadeulopes", nil, "jdg", "http://google.com", "http://graph.facebook.com/jtadeulopes/picture").code.should == 200
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "rspec"
|
3
|
+
require 'yaml'
|
4
|
+
require 'ephemeral_response'
|
5
|
+
|
6
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__)))
|
7
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
8
|
+
|
9
|
+
require "boxcar_api"
|
10
|
+
|
11
|
+
Rspec.configure do |config|
|
12
|
+
config.before(:suite) do
|
13
|
+
EphemeralResponse.activate
|
14
|
+
end
|
15
|
+
|
16
|
+
config.after(:suite) do
|
17
|
+
EphemeralResponse.deactivate
|
18
|
+
end
|
19
|
+
end
|
metadata
CHANGED
@@ -1,122 +1,132 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: boxcar_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 31
|
5
|
+
prerelease:
|
5
6
|
segments:
|
6
7
|
- 1
|
7
|
-
- 0
|
8
8
|
- 2
|
9
|
-
|
9
|
+
- 0
|
10
|
+
version: 1.2.0
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
|
-
-
|
13
|
+
- Kevin Griffin
|
13
14
|
autorequire:
|
14
15
|
bindir: bin
|
15
|
-
cert_chain:
|
16
|
-
- |
|
17
|
-
-----BEGIN CERTIFICATE-----
|
18
|
-
MIIDLjCCAhagAwIBAgIBADANBgkqhkiG9w0BAQUFADA9MREwDwYDVQQDDAhqb25h
|
19
|
-
dGhhbjETMBEGCgmSJomT8ixkARkWA2pkZzETMBEGCgmSJomT8ixkARkWA25ldDAe
|
20
|
-
Fw0xMDA0MTQwNDM2MDNaFw0xMTA0MTQwNDM2MDNaMD0xETAPBgNVBAMMCGpvbmF0
|
21
|
-
aGFuMRMwEQYKCZImiZPyLGQBGRYDamRnMRMwEQYKCZImiZPyLGQBGRYDbmV0MIIB
|
22
|
-
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1k3X9E577+SaAuYby0S3Jk58
|
23
|
-
iEY0E3Y4XGtQap1FqaxVChvfwW1DmQrIZlVOWZY8CEX1227BaoMGDUt65LSYHY3r
|
24
|
-
uNHfp5AwPkmStBMgf/7lNIskwow57J3px/VnlRQSXFlmVXulEl7XVnGOzvRuKerf
|
25
|
-
BbA97J2ncCZXXSluTfAHwANSLqbsXuDAd8wZ8XoU/LTpZR5rJSE6XQxAmy64xcyY
|
26
|
-
S2TU630bUMjV2h6GmwiA5S4iXlK27+j2VUulMIx5PtA8jvLHOtHzXg0nvzwYZ5Tf
|
27
|
-
+rm+yoUf71swsntg9YZrlTVVHXaFMCa0+4jZQkCdSJu4yB3NsB7fE4tatOyPaQID
|
28
|
-
AQABozkwNzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUZpPgZYDc
|
29
|
-
kuj7cbIholL8FIkEk5QwDQYJKoZIhvcNAQEFBQADggEBAJ6X/CMiC6OBR48ZOPzb
|
30
|
-
DUivkSXHbFfIIH2HatdI03ZaMVpdK1HHviqcuE38ArqefdjecSCse2eBn/KqACpL
|
31
|
-
h0oHYw095vgyP5qUca3+rYAxiNML0abqe6zrMqgGIqMpaeVl6+eoGP48rXbuXeK+
|
32
|
-
mFI6zYmFhj/Zjjp05UMRLP6eDFoMDyKHkYYKWCE8Hi8wqLih4qIgAKW3bmX8hkmb
|
33
|
-
zBuVRvW+f9iO8M5+m0J+DeR64biLxt8IV7gLj5oLXVYQXz2ran0xkqOrOMTsLf79
|
34
|
-
JYYCM1LV3QwoYfI9CRoIscg+7eLsLuQyDIVMLHvnoxJXIFjCkqWoIaeqvuOxA6Gy
|
35
|
-
YhU=
|
36
|
-
-----END CERTIFICATE-----
|
16
|
+
cert_chain: []
|
37
17
|
|
38
|
-
date:
|
39
|
-
default_executable:
|
18
|
+
date: 2011-09-28 00:00:00 Z
|
40
19
|
dependencies:
|
41
20
|
- !ruby/object:Gem::Dependency
|
42
21
|
name: httparty
|
43
22
|
prerelease: false
|
44
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
45
25
|
requirements:
|
46
26
|
- - ">="
|
47
27
|
- !ruby/object:Gem::Version
|
28
|
+
hash: 5
|
48
29
|
segments:
|
49
30
|
- 0
|
50
|
-
|
31
|
+
- 6
|
32
|
+
- 1
|
33
|
+
version: 0.6.1
|
51
34
|
type: :runtime
|
52
35
|
version_requirements: *id001
|
53
36
|
- !ruby/object:Gem::Dependency
|
54
|
-
name:
|
37
|
+
name: rspec
|
55
38
|
prerelease: false
|
56
39
|
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
57
41
|
requirements:
|
58
42
|
- - ">="
|
59
43
|
- !ruby/object:Gem::Version
|
44
|
+
hash: 3
|
60
45
|
segments:
|
61
46
|
- 0
|
62
47
|
version: "0"
|
63
48
|
type: :development
|
64
49
|
version_requirements: *id002
|
65
|
-
|
66
|
-
|
50
|
+
- !ruby/object:Gem::Dependency
|
51
|
+
name: yaml
|
52
|
+
prerelease: false
|
53
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
hash: 3
|
59
|
+
segments:
|
60
|
+
- 0
|
61
|
+
version: "0"
|
62
|
+
type: :development
|
63
|
+
version_requirements: *id003
|
64
|
+
- !ruby/object:Gem::Dependency
|
65
|
+
name: ephemeral_response
|
66
|
+
prerelease: false
|
67
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
hash: 3
|
73
|
+
segments:
|
74
|
+
- 0
|
75
|
+
version: "0"
|
76
|
+
type: :development
|
77
|
+
version_requirements: *id004
|
78
|
+
description:
|
79
|
+
email: kevin@boxcar.io
|
67
80
|
executables: []
|
68
81
|
|
69
82
|
extensions: []
|
70
83
|
|
71
84
|
extra_rdoc_files:
|
72
|
-
-
|
73
|
-
- README.rdoc
|
74
|
-
- lib/boxcar_api.rb
|
85
|
+
- README.mdown
|
75
86
|
files:
|
87
|
+
- init.rb
|
76
88
|
- LICENSE
|
77
89
|
- Manifest
|
78
|
-
- README.rdoc
|
79
90
|
- Rakefile
|
80
|
-
-
|
81
|
-
-
|
82
|
-
-
|
91
|
+
- README.mdown
|
92
|
+
- spec/boxcar_api_spec.rb
|
93
|
+
- spec/provider_spec.rb
|
94
|
+
- spec/settings.yml.sample
|
95
|
+
- spec/spec_helper.rb
|
83
96
|
- lib/boxcar_api.rb
|
84
|
-
|
85
|
-
has_rdoc: true
|
86
|
-
homepage: http://github.com/boxcar/boxcar_api
|
97
|
+
homepage: http://boxcar.io
|
87
98
|
licenses: []
|
88
99
|
|
89
100
|
post_install_message:
|
90
101
|
rdoc_options:
|
91
|
-
- --line-numbers
|
92
|
-
- --inline-source
|
93
|
-
- --title
|
94
|
-
- Boxcar_api
|
95
102
|
- --main
|
96
|
-
- README.
|
103
|
+
- README.mdown
|
97
104
|
require_paths:
|
98
105
|
- lib
|
99
106
|
required_ruby_version: !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
100
108
|
requirements:
|
101
109
|
- - ">="
|
102
110
|
- !ruby/object:Gem::Version
|
111
|
+
hash: 3
|
103
112
|
segments:
|
104
113
|
- 0
|
105
114
|
version: "0"
|
106
115
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
107
117
|
requirements:
|
108
118
|
- - ">="
|
109
119
|
- !ruby/object:Gem::Version
|
120
|
+
hash: 3
|
110
121
|
segments:
|
111
|
-
-
|
112
|
-
|
113
|
-
version: "1.2"
|
122
|
+
- 0
|
123
|
+
version: "0"
|
114
124
|
requirements: []
|
115
125
|
|
116
|
-
rubyforge_project:
|
117
|
-
rubygems_version: 1.
|
126
|
+
rubyforge_project:
|
127
|
+
rubygems_version: 1.8.10
|
118
128
|
signing_key:
|
119
129
|
specification_version: 3
|
120
|
-
summary: A simple way to send notifications to yourself
|
130
|
+
summary: A simple way to send notifications to yourself or your users through Boxcar.
|
121
131
|
test_files: []
|
122
132
|
|
data.tar.gz.sig
DELETED
data/README.rdoc
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
= Boxcar API
|
2
|
-
|
3
|
-
The Boxcar API gem allows Ruby developers to programmatically deliver notifications either to themselves, or as a provider.
|
4
|
-
|
5
|
-
To send yourself notifications, visit http://boxcar.io/help/api/users
|
6
|
-
|
7
|
-
To send other people notifications, visit http://boxcar.io/help/api/providers
|
8
|
-
|
9
|
-
|
10
|
-
== Copyright
|
11
|
-
|
12
|
-
Copyright (c) 2010 Boxcar. MIT Licensed.
|
data/boxcar_api.gemspec
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
|
3
|
-
Gem::Specification.new do |s|
|
4
|
-
s.name = %q{boxcar_api}
|
5
|
-
s.version = "1.0.2"
|
6
|
-
|
7
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
-
s.authors = ["Jonathan George"]
|
9
|
-
s.cert_chain = ["/Users/jonathan/.ssh/gem-public_cert.pem"]
|
10
|
-
s.date = %q{2010-11-15}
|
11
|
-
s.description = %q{A simple way to send notifications to yourself, or your users through Boxcar.}
|
12
|
-
s.email = %q{help@boxcar.io}
|
13
|
-
s.extra_rdoc_files = ["LICENSE", "README.rdoc", "lib/boxcar_api.rb"]
|
14
|
-
s.files = ["LICENSE", "Manifest", "README.rdoc", "Rakefile", "examples/send_as_provider.rb", "examples/send_to_yourself.rb", "init.rb", "lib/boxcar_api.rb", "boxcar_api.gemspec"]
|
15
|
-
s.homepage = %q{http://github.com/boxcar/boxcar_api}
|
16
|
-
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Boxcar_api", "--main", "README.rdoc"]
|
17
|
-
s.require_paths = ["lib"]
|
18
|
-
s.rubyforge_project = %q{boxcar_api}
|
19
|
-
s.rubygems_version = %q{1.3.6}
|
20
|
-
s.signing_key = %q{/Users/jonathan/.ssh/gem-private_key.pem}
|
21
|
-
s.summary = %q{A simple way to send notifications to yourself, or your users through Boxcar.}
|
22
|
-
|
23
|
-
if s.respond_to? :specification_version then
|
24
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
25
|
-
s.specification_version = 3
|
26
|
-
|
27
|
-
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
28
|
-
s.add_runtime_dependency(%q<httparty>, [">= 0"])
|
29
|
-
s.add_development_dependency(%q<httparty>, [">= 0"])
|
30
|
-
else
|
31
|
-
s.add_dependency(%q<httparty>, [">= 0"])
|
32
|
-
s.add_dependency(%q<httparty>, [">= 0"])
|
33
|
-
end
|
34
|
-
else
|
35
|
-
s.add_dependency(%q<httparty>, [">= 0"])
|
36
|
-
s.add_dependency(%q<httparty>, [">= 0"])
|
37
|
-
end
|
38
|
-
end
|
@@ -1,81 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'boxcar_api'
|
3
|
-
|
4
|
-
SETTINGS = {
|
5
|
-
:provider_key => 'xyz',
|
6
|
-
:provider_secret => 'xyz',
|
7
|
-
:email => 'user@example.com'
|
8
|
-
}
|
9
|
-
|
10
|
-
bp = BoxcarAPI::Provider.new(SETTINGS[:provider_key], SETTINGS[:provider_key])
|
11
|
-
|
12
|
-
#### Send an invitation to a user by their e-mail address, to add your service.
|
13
|
-
res = bp.subscribe(SETTINGS[:email])
|
14
|
-
|
15
|
-
if res.code == 200
|
16
|
-
puts "Success! You sent an invitation to #{SETTINGS[:email]} to add your service."
|
17
|
-
else
|
18
|
-
puts "Problem! HTTP status code: #{res.code}. Check the API docs!"
|
19
|
-
end
|
20
|
-
|
21
|
-
#### Deliver a broadcast notification to everyone that has added your service.
|
22
|
-
res = bp.broadcast("This is an example message.", "from")
|
23
|
-
|
24
|
-
if res.code == 200
|
25
|
-
puts "Success! You sent a broadcast message to everyone using your service."
|
26
|
-
else
|
27
|
-
puts "Problem! HTTP status code: #{res.code}. Check the API docs!"
|
28
|
-
end
|
29
|
-
|
30
|
-
#### Deliver a personalized notification to a subscriber by email.
|
31
|
-
res = bp.notify(SETTINGS[:email], "This is an example message.", "from")
|
32
|
-
|
33
|
-
if res.code == 200
|
34
|
-
puts "Success! You sent a personalized message to #{SETTINGS[:email]}."
|
35
|
-
else
|
36
|
-
puts "Problem! HTTP status code: #{res.code}. Check the API docs!"
|
37
|
-
end
|
38
|
-
|
39
|
-
#### Deliver a personalized notification to a subscriber by email, but only deliver it once!
|
40
|
-
# This includes the from_remote_service_id for the user, which will ensure it's only delivered one time.
|
41
|
-
res = bp.notify(SETTINGS[:email], "This is an example message.", "from", "123")
|
42
|
-
|
43
|
-
if res.code == 200
|
44
|
-
puts "Success! You sent a personalized message to #{SETTINGS[:email]}."
|
45
|
-
else
|
46
|
-
puts "Problem! HTTP status code: #{res.code}. Check the API docs!"
|
47
|
-
end
|
48
|
-
|
49
|
-
#### Deliver a personalized notification to a subscriber by email, including a redirect payload
|
50
|
-
# Redirect payloads are what replaces "::user::" in your Boxcar redirect URL.
|
51
|
-
|
52
|
-
res = bp.notify(SETTINGS[:email], "This is an example message.", "from", nil, "jdg")
|
53
|
-
if res.code == 200
|
54
|
-
puts "Success! You sent a personalized message with a redirect payload to #{SETTINGS[:email]}."
|
55
|
-
else
|
56
|
-
puts "Problem! HTTP status code: #{res.code}. Check the API docs!"
|
57
|
-
end
|
58
|
-
|
59
|
-
#### Deliver a personalized notification to a subscriber by email, including a redirect payload
|
60
|
-
# Redirect payloads are what replaces "::user::" in your Boxcar redirect URL.
|
61
|
-
# Also include a source_url and an icon_url
|
62
|
-
|
63
|
-
res = bp.notify(SETTINGS[:email], "This is an example message.", "from", nil, "jdg", "http://google.com",
|
64
|
-
"http://graph.facebook.com/jonathan.george/picture")
|
65
|
-
if res.code == 200
|
66
|
-
puts "Success! You sent a personalized message with a redirect payload, source_url and icon_url to #{SETTINGS[:email]}."
|
67
|
-
else
|
68
|
-
puts "Problem! HTTP status code: #{res.code}. Check the API docs!"
|
69
|
-
end
|
70
|
-
|
71
|
-
|
72
|
-
#### Deliver a personalized notification to a subscriber by their service token/secret.
|
73
|
-
#### This works, just commented out because it's much easier to use e-mail addresses.
|
74
|
-
#
|
75
|
-
#res = bp.notify_service(token, secret, "This is an example message.", "from")
|
76
|
-
|
77
|
-
#if res.code == 200
|
78
|
-
# puts "Success! You sent a broadcast message to everyone using your service."
|
79
|
-
#else
|
80
|
-
# puts "Problem! HTTP status code: #{res.code}. Check the API docs!"
|
81
|
-
#end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'boxcar_api'
|
3
|
-
|
4
|
-
email = 'your email'
|
5
|
-
password = 'your password'
|
6
|
-
|
7
|
-
bu = BoxcarAPI::User.new(email, password)
|
8
|
-
res = bu.notify("message")
|
9
|
-
|
10
|
-
if res.code == 200
|
11
|
-
puts "Success!"
|
12
|
-
else
|
13
|
-
puts "There was a problem delivering the notification, HTTP status code: #{res.code}"
|
14
|
-
end
|
15
|
-
|
16
|
-
# This time include a 'from screen name' - e.g., an application name, or a person.
|
17
|
-
res = bu.notify("message", "from")
|
18
|
-
|
19
|
-
# This time include an 'icon url' - a link to an icon hosted online.
|
20
|
-
# Also include a 'source url', a link that we'll take you to when you chose to View Original for the notification.
|
21
|
-
res = bu.notify("message", "from", nil, "http://facebook.com", "http://graph.facebook.com/jonathan.george/picture")
|
22
|
-
|
23
|
-
# This time include a unique identifier, and if you send it more than once
|
24
|
-
# additional notifications will be dropped as duplicates.
|
25
|
-
res = bu.notify("message", "from", "unique")
|
26
|
-
|
27
|
-
# This one won't be delivered, because you've already gotten it.
|
28
|
-
res = bu.notify("message", "from", "unique")
|
metadata.gz.sig
DELETED