1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00

[stormondemand|account] Add Account service and token APIs

This commit is contained in:
Eric Wong 2013-05-25 15:16:42 +08:00
parent 5f44aa8498
commit ed231cee87
6 changed files with 158 additions and 0 deletions

25
lib/fog/account.rb Normal file
View file

@ -0,0 +1,25 @@
module Fog
module Account
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/account'
Fog::Account::StormOnDemand.new(attributes)
else
raise ArgumentError.new("#{provider} has no account service")
end
end
def self.providers
Fog.services[:account]
end
end
end

View file

@ -0,0 +1,58 @@
require 'fog/storm_on_demand'
require 'fog/storm_on_demand/shared'
require 'fog/account'
module Fog
module Account
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/account'
model :token
collection :tokens
request_path 'fog/storm_on_demand/requests/account'
request :create_token
request :expire_token
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

View file

@ -0,0 +1,23 @@
require 'fog/core/model'
module Fog
module Account
class StormOnDemand
class Token < Fog::Model
attribute :token
attribute :expires
def initialize(attributes={})
super
end
def expire
service.expire_token.body['expired'].to_i == 1 ? true : false
end
end
end
end
end

View file

@ -0,0 +1,20 @@
require 'fog/core/collection'
require 'fog/storm_on_demand/models/account/token'
module Fog
module Account
class StormOnDemand
class Tokens < Fog::Collection
model Fog::Account::StormOnDemand::Token
def create(options={})
t = service.create_token(options).body
new(t)
end
end
end
end
end

View file

@ -0,0 +1,16 @@
module Fog
module Account
class StormOnDemand
class Real
def create_token(options={})
request(
:path => '/Account/Auth/token',
:body => Fog::JSON.encode(:params => options)
)
end
end
end
end
end

View file

@ -0,0 +1,16 @@
module Fog
module Account
class StormOnDemand
class Real
def expire_token(options={})
request(
:path => '/Account/Auth/expireToken',
:body => Fog::JSON.encode(:params => options)
)
end
end
end
end
end