require "oauth2" require "mautic/engine" module Mautic include ::ActiveSupport::Configurable autoload :FormHelper, 'mautic/form_helper' autoload :Proxy, 'mautic/proxy' autoload :Model, 'mautic/model' autoload :Submissions, 'mautic/submissions' class RequestError < StandardError attr_reader :response, :errors, :request_url def initialize(response, message = nil) @errors ||= [] @response = response @request_url = response.response&.env&.url body = if response.body.start_with? "<!DOCTYPE html>" response.body.split("\n").last else response.body end json_body = begin JSON.parse(body) rescue JSON::ParserError { "errors" => [{ "code" => response.status, "message" => body }] } end message ||= Array(json_body['errors']).collect do |error| msg = error['code'].to_s msg << " (#{error['type']}):" if error['type'] msg << " #{error['message']}" @errors << error['message'] msg end.join(', ') super("#{@request_url} => #{message}") end end class TokenExpiredError < RequestError end class ValidationError < RequestError def initialize(response, message = nil) @response = response json_body = begin JSON.parse(response.body) rescue ParseError {} end @errors = Array(json_body['errors']).inject({}) { |mem, var| mem.merge!(var['details']); mem } message ||= @errors.collect { |field, msg| "#{field}: #{msg.join(', ')}" }.join('; ') super(response, message) end end class AuthorizeError < RequestError end class RecordNotFound < RequestError end configure do |config| # This is URL your application - its for oauth callbacks config.base_url = "http://localhost:3000" # *optional* This is your default mautic URL - used in form helper config.mautic_url = "https://mautic.my.app" end # Your code goes here... if Rails.version.start_with? "4" class DummyMigrationClass < ActiveRecord::Migration end else class DummyMigrationClass < ActiveRecord::Migration[4.2] end end end