Module: ExternalServices::ActiveRecord::HasExternalService::ClassMethods

Defined in:
lib/external_services/active_record.rb

Instance Method Summary collapse

Instance Method Details

#external_services_disabledObject



40
41
42
# File 'lib/external_services/active_record.rb', line 40

def external_services_disabled
  Thread.current[:external_services_disabled]
end

#external_services_disabled=(val) ⇒ Object



44
45
46
# File 'lib/external_services/active_record.rb', line 44

def external_services_disabled=(val)
  Thread.current[:external_services_disabled] = val
end

#has_external_service(name, options = {}) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/external_services/active_record.rb', line 7

def has_external_service(name, options = {})
  class_attribute :external_services unless respond_to?(:external_services)
  self.external_services ||= {}
  self.external_services[name.to_sym] = options

  unless options[:only_api_actions] == true
    service_class = get_service_class(name, options)
    service_assoc = :"#{name}_service"
    has_one service_assoc, class_name: service_class.to_s, as: :subject, dependent: :destroy, autosave: true

    define_external_service_getset         name, options
    define_external_service_sync_methods   name, options
  end

  define_external_service_callbacks      name, options
  define_external_service_helper_methods name, options

  extend  service_class::SubjectClassMethods if defined? service_class::SubjectClassMethods
  include service_class::SubjectMethods if defined? service_class::SubjectMethods

  # rubocop:disable Lint/HandleExceptions
  begin
    service_module = const_get(name.to_s.camelize, false)
    include service_module
  rescue NameError
  end
  # rubocop:enable Lint/HandleExceptions
end

#includes_external_servicesObject



36
37
38
# File 'lib/external_services/active_record.rb', line 36

def includes_external_services
  includes(self.external_services.keys.map { |name| :"#{name}_service" })
end

#without_external_servicesObject



48
49
50
51
52
53
54
55
# File 'lib/external_services/active_record.rb', line 48

def without_external_services
  old = external_services_disabled
  self.external_services_disabled = true

  yield
ensure
  self.external_services_disabled = old
end