lib/pushpad/subscription.rb in pushpad-1.2.0 vs lib/pushpad/subscription.rb in pushpad-1.3.0

- old
+ new

@@ -1,13 +1,22 @@ module Pushpad class Subscription + class CreateError < RuntimeError + end + + class UpdateError < RuntimeError + end + class CountError < RuntimeError end class FindError < RuntimeError end + class DeleteError < RuntimeError + end + attr_reader :id, :endpoint, :p256dh, :auth, :uid, :tags, :last_click_at, :created_at def initialize(options) @id = options[:id] @endpoint = options[:endpoint] @@ -16,11 +25,25 @@ @uid = options[:uid] @tags = options[:tags] @last_click_at = options[:last_click_at] && Time.parse(options[:last_click_at]) @created_at = options[:created_at] && Time.parse(options[:created_at]) end + + def self.create(attributes, options = {}) + project_id = options[:project_id] || Pushpad.project_id + raise "You must set project_id" unless project_id + + endpoint = "https://pushpad.xyz/api/v1/projects/#{project_id}/subscriptions" + response = Request.post(endpoint, attributes.to_json) + unless response.code == "201" + raise CreateError, "Response #{response.code} #{response.message}: #{response.body}" + end + + new(JSON.parse(response.body, symbolize_names: true)) + end + def self.count(options = {}) project_id = options[:project_id] || Pushpad.project_id raise "You must set project_id" unless project_id endpoint = "https://pushpad.xyz/api/v1/projects/#{project_id}/subscriptions" @@ -31,10 +54,23 @@ end response["X-Total-Count"].to_i end + def self.find(id, options = {}) + project_id = options[:project_id] || Pushpad.project_id + raise "You must set project_id" unless project_id + + response = Request.get("https://pushpad.xyz/api/v1/projects/#{project_id}/subscriptions/#{id}") + + unless response.code == "200" + raise FindError, "Response #{response.code} #{response.message}: #{response.body}" + end + + new(JSON.parse(response.body, symbolize_names: true)) + end + def self.find_all(options = {}) project_id = options[:project_id] || Pushpad.project_id raise "You must set project_id" unless project_id query_parameters_with_pagination = query_parameters(options) @@ -47,9 +83,42 @@ raise FindError, "Response #{response.code} #{response.message}: #{response.body}" end JSON.parse(response.body, symbolize_names: true).map do |attributes| new(attributes) + end + end + + def update(attributes, options = {}) + project_id = options[:project_id] || Pushpad.project_id + raise "You must set project_id" unless project_id + + raise "You must set id" unless id + + endpoint = "https://pushpad.xyz/api/v1/projects/#{project_id}/subscriptions/#{id}" + response = Request.patch(endpoint, attributes.to_json) + + unless response.code == "200" + raise UpdateError, "Response #{response.code} #{response.message}: #{response.body}" + end + + attributes = JSON.parse(response.body, symbolize_names: true) + @uid = attributes[:uid] + @tags = attributes[:tags] + + self + end + + def delete(options = {}) + project_id = options[:project_id] || Pushpad.project_id + raise "You must set project_id" unless project_id + + raise "You must set id" unless id + + response = Request.delete("https://pushpad.xyz/api/v1/projects/#{project_id}/subscriptions/#{id}") + + unless response.code == "204" + raise DeleteError, "Response #{response.code} #{response.message}: #{response.body}" end end private