mailroute 0.0.1

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.
Files changed (190) hide show
  1. data/.gitignore +18 -0
  2. data/.ruby-gemset +1 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +4 -0
  5. data/Gemfile +6 -0
  6. data/Gemfile.lock +87 -0
  7. data/Guardfile +11 -0
  8. data/LICENSE.txt +22 -0
  9. data/README.md +57 -0
  10. data/Rakefile +42 -0
  11. data/lib/mailroute.rb +34 -0
  12. data/lib/mailroute/check_connection.rb +21 -0
  13. data/lib/mailroute/configuration.rb +24 -0
  14. data/lib/mailroute/extensions/active_resource/better_connection_error.rb +10 -0
  15. data/lib/mailroute/extensions/active_resource/formats.rb +19 -0
  16. data/lib/mailroute/extensions/active_resource/has_many.rb +13 -0
  17. data/lib/mailroute/extensions/active_resource/has_one.rb +13 -0
  18. data/lib/mailroute/extensions/active_resource/meta_information.rb +20 -0
  19. data/lib/mailroute/extensions/active_resource/urls_without_json_extension.rb +29 -0
  20. data/lib/mailroute/extensions/object.rb +3 -0
  21. data/lib/mailroute/extensions/relation.rb +59 -0
  22. data/lib/mailroute/models/admin.rb +21 -0
  23. data/lib/mailroute/models/base.rb +193 -0
  24. data/lib/mailroute/models/branding_info.rb +5 -0
  25. data/lib/mailroute/models/customer.rb +10 -0
  26. data/lib/mailroute/models/customer_contact.rb +6 -0
  27. data/lib/mailroute/models/domain.rb +56 -0
  28. data/lib/mailroute/models/domain_alias.rb +6 -0
  29. data/lib/mailroute/models/domain_contact.rb +6 -0
  30. data/lib/mailroute/models/email_account.rb +53 -0
  31. data/lib/mailroute/models/email_account_contact.rb +6 -0
  32. data/lib/mailroute/models/mail_server.rb +6 -0
  33. data/lib/mailroute/models/notification_account_task.rb +24 -0
  34. data/lib/mailroute/models/notification_domain_task.rb +6 -0
  35. data/lib/mailroute/models/outbound_server.rb +6 -0
  36. data/lib/mailroute/models/policy_domain.rb +6 -0
  37. data/lib/mailroute/models/policy_user.rb +6 -0
  38. data/lib/mailroute/models/reseller.rb +10 -0
  39. data/lib/mailroute/models/reseller_contact.rb +6 -0
  40. data/lib/mailroute/models/wblist.rb +7 -0
  41. data/lib/mailroute/version.rb +3 -0
  42. data/mailroute.gemspec +33 -0
  43. data/spec/lib/check_connection_spec.rb +43 -0
  44. data/spec/lib/configuration_spec.rb +17 -0
  45. data/spec/lib/mailroute/models/admin_spec.rb +13 -0
  46. data/spec/lib/mailroute/models/base_spec.rb +21 -0
  47. data/spec/lib/mailroute/models/customer_contact_spec.rb +32 -0
  48. data/spec/lib/mailroute/models/customer_spec.rb +244 -0
  49. data/spec/lib/mailroute/models/domain_alias_spec.rb +27 -0
  50. data/spec/lib/mailroute/models/domain_contact_spec.rb +32 -0
  51. data/spec/lib/mailroute/models/domain_spec.rb +215 -0
  52. data/spec/lib/mailroute/models/email_account_contact_spec.rb +32 -0
  53. data/spec/lib/mailroute/models/email_account_spec.rb +123 -0
  54. data/spec/lib/mailroute/models/mail_server_spec.rb +27 -0
  55. data/spec/lib/mailroute/models/notification_account_task_spec.rb +36 -0
  56. data/spec/lib/mailroute/models/notification_domain_task_spec.rb +19 -0
  57. data/spec/lib/mailroute/models/outbound_server_spec.rb +24 -0
  58. data/spec/lib/mailroute/models/reseller_contact_spec.rb +32 -0
  59. data/spec/lib/mailroute/models/reseller_spec.rb +297 -0
  60. data/spec/lib/mailroute/models/wblist_spec.rb +46 -0
  61. data/spec/spec_helper.rb +26 -0
  62. data/spec/support/custom_matchers.rb +5 -0
  63. data/spec/support/mailroute_configuration_helper.rb +9 -0
  64. data/spec/vcr_cassettes/Mailroute/_check_connection/when_configured_with_correct_credentials/should_return_true.yml +41 -0
  65. data/spec/vcr_cassettes/Mailroute/_check_connection/when_configured_with_incorrect_credentials/should_raise_Unauthorized_error.yml +38 -0
  66. data/spec/vcr_cassettes/Mailroute_Admin/basic_operations/should_perform_basic_read_operations.yml +38 -0
  67. data/spec/vcr_cassettes/Mailroute_Customer/_admins/should_return_a_list_of_its_admins.yml +41 -0
  68. data/spec/vcr_cassettes/Mailroute_Customer/_branding_info/should_return_its_branding_info.yml +79 -0
  69. data/spec/vcr_cassettes/Mailroute_Customer/_contacts/should_return_a_list_of_its_contacts.yml +41 -0
  70. data/spec/vcr_cassettes/Mailroute_Customer/_create_admin/.yml +80 -0
  71. data/spec/vcr_cassettes/Mailroute_Customer/_create_admin/should_be_in_the_list_of_the_customer_s_admins.yml +118 -0
  72. data/spec/vcr_cassettes/Mailroute_Customer/_create_admin/should_have_an_id.yml +80 -0
  73. data/spec/vcr_cassettes/Mailroute_Customer/_create_contact/.yml +80 -0
  74. data/spec/vcr_cassettes/Mailroute_Customer/_create_contact/should_have_a_link_to_the_customer.yml +118 -0
  75. data/spec/vcr_cassettes/Mailroute_Customer/_create_contact/should_save_a_new_contact.yml +118 -0
  76. data/spec/vcr_cassettes/Mailroute_Customer/_create_contact/should_save_the_attributes.yml +118 -0
  77. data/spec/vcr_cassettes/Mailroute_Customer/_create_domain/.yml +80 -0
  78. data/spec/vcr_cassettes/Mailroute_Customer/_create_domain/should_have_a_link_to_the_customer.yml +118 -0
  79. data/spec/vcr_cassettes/Mailroute_Customer/_create_domain/should_save_a_new_domain.yml +118 -0
  80. data/spec/vcr_cassettes/Mailroute_Customer/_create_domain/should_save_the_attributes.yml +118 -0
  81. data/spec/vcr_cassettes/Mailroute_Customer/_create_with_reseller/when_reseller_is_a_reseller_object/should_be_created_with_reseller.yml +118 -0
  82. data/spec/vcr_cassettes/Mailroute_Customer/_create_with_reseller/when_reseller_is_a_reseller_object/should_have_id.yml +80 -0
  83. data/spec/vcr_cassettes/Mailroute_Customer/_create_with_reseller/when_reseller_is_referenced_via_id/should_be_created_with_reseller.yml +118 -0
  84. data/spec/vcr_cassettes/Mailroute_Customer/_create_with_reseller/when_reseller_is_referenced_via_id/should_have_id.yml +80 -0
  85. data/spec/vcr_cassettes/Mailroute_Customer/_create_with_reseller/when_reseller_is_referenced_via_name/should_be_created_with_reseller.yml +156 -0
  86. data/spec/vcr_cassettes/Mailroute_Customer/_create_with_reseller/when_reseller_is_referenced_via_name/should_have_id.yml +118 -0
  87. data/spec/vcr_cassettes/Mailroute_Customer/_delete_admin/when_deleting_an_existing_admin/should_not_be_in_the_list_of_the_customer_s_admins.yml +152 -0
  88. data/spec/vcr_cassettes/Mailroute_Customer/_delete_admin/when_deleting_an_existing_admin/should_not_delete_all_admins.yml +152 -0
  89. data/spec/vcr_cassettes/Mailroute_Customer/_delete_admin/when_trying_to_delete_admin_which_do_not_exist/should_not_fail.yml +79 -0
  90. data/spec/vcr_cassettes/Mailroute_Customer/_domains/should_return_a_list_of_its_domains.yml +79 -0
  91. data/spec/vcr_cassettes/Mailroute_Customer/_filter/by_name/should_return_cusomers_with_a_given_name.yml +41 -0
  92. data/spec/vcr_cassettes/Mailroute_Customer/_filter/by_name__startswith/should_return_cusomers_with_names_starting_with_given_prefix.yml +41 -0
  93. data/spec/vcr_cassettes/Mailroute_Customer/_filter/by_reseller/should_return_all_customers_of_the_given_reseller.yml +41 -0
  94. data/spec/vcr_cassettes/Mailroute_Customer/_get/id/.yml +41 -0
  95. data/spec/vcr_cassettes/Mailroute_Customer/_get/name/.yml +41 -0
  96. data/spec/vcr_cassettes/Mailroute_Customer/_reseller/should_return_the_customer_s_reseller.yml +79 -0
  97. data/spec/vcr_cassettes/Mailroute_Customer/basic_operations/should_perform_basic_read_operations.yml +41 -0
  98. data/spec/vcr_cassettes/Mailroute_Customer/total_count/should_return_number_of_customer_which_matches_search_criteria.yml +41 -0
  99. data/spec/vcr_cassettes/Mailroute_Customer/total_count/should_return_number_of_customer_which_matches_search_criteria3.yml +41 -0
  100. data/spec/vcr_cassettes/Mailroute_Customer/total_count/should_return_total_count_of_customers.yml +41 -0
  101. data/spec/vcr_cassettes/Mailroute_CustomerContact/CRUD/should_create_read_update_and_delete_customer_contacts.yml +340 -0
  102. data/spec/vcr_cassettes/Mailroute_Domain/_create/should_have_an_id.yml +80 -0
  103. data/spec/vcr_cassettes/Mailroute_Domain/_create/should_save_all_attributes.yml +80 -0
  104. data/spec/vcr_cassettes/Mailroute_Domain/_domain_aliases/should_return_a_list_of_its_domain_aliases.yml +155 -0
  105. data/spec/vcr_cassettes/Mailroute_Domain/black_white_list/should_blacklist_and_whitelist_emails.yml +386 -0
  106. data/spec/vcr_cassettes/Mailroute_Domain/has_a_notification_task/should_have_notification_task.yml +249 -0
  107. data/spec/vcr_cassettes/Mailroute_Domain/has_a_policy/should_have_policy.yml +79 -0
  108. data/spec/vcr_cassettes/Mailroute_Domain/has_many_aliases/should_list_create_and_delete_domain_aliases.yml +195 -0
  109. data/spec/vcr_cassettes/Mailroute_Domain/has_many_contacts/should_list_create_and_delete_contacts.yml +379 -0
  110. data/spec/vcr_cassettes/Mailroute_Domain/has_many_email_accounts/should_be_possible_to_bulk_create_email_accounts.yml +192 -0
  111. data/spec/vcr_cassettes/Mailroute_Domain/has_many_email_accounts/should_list_and_create_email_accounts.yml +411 -0
  112. data/spec/vcr_cassettes/Mailroute_Domain/has_many_mail_servers/should_list_create_and_delete_mail_servers.yml +306 -0
  113. data/spec/vcr_cassettes/Mailroute_Domain/has_many_outbound_servers/should_list_create_and_delete_outbound_servers.yml +306 -0
  114. data/spec/vcr_cassettes/Mailroute_Domain/move_to_customer/should_move_domain_to_another_customer.yml +230 -0
  115. data/spec/vcr_cassettes/Mailroute_DomainAlias/should_be_possible_to_create_read_update_and_delete_domain_aliases.yml +532 -0
  116. data/spec/vcr_cassettes/Mailroute_DomainContact/CRUD/should_create_read_update_and_delete_domain_contacts.yml +340 -0
  117. data/spec/vcr_cassettes/Mailroute_EmailAccount/_get/by_id/should_return_an_account.yml +41 -0
  118. data/spec/vcr_cassettes/Mailroute_EmailAccount/_get/by_localpart_and_domain/should_return_an_account.yml +79 -0
  119. data/spec/vcr_cassettes/Mailroute_EmailAccount/_get/by_localpart_and_domain_id/should_return_an_account.yml +41 -0
  120. data/spec/vcr_cassettes/Mailroute_EmailAccount/_get/by_localpart_and_domain_name/should_return_an_account.yml +171 -0
  121. data/spec/vcr_cassettes/Mailroute_EmailAccount/_set_password/should_set_the_password.yml +78 -0
  122. data/spec/vcr_cassettes/Mailroute_EmailAccount/black_white_list/should_blacklist_and_whitelist_emails.yml +194 -0
  123. data/spec/vcr_cassettes/Mailroute_EmailAccount/has_contact/should_have_contact.yml +79 -0
  124. data/spec/vcr_cassettes/Mailroute_EmailAccount/has_domain/should_have_domain.yml +79 -0
  125. data/spec/vcr_cassettes/Mailroute_EmailAccount/has_notification_task/should_have_notification_task.yml +79 -0
  126. data/spec/vcr_cassettes/Mailroute_EmailAccount/has_policy/should_have_policy.yml +79 -0
  127. data/spec/vcr_cassettes/Mailroute_EmailAccount/should_be_possible_to_create_read_update_and_delete_email_accounts.yml +532 -0
  128. data/spec/vcr_cassettes/Mailroute_EmailAccountContact/CRUD/should_create_read_update_and_delete_email_account_contacts.yml +302 -0
  129. data/spec/vcr_cassettes/Mailroute_MailServer/should_be_possible_to_create_read_update_and_delete_mail_servers.yml +532 -0
  130. data/spec/vcr_cassettes/Mailroute_NotificationAccountTask/RU/should_read_and_update_tasks.yml +116 -0
  131. data/spec/vcr_cassettes/Mailroute_NotificationAccountTask/priorities/should_change_the_priority_of_a_task.yml +344 -0
  132. data/spec/vcr_cassettes/Mailroute_NotificationDomainTask/RU/should_read_and_update_tasks.yml +116 -0
  133. data/spec/vcr_cassettes/Mailroute_OutboundServer/CRUD/should_create_read_update_and_delete_outbound_servers.yml +229 -0
  134. data/spec/vcr_cassettes/Mailroute_Reseller/_admins/should_return_a_list_of_its_admins.yml +77 -0
  135. data/spec/vcr_cassettes/Mailroute_Reseller/_all/should_accept_limit_keyword.yml +39 -0
  136. data/spec/vcr_cassettes/Mailroute_Reseller/_all/should_accept_offset_keyword.yml +75 -0
  137. data/spec/vcr_cassettes/Mailroute_Reseller/_all/should_return_a_list_of_resellers.yml +39 -0
  138. data/spec/vcr_cassettes/Mailroute_Reseller/_bulk_create/should_create_several_resellers.yml +158 -0
  139. data/spec/vcr_cassettes/Mailroute_Reseller/_contacts/should_return_a_list_of_its_contacts.yml +41 -0
  140. data/spec/vcr_cassettes/Mailroute_Reseller/_create/should_create_a_new_reseller.yml +80 -0
  141. data/spec/vcr_cassettes/Mailroute_Reseller/_create_admin/.yml +6718 -0
  142. data/spec/vcr_cassettes/Mailroute_Reseller/_create_admin/should_be_in_the_list_of_the_reseller_s_admins.yml +118 -0
  143. data/spec/vcr_cassettes/Mailroute_Reseller/_create_admin/should_have_an_id.yml +80 -0
  144. data/spec/vcr_cassettes/Mailroute_Reseller/_create_admin/should_have_send_welcome_field_.yml +80 -0
  145. data/spec/vcr_cassettes/Mailroute_Reseller/_create_contact/.yml +80 -0
  146. data/spec/vcr_cassettes/Mailroute_Reseller/_create_contact/address/.yml +80 -0
  147. data/spec/vcr_cassettes/Mailroute_Reseller/_create_contact/city/.yml +80 -0
  148. data/spec/vcr_cassettes/Mailroute_Reseller/_create_contact/email/.yml +80 -0
  149. data/spec/vcr_cassettes/Mailroute_Reseller/_create_contact/should_have_a_link_to_the_reseller.yml +118 -0
  150. data/spec/vcr_cassettes/Mailroute_Reseller/_create_contact/should_save_a_new_contact.yml +118 -0
  151. data/spec/vcr_cassettes/Mailroute_Reseller/_create_contact/should_save_the_attributes.yml +118 -0
  152. data/spec/vcr_cassettes/Mailroute_Reseller/_create_customer/.yml +118 -0
  153. data/spec/vcr_cassettes/Mailroute_Reseller/_create_customer/allow_branding/.yml +118 -0
  154. data/spec/vcr_cassettes/Mailroute_Reseller/_create_customer/name/.yml +118 -0
  155. data/spec/vcr_cassettes/Mailroute_Reseller/_create_customer/should_have_a_link_to_the_reseller.yml +156 -0
  156. data/spec/vcr_cassettes/Mailroute_Reseller/_create_customer/should_save_a_new_contact.yml +118 -0
  157. data/spec/vcr_cassettes/Mailroute_Reseller/_create_customer/should_save_the_attributes.yml +118 -0
  158. data/spec/vcr_cassettes/Mailroute_Reseller/_customers/should_return_a_list_of_its_customers.yml +41 -0
  159. data/spec/vcr_cassettes/Mailroute_Reseller/_delete/should_bulk_delete_a_list_of_resellers.yml +368 -0
  160. data/spec/vcr_cassettes/Mailroute_Reseller/_delete/should_delete_the_reseller.yml +112 -0
  161. data/spec/vcr_cassettes/Mailroute_Reseller/_delete_admin/when_deleting_an_existing_admin/should_not_be_in_the_list_of_the_reseller_s_admins.yml +225 -0
  162. data/spec/vcr_cassettes/Mailroute_Reseller/_delete_admin/when_deleting_an_existing_admin/should_not_delete_all_admins.yml +152 -0
  163. data/spec/vcr_cassettes/Mailroute_Reseller/_delete_admin/when_trying_to_delete_admin_which_do_not_exist/should_not_fail.yml +79 -0
  164. data/spec/vcr_cassettes/Mailroute_Reseller/_filter/should_return_a_list_of_resellers_which_match_the_filter_query.yml +39 -0
  165. data/spec/vcr_cassettes/Mailroute_Reseller/_find/should_raise_error_if_reseller_not_found.yml +37 -0
  166. data/spec/vcr_cassettes/Mailroute_Reseller/_find/should_return_the_reseller.yml +37 -0
  167. data/spec/vcr_cassettes/Mailroute_Reseller/_find/should_return_the_reseller_if_it_exists.yml +39 -0
  168. data/spec/vcr_cassettes/Mailroute_Reseller/_find/should_return_the_reseller_if_it_present.yml +37 -0
  169. data/spec/vcr_cassettes/Mailroute_Reseller/_find/should_return_the_reseller_if_it_preset.yml +73 -0
  170. data/spec/vcr_cassettes/Mailroute_Reseller/_find/should_set_the_name.yml +37 -0
  171. data/spec/vcr_cassettes/Mailroute_Reseller/_limit/should_limit_the_number_of_resellers_returned.yml +79 -0
  172. data/spec/vcr_cassettes/Mailroute_Reseller/_list/should_accept_limit_keyword.yml +39 -0
  173. data/spec/vcr_cassettes/Mailroute_Reseller/_list/should_return_a_list_of_resellers.yml +39 -0
  174. data/spec/vcr_cassettes/Mailroute_Reseller/_offset/should_return_different_pages.yml +75 -0
  175. data/spec/vcr_cassettes/Mailroute_Reseller/_order_by/ascending_order/should_return_ordered_result.yml +41 -0
  176. data/spec/vcr_cassettes/Mailroute_Reseller/_order_by/descending_order/should_return_ordered_result.yml +41 -0
  177. data/spec/vcr_cassettes/Mailroute_Reseller/_save/should_save_the_changes.yml +116 -0
  178. data/spec/vcr_cassettes/Mailroute_Reseller/_search/should_return_a_list_of_resellers_which_match_the_search_query.yml +41 -0
  179. data/spec/vcr_cassettes/Mailroute_Reseller/it_should_retrieve_branding_info/branding_info/.yml +75 -0
  180. data/spec/vcr_cassettes/Mailroute_Reseller/it_should_retrieve_branding_info_/branding_info/.yml +39 -0
  181. data/spec/vcr_cassettes/Mailroute_Reseller/it_should_retrieve_branding_info_ix_/branding_info/.yml +2605 -0
  182. data/spec/vcr_cassettes/Mailroute_Reseller/it_should_retrieve_branding_info_x_/branding_info/.yml +37 -0
  183. data/spec/vcr_cassettes/Mailroute_Reseller/it_should_retrieve_branding_info_xix_/branding_info/.yml +75 -0
  184. data/spec/vcr_cassettes/Mailroute_ResellerContact/CRUD/should_create_read_update_and_delete_reseller_contacts.yml +340 -0
  185. data/spec/vcr_cassettes/Mailroute_WBList/WBList/with_domain/should_create_read_and_update_and_delete_wblists.yml +415 -0
  186. data/spec/vcr_cassettes/Mailroute_WBList/WBList/with_email_account/should_create_read_and_update_and_delete_wblists.yml +267 -0
  187. data/spec/vcr_cassettes/Valid_Reseller.yml +37 -0
  188. data/spec/vcr_cassettes/Valid_Reseller_.yml +39 -0
  189. data/spec/vcr_cassettes/Valid_Reseller_with_Branding_Info.yml +75 -0
  190. metadata +553 -0
@@ -0,0 +1,3 @@
1
+ class Object
2
+ alias_method :public_send, :send
3
+ end if RUBY_VERSION =~ /^1\.8/
@@ -0,0 +1,59 @@
1
+ require 'active_support/core_ext'
2
+
3
+ class Mailroute::Relation
4
+ delegate :inspect, :each, :count, :&, :to_ary, :all?, :empty?, :to => :to_a
5
+ include Enumerable
6
+
7
+ attr_reader :search_options
8
+
9
+ def initialize(klass, search_options = {})
10
+ @klass = klass
11
+ @search_options = search_options
12
+ end
13
+
14
+ def to_a
15
+ @records ||= @klass.all(search_options)
16
+ end
17
+
18
+ def limit(n)
19
+ new_relation(:params => { :limit => n })
20
+ end
21
+
22
+ def offset(n)
23
+ new_relation(:params => { :offset => n })
24
+ end
25
+
26
+ def filter(options)
27
+ new_relation(:params => options)
28
+ end
29
+
30
+ def order_by(attribute)
31
+ new_relation(:params => { :order_by => attribute })
32
+ end
33
+
34
+ def search(term)
35
+ new_relation(:params => { :q => term })
36
+ end
37
+
38
+ def ==(other)
39
+ case other
40
+ when Relation
41
+ search_options == other.search_options
42
+ when Array
43
+ to_a == other
44
+ else
45
+ false
46
+ end
47
+ end
48
+
49
+ def total_count
50
+ meta = to_a.instance_variable_get(:@_meta)
51
+ meta && meta['total_count']
52
+ end
53
+
54
+ private
55
+
56
+ def new_relation(options_update)
57
+ Mailroute::Relation.new(@klass, search_options.deep_merge(options_update))
58
+ end
59
+ end
@@ -0,0 +1,21 @@
1
+ module Mailroute
2
+ class Admin < Base
3
+ self.collection_name = 'admins'
4
+
5
+ def self.collection_path(prefix_options = {}, query_options = nil)
6
+ scope = prefix_options.delete(:scope) || (query_options && query_options.delete(:scope))
7
+ raise 'Scope is missing' unless scope
8
+ check_prefix_options(prefix_options)
9
+ prefix_options, query_options = split_options(prefix_options) if query_options.nil?
10
+ "#{prefix(prefix_options)}admins/#{scope[:name]}/#{scope[:id]}/#{query_string(query_options)}"
11
+ end
12
+
13
+ def self.element_path(id, prefix_options = {}, query_options = nil)
14
+ scope = prefix_options.delete(:scope) || (query_options && query_options.delete(:scope))
15
+ raise 'Scope is missing' unless scope
16
+ check_prefix_options(prefix_options)
17
+ prefix_options, query_options = split_options(prefix_options) if query_options.nil?
18
+ "#{prefix(prefix_options)}admins/#{scope[:name]}/#{scope[:id]}/admin/#{URI.parser.escape id.to_s}/#{query_string(query_options)}"
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,193 @@
1
+ module Mailroute
2
+ class Base < ActiveResource::Base
3
+ include ActiveResource::Extensions::UrlsWithoutJsonExtension
4
+
5
+ class << self
6
+ def meta
7
+ @meta ||= MetaInformation.new(self)
8
+ end
9
+
10
+ def headers
11
+ if defined?(@headers)
12
+ @headers
13
+ elsif superclass.respond_to? :headers
14
+ @headers ||= superclass.headers
15
+ else
16
+ @headers ||= {}
17
+ end
18
+ end
19
+
20
+ delegate :limit, :offset, :filter, :order_by, :search, :to => :list
21
+
22
+ def list(options = {})
23
+ Relation.new(self)
24
+ end
25
+
26
+ def bulk_create(*attribute_array)
27
+ attribute_array.map do |attributes|
28
+ create(attributes)
29
+ end
30
+ end
31
+
32
+ alias_method :get, :find
33
+
34
+ def delete(*array)
35
+ array.map do |r|
36
+ if r.is_a? Mailroute::Base
37
+ r.destroy
38
+ else
39
+ connection.delete(element_path(r, {}), headers)
40
+ end
41
+ end
42
+ end
43
+
44
+ alias_method :instantiate_collection_without_meta, :instantiate_collection
45
+ def instantiate_collection(collection, prefix_options = {})
46
+ array = instantiate_collection_without_meta(collection, prefix_options)
47
+ array.instance_variable_set(:@_meta, collection.instance_variable_get(:@_meta))
48
+ array
49
+ end
50
+
51
+ def total_count
52
+ limit(1).total_count
53
+ end
54
+ end
55
+
56
+ def to_json(options = {})
57
+ super(options.merge(:root => false))
58
+ end
59
+
60
+ alias_method :delete, :destroy
61
+
62
+ def self.has_one(model, options = {})
63
+ relation = meta.add_has_one(model, options)
64
+
65
+ self.send(:define_method, model.to_s) do
66
+ foreign_class = relation.foreign_class
67
+
68
+ @_associations[model] ||= foreign_class.get(extract_id(super())).tap do |obj|
69
+ obj.send("#{relation.inverse}=", self)
70
+ end if super()
71
+ end
72
+
73
+ self.send(:define_method, "#{model}=") do |v|
74
+ if v.is_a? Mailroute::Base
75
+ @_associations[model] = v
76
+
77
+ super(v.resource_uri)
78
+ else
79
+ super(v)
80
+ end
81
+ end
82
+ end
83
+
84
+ def load(attributes, remove_root = false)
85
+ new_attributes = {}
86
+ attributes.each do |k, v|
87
+ new_attributes[k] = if v.is_a? Mailroute::Base
88
+ v.resource_uri
89
+ else
90
+ v
91
+ end
92
+ end
93
+ super(new_attributes, remove_root)
94
+ end
95
+
96
+ def self.has_many(model, options = {})
97
+ relation = meta.add_has_many(model, options)
98
+
99
+ self.send(:define_method, model.to_s) do
100
+ foreign_class = relation.foreign_class
101
+
102
+ @_associations[model] ||= foreign_class.filter(relation.inverse.to_sym => id).to_a
103
+ end
104
+
105
+ self.send(:define_method, "create_#{ActiveSupport::Inflector.singularize(model.to_s)}") do |options|
106
+ foreign_class = relation.foreign_class
107
+
108
+ @_associations[model] = nil
109
+ if relation.pk && options.is_a?(String) && options !~ /^\/api\/v1/
110
+ relation.foreign_class.create(relation.inverse.to_s => id, relation.pk => options)
111
+ else
112
+ relation.foreign_class.create(options.merge(relation.inverse.to_s => id))
113
+ end
114
+ end
115
+ end
116
+
117
+ def self.has_admins(options = {})
118
+ relation = meta.add_has_admins(options)
119
+
120
+ self.send(:define_method, :admins) do
121
+ foreign_class = relation.foreign_class
122
+
123
+ @_associations[:admins] ||= foreign_class.all(:params => {:scope => { :name => relation.inverse.to_s, :id => id}}).to_a
124
+ end
125
+
126
+ self.send(:define_method, :create_admin) do |email, send_welcome|
127
+ send_welcome = !!send_welcome
128
+ foreign_class = relation.foreign_class
129
+
130
+ @_associations[:admin] = nil
131
+ admin = relation.foreign_class.new(:email => email, :send_welcome => send_welcome)
132
+ admin.prefix_options[:scope] = { :name => relation.inverse.to_s, :id => id }
133
+ admin.save!
134
+ admin
135
+ end
136
+
137
+ self.send(:define_method, :delete_admin) do |email|
138
+ foreign_class = relation.foreign_class
139
+
140
+ @_associations[:admin] = nil
141
+ admin = relation.foreign_class.all(:params => {:email => email, :scope => { :name => relation.inverse.to_s, :id => id}}).first
142
+
143
+ if admin
144
+ admin.prefix_options[:scope] = { :name => relation.inverse.to_s, :id => id }
145
+ admin.destroy
146
+ end
147
+ end
148
+ end
149
+
150
+ def reload
151
+ @_associations = {}.with_indifferent_access
152
+ super
153
+ end
154
+
155
+ def initialize(attributes = {}, persisted = false)
156
+ @_associations = {}.with_indifferent_access
157
+ new_attributes = attributes.dup
158
+ attributes.each do |k, v|
159
+ next unless self.class.meta.associations.has_key?(k.to_sym)
160
+ relation = self.class.meta.associations[k.to_sym]
161
+
162
+ case v
163
+ when Integer
164
+ new_attributes[k] = relation.foreign_class.element_path(v)
165
+ when Mailroute::Base
166
+ @_associations[k] = v
167
+ new_attributes[k] = v.element_path
168
+ when String
169
+ if relation.pk && v !~ /^\/api\/v1/
170
+ all = relation.foreign_class.filter(relation.pk => v).limit(2).to_a
171
+ case all.size
172
+ when 0 then raise 'there is no such records'
173
+ when 2 then raise 'there are too many records'
174
+ end
175
+ fst = all.first
176
+ @_associations[k] = fst
177
+ new_attributes[k] = fst.element_path
178
+ else
179
+ new_attributes[k] = v
180
+ end
181
+ end
182
+ end
183
+
184
+ super(new_attributes, persisted)
185
+ end
186
+
187
+ private
188
+
189
+ def extract_id(uri)
190
+ uri.match(/(\/|^)(\d+)\/?$/)[2].to_i
191
+ end
192
+ end
193
+ end
@@ -0,0 +1,5 @@
1
+ module Mailroute
2
+ class BrandingInfo < Base
3
+ self.collection_name = 'brandinginfo'
4
+ end
5
+ end
@@ -0,0 +1,10 @@
1
+ module Mailroute
2
+ class Customer < Base
3
+ self.collection_name = 'customer'
4
+ has_one :reseller, :pk => 'name'
5
+ has_one :branding_info
6
+ has_many :domains
7
+ has_many :contacts, :class => CustomerContact
8
+ has_admins :class => Admin
9
+ end
10
+ end
@@ -0,0 +1,6 @@
1
+ module Mailroute
2
+ class CustomerContact < Base
3
+ self.collection_name = 'contact_customer'
4
+ has_one :customer
5
+ end
6
+ end
@@ -0,0 +1,56 @@
1
+ module Mailroute
2
+ class Domain < Base
3
+ self.collection_name = 'domain'
4
+ has_one :customer
5
+ has_many :domain_aliases
6
+ has_many :email_accounts
7
+ has_many :mail_servers
8
+ has_many :outbound_servers, :pk => :server
9
+ has_many :contacts, :class => DomainContact
10
+ has_many :wblist, :class => WBList
11
+ has_one :policy, :class => PolicyDomain
12
+ has_one :notification_task, :class => NotificationDomainTask
13
+
14
+ def blacklist
15
+ WBList.filter(:domain => id, :wb => 'b').map(&:email)
16
+ end
17
+
18
+ def whitelist
19
+ WBList.filter(:domain => id, :wb => 'w').map(&:email)
20
+ end
21
+
22
+ def add_to_blacklist(address)
23
+ create_wblist(:wb => 'b', :email => address)
24
+ end
25
+
26
+ def add_to_whitelist(address)
27
+ create_wblist(:wb => 'w', :email => address)
28
+ end
29
+
30
+ def move_to_customer(another_customer)
31
+ self.customer = another_customer
32
+ self.save!
33
+ end
34
+
35
+ def bulk_create_email_account(localparts)
36
+ connection.post(element_path + 'email_accounts/mass_add/', localparts.to_json, self.class.headers).tap do |response|
37
+ ap response
38
+ end
39
+ end
40
+
41
+ class << self
42
+ alias_method :get_by_id, :get
43
+
44
+ def get(id_or_name)
45
+ case id_or_name
46
+ when String
47
+ filter(:name => id_or_name).first
48
+ when Integer
49
+ get_by_id(id_or_name)
50
+ else
51
+ raise 'Unknown argument type'
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,6 @@
1
+ module Mailroute
2
+ class DomainAlias < Base
3
+ self.collection_name = 'domain_alias'
4
+ has_one :domain
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Mailroute
2
+ class DomainContact < Base
3
+ self.collection_name = 'contact_domain'
4
+ has_one :domain
5
+ end
6
+ end
@@ -0,0 +1,53 @@
1
+ module Mailroute
2
+ class EmailAccount < Base
3
+ self.collection_name = 'email_account'
4
+ has_one :domain
5
+ has_one :policy, :class => PolicyUser
6
+ has_one :notification_task, :class => NotificationAccountTask
7
+ has_one :contact, :class => EmailAccountContact
8
+ has_many :wblist, :class => WBList
9
+
10
+ def blacklist
11
+ WBList.filter(:email_account => id, :wb => 'b').map(&:email)
12
+ end
13
+
14
+ def whitelist
15
+ WBList.filter(:email_account => id, :wb => 'w').map(&:email)
16
+ end
17
+
18
+ def add_to_blacklist(address)
19
+ create_wblist(:wb => 'b', :email => address)
20
+ end
21
+
22
+ def add_to_whitelist(address)
23
+ create_wblist(:wb => 'w', :email => address)
24
+ end
25
+
26
+ def set_password(new_password)
27
+ self.password = new_password
28
+ save!
29
+ self
30
+ end
31
+
32
+ class << self
33
+ alias_method :get_by_id, :get
34
+ def get(*args)
35
+ if args.size == 1
36
+ get_by_id(*args)
37
+ else
38
+ localpart, domain = *args
39
+ case domain
40
+ when Domain
41
+ get(localpart, domain.id)
42
+ when String
43
+ get(localpart, Domain.get(domain))
44
+ when Integer
45
+ EmailAccount.filter(:domain => domain, :localpart => localpart).first or raise ActiveResource::ResourceNotFound
46
+ else
47
+ raise 'Unknown argument type'
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,6 @@
1
+ module Mailroute
2
+ class EmailAccountContact < Base
3
+ self.collection_name = 'contact_email_account'
4
+ has_one :email_account
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Mailroute
2
+ class MailServer < Base
3
+ self.collection_name = 'mail_server'
4
+ has_one :domain
5
+ end
6
+ end