racked 0.9.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +5 -0
- data/Gemfile.lock +19 -3
- data/README.rdoc +33 -11
- data/Rakefile +7 -4
- data/VERSION +1 -1
- data/lib/racked.rb +69 -20
- data/lib/racked/server.rb +4 -2
- data/lib/soap_api/mailaccountsDriver.rb +1 -0
- data/spec/racked_spec.rb +34 -0
- data/spec/spec_helper.rb +7 -0
- metadata +55 -12
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,14 +1,27 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
+
diff-lcs (1.1.3)
|
4
5
|
git (1.2.5)
|
5
|
-
jeweler (1.5.
|
6
|
+
jeweler (1.5.2)
|
6
7
|
bundler (~> 1.0.0)
|
7
8
|
git (>= 1.2.5)
|
8
9
|
rake
|
9
|
-
|
10
|
-
|
10
|
+
json (1.6.3)
|
11
|
+
rake (0.9.2.2)
|
12
|
+
rcov (0.9.11)
|
13
|
+
rdoc (3.11)
|
14
|
+
json (~> 1.4)
|
15
|
+
rspec (2.7.0)
|
16
|
+
rspec-core (~> 2.7.0)
|
17
|
+
rspec-expectations (~> 2.7.0)
|
18
|
+
rspec-mocks (~> 2.7.0)
|
19
|
+
rspec-core (2.7.1)
|
20
|
+
rspec-expectations (2.7.0)
|
21
|
+
diff-lcs (~> 1.1.2)
|
22
|
+
rspec-mocks (2.7.0)
|
11
23
|
shoulda (2.11.3)
|
24
|
+
syntax (1.0.0)
|
12
25
|
|
13
26
|
PLATFORMS
|
14
27
|
ruby
|
@@ -17,4 +30,7 @@ DEPENDENCIES
|
|
17
30
|
bundler (~> 1.0.0)
|
18
31
|
jeweler (~> 1.5.1)
|
19
32
|
rcov
|
33
|
+
rdoc
|
34
|
+
rspec
|
20
35
|
shoulda
|
36
|
+
syntax
|
data/README.rdoc
CHANGED
@@ -21,17 +21,39 @@ further details.
|
|
21
21
|
|
22
22
|
#gem install racked
|
23
23
|
|
24
|
-
In your config file e.g "mailapi.yml"
|
25
|
-
server: 'api.emailsrvr.com'
|
26
|
-
version_prefix: '/v0'
|
27
|
-
user_key: 'xxxxxxx'
|
28
|
-
secret_hash: 'xxxxxxx
|
29
|
-
|
30
|
-
In your initializer or before you call the API
|
31
|
-
require 'yaml' #depending on your situation
|
32
|
-
MAIL_CFG = YAML::load(File.read('path_to/mailapi.yml'))
|
33
24
|
|
34
25
|
== Usage:
|
35
26
|
|
36
|
-
|
37
|
-
|
27
|
+
@valid_attr = {
|
28
|
+
:server_host => 'api.emailsrvr.com',
|
29
|
+
:version_prefix => '/v0',
|
30
|
+
:user_key => 'xxxxxxx',
|
31
|
+
:secret_hash => 'xxxxxxx',
|
32
|
+
}
|
33
|
+
api = Racked.new(@valid_attr)
|
34
|
+
|
35
|
+
Add Customer Account
|
36
|
+
opts = {:data_fields_hash => {:name => "Foo Bar Corp", :referenceNumber => "0001"}}
|
37
|
+
api.add_customer(opts)
|
38
|
+
|
39
|
+
Add Domain
|
40
|
+
opts = {
|
41
|
+
:domain => "foobar.com",
|
42
|
+
:customer_number => "xxxxx",
|
43
|
+
:data_fields_hash => {
|
44
|
+
"serviceType" => "exchange", # Domain service type. "rsemail" = "Rackspace Email Only". "exchange" = "Exchange Only". "both" = "Rackspace Email and Exchange"
|
45
|
+
:exchangeMaxNumMailboxes => "5"
|
46
|
+
}
|
47
|
+
}
|
48
|
+
|
49
|
+
Create Mailbox
|
50
|
+
ops = {
|
51
|
+
:domain => "foobar.com",
|
52
|
+
:mailbox_type => "ex",
|
53
|
+
:customer_number => "xxxxx",
|
54
|
+
:mailbox => "tthumb",
|
55
|
+
:data_fields_hash => {:password => '10G0t0Sa', :displayName => "Tom Thumb", :size => "2048"}
|
56
|
+
}
|
57
|
+
api.create_mailbox(opts)
|
58
|
+
|
59
|
+
...
|
data/Rakefile
CHANGED
@@ -8,7 +8,7 @@ rescue Bundler::BundlerError => e
|
|
8
8
|
exit e.status_code
|
9
9
|
end
|
10
10
|
require 'rake'
|
11
|
-
|
11
|
+
include Rake::DSL
|
12
12
|
require 'jeweler'
|
13
13
|
Jeweler::Tasks.new do |gem|
|
14
14
|
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
@@ -42,10 +42,13 @@ Rcov::RcovTask.new do |test|
|
|
42
42
|
test.verbose = true
|
43
43
|
end
|
44
44
|
|
45
|
-
|
45
|
+
require 'rspec/core/rake_task'
|
46
|
+
RSpec::Core::RakeTask.new('spec')
|
47
|
+
|
48
|
+
task :default => :spec
|
46
49
|
|
47
|
-
require '
|
48
|
-
|
50
|
+
require 'rdoc/task'
|
51
|
+
RDoc::Task.new do |rdoc|
|
49
52
|
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
50
53
|
|
51
54
|
rdoc.rdoc_dir = 'rdoc'
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
1.0.0
|
data/lib/racked.rb
CHANGED
@@ -32,20 +32,32 @@ end
|
|
32
32
|
class Racked
|
33
33
|
#include Singleton
|
34
34
|
|
35
|
-
|
35
|
+
attr_accessor :server_host, :version_prefix, :user_key, :secret_hash
|
36
|
+
|
37
|
+
def initialize(options)
|
38
|
+
check_options(options, [:server_host, :version_prefix, :user_key, :secret_hash])
|
39
|
+
@server_host = options[:server_host]
|
40
|
+
@version_prefix = options[:version_prefix]
|
41
|
+
@user_key = options[:user_key]
|
42
|
+
@secret_hash = options[:secret_hash]
|
36
43
|
#read config file
|
37
|
-
|
38
|
-
@server = Server.new(
|
44
|
+
# @server = Server.new(MAIL_CFG["server"], MAIL_CFG["version_prefix"], MAIL_CFG["user_key"], MAIL_CFG["secret_hash"])
|
45
|
+
@server = Server.new(options[:server_host], options[:version_prefix], options[:user_key], options[:secret_hash])
|
39
46
|
@server.xml_format
|
47
|
+
|
40
48
|
end
|
41
49
|
|
42
|
-
def get_domain_info
|
43
|
-
|
50
|
+
def get_domain_info(options)
|
51
|
+
check_options(options, [:domain, :customer_number])
|
52
|
+
response = @server.get "/customers/#{@customer_number}/domains/#{@domain}", @server.json_format
|
44
53
|
end
|
45
54
|
|
46
55
|
def get_mailboxes(size=50, offset=0)
|
56
|
+
check_options(options, [:domain, :customer_number, :mailbox_type])
|
57
|
+
size = options[:size] || 50
|
58
|
+
offset = options[:offset] || 0
|
47
59
|
#get customer list
|
48
|
-
response = @server.get
|
60
|
+
response = @server.get "/customers/#{@customer_number}/domains/#{@domain}/#{@mailbox_type}/mailboxes/?size=" + size.to_s + '&offset=' + offset.to_s, @server.json_format
|
49
61
|
puts response.inspect
|
50
62
|
# puts response['x-error-message']
|
51
63
|
# puts response.body
|
@@ -62,10 +74,11 @@ class Racked
|
|
62
74
|
mailboxes << mailbox
|
63
75
|
end
|
64
76
|
end
|
65
|
-
def get_mailbox_details(
|
66
|
-
|
77
|
+
def get_mailbox_details(options)
|
78
|
+
check_options(options, [:domain, :customer_number, :mailbox_type, :mailbox])
|
79
|
+
|
67
80
|
#get mailbox details
|
68
|
-
response = @server.get
|
81
|
+
response = @server.get "/customers/#{@customer_number}/domains/#{@domain}/#{@mailbox_type}/mailboxes/" + @mailbox, @server.json_format
|
69
82
|
puts response.inspect
|
70
83
|
puts response['x-error-message']
|
71
84
|
# response = JSON.parse(response)
|
@@ -79,21 +92,25 @@ class Racked
|
|
79
92
|
return response
|
80
93
|
end
|
81
94
|
|
82
|
-
def get_last_login(
|
83
|
-
|
95
|
+
def get_last_login(account_details_for_soap = {}, mailbox)
|
96
|
+
#TO DO: need to rethink
|
97
|
+
check_options(options, [:mailbox])
|
98
|
+
|
99
|
+
self.account_details_for_soap(options[:account_details])
|
84
100
|
driver = UtilsSoapPort.new
|
85
101
|
# driver.wiredump_dev = STDOUT
|
86
102
|
|
87
|
-
res = driver.GetUserLastLogin(account_details[:resellerUsername], account_details[:resellerPassword], account_details[:hostName], mailbox, account_details[:lastlogin])
|
103
|
+
res = driver.GetUserLastLogin(@account_details[:resellerUsername], @account_details[:resellerPassword], @account_details[:hostName], @mailbox, @account_details[:lastlogin])
|
88
104
|
# if res[1].class == String && !res[1].empty?
|
89
105
|
# puts "yes"
|
90
106
|
# end
|
91
107
|
return res
|
92
108
|
end
|
93
109
|
|
94
|
-
def create_mailbox(
|
110
|
+
def create_mailbox(options)
|
111
|
+
check_options(options, [:domain, :customer_number, :mailbox_type, :mailbox, :data_fields_hash])
|
95
112
|
#create a customer mailbox
|
96
|
-
response = @server.post
|
113
|
+
response = @server.post "/customers/#{@customer_number}/domains/#{@domain}/#{@mailbox_type}/mailboxes/#{@mailbox}", @data_fields_hash, @server.json_format
|
97
114
|
# puts response.inspect
|
98
115
|
# puts response['x-error-message']
|
99
116
|
# puts response.body.inspect
|
@@ -101,9 +118,10 @@ class Racked
|
|
101
118
|
#response = JSON.parse(response.body )
|
102
119
|
end
|
103
120
|
|
104
|
-
def update_mailbox(
|
105
|
-
|
106
|
-
|
121
|
+
def update_mailbox(options)
|
122
|
+
check_options(options, [:domain, :customer_number, :mailbox_type, :mailbox, :data_fields_hash])
|
123
|
+
#update a customer mailbox
|
124
|
+
response = @server.put "/customers/#{@customer_number}/domains/#{@domain}/#{@mailbox_type}/mailboxes/#{@mailbox}", @data_fields_hash
|
107
125
|
# puts response.inspect
|
108
126
|
# puts response['x-error-message']
|
109
127
|
# puts response.body.inspect
|
@@ -111,9 +129,10 @@ class Racked
|
|
111
129
|
#response = JSON.parse(response.body )
|
112
130
|
end
|
113
131
|
|
114
|
-
def delete_mailbox(
|
115
|
-
#
|
116
|
-
|
132
|
+
def delete_mailbox(options)
|
133
|
+
#delete a customer mailbox
|
134
|
+
check_options(options, [:domain, :customer_number, :mailbox_type, :mailbox])
|
135
|
+
response = @server.delete "/customers/#{@customer_number}/domains/#{@domain}/#{@mailbox_type}/mailboxes/#{@mailbox}"
|
117
136
|
# puts response.inspect
|
118
137
|
# puts response['x-error-message']
|
119
138
|
# puts response.body.inspect
|
@@ -121,10 +140,40 @@ class Racked
|
|
121
140
|
#response = JSON.parse(response.body )
|
122
141
|
end
|
123
142
|
|
143
|
+
def add_customer(options)
|
144
|
+
check_options(options, [:data_fields_hash])
|
145
|
+
#add a customer account
|
146
|
+
response = @server.post "/customers", @data_fields_hash, @server.json_format
|
147
|
+
return response
|
148
|
+
end
|
149
|
+
def add_domain(options)
|
150
|
+
check_options(options, [:domain, :customer_number, :data_fields_hash])
|
151
|
+
#add a customer account
|
152
|
+
response = @server.post "/customers/#{@customer_number}/domains/#{@domain}", @data_fields_hash, @server.json_format
|
153
|
+
return response
|
154
|
+
end
|
155
|
+
|
124
156
|
private
|
125
157
|
def check_account_details(account_details)
|
126
158
|
raise ArgumentError, 'Argument missing! account_details[:customer_number] missing.' unless account_details[:customer_number].empty? || account_details.include?(:customer_number)
|
127
159
|
raise ArgumentError, 'Argument missing! account_details[:domain_name] missing.' unless account_details[:domain_name].empty? || account_details.include?(:domain_name)
|
160
|
+
@account_details = account_details
|
161
|
+
end
|
162
|
+
|
163
|
+
def check_options(supplied_options_hash, options_to_check)
|
164
|
+
supplied_options_hash[:mailbox_type] ||= "rs"
|
165
|
+
missing_options = []
|
166
|
+
options_to_check.each do |opt|
|
167
|
+
missing_options << opt if !supplied_options_hash[opt] || supplied_options_hash[opt].empty?
|
168
|
+
end
|
169
|
+
raise ArgumentError, "Argument(s) missing! You need to supply :#{missing_options.join(", :")}" unless missing_options.empty?
|
170
|
+
|
171
|
+
@customer_number = supplied_options_hash[:customer_number]
|
172
|
+
@domain = supplied_options_hash[:domain]
|
173
|
+
@mailbox_type = supplied_options_hash[:mailbox_type]
|
174
|
+
@mailbox = supplied_options_hash[:mailbox]
|
175
|
+
@data_fields_hash = supplied_options_hash[:data_fields_hash]
|
176
|
+
|
128
177
|
end
|
129
178
|
|
130
179
|
|
data/lib/racked/server.rb
CHANGED
@@ -50,9 +50,11 @@ class Server
|
|
50
50
|
http_response = make_request request, uri
|
51
51
|
end
|
52
52
|
|
53
|
-
def post(url_string, fields_hash)
|
53
|
+
def post(url_string, fields_hash, format)
|
54
54
|
uri = full_uri(url_string)
|
55
|
-
|
55
|
+
headers = prepared_headers
|
56
|
+
headers['Accept'] = format
|
57
|
+
request = Net::HTTP::Post.new(request_uri(uri), headers)
|
56
58
|
request.set_form_data(fields_hash)
|
57
59
|
http_response = make_request request, uri
|
58
60
|
end
|
data/spec/racked_spec.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Racked do
|
4
|
+
before(:each) do
|
5
|
+
@valid_attr = {
|
6
|
+
:server_host => 'api.emailsrvr.com',
|
7
|
+
:version_prefix => '/v0',
|
8
|
+
:user_key => 'xxxxxxx',
|
9
|
+
:secret_hash => 'xxxxxxx',
|
10
|
+
}
|
11
|
+
@invalid_attr = {}
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should throw argument errors when initialized with no options' do
|
15
|
+
expect{ Racked.new }.to raise_error(ArgumentError)
|
16
|
+
end
|
17
|
+
it 'should throw argument errors if the required options are missing' do
|
18
|
+
expect{ Racked.new(@invalid_attr) }.to raise_error(ArgumentError)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should initialize if the required options are supplied' do
|
22
|
+
api = Racked.new(@valid_attr)
|
23
|
+
api.class.should == Racked
|
24
|
+
end
|
25
|
+
# it 'should respond to attributes' do
|
26
|
+
# api = Racked.new(@valid_attr)
|
27
|
+
# api.should respond_to(:domain, :mailbox_type, :customer_number)
|
28
|
+
# end
|
29
|
+
it 'should assign attributes' do
|
30
|
+
api = Racked.new(@valid_attr)
|
31
|
+
api.server_host.should == "api.emailsrvr.com"
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -3,10 +3,10 @@ name: racked
|
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
|
+
- 1
|
6
7
|
- 0
|
7
|
-
- 9
|
8
8
|
- 0
|
9
|
-
version: 0.
|
9
|
+
version: 1.0.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Noto Modungwa
|
@@ -14,11 +14,11 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-
|
17
|
+
date: 2011-12-05 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
|
-
name:
|
21
|
+
name: rspec
|
22
22
|
requirement: &id001 !ruby/object:Gem::Requirement
|
23
23
|
none: false
|
24
24
|
requirements:
|
@@ -27,12 +27,51 @@ dependencies:
|
|
27
27
|
segments:
|
28
28
|
- 0
|
29
29
|
version: "0"
|
30
|
-
type: :
|
30
|
+
type: :runtime
|
31
31
|
prerelease: false
|
32
32
|
version_requirements: *id001
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
|
-
name:
|
34
|
+
name: rdoc
|
35
35
|
requirement: &id002 !ruby/object:Gem::Requirement
|
36
|
+
none: false
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
segments:
|
41
|
+
- 0
|
42
|
+
version: "0"
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: *id002
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: syntax
|
48
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
segments:
|
54
|
+
- 0
|
55
|
+
version: "0"
|
56
|
+
type: :runtime
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *id003
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: shoulda
|
61
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
segments:
|
67
|
+
- 0
|
68
|
+
version: "0"
|
69
|
+
type: :development
|
70
|
+
prerelease: false
|
71
|
+
version_requirements: *id004
|
72
|
+
- !ruby/object:Gem::Dependency
|
73
|
+
name: bundler
|
74
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
36
75
|
none: false
|
37
76
|
requirements:
|
38
77
|
- - ~>
|
@@ -44,10 +83,10 @@ dependencies:
|
|
44
83
|
version: 1.0.0
|
45
84
|
type: :development
|
46
85
|
prerelease: false
|
47
|
-
version_requirements: *
|
86
|
+
version_requirements: *id005
|
48
87
|
- !ruby/object:Gem::Dependency
|
49
88
|
name: jeweler
|
50
|
-
requirement: &
|
89
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
51
90
|
none: false
|
52
91
|
requirements:
|
53
92
|
- - ~>
|
@@ -59,10 +98,10 @@ dependencies:
|
|
59
98
|
version: 1.5.1
|
60
99
|
type: :development
|
61
100
|
prerelease: false
|
62
|
-
version_requirements: *
|
101
|
+
version_requirements: *id006
|
63
102
|
- !ruby/object:Gem::Dependency
|
64
103
|
name: rcov
|
65
|
-
requirement: &
|
104
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
66
105
|
none: false
|
67
106
|
requirements:
|
68
107
|
- - ">="
|
@@ -72,7 +111,7 @@ dependencies:
|
|
72
111
|
version: "0"
|
73
112
|
type: :development
|
74
113
|
prerelease: false
|
75
|
-
version_requirements: *
|
114
|
+
version_requirements: *id007
|
76
115
|
description: Allows you to manage your rackspace hosted mailboxes, eg. create a new mailbox.
|
77
116
|
email: notomodungwa@gmail.com
|
78
117
|
executables: []
|
@@ -97,6 +136,8 @@ files:
|
|
97
136
|
- lib/soap_api/mailaccountsMappingRegistry.rb
|
98
137
|
- test/helper.rb
|
99
138
|
- test/test_racked.rb
|
139
|
+
- spec/racked_spec.rb
|
140
|
+
- spec/spec_helper.rb
|
100
141
|
has_rdoc: true
|
101
142
|
homepage: http://github.com/NoTiTo/racked
|
102
143
|
licenses:
|
@@ -112,7 +153,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
112
153
|
requirements:
|
113
154
|
- - ">="
|
114
155
|
- !ruby/object:Gem::Version
|
115
|
-
hash:
|
156
|
+
hash: -3169237959093835828
|
116
157
|
segments:
|
117
158
|
- 0
|
118
159
|
version: "0"
|
@@ -132,5 +173,7 @@ signing_key:
|
|
132
173
|
specification_version: 3
|
133
174
|
summary: Rackspace mailbox management API
|
134
175
|
test_files:
|
176
|
+
- spec/racked_spec.rb
|
177
|
+
- spec/spec_helper.rb
|
135
178
|
- test/helper.rb
|
136
179
|
- test/test_racked.rb
|