Skip to content

Commit 5a33bcb

Browse files
author
coding-chimp
committed
Adds player resources
1 parent 2602740 commit 5a33bcb

26 files changed

Lines changed: 464 additions & 38 deletions

Rakefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ require 'bundler/gem_tasks'
22
require 'rake/testtask'
33

44
Rake::TestTask.new(:test) do |t|
5-
t.libs << "test"
6-
t.libs << "lib"
5+
t.libs << 'test'
6+
t.libs << 'lib'
77
t.test_files = FileList['test/**/*_test.rb']
88
end
99

lib/onesignal.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,16 @@
22
require 'onesignal/client'
33
require 'onesignal/request'
44
require 'onesignal/request_error'
5+
require 'onesignal/app_id_missing_error'
56
require 'onesignal/models/base_model'
67
require 'onesignal/models/app'
8+
require 'onesignal/models/player'
79
require 'onesignal/resources/app_resource'
10+
require 'onesignal/resources/player_resource'
811

912
module OneSignal
13+
DEVICE_TYPES = [
14+
'ios', 'android', 'amazon', 'mpns', 'chrome_app', 'chrome_website', 'wns',
15+
'safari', 'firefox'
16+
]
1017
end
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
module OneSignal
2+
class AppIdMissingError < StandardError
3+
def initialize(message = 'An app ID is needed for this resource')
4+
super(message)
5+
end
6+
end
7+
end

lib/onesignal/client.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,17 @@ def initialize(auth_token:, app_id: nil)
1212
def apps
1313
@apps ||= AppResource.new(self)
1414
end
15+
16+
def players
17+
ensure_app_id_presence
18+
19+
@players ||= PlayerResource.new(self)
20+
end
21+
22+
private
23+
24+
def ensure_app_id_presence
25+
raise AppIdMissingError if app_id.nil?
26+
end
1527
end
1628
end

lib/onesignal/models/app.rb

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,37 @@
1+
require 'date'
2+
13
module OneSignal
24
class App < BaseModel
5+
DATE_REGEX = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/
6+
37
attr_accessor :apns_certificates, :apns_env, :basic_auth_key, :chrome_key,
48
:chrome_web_default_notification_icon, :chrome_web_gcm_sender_id,
59
:chrome_web_origin, :chrome_web_sub_domain, :created_at, :gcm_key, :id,
610
:messagable_players, :name, :players, :safari_apns_cetificate,
711
:safari_icon_128_128, :safari_icon_16_16, :safari_icon_256_256,
812
:safari_icon_32_32, :safari_icon_64_64, :safari_push_id,
913
:safari_site_origin, :site_name, :updated_at
14+
15+
def created_at=(time)
16+
parse_time('created_at', time)
17+
end
18+
19+
def updated_at=(time)
20+
parse_time('updated_at', time)
21+
end
22+
23+
private
24+
25+
def parse_time(attribute, value)
26+
if string_date?(value)
27+
value = Time.parse(value)
28+
end
29+
30+
instance_variable_set("@#{attribute}", value)
31+
end
32+
33+
def string_date?(date)
34+
date.is_a?(String) && date.match(DATE_REGEX)
35+
end
1036
end
1137
end

lib/onesignal/models/base_model.rb

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,11 @@
1-
require 'date'
2-
31
module OneSignal
42
class BaseModel
5-
DATE_REGEX = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/
6-
73
def self.to_proc
84
method(:new).to_proc
95
end
106

117
def initialize(attributes = {})
12-
attributes.each do |key, value|
13-
if string_date?(value)
14-
value = DateTime.parse(value)
15-
end
16-
17-
instance_variable_set("@#{key}", value)
18-
end
8+
attributes.each { |key, value| send("#{key}=", value) }
199
end
2010

2111
def inspect
@@ -25,11 +15,5 @@ def inspect
2515

2616
"<#{self.class.name} #{values}>"
2717
end
28-
29-
private
30-
31-
def string_date?(date)
32-
date.is_a?(String) && date.match(DATE_REGEX)
33-
end
3418
end
3519
end

lib/onesignal/models/player.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
module OneSignal
2+
class Player < BaseModel
3+
attr_accessor :ad_id, :amount_spent, :badge_count, :created_at,
4+
:device_model, :device_os, :device_type, :game_version, :identifier,
5+
:invalid_identifier, :language, :last_active, :session_count, :tags,
6+
:timezone
7+
8+
def created_at=(time)
9+
@created_at = Time.at(time)
10+
end
11+
12+
def device_type=(type)
13+
if type.is_a?(Integer)
14+
type = OneSignal::DEVICE_TYPES[type]
15+
end
16+
17+
@device_type = type
18+
end
19+
20+
def last_active=(time)
21+
@last_active = Time.at(time)
22+
end
23+
end
24+
end

lib/onesignal/request.rb

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,38 @@ def initialize(client)
66
@client = client
77
end
88

9-
def get(path)
10-
request(path, Net::HTTP::Get)
9+
def get(path, params = {})
10+
uri = uri(path)
11+
12+
if @client.app_id
13+
params[:app_id] = @client.app_id
14+
end
15+
16+
uri.query = URI.encode_www_form(params)
17+
18+
request(uri, Net::HTTP::Get)
1119
end
1220

1321
def post(path, params)
14-
request(path, Net::HTTP::Post, params)
22+
uri = uri(path)
23+
request(uri(path), Net::HTTP::Post, params)
1524
end
1625

1726
def put(path, params)
18-
request(path, Net::HTTP::Put, params)
27+
uri = uri(path)
28+
request(uri, Net::HTTP::Put, params)
1929
end
2030

2131
private
2232

23-
def request(path, klass, params = nil)
24-
uri = URI.parse(OneSignal::Client::BASE_URL + path)
33+
def uri(path)
34+
URI.parse(OneSignal::Client::BASE_URL + path)
35+
end
36+
37+
def request(uri, klass, params = nil)
2538
request = klass.new(uri.request_uri)
2639

27-
if @client.app_id
40+
if params && @client.app_id
2841
params[:app_id] = @client.app_id
2942
end
3043

lib/onesignal/request_error.rb

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,22 @@
11
module OneSignal
22
class RequestError < StandardError
3-
attr_reader :message
43
attr_reader :http_status
54
attr_reader :http_body
65

76
def initialize(message, http_status, http_body)
8-
@message = message
97
@http_status = http_status
108
@http_body = http_body
119

1210
if @http_status
13-
@message += " - http status : #{@http_status}"
11+
message += " - http status : #{@http_status}"
1412
end
1513

1614
if @http_body
17-
@message += " - http body : #{@http_body}"
15+
message += " - http body : #{@http_body}"
1816
end
1917

20-
super(@message)
18+
super(message)
2119
end
2220
end
2321
end
22+
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
module OneSignal
2+
class PlayerResource
3+
def initialize(client)
4+
@client = client
5+
end
6+
7+
def all(params = {})
8+
response = request.get('/players', params)
9+
players = JSON.parse(response.body)['players']
10+
11+
players.map(&OneSignal::Player)
12+
end
13+
14+
def find(id)
15+
response = request.get("/players/#{id}")
16+
player = JSON.parse(response.body)
17+
18+
OneSignal::Player.new(player)
19+
end
20+
21+
def create(params)
22+
response = request.post('/players', params)
23+
24+
JSON.parse(response.body)['id']
25+
end
26+
27+
def update(id, params)
28+
request.put("/players/#{id}", params)
29+
30+
true
31+
end
32+
33+
def on_session(id, params)
34+
request.post("/players/#{id}/on_session", params)
35+
36+
true
37+
end
38+
39+
def on_purchase(id, params)
40+
request.post("/players/#{id}/on_purchase", params)
41+
42+
true
43+
end
44+
45+
def on_focus(id, params)
46+
request.post("/players/#{id}/on_focus", params)
47+
48+
true
49+
end
50+
51+
def csv_export(id)
52+
params = { app_id: id }
53+
response = request.post('/players/csv_export', params)
54+
55+
JSON.parse(response.body)['csv_file_url']
56+
end
57+
58+
private
59+
60+
def request
61+
@request ||= OneSignal::Request.new(@client)
62+
end
63+
end
64+
end

0 commit comments

Comments
 (0)