racked 0.9.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|