Feature: Slack integration (#783)
- Integrations architecture - Slack integration
This commit is contained in:
51
app/models/integrations/app.rb
Normal file
51
app/models/integrations/app.rb
Normal file
@@ -0,0 +1,51 @@
|
||||
class Integrations::App
|
||||
attr_accessor :params
|
||||
|
||||
def initialize(params)
|
||||
@params = params
|
||||
end
|
||||
|
||||
def id
|
||||
params[:id]
|
||||
end
|
||||
|
||||
def name
|
||||
params[:name]
|
||||
end
|
||||
|
||||
def description
|
||||
params[:description]
|
||||
end
|
||||
|
||||
def logo
|
||||
params[:logo]
|
||||
end
|
||||
|
||||
def fields
|
||||
params[:fields]
|
||||
end
|
||||
|
||||
def button
|
||||
params[:button]
|
||||
end
|
||||
|
||||
def enabled?(account)
|
||||
account.hooks.where(app_id: id).exists?
|
||||
end
|
||||
|
||||
class << self
|
||||
def apps
|
||||
Hashie::Mash.new(APPS_CONFIG)
|
||||
end
|
||||
|
||||
def all
|
||||
apps.values.each_with_object([]) do |app, result|
|
||||
result << new(app)
|
||||
end
|
||||
end
|
||||
|
||||
def find(params)
|
||||
all.detect { |app| app.id == params[:id] }
|
||||
end
|
||||
end
|
||||
end
|
||||
36
app/models/integrations/hook.rb
Normal file
36
app/models/integrations/hook.rb
Normal file
@@ -0,0 +1,36 @@
|
||||
# == Schema Information
|
||||
#
|
||||
# Table name: integrations_hooks
|
||||
#
|
||||
# id :bigint not null, primary key
|
||||
# access_token :string
|
||||
# hook_type :integer default("account")
|
||||
# settings :text
|
||||
# status :integer default("disabled")
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# account_id :integer
|
||||
# app_id :string
|
||||
# inbox_id :integer
|
||||
# reference_id :string
|
||||
#
|
||||
class Integrations::Hook < ApplicationRecord
|
||||
validates :account_id, presence: true
|
||||
validates :app_id, presence: true
|
||||
|
||||
enum status: { disabled: 0, enabled: 1 }
|
||||
|
||||
belongs_to :account
|
||||
belongs_to :inbox, optional: true
|
||||
has_secure_token :access_token
|
||||
|
||||
enum hook_type: { account: 0, inbox: 1 }
|
||||
|
||||
def app
|
||||
@app ||= Integrations::App.find(id: app_id)
|
||||
end
|
||||
|
||||
def slack?
|
||||
app_id == 'cw_slack'
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user