Class: ZapierRestHooks::Hook

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/zapier_rest_hooks/hook.rb

Class Method Summary collapse

Class Method Details

.hooks(event_name, owner = Struct::ZapierApp.new(0)) ⇒ Object

Returns all hooks for a given event_name and owner.



28
29
30
# File 'app/models/zapier_rest_hooks/hook.rb', line 28

def self.hooks(event_name, owner = Struct::ZapierApp.new(0))
  where(event_name: event_name, owner_class_name: owner.class.name, owner_id: owner.id)
end

.hooks_exist?(event_name, owner = Struct::ZapierApp.new(0)) ⇒ Boolean

Tests whether any hooks exist for a given event_name and owner

Returns:

  • (Boolean)


33
34
35
# File 'app/models/zapier_rest_hooks/hook.rb', line 33

def self.hooks_exist?(event_name, owner = Struct::ZapierApp.new(0))
  hooks(event_name, owner).any?
end

.trigger(event_name, encoded_record, owner = Struct::ZapierApp.new(0)) ⇒ Object

Looks for an appropriate REST hook that matches the owner, and triggers the hook if one exists.



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'app/models/zapier_rest_hooks/hook.rb', line 8

def self.trigger(event_name, encoded_record, owner = Struct::ZapierApp.new(0))
  hooks = self.hooks(event_name, owner)
  return if hooks.empty?

  unless Rails.env.development?
    # Trigger each hook if there is more than one for an owner, which can happen.
    hooks.each do |hook|
      Rails.logger.info "Triggering REST hook event: #{event_name} / #{hook.inspect}"
      Rails.logger.info "REST hook record: #{encoded_record}"
      RestClient.post(hook.target_url, encoded_record) do |response|
        if response.code.eql? 410
          Rails.logger.info "Destroying REST hook because of 410 response: #{hook.inspect}"
          hook.destroy
        end
      end
    end
  end
end