moo_moo 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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