five_mobile_push 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --colour
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "http://rubygems.org"
2
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "five_mobile_push/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "five_mobile_push"
7
+ s.version = FiveMobilePush::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Kevin Faustino", "James Herdman"]
10
+ s.email = ["kevin.faustino@gmail.com", "james.herdman@me.com"]
11
+ s.homepage = ""
12
+ s.summary = %q{API wrapper for Five Mobile Push notification service}
13
+ s.description = %q{API wrapper for Five Mobile Push notification service}
14
+
15
+ s.rubyforge_project = "five_mobile_push"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_dependency "multi_json", ["~> 0.0.5"]
23
+ s.add_dependency "faraday", ["~> 0.5.7"]
24
+ s.add_development_dependency "rspec", ["~> 2.5.0"]
25
+ s.add_development_dependency "yajl-ruby"
26
+ s.add_development_dependency "webmock"
27
+ end
@@ -0,0 +1,29 @@
1
+ require 'faraday'
2
+
3
+ module Faraday
4
+ class Response::Errors < Response::Middleware
5
+
6
+ begin
7
+ def self.register_on_complete(env)
8
+ env[:response].on_complete do |finished_env|
9
+ case finished_env[:status]
10
+ when 400
11
+ raise FiveMobilePush::GeneralError, finished_env[:body]
12
+ when 401
13
+ raise FiveMobilePush::UnauthorizedError, finished_env[:body]
14
+ when 500
15
+ raise FiveMobilePush::ServerError, 'push.fivemobile.com is currently down'
16
+ end
17
+ end
18
+ end
19
+ rescue LoadError, NameError => e
20
+ self.load_error = e
21
+ end
22
+
23
+ def initialize(app)
24
+ super
25
+ @parser = nil
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,60 @@
1
+ require 'faraday/errors'
2
+
3
+ module FiveMobilePush
4
+ class Client
5
+
6
+ DEFAULT_ENDPOINT = 'https://push.fivemobile.com/rest/'
7
+
8
+ attr_accessor :application_uid, :api_token
9
+
10
+ def initialize(options={})
11
+ self.application_uid = options[:application_uid] || FiveMobilePush.application_uid
12
+ self.api_token = options[:api_token] || FiveMobilePush.api_token
13
+ end
14
+
15
+
16
+ def connection
17
+ @connection ||= Faraday.new(:url => DEFAULT_ENDPOINT, :user_agent => 'FiveMobilePush Ruby gem') do |builder|
18
+ builder.adapter Faraday.default_adapter
19
+
20
+ builder.use Faraday::Response::Errors
21
+ end
22
+ end
23
+
24
+ def get(path, options={})
25
+ perform_request(:get, path, options)
26
+ end
27
+
28
+ def post(path, options={})
29
+ perform_request(:post, path, options)
30
+ end
31
+
32
+ def device(device_uid)
33
+ FiveMobilePush::Device.new(self, device_uid)
34
+ end
35
+
36
+ def notifier
37
+ FiveMobilePush::Notifier.new(self)
38
+ end
39
+
40
+ def tag(device_uid)
41
+ FiveMobilePush::Tag.new(self, device_uid)
42
+ end
43
+
44
+ private
45
+
46
+ def perform_request(method, path, options={})
47
+ options.merge!({:api_token => self.api_token, :application_id => self.application_uid })
48
+ connection.send(method) do |request|
49
+ case method
50
+ when :get, :delete
51
+ request.url(path, options)
52
+ when :post, :put
53
+ request.path = path
54
+ request.body = options
55
+ end
56
+ end
57
+ end
58
+
59
+ end
60
+ end
@@ -0,0 +1,60 @@
1
+ module FiveMobilePush
2
+ class Device
3
+
4
+ VALID_OPTION_KEYS = [:alias, :email]
5
+
6
+ # @param [FiveMobilePush::Client] client The Client to use to send this request
7
+ #
8
+ # @param [String] device_uid The ID of the device being registered.
9
+ # Maximum of 64 characters.
10
+ def initialize(client, device_uid)
11
+ @client = client
12
+ @device_uid = device_uid
13
+ end
14
+
15
+ # Registers a device for receiving push notifications from an application.
16
+ # If the device is already registered, this call can update the existing
17
+ # registration details.
18
+ #
19
+ # @param [String] registration_data Platform specific device registration
20
+ # data, e.g. iOS device token. Optional for some platforms
21
+ #
22
+ # @param [Hash] device_info Information about the device being registered
23
+ #
24
+ # @option device_info [String] :manufacturer The device manufacturer.
25
+ # E.g. Apple, HTC, Motorola, RIM. Maximum 64 characters.
26
+ #
27
+ # @option device_info [String] :model The model of the device. E.g. iPhone 4,
28
+ # Nexus One
29
+ #
30
+ # @option device_info [String] :platform The software platform. E.g. iOS, Android
31
+ #
32
+ # @option device_info [String] :platform_ver Software platform version.
33
+ #
34
+ # @return [Hash] Has unique device API key. Required for many other calls.
35
+ def register(device_info, registration_data=nil)
36
+ options = {
37
+ :device_id => @device_uid,
38
+ :device_info => MultiJson.encode(device_info)
39
+ }
40
+
41
+ options[:reg_data] = registration_data unless registration_data.nil?
42
+ response = @client.post 'device/register', options
43
+ MultiJson.decode(response.body)
44
+ end
45
+
46
+ def resume
47
+ @client.post 'device/resume', :id_type => FiveMobilePush::DEFAULT_ID_TYPE, :id_value => @device_uid
48
+ end
49
+
50
+ def suspend
51
+ @client.post 'device/suspend', :id_type => FiveMobilePush::DEFAULT_ID_TYPE, :id_value => @device_uid
52
+ end
53
+
54
+ def unregister
55
+ @client.post 'device/unregister', :id_type => FiveMobilePush::DEFAULT_ID_TYPE, :id_value => @device_uid
56
+ end
57
+
58
+ end
59
+
60
+ end
@@ -0,0 +1,36 @@
1
+ module FiveMobilePush
2
+ class Notifier
3
+
4
+ def initialize(client)
5
+ @client = client
6
+ end
7
+
8
+ def broadcast(platforms, payload)
9
+ @client.post 'notify/broadcast', :platforms => self.class.build_platforms_string(platforms), :payload => MultiJson.encode(payload)
10
+ end
11
+
12
+ def notify_devices(devices, payload)
13
+ @client.post 'notify/toDevices', :id_type => FiveMobilePush::DEFAULT_ID_TYPE, :id_values => devices.join(','), :payload => MultiJson.encode(payload)
14
+ end
15
+
16
+ def notify_by_tags(platforms, tags, payload)
17
+ @client.post 'notify/toTags',
18
+ :platforms => self.class.build_platforms_string(platforms),
19
+ :tags => tags.join(','),
20
+ :payload => MultiJson.encode(payload)
21
+ end
22
+
23
+ class << self
24
+
25
+ def build_platforms_string(platforms)
26
+ if platforms.kind_of?(Enumerable)
27
+ platforms.join(',')
28
+ else
29
+ platforms.to_s
30
+ end
31
+ end
32
+
33
+ end
34
+
35
+ end
36
+ end
@@ -0,0 +1,30 @@
1
+ module FiveMobilePush
2
+ class Tag
3
+
4
+ attr_accessor :device_uid
5
+
6
+ def initialize(client, device_uid)
7
+ @client = client
8
+ self.device_uid = device_uid
9
+ end
10
+
11
+ def create(*tags)
12
+ @client.post(end_point(:add), :id_type => FiveMobilePush::DEFAULT_ID_TYPE, :id_value => self.device_uid, :tags => normalize_tags(tags))
13
+ end
14
+
15
+ def delete(*tags)
16
+ @client.post(end_point(:delete), :id_type => FiveMobilePush::DEFAULT_ID_TYPE, :id_value => self.device_uid, :tags => normalize_tags(tags))
17
+ end
18
+
19
+ private
20
+
21
+ def normalize_tags(tags)
22
+ tags.flatten.join(",")
23
+ end
24
+
25
+ def end_point(action)
26
+ "device/tags/#{action}"
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,3 @@
1
+ module FiveMobilePush
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,27 @@
1
+ require 'multi_json'
2
+ require 'five_mobile_push/client'
3
+
4
+ module FiveMobilePush
5
+ extend self
6
+
7
+ autoload :Device, 'five_mobile_push/device'
8
+ autoload :Notifier, 'five_mobile_push/notifier'
9
+ autoload :Tag, 'five_mobile_push/tag'
10
+
11
+ class UnauthorizedError < StandardError; end
12
+ class GeneralError < StandardError; end
13
+ class ServerError < StandardError; end
14
+
15
+
16
+ VALID_OPTION_KEYS = [:api_token, :application_uid]
17
+ SUPPORTED_PLATFORMS = %w(iphone blackberry android)
18
+
19
+ DEFAULT_ID_TYPE = 'native'
20
+
21
+ attr_accessor *VALID_OPTION_KEYS
22
+
23
+ def configure
24
+ yield self
25
+ end
26
+
27
+ end
@@ -0,0 +1,73 @@
1
+ require 'spec_helper'
2
+
3
+ describe FiveMobilePush::Client do
4
+
5
+ let(:application_uid) { 'nulayer' }
6
+ let(:api_token) { 'token_123' }
7
+
8
+ subject { FiveMobilePush::Client.new :api_token => api_token, :application_uid => application_uid }
9
+
10
+ it "connects using the fivemobile endpoint" do
11
+ connection = subject.send(:connection).build_url(nil).to_s
12
+ endpoint = URI.parse(described_class::DEFAULT_ENDPOINT)
13
+ connection.should == endpoint.to_s
14
+ end
15
+
16
+ describe "#device" do
17
+
18
+ it "initializes a Device" do
19
+ subject.device('abc').should be_kind_of(FiveMobilePush::Device)
20
+ end
21
+
22
+ end
23
+
24
+ describe "#notifier" do
25
+
26
+ it "initializes a Notifier" do
27
+ subject.notifier.should be_kind_of(FiveMobilePush::Notifier)
28
+ end
29
+
30
+ end
31
+
32
+ describe "#tag" do
33
+
34
+ it "initializes a Tag" do
35
+ subject.tag('device-uid').should be_kind_of(FiveMobilePush::Tag)
36
+ end
37
+
38
+ end
39
+
40
+ context "response code is 400" do
41
+
42
+ let(:path) { "https://push.fivemobile.com/rest/some_endpoint?api_token=#{api_token}&application_id=#{application_uid}" }
43
+
44
+ it "raises a GeneralError" do
45
+ stub_request(:any, path).to_return(:body => "something broken", :status => 400)
46
+ expect { subject.get(path) }.to raise_error(FiveMobilePush::GeneralError)
47
+ end
48
+
49
+ end
50
+
51
+ context "response code is 401" do
52
+
53
+ let(:path) { "https://push.fivemobile.com/rest/some_endpoint?api_token=#{api_token}&application_id=#{application_uid}" }
54
+
55
+ it "raises a GeneralError" do
56
+ stub_request(:any, path).to_return(:body => "something broken", :status => 401)
57
+ expect { subject.get(path) }.to raise_error(FiveMobilePush::UnauthorizedError)
58
+ end
59
+
60
+ end
61
+
62
+ context "response code is 500" do
63
+
64
+ let(:path) { "https://push.fivemobile.com/rest/some_endpoint?api_token=#{api_token}&application_id=#{application_uid}" }
65
+
66
+ it "raises a GeneralError" do
67
+ stub_request(:any, path).to_return(:body => "something broken", :status => 500)
68
+ expect { subject.get(path) }.to raise_error(FiveMobilePush::ServerError)
69
+ end
70
+
71
+ end
72
+
73
+ end
@@ -0,0 +1,110 @@
1
+ require 'spec_helper'
2
+
3
+ describe FiveMobilePush::Device do
4
+
5
+ let(:api_token) { 'token' }
6
+
7
+ let(:application_uid) { 'nulayer' }
8
+
9
+ let(:client) { FiveMobilePush::Client.new(:api_token => api_token, :application_uid => application_uid) }
10
+
11
+ let(:device_uid) { '2b6f0cc904d137be2e1730235f5664094b831186' }
12
+
13
+ let(:device_token) { 'ABCDEFG' }
14
+
15
+ subject { FiveMobilePush::Device.new(client, device_uid) }
16
+
17
+ describe '#register' do
18
+
19
+ let(:register_endpoint) { device_endpoint('register') }
20
+
21
+ let(:device_info) {
22
+ {
23
+ :manufacturer => 'Apple',
24
+ :model => 'iPhone 4',
25
+ :platform => 'iOS',
26
+ :platform_ver => 'iOS 4.3'
27
+ }
28
+ }
29
+
30
+ context "registration data is provided" do
31
+
32
+ let(:body) { build_request_body(:device_id => device_uid, :reg_data => device_token, :device_info => MultiJson.encode(device_info)) }
33
+
34
+ before(:each) do
35
+ stub_request(:post, register_endpoint).to_return(:body => load_fixture('register.json'))
36
+ end
37
+
38
+ it "registers a device" do
39
+ subject.register(device_info, device_token)
40
+ a_request(:post, register_endpoint).with(:body => /device_info=.*reg_data=#{device_token}/).should have_been_made
41
+ end
42
+
43
+ it "returns a token on success" do
44
+ response = subject.register(device_info, device_token)
45
+ response['data'].should == '52750B30FFBC7DE3B362'
46
+ end
47
+
48
+ end
49
+
50
+ context "registration data is not provided" do
51
+
52
+ it "registers a device" do
53
+ body = build_request_body(:device_id => device_uid, :device_info => device_info)
54
+ stub_request(:post, register_endpoint)
55
+ subject.register(device_info)
56
+
57
+ a_request(:post, register_endpoint).with(:body => /reg_data/).should_not have_been_made
58
+ end
59
+
60
+ end
61
+
62
+ end
63
+
64
+ context "id_value and id_type passed to service" do
65
+
66
+ let(:body) { build_request_body(:id_type => FiveMobilePush::DEFAULT_ID_TYPE, :id_value => device_uid) }
67
+
68
+ describe '#resume' do
69
+
70
+ let(:resume_endpoint) { device_endpoint('resume') }
71
+
72
+ it "resumes a device to receive push notifications" do
73
+ stub_request(:post, resume_endpoint).with(:body => body)
74
+ subject.resume
75
+ a_request(:post, resume_endpoint).with(:body => body).should have_been_made
76
+ end
77
+
78
+ end
79
+
80
+ describe '#suspend' do
81
+
82
+ let(:suspend_endpoint) { device_endpoint('suspend') }
83
+
84
+ it "suspends a device to not receive any push notifications" do
85
+ stub_request(:post, suspend_endpoint).with(:body => body)
86
+ subject.suspend
87
+ a_request(:post, suspend_endpoint).with(:body => body).should have_been_made
88
+ end
89
+
90
+ end
91
+
92
+ describe "#unregister" do
93
+
94
+ let(:unregister_endpoint) { device_endpoint('unregister') }
95
+
96
+ it "unregisters a device from receiving push notifications" do
97
+ stub_request(:post, unregister_endpoint).with(:body => body)
98
+ subject.unregister
99
+ a_request(:post, unregister_endpoint).with(:body => body).should have_been_made
100
+ end
101
+
102
+ end
103
+
104
+ end
105
+
106
+ def device_endpoint(name)
107
+ "https://push.fivemobile.com/rest/device/#{name}"
108
+ end
109
+
110
+ end
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+ require 'uri'
3
+
4
+ describe FiveMobilePush::Notifier do
5
+
6
+ let(:api_token) { 'token' }
7
+ let(:application_uid) { 'nulayer' }
8
+ let(:client) { FiveMobilePush::Client.new :api_token => api_token, :application_uid => application_uid }
9
+
10
+ subject { FiveMobilePush::Notifier.new client }
11
+
12
+ let(:payload) do
13
+ {
14
+ :msg => {
15
+ :type => "string",
16
+ :value => "You sir are awesome"
17
+ }
18
+ }
19
+ end
20
+
21
+ describe "#broadcast" do
22
+
23
+ let(:broadcast_endpoint) { notifier_endpoint('broadcast') }
24
+
25
+ it "broadcasts a notification to one or more platforms of the application" do
26
+ stub_request(:post, broadcast_endpoint)
27
+ subject.broadcast :iphone, payload
28
+ a_request(:post, broadcast_endpoint).should have_been_made
29
+ end
30
+
31
+ end
32
+
33
+ describe '#notify_devices' do
34
+
35
+ let(:notify_devices_endpoint) { notifier_endpoint('toDevices') }
36
+
37
+ it "notifies a list of devices" do
38
+ stub_request(:post, notify_devices_endpoint)
39
+ subject.notify_devices ['abc', 'def'], payload
40
+ a_request(:post, notify_devices_endpoint).should have_been_made
41
+ end
42
+
43
+ end
44
+
45
+ describe "#notify_by_tags" do
46
+
47
+ let(:notify_by_tags_endpoint) { notifier_endpoint('toTags') }
48
+
49
+ it "notifies devices by tags" do
50
+ stub_request(:post, notify_by_tags_endpoint)
51
+ subject.notify_by_tags [:iphone, :android], ['tag1', 'tag2'], payload
52
+ a_request(:post, notify_by_tags_endpoint).should have_been_made
53
+ end
54
+
55
+ end
56
+
57
+ def notifier_endpoint(name)
58
+ "https://push.fivemobile.com/rest/notify/#{name}"
59
+ end
60
+
61
+ end
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ describe FiveMobilePush::Tag do
4
+
5
+ let(:api_token) { 'token' }
6
+ let(:application_uid) { 'nulayer' }
7
+ let(:client) { FiveMobilePush::Client.new :api_token => api_token, :application_uid => application_uid }
8
+ let(:device_uid) { 'ABCD123' }
9
+
10
+ subject { FiveMobilePush::Tag.new client, device_uid }
11
+
12
+ describe "#create" do
13
+
14
+ let(:add_tag_endpoint) { tag_endpoint('add') }
15
+ let(:tags) { %w(tag1 tag2) }
16
+
17
+ it "adds new tags to Five Mobile" do
18
+ body = build_request_body(:id_type => FiveMobilePush::DEFAULT_ID_TYPE, :id_value => device_uid, :tags => escape(tags.join(',')) )
19
+ stub_request(:post, add_tag_endpoint).with(:body => body)
20
+ subject.create tags
21
+ a_request(:post, add_tag_endpoint).with(:body => body).should have_been_made
22
+ end
23
+
24
+ it "adds a new tag to Five Mobile" do
25
+ body = build_request_body(:id_type => FiveMobilePush::DEFAULT_ID_TYPE, :id_value => device_uid, :tags => "cheese")
26
+ stub_request(:post, add_tag_endpoint).with(:body => body)
27
+ subject.create("cheese")
28
+ a_request(:post, add_tag_endpoint).with(:body => body).should have_been_made
29
+ end
30
+
31
+ end
32
+
33
+ describe "#delete" do
34
+
35
+ let(:tags) { %w[tag1 tag2] }
36
+ let(:delete_tag_endpoint) { tag_endpoint("delete") }
37
+
38
+ it "unsubscribes from further notifications for tags" do
39
+ body = build_request_body(:id_type => FiveMobilePush::DEFAULT_ID_TYPE, :id_value => device_uid, :tags => escape(tags.join(',')))
40
+ stub_request(:post, delete_tag_endpoint).with(:body => body)
41
+ subject.delete(tags)
42
+ a_request(:post, delete_tag_endpoint).with(:body => body).should have_been_made
43
+ end
44
+
45
+ it "unsubscribes from further notifications for tag" do
46
+ body = build_request_body(:id_type => FiveMobilePush::DEFAULT_ID_TYPE, :id_value => device_uid, :tags => "bacon")
47
+ stub_request(:post, delete_tag_endpoint).with(:body => body)
48
+ subject.delete("bacon")
49
+ a_request(:post, delete_tag_endpoint).with(:body => body).should have_been_made
50
+ end
51
+
52
+ end
53
+
54
+ describe "#get" do
55
+ end
56
+
57
+ def tag_endpoint(name)
58
+ "https://push.fivemobile.com/rest/device/tags/#{name}"
59
+ end
60
+
61
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ describe FiveMobilePush do
4
+
5
+ describe '.api_token' do
6
+
7
+ it "sets the api_token" do
8
+ subject.api_token = "random_key"
9
+ subject.api_token.should == "random_key"
10
+ end
11
+
12
+ end
13
+
14
+ describe '.application_uid' do
15
+
16
+ it "sets the application_uid" do
17
+ subject.application_uid = 'nulayer'
18
+ subject.application_uid.should == 'nulayer'
19
+ end
20
+
21
+ end
22
+
23
+ describe 'configure' do
24
+
25
+ FiveMobilePush::VALID_OPTION_KEYS.each do |key|
26
+
27
+ it "sets the key #{key}" do
28
+ FiveMobilePush.configure do |config|
29
+ config.send("#{key}=", key)
30
+ end
31
+ FiveMobilePush.send(key).should == key
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+
38
+ describe 'platforms' do
39
+
40
+ %w(iphone blackberry android).each do |platform|
41
+
42
+ specify { FiveMobilePush::SUPPORTED_PLATFORMS.should include(platform) }
43
+
44
+ end
45
+
46
+ end
47
+
48
+ end
@@ -0,0 +1 @@
1
+ {"type":"api_token","data":"52750B30FFBC7DE3B362","active":true}
@@ -0,0 +1,28 @@
1
+ require 'five_mobile_push'
2
+ require 'rspec'
3
+ require 'webmock/rspec'
4
+ require 'yajl'
5
+ require 'uri'
6
+
7
+ RSpec.configure do |config|
8
+ config.mock_with :rspec
9
+ end
10
+
11
+ def load_fixture(name)
12
+ File.read File.expand_path("../fixtures/#{name}", __FILE__)
13
+ end
14
+
15
+ def build_request_body(data)
16
+ data = data.merge(:api_token => api_token, :application_id => application_uid)
17
+ String.new.tap do |body|
18
+ data.each do |key,value|
19
+ body << "#{key}=#{value}"
20
+ body << "&" unless key == :application_id
21
+ end
22
+ end
23
+ end
24
+
25
+ # URI escape
26
+ def escape(s)
27
+ URI.escape(s).gsub(',', '%2C')
28
+ end
metadata ADDED
@@ -0,0 +1,137 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: five_mobile_push
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.1.0
6
+ platform: ruby
7
+ authors:
8
+ - Kevin Faustino
9
+ - James Herdman
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+
14
+ date: 2011-03-30 00:00:00 -04:00
15
+ default_executable:
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: multi_json
19
+ prerelease: false
20
+ requirement: &id001 !ruby/object:Gem::Requirement
21
+ none: false
22
+ requirements:
23
+ - - ~>
24
+ - !ruby/object:Gem::Version
25
+ version: 0.0.5
26
+ type: :runtime
27
+ version_requirements: *id001
28
+ - !ruby/object:Gem::Dependency
29
+ name: faraday
30
+ prerelease: false
31
+ requirement: &id002 !ruby/object:Gem::Requirement
32
+ none: false
33
+ requirements:
34
+ - - ~>
35
+ - !ruby/object:Gem::Version
36
+ version: 0.5.7
37
+ type: :runtime
38
+ version_requirements: *id002
39
+ - !ruby/object:Gem::Dependency
40
+ name: rspec
41
+ prerelease: false
42
+ requirement: &id003 !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 2.5.0
48
+ type: :development
49
+ version_requirements: *id003
50
+ - !ruby/object:Gem::Dependency
51
+ name: yajl-ruby
52
+ prerelease: false
53
+ requirement: &id004 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: "0"
59
+ type: :development
60
+ version_requirements: *id004
61
+ - !ruby/object:Gem::Dependency
62
+ name: webmock
63
+ prerelease: false
64
+ requirement: &id005 !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: "0"
70
+ type: :development
71
+ version_requirements: *id005
72
+ description: API wrapper for Five Mobile Push notification service
73
+ email:
74
+ - kevin.faustino@gmail.com
75
+ - james.herdman@me.com
76
+ executables: []
77
+
78
+ extensions: []
79
+
80
+ extra_rdoc_files: []
81
+
82
+ files:
83
+ - .gitignore
84
+ - .rspec
85
+ - Gemfile
86
+ - Rakefile
87
+ - five_mobile_push.gemspec
88
+ - lib/faraday/errors.rb
89
+ - lib/five_mobile_push.rb
90
+ - lib/five_mobile_push/client.rb
91
+ - lib/five_mobile_push/device.rb
92
+ - lib/five_mobile_push/notifier.rb
93
+ - lib/five_mobile_push/tag.rb
94
+ - lib/five_mobile_push/version.rb
95
+ - spec/five_mobile_push/client_spec.rb
96
+ - spec/five_mobile_push/device_spec.rb
97
+ - spec/five_mobile_push/notifier_spec.rb
98
+ - spec/five_mobile_push/tags_spec.rb
99
+ - spec/five_mobile_push_spec.rb
100
+ - spec/fixtures/register.json
101
+ - spec/spec_helper.rb
102
+ has_rdoc: true
103
+ homepage: ""
104
+ licenses: []
105
+
106
+ post_install_message:
107
+ rdoc_options: []
108
+
109
+ require_paths:
110
+ - lib
111
+ required_ruby_version: !ruby/object:Gem::Requirement
112
+ none: false
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: "0"
117
+ required_rubygems_version: !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: "0"
123
+ requirements: []
124
+
125
+ rubyforge_project: five_mobile_push
126
+ rubygems_version: 1.6.2
127
+ signing_key:
128
+ specification_version: 3
129
+ summary: API wrapper for Five Mobile Push notification service
130
+ test_files:
131
+ - spec/five_mobile_push/client_spec.rb
132
+ - spec/five_mobile_push/device_spec.rb
133
+ - spec/five_mobile_push/notifier_spec.rb
134
+ - spec/five_mobile_push/tags_spec.rb
135
+ - spec/five_mobile_push_spec.rb
136
+ - spec/fixtures/register.json
137
+ - spec/spec_helper.rb