Class: PactBroker::Api::Resources::BaseResource

Inherits:
Webmachine::Resource
  • Object
show all
Includes:
PactBrokerUrls, Logging, Services
Defined in:
lib/pact_broker/api/resources/base_resource.rb

Constant Summary

Constants included from Logging

Logging::LOG_DIR, Logging::LOG_FILE_NAME

Instance Method Summary collapse

Methods included from Logging

included, #logger, #logger=

Methods included from PactBrokerUrls

#hal_browser_url, #latest_pact_url, #latest_pacts_url, #latest_version_url, #pact_url, #pact_url_from_params, #pact_versions_url, #pacticipant_url, #pacticipants_url, #tag_url, #tags_url, #url_encode, #version_url, #versions_url, #webhook_execution_url, #webhook_url, #webhooks_for_pact_url, #webhooks_url

Methods included from Services

#group_service, #pact_service, #pacticipant_service, #tag_service, #webhook_service

Instance Method Details

#base_urlObject



41
42
43
# File 'lib/pact_broker/api/resources/base_resource.rb', line 41

def base_url
  request.uri.to_s.gsub(/#{request.uri.path}$/,'')
end

#consumer_nameObject



75
76
77
# File 'lib/pact_broker/api/resources/base_resource.rb', line 75

def consumer_name
  identifier_from_path[:consumer_name]
end

#contract_validation_errors?(contract) ⇒ Boolean

Returns:

  • (Boolean)


104
105
106
107
108
109
# File 'lib/pact_broker/api/resources/base_resource.rb', line 104

def contract_validation_errors? contract
  if (invalid = !contract.validate)
    set_json_validation_error_messages contract.errors.full_messages
  end
  invalid
end

#decorator_context(options = {}) ⇒ Object



49
50
51
# File 'lib/pact_broker/api/resources/base_resource.rb', line 49

def decorator_context options = {}
  Decorators::DecoratorContext.new(base_url, resource_url, options)
end

#handle_exception(e) ⇒ Object



53
54
55
# File 'lib/pact_broker/api/resources/base_resource.rb', line 53

def handle_exception e
  PactBroker::Api::Resources::ErrorHandler.handle_exception(e, response)
end

#identifier_from_pathObject Also known as: path_info



33
34
35
36
37
# File 'lib/pact_broker/api/resources/base_resource.rb', line 33

def identifier_from_path
  request.path_info.each_with_object({}) do | pair, hash|
    hash[pair.first] = URI.decode(pair.last)
  end
end

#invalid_json?Boolean

Returns:

  • (Boolean)


83
84
85
86
87
88
89
90
91
92
93
# File 'lib/pact_broker/api/resources/base_resource.rb', line 83

def invalid_json?
  begin
    JSON.parse(request_body, PACT_PARSING_OPTIONS) #Not load! Otherwise it will try to load Ruby classes.
    false
  rescue StandardError => e
    logger.error "Error parsing JSON #{e} - #{request_body}"
    set_json_error_message "Error parsing JSON - #{e.message}"
    response.headers['Content-Type'] = 'application/json'
    true
  end
end

#paramsObject



57
58
59
# File 'lib/pact_broker/api/resources/base_resource.rb', line 57

def params
  @params ||= JSON.parse(request.body.to_s, {symbolize_names: true}.merge(PACT_PARSING_OPTIONS))
end

#provider_nameObject



79
80
81
# File 'lib/pact_broker/api/resources/base_resource.rb', line 79

def provider_name
  identifier_from_path[:provider_name]
end

#request_bodyObject



71
72
73
# File 'lib/pact_broker/api/resources/base_resource.rb', line 71

def request_body
  @request_body ||= request.body.to_s
end

#resource_urlObject



45
46
47
# File 'lib/pact_broker/api/resources/base_resource.rb', line 45

def resource_url
  request.uri.to_s
end

#set_json_error_message(message) ⇒ Object



61
62
63
64
# File 'lib/pact_broker/api/resources/base_resource.rb', line 61

def set_json_error_message message
  response.headers['Content-Type'] = 'application/json'
  response.body = {error: message}.to_json
end

#set_json_validation_error_messages(errors) ⇒ Object



66
67
68
69
# File 'lib/pact_broker/api/resources/base_resource.rb', line 66

def set_json_validation_error_messages errors
  response.headers['Content-Type'] = 'application/json'
  response.body = {errors: errors}.to_json
end

#validation_errors?(model) ⇒ Boolean

Returns:

  • (Boolean)


95
96
97
98
99
100
101
102
# File 'lib/pact_broker/api/resources/base_resource.rb', line 95

def validation_errors? model
  if (errors = model.validate).any?
    set_json_validation_error_messages errors
    true
  else
    false
  end
end