moo_moo 0.3.0 → 0.4.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/README.md CHANGED
@@ -51,15 +51,18 @@ configuration for the library to use.
51
51
  Now you can call a variety of commands to deal with domains, nameservers, etc.
52
52
  Here's how to check the availability of a domain name:
53
53
 
54
- res = lookup.lookup_domain(:attributes => { :domain => 'example.com' })
55
- p res.success?
54
+ lookup.api_lookup(:attributes => { :domain => 'example.com' })
55
+ p lookup.successful?
56
56
 
57
57
  true
58
58
 
59
- Each method returns an `OpenSRSResponse` object which you can use to determine
60
- if the call was successful and retrieve the response code and/or error
61
- message. The result variable is a hash that contains all of the relevant data
62
- returned by the call.
59
+ After calling the service method, you can use the following methods to access
60
+ the response:
61
+
62
+ response - the http response
63
+ message - the "response_text"
64
+ attributes - the "attributes" hash with relevant data
65
+ successful? - wheater the request was successful or not
63
66
 
64
67
  Currently, there is support for the following services:
65
68
 
@@ -69,6 +72,14 @@ Currently, there is support for the following services:
69
72
  * Provisioning
70
73
  * Transfer
71
74
 
75
+ API services are namespaced with api. For example, for the Lookup "get" api method,
76
+ it will be named "api_get".
77
+
78
+ MooMoo provides custom methods that should make it easier to deal with the OpenSRS
79
+ api (e.g. Lookup :domain_contacts). This custom methods are not namespaced.
80
+ Check their documentation to see what parameters does it expect and what responses
81
+ does it return.
82
+
72
83
  Note on Patches/Pull Requests
73
84
  -----------------------------
74
85
 
@@ -1,28 +1,33 @@
1
1
  module MooMoo
2
- class Base
3
- attr_reader :host, :key, :username, :password, :port
2
+ # Defines the basic command structure.
3
+ #
4
+ # For OpenSRS api methods, create them like this, using the proper api action
5
+ # name and object:
6
+ #
7
+ # register_service :action_one, :object_one
8
+ #
9
+ # If you need customized responses, create a custom method:
10
+ #
11
+ # def custom_action(parameter)
12
+ # api_action_one(... custom parameter ...)
13
+ # ... custom response processing ...
14
+ # end
15
+ class BaseCommand
16
+ attr_reader :host, :key, :username, :password, :port, :response
4
17
 
5
18
  # Register an api service for the current class.
6
19
  #
7
20
  # register_service :action_one, :object_one
8
21
  #
9
- # That will generate the following method for this class:
10
- #
11
- # def action_one(params)
12
- # run_command :action_one, :object_one, params, cookie
13
- # end
22
+ # A method called "api_action_one" will then be created.
14
23
  #
15
24
  # === Parameters
16
25
  #
17
- # * <tt>method_name</tt> - the method name
26
+ # * <tt>action_name</tt> - the api action to be called
18
27
  # * <tt>object</tt> - the object
19
- # * <tt>action_name</tt> - the api action to be called; by default it is the same as method_name
20
- def self.register_service(method_name, object, action_name = method_name, &block)
21
- define_method(method_name) do |*args|
22
- params = args.first || {}
23
-
24
- instance_exec(params, &block) if block
25
- run_command action_name, object, params
28
+ def self.register_service(action_name, object)
29
+ define_method("api_#{action_name}") do |*args|
30
+ perform(action_name, object, args.first || {})
26
31
  end
27
32
  end
28
33
 
@@ -44,6 +49,23 @@ module MooMoo
44
49
  @port = params[:port] || MooMoo.config.port || 55443
45
50
  end
46
51
 
52
+ # Returns whether or not the command executed was successful
53
+ def successful?
54
+ response.body['is_success'].to_i == 1
55
+ end
56
+
57
+ # Returns the response message if one is present
58
+ def message
59
+ response.body['response_text']
60
+ end
61
+
62
+ # Returns the response attributes.
63
+ def attributes
64
+ response.body['attributes']
65
+ end
66
+
67
+ private
68
+
47
69
  # Runs a command
48
70
  #
49
71
  # === Required
@@ -52,11 +74,19 @@ module MooMoo
52
74
  #
53
75
  # === Optional
54
76
  # * <tt>:params</tt> - parameters for the command
55
- def run_command(action, object, params = {})
56
- Response.new Command.new(action, object, params).run(@host, @key, @username, @port)
77
+ def perform(action, object, params = {})
78
+ (@response = faraday_request(action, object, params)) && attributes
57
79
  end
58
80
 
59
- private
81
+ # Performs the Faraday request.
82
+ def faraday_request(action, object, params)
83
+ Faraday.new(:url => "https://#{host}:#{port}", :ssl => {:verify => true}) do |c|
84
+ c.request :open_srs_xml_builder, action, object, params, key, username
85
+ c.response :parse_open_srs
86
+ c.response :open_srs_errors
87
+ c.adapter :net_http
88
+ end.post
89
+ end
60
90
 
61
91
  # Indexes an array by building a hash with numeric keys
62
92
  #
@@ -21,8 +21,6 @@ module MooMoo
21
21
  def parse_response(data)
22
22
  doc = REXML::Document.new(data)
23
23
 
24
- values = {}
25
-
26
24
  elements = doc.elements["/OPS_envelope/body/data_block/dt_assoc"].select { |item|
27
25
  item.is_a? REXML::Element
28
26
  }
@@ -55,4 +53,4 @@ module MooMoo
55
53
  end
56
54
 
57
55
  end
58
- end
56
+ end
@@ -1,5 +1,5 @@
1
1
  module MooMoo
2
- class Cookie < Base
2
+ class Cookie < BaseCommand
3
3
 
4
4
  ##
5
5
  # Creates a cookie for use in commands where a cookie is required to access OpenSRS.
@@ -23,6 +23,6 @@ module MooMoo
23
23
  # Cleanly terminates the connection.
24
24
  #
25
25
  # http://www.opensrs.com/docs/apidomains/quit_session.htm
26
- register_service :quit_session, :session, :quit
26
+ register_service :quit, :session
27
27
  end
28
28
  end
@@ -1,5 +1,5 @@
1
1
  module MooMoo
2
- class DnsZone < Base
2
+ class DnsZone < BaseCommand
3
3
 
4
4
  ##
5
5
  # Creates a custom DNS zone for managed DNS service.
@@ -14,7 +14,7 @@ module MooMoo
14
14
  register_service :delete_dns_zone, :domain
15
15
 
16
16
  ##
17
- # Changes the nameservers on your domain to use the
17
+ # Changes the nameservers on your domain to use the
18
18
  # nameservers for managed DNS service.
19
19
  #
20
20
  # http://www.opensrs.com/docs/apidomains/Request_parameters_for_force_dns_nameservers.htm
@@ -28,8 +28,8 @@ module MooMoo
28
28
 
29
29
  ##
30
30
  # Sets the DNS zone to the values in the specified template.
31
- # If a template is not specified in the command, the records
32
- # are set to what was in the template that was used to enable
31
+ # If a template is not specified in the command, the records
32
+ # are set to what was in the template that was used to enable
33
33
  # the DNS service.
34
34
  #
35
35
  # http://www.opensrs.com/docs/apidomains/reset_dns_zone_request.htm
@@ -1,6 +1,5 @@
1
1
  module MooMoo
2
- class Lookup < Base
3
-
2
+ class Lookup < BaseCommand
4
3
  ##
5
4
  # Determines whether the domain belongs to the RSP who issued the command.
6
5
  #
@@ -30,9 +29,8 @@ module MooMoo
30
29
  # returns the nameservers currently acting as DNS servers for the domain.
31
30
  #
32
31
  # http://www.opensrs.com/docs/apidomains/get_domain.htm
33
- register_service :get_domain, :domain, :get
32
+ register_service :get, :domain
34
33
 
35
- ##
36
34
  # Queries contact information for a list of domains.
37
35
  #
38
36
  # http://www.opensrs.com/docs/apidomains/get_domains_contacts.htm
@@ -84,7 +82,7 @@ module MooMoo
84
82
  # Determines the availability of a specified domain name.
85
83
  #
86
84
  # http://www.opensrs.com/docs/apidomains/lookup_domain.htm
87
- register_service :lookup_domain, :domain, :lookup
85
+ register_service :lookup, :domain
88
86
 
89
87
  ##
90
88
  # Checks whether a specified name, word, or phrase is available for registration in gTLDs and
@@ -93,5 +91,42 @@ module MooMoo
93
91
  #
94
92
  # http://www.opensrs.com/docs/apidomains/name_suggest_domain.htm
95
93
  register_service :name_suggest, :domain
94
+
95
+ ##
96
+ # Queries contact information for a domain using get_domains_contacts.
97
+ #
98
+ # * <tt>:domain</tt> - the domain to query for. E.g.: "domain1.com"
99
+ #
100
+ # Returns an array like:
101
+ # [
102
+ # {
103
+ # :type => "type", # admin, billing, etc
104
+ # :first_name => "first_name",
105
+ # :last_name => "last_name"
106
+ # ... other attributes ...
107
+ # }
108
+ # ]
109
+ def domain_contacts(domain)
110
+ api_get_domains_contacts({ :attributes => { :domain_list => [domain] }})
111
+
112
+ attributes[domain]["contact_set"].map do |(type, attributes)|
113
+ {
114
+ :type => type,
115
+ :first_name => attributes["first_name"],
116
+ :last_name => attributes["last_name"],
117
+ :org_name => attributes["org_name"],
118
+ :address1 => attributes["address1"],
119
+ :address2 => attributes["address2"],
120
+ :address3 => attributes["address3"],
121
+ :city => attributes["city"],
122
+ :state => attributes["state"],
123
+ :country => attributes["country"],
124
+ :postal_code =>attributes["postal_code"],
125
+ :phone => attributes["phone"],
126
+ :fax => attributes["fax"],
127
+ :email => attributes["email"]
128
+ }
129
+ end
130
+ end
96
131
  end
97
132
  end
@@ -1,5 +1,5 @@
1
1
  module MooMoo
2
- class Nameserver < Base
2
+ class Nameserver < BaseCommand
3
3
 
4
4
  ##
5
5
  # Creates a nameserver in the same domain space as the cookie's domain.
@@ -1,5 +1,5 @@
1
1
  module MooMoo
2
- class Provisioning < Base
2
+ class Provisioning < BaseCommand
3
3
 
4
4
  ##
5
5
  # Cancels a Trust Service order
@@ -31,7 +31,7 @@ module MooMoo
31
31
  # Renews a domain and allows you to set the auto-renewal flag on a domain.
32
32
  #
33
33
  # http://www.opensrs.com/docs/apidomains/renew_domain.htm
34
- register_service :renew_domain, :domain, :renew
34
+ register_service :renew, :domain
35
35
 
36
36
  ##
37
37
  # Removes the domain at the registry. Use this command to request a refund for a domain purchase.
@@ -53,10 +53,54 @@ module MooMoo
53
53
  #
54
54
  # http://www.opensrs.com/docs/apidomains/sw_register.htm
55
55
  # Note: Requirements vary depending on TLD
56
- register_service :register_domain, :domain, :sw_register
56
+ register_service :sw_register, :domain
57
57
 
58
58
  ##
59
59
  # Submits a new registration request or transfer order
60
60
  register_service :register_trust_service, :trust_service
61
+
62
+ ##
63
+ # Updates contact information for a domain using modify.
64
+ #
65
+ # * <tt>:domain</tt> - the domain to update for. E.g.: "domain1.com"
66
+ # * <tt>:attributes</tt> - a contact attributes hash like:
67
+ # {
68
+ # type: "type", # admin, billing, etc
69
+ # first_name: "first_name",
70
+ # last_name: "last_name"
71
+ # ... other attributes ...
72
+ # }
73
+ #
74
+ # In case of errors, an errors array like this will be returned:
75
+ #
76
+ # ["Error1", "Error2"]
77
+ def update_contact(domain, contact_attributes)
78
+ contact_set = {
79
+ contact_attributes[:type] => contact_attributes
80
+ }
81
+
82
+ # Removes the type key from contact_attributes
83
+ contact_set[contact_attributes[:type]].delete(:type)
84
+
85
+ response = api_modify(params_with_domain(domain).merge({
86
+ :attributes => {
87
+ :affect_domains => "0",
88
+ :data => "contact_info",
89
+ :contact_set => contact_set
90
+ }
91
+ }))
92
+
93
+ if successful?
94
+ response
95
+ else
96
+ attributes["details"][domain]["response_text"].split("\n")
97
+ end
98
+ end
99
+
100
+ private
101
+
102
+ def params_with_domain(domain)
103
+ { :domain => domain }
104
+ end
61
105
  end
62
106
  end
@@ -1,5 +1,5 @@
1
1
  module MooMoo
2
- class Transfer < Base
2
+ class Transfer < BaseCommand
3
3
 
4
4
  ##
5
5
  # Cancels transfers that are pending owner approval.
@@ -55,6 +55,6 @@ module MooMoo
55
55
  # transferred and so no charges are incurred.
56
56
  #
57
57
  # http://www.opensrs.com/docs/apidomains/rsp2rsp_push_transfer.htm
58
- register_service :push_transfer, :domain, :rsp2rsp_push_transfer
58
+ register_service :rsp2rsp_push_transfer, :domain
59
59
  end
60
60
  end
@@ -1,3 +1,3 @@
1
1
  module MooMoo
2
- VERSION = Version = "0.3.0"
2
+ VERSION = Version = "0.4.0"
3
3
  end
data/lib/moo_moo.rb CHANGED
@@ -2,9 +2,7 @@ require 'moo_moo/exceptions'
2
2
  require 'faraday'
3
3
  require 'moo_moo/version'
4
4
  require 'moo_moo/config'
5
- require 'moo_moo/command'
6
- require 'moo_moo/response'
7
- require 'moo_moo/base'
5
+ require 'moo_moo/base_command'
8
6
  require 'moo_moo/middleware/open_srs_errors'
9
7
  require 'moo_moo/middleware/parse_open_srs'
10
8
  require 'moo_moo/middleware/open_srs_xml_builder'
@@ -6,8 +6,8 @@ describe "Real World integration" do
6
6
  lookup = MooMoo::Lookup.new
7
7
 
8
8
  VCR.use_cassette("integration/lookup") do
9
- response = lookup.lookup_domain(:domain => "opensrs.net")
10
- response.attributes["status"].should == "taken"
9
+ lookup.api_lookup(:domain => "opensrs.net")
10
+ lookup.attributes["status"].should == "taken"
11
11
  end
12
12
  end
13
13
 
@@ -0,0 +1,79 @@
1
+ require 'spec_helper'
2
+
3
+ class SampleService < MooMoo::BaseCommand
4
+ register_service :service1, :object1
5
+ end
6
+
7
+ describe MooMoo::BaseCommand do
8
+
9
+ subject { SampleService.new(:host => "thehost.com", :key => "thekey",
10
+ :username => "theuser", :password => "thepass", :port => "12345") }
11
+
12
+ let(:response) { double("Response", :body => {"attributes" => { :the => :attrs }})}
13
+
14
+ describe "class methods" do
15
+ describe "#register_service" do
16
+ let(:request_params) { {:the => :params, :cookie => "thecookie"} }
17
+
18
+ it "service1" do
19
+ subject.should_receive(:faraday_request).
20
+ with(:service1, :object1, request_params).
21
+ and_return(response)
22
+
23
+ subject.api_service1(request_params).should == {:the => :attrs}
24
+ end
25
+ end
26
+ end
27
+
28
+ describe "#successful?" do
29
+ it "is successful" do
30
+ subject.instance_variable_set("@response",
31
+ double("Response", :body => { "is_success" => "1" }))
32
+
33
+ subject.should be_successful
34
+ end
35
+
36
+ it "is not successful" do
37
+ subject.instance_variable_set("@response",
38
+ double("Response", :body => { "is_success" => "0" }))
39
+
40
+ subject.should_not be_successful
41
+ end
42
+ end
43
+
44
+ describe "#message" do
45
+ it "retrives the response text" do
46
+ subject.instance_variable_set("@response",
47
+ double("Response", :body => { "response_text" => "thetext" }))
48
+
49
+ subject.message.should == "thetext"
50
+ end
51
+ end
52
+
53
+ describe "#response_attributes" do
54
+ it "retrives the response attributes" do
55
+ subject.instance_variable_set("@response",
56
+ double("Response", :body => { "attributes" => { :the => :attributes } }))
57
+
58
+ subject.attributes.should == { :the => :attributes }
59
+ end
60
+ end
61
+
62
+ describe "#perform" do
63
+ let(:xml) { "xmlcontent" }
64
+ let(:response) { {:status => 200, :body => File.open("spec/fixtures/success_response.xml")} }
65
+
66
+ before :each do
67
+ @request = stub_request(:post, "https://thehost.com:12345/").to_return(response)
68
+ subject.send(:perform, :service1, :object1)
69
+ end
70
+
71
+ it "posts with correct parameters" do
72
+ @request.should have_been_made
73
+ end
74
+
75
+ it "returns the response" do
76
+ subject.message.should == "Command Successful"
77
+ end
78
+ end
79
+ end
@@ -4,5 +4,5 @@ describe MooMoo::Cookie do
4
4
  it { should have_registered_service(:set, :cookie) }
5
5
  it { should have_registered_service(:delete, :cookie) }
6
6
  it { should have_registered_service(:update, :cookie) }
7
- it { should have_registered_service(:quit_session, :session, :quit) }
7
+ it { should have_registered_service(:quit, :session) }
8
8
  end
@@ -2,17 +2,67 @@ require 'spec_helper'
2
2
  require 'date'
3
3
 
4
4
  describe MooMoo::Lookup do
5
+ subject { MooMoo::Lookup.new }
6
+
5
7
  it { should have_registered_service(:belongs_to_rsp, :domain) }
6
8
  it { should have_registered_service(:get_balance, :balance) }
7
9
  it { should have_registered_service(:get_deleted_domains, :domain) }
8
- it { should have_registered_service(:get_domain, :domain, :get) }
9
- it { should have_registered_service(:get_domains_contacts, :domain) }
10
+ it { should have_registered_service(:get, :domain) }
10
11
  it { should have_registered_service(:get_domains_by_expiredate, :domain) }
12
+ it { should have_registered_service(:get_domains_contacts, :domain) }
11
13
  it { should have_registered_service(:get_notes, :domain) }
12
14
  it { should have_registered_service(:get_order_info, :domain) }
13
15
  it { should have_registered_service(:get_orders_by_domain, :domain) }
14
16
  it { should have_registered_service(:get_price, :domain) }
15
17
  it { should have_registered_service(:get_product_info, :trust_service) }
16
- it { should have_registered_service(:lookup_domain, :domain, :lookup) }
18
+ it { should have_registered_service(:lookup, :domain) }
17
19
  it { should have_registered_service(:name_suggest, :domain) }
20
+
21
+ describe "#get_domains_contacts" do
22
+ it "retrieves a list of a domain contacts" do
23
+ subject.should_receive(:faraday_request).with(:get_domains_contacts, :domain, { :attributes => { :domain_list => ["domain1.com"] }}).and_return(double("Response", :body => {
24
+ "attributes" => {
25
+ "domain1.com" => {
26
+ "contact_set" => {
27
+ "admin" => {
28
+ "first_name" => "FirstName",
29
+ "last_name" => "LastName",
30
+ "org_name" => "OrgName",
31
+ "address1" => "Address1",
32
+ "address2" => "Address2",
33
+ "address3" => "Address3",
34
+ "city" => "City",
35
+ "state" => "State",
36
+ "country" => "Country",
37
+ "postal_code" => "PostalCode",
38
+ "phone" => "Phone",
39
+ "fax" => "Fax",
40
+ "email" => "Email"
41
+ }
42
+ }
43
+ }
44
+ }
45
+ }))
46
+
47
+ subject.domain_contacts("domain1.com").should ==
48
+ [
49
+ {
50
+ :type => "admin",
51
+ :first_name => "FirstName",
52
+ :last_name => "LastName",
53
+ :org_name => "OrgName",
54
+ :address1 => "Address1",
55
+ :address2 => "Address2",
56
+ :address3 => "Address3",
57
+ :city => "City",
58
+ :state => "State",
59
+ :country => "Country",
60
+ :postal_code => "PostalCode",
61
+ :phone => "Phone",
62
+ :fax => "Fax",
63
+ :email => "Email"
64
+ }
65
+ ]
66
+ end
67
+ end
18
68
  end
@@ -2,13 +2,97 @@ require 'spec_helper'
2
2
  require 'date'
3
3
 
4
4
  describe MooMoo::Provisioning do
5
+ subject { MooMoo::Provisioning.new }
6
+
7
+ let(:success_response) do
8
+ double("Response", :body => { "is_success" => "1" })
9
+ end
10
+
5
11
  it { should have_registered_service(:cancel_order, :trust_service) }
6
12
  it { should have_registered_service(:cancel_pending_orders, :order) }
7
13
  it { should have_registered_service(:modify, :domain) }
8
14
  it { should have_registered_service(:process_pending, :domain) }
9
- it { should have_registered_service(:renew_domain, :domain, :renew) }
15
+ it { should have_registered_service(:renew, :domain) }
10
16
  it { should have_registered_service(:revoke, :domain) }
11
17
  it { should have_registered_service(:update_contacts, :domain) }
12
- it { should have_registered_service(:register_domain, :domain, :sw_register) }
18
+ it { should have_registered_service(:sw_register, :domain) }
13
19
  it { should have_registered_service(:register_trust_service, :trust_service) }
20
+
21
+ describe "#update_contact" do
22
+ it "updates a domain contact" do
23
+ expected_params = {
24
+ :domain => "thedomain.com",
25
+ :attributes => {
26
+ :affect_domains => "0",
27
+ :data => "contact_info",
28
+ :contact_set => {
29
+ "admin" => {
30
+ :first_name => "AdminFirst",
31
+ :last_name => "AdminLast",
32
+ :org_name => "AdminOrg",
33
+ :address1 => "AdminAddress1",
34
+ :address2 => "AdminAddress2",
35
+ :address3 => "AdminAddress3",
36
+ :city => "AdminCity",
37
+ :state => "AdminState",
38
+ :country => "AdminCountry",
39
+ :postal_code => "AdminPostalCode",
40
+ :phone => "AdminPhone",
41
+ :fax => "AdminFax",
42
+ :email => "AdminEmail"
43
+ }
44
+ }
45
+ }
46
+ }
47
+
48
+ params = {
49
+ :type => "admin",
50
+ :first_name => "AdminFirst",
51
+ :last_name => "AdminLast",
52
+ :org_name => "AdminOrg",
53
+ :address1 => "AdminAddress1",
54
+ :address2 => "AdminAddress2",
55
+ :address3 => "AdminAddress3",
56
+ :city => "AdminCity",
57
+ :state => "AdminState",
58
+ :country => "AdminCountry",
59
+ :postal_code => "AdminPostalCode",
60
+ :phone => "AdminPhone",
61
+ :fax => "AdminFax",
62
+ :email => "AdminEmail"
63
+ }
64
+
65
+ subject.should_receive(:faraday_request).with(:modify, :domain, expected_params).and_return(success_response)
66
+ subject.update_contact("thedomain.com", params)
67
+
68
+ subject.should be_successful
69
+ end
70
+
71
+ it "is unsuccessful when fails" do
72
+ expected_params = {
73
+ :domain => "thedomain.com",
74
+ :attributes => {
75
+ :affect_domains => "0",
76
+ :data => "contact_info",
77
+ :contact_set => { nil => {}}
78
+ }
79
+ }
80
+
81
+ error_response = double("Response", :body => {
82
+ "attributes" => {
83
+ "details" => {
84
+ "thedomain.com" => {
85
+ "response_text" => "The error\nAnother error"
86
+ }
87
+ }
88
+ }
89
+ })
90
+
91
+ subject.should_receive(:faraday_request).with(:modify, :domain, expected_params).and_return(error_response)
92
+ errors = subject.update_contact("thedomain.com", {})
93
+
94
+ subject.should_not be_successful
95
+ errors.should == ["The error", "Another error"]
96
+ end
97
+ end
14
98
  end
@@ -8,5 +8,5 @@ describe MooMoo::Transfer do
8
8
  it { should have_registered_service(:get_transfers_in, :domain) }
9
9
  it { should have_registered_service(:process_transfer, :transfer) }
10
10
  it { should have_registered_service(:send_password, :transfer) }
11
- it { should have_registered_service(:push_transfer, :domain, :rsp2rsp_push_transfer) }
11
+ it { should have_registered_service(:rsp2rsp_push_transfer, :domain) }
12
12
  end
data/spec/moo_moo_spec.rb CHANGED
@@ -18,7 +18,7 @@ describe MooMoo do
18
18
  config.password = 'secret2'
19
19
  end
20
20
 
21
- opensrs = MooMoo::Base.new
21
+ opensrs = MooMoo::BaseCommand.new
22
22
 
23
23
  opensrs.host.should == 'host.com'
24
24
  opensrs.key.should == 'secret'
data/spec/spec_helper.rb CHANGED
@@ -86,12 +86,13 @@ RSpec::Matchers.define(:have_registered_service) do |*args|
86
86
 
87
87
  match do |object|
88
88
  parameters = {:the => :params, :cookie => "thecookie"}
89
- object.should_receive(:run_command).
90
- with(action_name, object_name, parameters).
91
- and_return("theresult")
89
+ response = double("Response", :body => {"attributes" => { :the => :attrs }})
92
90
 
91
+ object.should_receive(:faraday_request).
92
+ with(action_name, object_name, parameters).
93
+ and_return(response)
93
94
 
94
- object.send(method_name, parameters) == "theresult"
95
+ object.send("api_#{method_name}", parameters) == { :the => :attrs }
95
96
  end
96
97
 
97
98
  description do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moo_moo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-24 00:00:00.000000000 Z
12
+ date: 2012-08-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: extlib
@@ -139,14 +139,12 @@ files:
139
139
  - README.md
140
140
  - Rakefile
141
141
  - lib/moo_moo.rb
142
- - lib/moo_moo/base.rb
143
- - lib/moo_moo/command.rb
142
+ - lib/moo_moo/base_command.rb
144
143
  - lib/moo_moo/config.rb
145
144
  - lib/moo_moo/exceptions.rb
146
145
  - lib/moo_moo/middleware/open_srs_errors.rb
147
146
  - lib/moo_moo/middleware/open_srs_xml_builder.rb
148
147
  - lib/moo_moo/middleware/parse_open_srs.rb
149
- - lib/moo_moo/response.rb
150
148
  - lib/moo_moo/services/cookie.rb
151
149
  - lib/moo_moo/services/dns_zone.rb
152
150
  - lib/moo_moo/services/lookup.rb
@@ -157,11 +155,9 @@ files:
157
155
  - moo_moo.gemspec
158
156
  - spec/fixtures/success_response.xml
159
157
  - spec/integration_spec.rb
160
- - spec/moo_moo/base_spec.rb
161
- - spec/moo_moo/command_spec.rb
158
+ - spec/moo_moo/base_command_spec.rb
162
159
  - spec/moo_moo/config_spec.rb
163
160
  - spec/moo_moo/middleware/open_srs_xml_builder_spec.rb
164
- - spec/moo_moo/response_spec.rb
165
161
  - spec/moo_moo/services/cookie_spec.rb
166
162
  - spec/moo_moo/services/dns_zone_spec.rb
167
163
  - spec/moo_moo/services/lookup_spec.rb
@@ -185,7 +181,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
185
181
  version: '0'
186
182
  segments:
187
183
  - 0
188
- hash: -294129659865012821
184
+ hash: -848063552060590534
189
185
  required_rubygems_version: !ruby/object:Gem::Requirement
190
186
  none: false
191
187
  requirements:
@@ -194,7 +190,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
194
190
  version: '0'
195
191
  segments:
196
192
  - 0
197
- hash: -294129659865012821
193
+ hash: -848063552060590534
198
194
  requirements: []
199
195
  rubyforge_project: opensrs
200
196
  rubygems_version: 1.8.23
@@ -204,11 +200,9 @@ summary: Implements OpenSRS XML API
204
200
  test_files:
205
201
  - spec/fixtures/success_response.xml
206
202
  - spec/integration_spec.rb
207
- - spec/moo_moo/base_spec.rb
208
- - spec/moo_moo/command_spec.rb
203
+ - spec/moo_moo/base_command_spec.rb
209
204
  - spec/moo_moo/config_spec.rb
210
205
  - spec/moo_moo/middleware/open_srs_xml_builder_spec.rb
211
- - spec/moo_moo/response_spec.rb
212
206
  - spec/moo_moo/services/cookie_spec.rb
213
207
  - spec/moo_moo/services/dns_zone_spec.rb
214
208
  - spec/moo_moo/services/lookup_spec.rb
@@ -1,32 +0,0 @@
1
- module MooMoo
2
- class Command
3
- # Constructor
4
- #
5
- # ==== Required
6
- # * <tt>:action</tt> - action of the command
7
- # * <tt>:object</tt> - object the command operates on
8
- # * <tt>:params</tt> - additional parameters for the command
9
- def initialize(action, object, params = {})
10
- @action = action
11
- @object = object
12
- @params = params
13
- end
14
-
15
- # Runs the command against OpenSRS server
16
- #
17
- # ==== Required
18
- # * <tt>:host</tt> - host of the OpenSRS server
19
- # * <tt>:key</tt> - private key for the account
20
- # * <tt>:user</tt> - username for the account
21
- # * <tt>:port</tt> - port to connect to
22
- def run(host, key, user, port)
23
- @returned_parameters = Faraday.new(:url => "https://#{host}:#{port}", :ssl => {:verify => true}) do |c|
24
- c.request :open_srs_xml_builder, @action, @object, @params, key, user
25
- c.response :parse_open_srs
26
- c.response :open_srs_errors
27
- c.adapter :net_http
28
- end.post.body
29
- end
30
-
31
- end
32
- end
@@ -1,34 +0,0 @@
1
- module MooMoo
2
- # Based on opensrs_xmlapi.pdf page 25.
3
- class Response
4
- attr_reader :hash
5
-
6
- # Constructor
7
- #
8
- # ==== Required
9
- # * <tt>:hash</tt> - response hash
10
- def initialize(hash)
11
- @hash = hash
12
- end
13
-
14
- # Returns whether or not the command executed was successful
15
- def success?
16
- @hash['is_success'].to_i == 1
17
- end
18
-
19
- # Returns the response code if one is present
20
- def code
21
- @hash['response_code'].to_i
22
- end
23
-
24
- # Returns the response message if one is present
25
- def text
26
- @hash['response_text']
27
- end
28
-
29
- # Returns the response attributes.
30
- def attributes
31
- @hash['attributes']
32
- end
33
- end
34
- end
@@ -1,68 +0,0 @@
1
- require 'spec_helper'
2
-
3
- class SampleService < MooMoo::Base
4
- register_service :service1, :object1
5
- register_service :service2, :object2, :action2
6
- register_service :service3, :object3 do |params|
7
- params[:example] = "theexample"
8
- end
9
- end
10
-
11
- describe MooMoo::Base do
12
-
13
- before :each do
14
- @service = SampleService.new(:host => "thehost", :key => "thekey",
15
- :username => "theuser", :password => "thepass", :port => "theport")
16
- end
17
-
18
- describe "class methods" do
19
- describe "#register_service" do
20
- context "calls the services with the given parameters" do
21
- it "service1" do
22
- params = {:the => :params, :cookie => "thecookie"}
23
-
24
- @service.should_receive(:run_command).
25
- with(:service1, :object1, params).
26
- and_return("theresult")
27
-
28
- @service.service1(params).should == "theresult"
29
- end
30
-
31
- it "service2" do
32
- params = {:the => :params, :cookie => "thecookie"}
33
-
34
- @service.should_receive(:run_command).
35
- with(:action2, :object2, params).
36
- and_return("theresult")
37
-
38
- @service.service2(params).should == "theresult"
39
- end
40
-
41
- it "service3" do
42
- params = {:the => :params, :cookie => "thecookie"}
43
- expected_params = {:the => :params, :cookie => "thecookie", :example => "theexample"}
44
-
45
- @service.should_receive(:run_command).
46
- with(:service3, :object3, expected_params).
47
- and_return("theresult")
48
-
49
- @service.service3(params).should == "theresult"
50
- end
51
- end
52
- end
53
- end
54
-
55
- describe "#run_command" do
56
- it "should encapsulate response" do
57
- result = {:the => :result}
58
- command = stub()
59
- command.should_receive(:run).with("thehost", "thekey", "theuser", "theport").and_return(result)
60
- MooMoo::Command.should_receive(:new).
61
- with("theaction", "theobject", {"the" => "params"}).
62
- and_return(command)
63
-
64
- response = @service.run_command("theaction", "theobject", {"the" => "params"})
65
- response.hash.should == result
66
- end
67
- end
68
- end
@@ -1,41 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe MooMoo::Command do
4
-
5
- let(:action) { "theaction" }
6
- let(:object) { "theobject" }
7
- let(:params) { {
8
- :string => "stringparam",
9
- :hash => {:the => "hashparam"},
10
- :array => [{:param => "arrayvalue1"}, {:param => "arrayvalue2"}],
11
- :array_list => ["arrayvalue1", "arrayvalue2"]
12
- } }
13
-
14
- let(:command) { MooMoo::Command.new(action, object, params) }
15
-
16
- describe "#run" do
17
- describe "success response" do
18
- let(:xml) { "xmlcontent" }
19
- let(:response) { {:status => 200, :body => File.open("spec/fixtures/success_response.xml")} }
20
-
21
- before :each do
22
- @request = stub_request(:post, "https://thehost.com:12345/").to_return(response)
23
- @response = command.run("thehost.com", "thekey", "theuser", "12345")
24
- end
25
-
26
- it "posts with correct parameters" do
27
- @request.should have_been_made
28
- end
29
-
30
- it "returns the response" do
31
- @response["response_text"].should == "Command Successful"
32
- end
33
- end
34
-
35
- it "raises exception on invalid http status" do
36
- stub_request(:post, "https://thehost:12345/").to_return(:status => ["401", "Unauthorized"])
37
- lambda { command.run("thehost", "thekey", "theuser", "12345") }.should raise_error(MooMoo::OpenSRSException, "Bad HTTP Status: 401")
38
- end
39
- end
40
-
41
- end
@@ -1,43 +0,0 @@
1
- require 'spec_helper'
2
- require 'date'
3
-
4
- describe MooMoo::Response do
5
- subject { MooMoo::Response.new(
6
- "is_success" => "1", "response_code" => "100",
7
- "response_text" => "The message", "attributes" => "The attributes") }
8
-
9
- describe "#hash" do
10
- it "retrieves the response hash" do
11
- subject.hash.should == { "is_success" => "1", "response_code" => "100",
12
- "response_text" => "The message", "attributes" => "The attributes" }
13
- end
14
- end
15
-
16
- describe "#success?" do
17
- it "is true when 1" do
18
- subject.success?.should be_true
19
- end
20
-
21
- it "is false when not 1" do
22
- MooMoo::Response.new("is_success" => "0").success?.should be_false
23
- end
24
- end
25
-
26
- describe "#code" do
27
- it "retrieves response code" do
28
- subject.code.should == 100
29
- end
30
- end
31
-
32
- describe "#text" do
33
- it "retrieves response text" do
34
- subject.text.should == "The message"
35
- end
36
- end
37
-
38
- describe "#attributes" do
39
- it "retrieves response attributes" do
40
- subject.attributes.should == "The attributes"
41
- end
42
- end
43
- end