diff --git a/lib/fog/storm_on_demand.rb b/lib/fog/storm_on_demand.rb index d3150be1d..257ac9ac2 100644 --- a/lib/fog/storm_on_demand.rb +++ b/lib/fog/storm_on_demand.rb @@ -10,6 +10,7 @@ module Fog service(:dns, 'storm_on_demand/dns', 'DNS') service(:billing, 'storm_on_demand/billing', 'Billing') service(:monitoring, 'storm_on_demand/monitoring', 'Monitoring') + service(:support, 'storm_on_demand/support', 'Support') end end diff --git a/lib/fog/storm_on_demand/models/support/alert.rb b/lib/fog/storm_on_demand/models/support/alert.rb new file mode 100644 index 000000000..978a81bce --- /dev/null +++ b/lib/fog/storm_on_demand/models/support/alert.rb @@ -0,0 +1,19 @@ +require 'fog/core/model' + +module Fog + module Support + class StormOnDemand + + class Alert < Fog::Model + attribute :message + attribute :subject + + def initialize(attributes={}) + super + end + + end + + end + end +end diff --git a/lib/fog/storm_on_demand/models/support/alerts.rb b/lib/fog/storm_on_demand/models/support/alerts.rb new file mode 100644 index 000000000..768346a12 --- /dev/null +++ b/lib/fog/storm_on_demand/models/support/alerts.rb @@ -0,0 +1,20 @@ +require 'fog/core/collection' +require 'fog/storm_on_demand/models/support/alert' + +module Fog + module Support + class StormOnDemand + + class Alerts < Fog::Collection + model Fog::Support::StormOnDemand::Alert + + def get_active + alert = service.get_active_alert.body['active_alert'] + new(alert) + end + + end + + end + end +end diff --git a/lib/fog/storm_on_demand/models/support/ticket.rb b/lib/fog/storm_on_demand/models/support/ticket.rb new file mode 100644 index 000000000..65d684d2b --- /dev/null +++ b/lib/fog/storm_on_demand/models/support/ticket.rb @@ -0,0 +1,74 @@ +require 'fog/core/model' + +module Fog + module Support + class StormOnDemand + + class Ticket < Fog::Model + identity :id + attribute :accnt + attribute :account + attribute :body + attribute :closed + attribute :email + attribute :handler + attribute :last_responded + attribute :received + attribute :secid + attribute :status + attribute :subject + attribute :type + + def initialize(attributes={}) + super + end + + def add_feedback(options) + requires :identity + res = service.add_feedback({:id => identity}.merge!(options)).body + res['feedback'].to_i == 1 ? true : false + end + + def add_transaction_feedback(options) + requires :identity + requires :secid + params = {:ticket_id => identity, + :secid => secid}.merge!(options) + service.add_transaction_feedback(params).body + end + + def authenticate(options) + requires :identity + requires :secid + params = {:id => identity, :secid => secid}.merge!(options) + service.authenticate(params).body + end + + def close + requires :identity + requires :secid + res = service.close_ticket(:id => identity, :secid => secid).body + res['closed'].to_i == 1 ? true : false + end + + def reopen + requires :identity + requires :secid + res = service.reopen_ticket(:id => identity, :secid => secid).body + res['reopened'].to_i == 1 ? true : false + end + + def reply(options) + requires :identity + requires :secid + res = service.reply_ticket({:id => identity, + :secid => secid}.merge!(options)).body + res['reply'].to_i == 1 ? true : false + end + + + end + + end + end +end diff --git a/lib/fog/storm_on_demand/models/support/tickets.rb b/lib/fog/storm_on_demand/models/support/tickets.rb new file mode 100644 index 000000000..2df5ac9c0 --- /dev/null +++ b/lib/fog/storm_on_demand/models/support/tickets.rb @@ -0,0 +1,33 @@ +require 'fog/core/collection' +require 'fog/storm_on_demand/models/support/ticket' + +module Fog + module Support + class StormOnDemand + + class Tickets < Fog::Collection + model Fog::Support::StormOnDemand::Ticket + + def create(options) + ticket = service.create_ticket(options).body + new(ticket) + end + + def get(ticket_id, secid) + service.get_ticket_details(:id => ticket_id, :secid => secid).body + end + + def all(options={}) + tickets = service.list_tickets(options).body['items'] + load(tickets) + end + + def types + service.list_ticket_types.body['types'] + end + + end + + end + end +end diff --git a/lib/fog/storm_on_demand/requests/support/add_feedback.rb b/lib/fog/storm_on_demand/requests/support/add_feedback.rb new file mode 100644 index 000000000..ac956da46 --- /dev/null +++ b/lib/fog/storm_on_demand/requests/support/add_feedback.rb @@ -0,0 +1,16 @@ +module Fog + module Support + class StormOnDemand + class Real + + def add_feedback(options={}) + request( + :path => '/Support/Ticket/addFeedback', + :body => Fog::JSON.encode(:params => options) + ) + end + + end + end + end +end diff --git a/lib/fog/storm_on_demand/requests/support/add_transaction_feedback.rb b/lib/fog/storm_on_demand/requests/support/add_transaction_feedback.rb new file mode 100644 index 000000000..6403cc7d9 --- /dev/null +++ b/lib/fog/storm_on_demand/requests/support/add_transaction_feedback.rb @@ -0,0 +1,16 @@ +module Fog + module Support + class StormOnDemand + class Real + + def add_transaction_feedback(options={}) + request( + :path => '/Support/Ticket/addTransactionFeedback', + :body => Fog::JSON.encode(:params => options) + ) + end + + end + end + end +end diff --git a/lib/fog/storm_on_demand/requests/support/authenticate.rb b/lib/fog/storm_on_demand/requests/support/authenticate.rb new file mode 100644 index 000000000..36182e268 --- /dev/null +++ b/lib/fog/storm_on_demand/requests/support/authenticate.rb @@ -0,0 +1,16 @@ +module Fog + module Support + class StormOnDemand + class Real + + def authenticate(options={}) + request( + :path => '/Support/Ticket/authenticate', + :body => Fog::JSON.encode(:params => options) + ) + end + + end + end + end +end diff --git a/lib/fog/storm_on_demand/requests/support/close_ticket.rb b/lib/fog/storm_on_demand/requests/support/close_ticket.rb new file mode 100644 index 000000000..93e6231b6 --- /dev/null +++ b/lib/fog/storm_on_demand/requests/support/close_ticket.rb @@ -0,0 +1,16 @@ +module Fog + module Support + class StormOnDemand + class Real + + def close_ticket(options={}) + request( + :path => '/Support/Ticket/close', + :body => Fog::JSON.encode(:params => options) + ) + end + + end + end + end +end diff --git a/lib/fog/storm_on_demand/requests/support/create_ticket.rb b/lib/fog/storm_on_demand/requests/support/create_ticket.rb new file mode 100644 index 000000000..5ec009728 --- /dev/null +++ b/lib/fog/storm_on_demand/requests/support/create_ticket.rb @@ -0,0 +1,16 @@ +module Fog + module Support + class StormOnDemand + class Real + + def create_ticket(options={}) + request( + :path => '/Support/Ticket/create', + :body => Fog::JSON.encode(:params => options) + ) + end + + end + end + end +end diff --git a/lib/fog/storm_on_demand/requests/support/get_active_alert.rb b/lib/fog/storm_on_demand/requests/support/get_active_alert.rb new file mode 100644 index 000000000..337d0a941 --- /dev/null +++ b/lib/fog/storm_on_demand/requests/support/get_active_alert.rb @@ -0,0 +1,16 @@ +module Fog + module Support + class StormOnDemand + class Real + + def get_active_alert(options={}) + request( + :path => '/Support/Alert/getActive', + :body => Fog::JSON.encode(:params => options) + ) + end + + end + end + end +end diff --git a/lib/fog/storm_on_demand/requests/support/get_ticket_details.rb b/lib/fog/storm_on_demand/requests/support/get_ticket_details.rb new file mode 100644 index 000000000..c1174bd91 --- /dev/null +++ b/lib/fog/storm_on_demand/requests/support/get_ticket_details.rb @@ -0,0 +1,16 @@ +module Fog + module Support + class StormOnDemand + class Real + + def get_ticket_details(options={}) + request( + :path => '/Support/Ticket/details', + :body => Fog::JSON.encode(:params => options) + ) + end + + end + end + end +end diff --git a/lib/fog/storm_on_demand/requests/support/list_ticket_types.rb b/lib/fog/storm_on_demand/requests/support/list_ticket_types.rb new file mode 100644 index 000000000..7b7275dea --- /dev/null +++ b/lib/fog/storm_on_demand/requests/support/list_ticket_types.rb @@ -0,0 +1,16 @@ +module Fog + module Support + class StormOnDemand + class Real + + def list_ticket_types(options={}) + request( + :path => '/Support/Ticket/types', + :body => Fog::JSON.encode(:params => options) + ) + end + + end + end + end +end diff --git a/lib/fog/storm_on_demand/requests/support/list_tickets.rb b/lib/fog/storm_on_demand/requests/support/list_tickets.rb new file mode 100644 index 000000000..29f414eb4 --- /dev/null +++ b/lib/fog/storm_on_demand/requests/support/list_tickets.rb @@ -0,0 +1,16 @@ +module Fog + module Support + class StormOnDemand + class Real + + def list_tickets(options={}) + request( + :path => '/Support/Ticket/list', + :body => Fog::JSON.encode(:params => options) + ) + end + + end + end + end +end diff --git a/lib/fog/storm_on_demand/requests/support/reopen_ticket.rb b/lib/fog/storm_on_demand/requests/support/reopen_ticket.rb new file mode 100644 index 000000000..2af38d5aa --- /dev/null +++ b/lib/fog/storm_on_demand/requests/support/reopen_ticket.rb @@ -0,0 +1,16 @@ +module Fog + module Support + class StormOnDemand + class Real + + def reopen_ticket(options={}) + request( + :path => '/Support/Ticket/reopen', + :body => Fog::JSON.encode(:params => options) + ) + end + + end + end + end +end diff --git a/lib/fog/storm_on_demand/requests/support/reply_ticket.rb b/lib/fog/storm_on_demand/requests/support/reply_ticket.rb new file mode 100644 index 000000000..546b64ce5 --- /dev/null +++ b/lib/fog/storm_on_demand/requests/support/reply_ticket.rb @@ -0,0 +1,16 @@ +module Fog + module Support + class StormOnDemand + class Real + + def reply_ticket(options={}) + request( + :path => '/Support/Ticket/reply', + :body => Fog::JSON.encode(:params => options) + ) + end + + end + end + end +end diff --git a/lib/fog/storm_on_demand/support.rb b/lib/fog/storm_on_demand/support.rb new file mode 100644 index 000000000..769534b04 --- /dev/null +++ b/lib/fog/storm_on_demand/support.rb @@ -0,0 +1,68 @@ +require 'fog/storm_on_demand' +require 'fog/support' +require 'fog/storm_on_demand/shared' + +module Fog + module Support + + class StormOnDemand < Fog::Service + + requires :storm_on_demand_username, :storm_on_demand_password + recognizes :storm_on_demand_auth_url + + model_path 'fog/storm_on_demand/models/support' + model :alert + collection :alerts + model :ticket + collection :tickets + + request_path 'fog/storm_on_demand/requests/support' + request :get_active_alert + request :add_feedback + request :add_transaction_feedback + request :authenticate + request :close_ticket + request :create_ticket + request :get_ticket_details + request :list_tickets + request :reply_ticket + request :list_ticket_types + + class Mock + + def self.data + @data ||= Hash.new + end + + def self.reset + @data = nil + end + + def self.reset_data(keys=data.keys) + for key in [*keys] + data.delete(key) + end + end + + def initialize(options={}) + @storm_on_demand_username = options[:storm_on_demand_username] + end + + def data + self.class.data[@storm_on_demand_username] + end + + def reset_data + self.class.data.delete(@storm_on_demand_username) + end + + end + + class Real + + include Fog::StormOnDemand::RealShared + + end + end + end +end diff --git a/lib/fog/support.rb b/lib/fog/support.rb new file mode 100644 index 000000000..f8a3afee2 --- /dev/null +++ b/lib/fog/support.rb @@ -0,0 +1,26 @@ +module Fog + module Support + + def self.[](provider) + self.new(:provider => provider) + end + + def self.new(attributes) + attributes = attributes.dup + provider = attributes.delete(:provider).to_s.downcase.to_sym + + if provider == :stormondemand + require 'fog/storm_on_demand/support' + Fog::Support::StormOnDemand.new(attributes) + else + raise ArgumentError.new("#{provider} has no support service") + end + + end + + def self.providers + Fog.services[:support] + end + + end +end