server/mock_response.rb in mirage-2.0.9 vs server/mock_response.rb in mirage-2.0.10

- old
+ new

@@ -1,64 +1,67 @@ module Mirage + class ServerResponseNotFound < Exception + + end class MockResponse class << self - def add response - stored_response_sets = responses[response.name]||={} - stored_response_set = (stored_response_sets[response.pattern] ||= {}) - - old_response = stored_response_set.delete(response.http_method) - stored_response_set[response.http_method] = response - - response.response_id = old_response ? old_response.response_id : next_id + def find_by_id id + response_set_containing(id).values.find { |response| response.response_id == id } || raise(ServerResponseNotFound) end - - def get_response name, http_method, body, query_string - find_response(body, query_string, responses[name], http_method) || default_response(body, http_method, name, query_string) - end - - def find id - response_set_containing(id).values.find { |response| response.response_id == id } - end - def delete(id) response_set_containing(id).delete_if { |http_method, response| response.response_id == id } end - def clear + def delete_all responses.clear @next_id = 0 end def backup snapshot.clear and snapshot.replace(responses.deep_clone) end def revert - clear and responses.replace(snapshot.deep_clone) + delete_all and responses.replace(snapshot.deep_clone) end def all all_responses = [] response_sets.each do |response_set| response_set.values.each{|response|all_responses << response} end all_responses end - def default_response(body, http_method, name, query_string) + def find_default(body, http_method, name, query_string) default_response_sets = find_default_responses(name) until default_response_sets.empty? - record = find_response(body, query_string, default_response_sets.delete_at(0), http_method) + record = find_in_response_set(body, query_string, default_response_sets.delete_at(0), http_method) return record if record && record.default? end + + raise ServerResponseNotFound end + def find(body, query_string, name, http_method) + find_in_response_set(body, query_string, responses[name], http_method) || raise(ServerResponseNotFound) + end + + def add new_response + response_set = target_response_set(new_response) + + old_response = response_set.delete(new_response.http_method) + response_set[new_response.http_method] = new_response + new_response.response_id = old_response ? old_response.response_id : next_id + end + private - def find_response(body, query_string, response_set, http_method) + + def find_in_response_set(body, query_string, response_set, http_method) return unless response_set response_set = response_set[body] || response_set[query_string] || response_set[:basic] response_set[http_method.upcase] if response_set end @@ -76,10 +79,15 @@ def find_default_responses(name) matches = responses.keys.find_all { |key| name.index(key) == 0 }.sort { |a, b| b.length <=> a.length } matches.collect { |key| responses[key] } end + def target_response_set response + responses_sets = responses[response.name]||={} + responses_sets[response.pattern] ||= {} + end + def responses @responses ||={} end def snapshot @@ -95,11 +103,12 @@ attr_reader :response_id, :delay, :name, :pattern, :http_method, :content_type attr_accessor :response_id def initialize name, value, content_type, http_method, pattern=nil, delay=0, default=false, file=false - @name, @value, @content_type, @http_method, @pattern, @delay, @default, @file = name, value, content_type, http_method.to_s.upcase, pattern, delay, default, file + @name, @value, @content_type, @http_method, @delay, @default, @file = name, value, content_type, (http_method||'GET').upcase, delay, default, file + @pattern = pattern ? /#{pattern}/ : :basic MockResponse.add self end def default? 'true' == @default @@ -133,6 +142,6 @@ private def find_match(string, regex) string.scan(/#{regex}/).flatten.first end end -end +end \ No newline at end of file