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 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