diff --git a/lib/ws_list.rb b/lib/ws_list.rb index 899edc3..7ae46ae 100644 --- a/lib/ws_list.rb +++ b/lib/ws_list.rb @@ -53,6 +53,18 @@ def [](url) @list.find{|service| service.url == url} end + # Returns a service based on its verb and url + # + # @param [String] verb The request method (GET, POST, PUT, DELETE) + # @param [String] url The url of the service you are looking for. + # @return [Nil, WeaselDiesel] The found service. + # + # @api public + def find(verb, url) + verb = verb.to_s.downcase.to_sym + @list.find{|service| service.verb == verb && service.url == url} + end + end diff --git a/spec/test_services.rb b/spec/test_services.rb index 9ab68bd..ff31404 100644 --- a/spec/test_services.rb +++ b/spec/test_services.rb @@ -1,4 +1,6 @@ -WeaselDieselSpecOptions = ['RSpec', 'Bacon'] # usually pulled from a model +unless Object.const_defined?("WeaselDieselSpecOptions") + WeaselDieselSpecOptions = ['RSpec', 'Bacon'] # usually pulled from a model +end describe_service "services/test.xml" do |service| service.formats :xml, :json @@ -78,6 +80,30 @@ end end +describe_service "services/test.xml" do |service| + service.formats :xml, :json + service.http_verb :delete + + service.params do |p| + p.integer :id, :doc => "id of item to be deleted" + end + + service.response do |response| + response.element(:name => "player_creation_ratings") do |e| + e.integer :id, :doc => "id doc" + end + end + + + service.documentation do |doc| + # doc.overall + doc.overall <<-DOC + This deletes a test service. + DOC + end +end + + describe_service "services/test_no_params.xml" do |service| service.formats :xml diff --git a/spec/ws_list_spec.rb b/spec/ws_list_spec.rb new file mode 100644 index 0000000..3f5c506 --- /dev/null +++ b/spec/ws_list_spec.rb @@ -0,0 +1,16 @@ +require File.expand_path("spec_helper", File.dirname(__FILE__)) + +describe WSList do + + it "find service by verb/route" do + service = WSList.find(:get, 'services/test.xml') + service.should_not be_nil + + service.url.should == 'services/test.xml' + service.verb.should == :get + + service = WSList.find(:delete, 'services/test.xml') + service.url.should == 'services/test.xml' + service.verb.should == :delete + end +end