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 CHANGED
@@ -11,3 +11,8 @@ group :development do
11
11
  gem "jeweler", "~> 1.5.1"
12
12
  gem "rcov", ">= 0"
13
13
  end
14
+
15
+ gem "rspec"
16
+ gem "rdoc"
17
+
18
+ gem "syntax"
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.1)
6
+ jeweler (1.5.2)
6
7
  bundler (~> 1.0.0)
7
8
  git (>= 1.2.5)
8
9
  rake
9
- rake (0.8.7)
10
- rcov (0.9.9)
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
- api = Racked.new
37
- mailboxes = api.get_mailmoxes # => [{"name"=>"tomthumb", "displayName"=>"Tom Thumb"}, {"name"=>"dicktracy", "displayName"=>"Dick Tracy"}]
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
- task :default => :test
45
+ require 'rspec/core/rake_task'
46
+ RSpec::Core::RakeTask.new('spec')
47
+
48
+ task :default => :spec
46
49
 
47
- require 'rake/rdoctask'
48
- Rake::RDocTask.new do |rdoc|
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.9.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
- def initialize
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(MAIL_CFG["server"], MAIL_CFG["version_prefix"], MAIL_CFG["user_key"], MAIL_CFG["secret_hash"])
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
- response = @server.get '/customers/856863/domains/econetmail.com', @server.json_format
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 '/customers/856863/domains/econetmail.com/rs/mailboxes/?size=' + size.to_s + '&offset=' + offset.to_s, @server.json_format
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(mailbox, account_details = {})
66
- self.check_account_details(account_details)
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 '/customers/856863/domains/econetmail.com/rs/mailboxes/' + mailbox, @server.json_format
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(account_details = {}, mailbox)
83
- raise ArgumentError, "account_details hash must be supplied." unless !account_details.empty?
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(msisdn_number, fields_array)
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 '/customers/856863/domains/econetmail.com/rs/mailboxes/' + msisdn_number, fields_array
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(msisdn_number, fields_array)
105
- #create a customer mailbox
106
- response = @server.put '/customers/856863/domains/econetmail.com/rs/mailboxes/' + msisdn_number, fields_array
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(msisdn)
115
- #create a customer mailbox
116
- response = @server.delete '/customers/856863/domains/econetmail.com/rs/mailboxes/' + msisdn
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
- request = Net::HTTP::Post.new(request_uri(uri), prepared_headers)
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
@@ -1,3 +1,4 @@
1
+ $:.unshift(File.dirname(__FILE__))
1
2
  require 'mailaccounts.rb'
2
3
  require 'mailaccountsMappingRegistry.rb'
3
4
  require 'soap/rpc/driver'
@@ -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
@@ -0,0 +1,7 @@
1
+ require 'rspec'
2
+ require 'racked'
3
+
4
+ RSpec.configure do |config|
5
+ config.color_enabled = true
6
+ config.formatter = 'documentation'
7
+ end
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.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-04-06 00:00:00 +02:00
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: shoulda
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: :development
30
+ type: :runtime
31
31
  prerelease: false
32
32
  version_requirements: *id001
33
33
  - !ruby/object:Gem::Dependency
34
- name: bundler
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: *id002
86
+ version_requirements: *id005
48
87
  - !ruby/object:Gem::Dependency
49
88
  name: jeweler
50
- requirement: &id003 !ruby/object:Gem::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: *id003
101
+ version_requirements: *id006
63
102
  - !ruby/object:Gem::Dependency
64
103
  name: rcov
65
- requirement: &id004 !ruby/object:Gem::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: *id004
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: 2410697322953732488
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