#34: added new hooks, some refactoring according to Alexander's comments
This commit is contained in:
parent
26c7a5a711
commit
f8d0320d23
4
Gemfile
4
Gemfile
|
@ -83,6 +83,10 @@ group :development do
|
||||||
gem 'rvm-capistrano', :require => false
|
gem 'rvm-capistrano', :require => false
|
||||||
gem 'cape', :require => false
|
gem 'cape', :require => false
|
||||||
gem 'capistrano_colors', :require => false
|
gem 'capistrano_colors', :require => false
|
||||||
|
# Better Errors & RailsPanel
|
||||||
|
gem 'better_errors'
|
||||||
|
gem 'binding_of_caller'
|
||||||
|
gem 'meta_request'
|
||||||
end
|
end
|
||||||
|
|
||||||
group :test do
|
group :test do
|
||||||
|
|
15
Gemfile.lock
15
Gemfile.lock
|
@ -62,6 +62,11 @@ GEM
|
||||||
attr_encrypted (1.2.1)
|
attr_encrypted (1.2.1)
|
||||||
encryptor (>= 1.1.1)
|
encryptor (>= 1.1.1)
|
||||||
bcrypt-ruby (3.0.1)
|
bcrypt-ruby (3.0.1)
|
||||||
|
better_errors (0.8.0)
|
||||||
|
coderay (>= 1.0.0)
|
||||||
|
erubis (>= 2.6.6)
|
||||||
|
binding_of_caller (0.7.1)
|
||||||
|
debug_inspector (>= 0.0.1)
|
||||||
blankslate (3.1.2)
|
blankslate (3.1.2)
|
||||||
bluepill (0.0.62)
|
bluepill (0.0.62)
|
||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
|
@ -84,6 +89,7 @@ GEM
|
||||||
chronic (0.6.7)
|
chronic (0.6.7)
|
||||||
chunky_png (1.2.7)
|
chunky_png (1.2.7)
|
||||||
cocaine (0.4.2)
|
cocaine (0.4.2)
|
||||||
|
coderay (1.0.9)
|
||||||
coffee-rails (3.2.2)
|
coffee-rails (3.2.2)
|
||||||
coffee-script (>= 2.2.0)
|
coffee-script (>= 2.2.0)
|
||||||
railties (~> 3.2.0)
|
railties (~> 3.2.0)
|
||||||
|
@ -99,6 +105,7 @@ GEM
|
||||||
compass (>= 0.12.2, < 0.14)
|
compass (>= 0.12.2, < 0.14)
|
||||||
creole (0.5.0)
|
creole (0.5.0)
|
||||||
daemons (1.1.9)
|
daemons (1.1.9)
|
||||||
|
debug_inspector (0.0.2)
|
||||||
devise (2.2.3)
|
devise (2.2.3)
|
||||||
bcrypt-ruby (~> 3.0)
|
bcrypt-ruby (~> 3.0)
|
||||||
orm_adapter (~> 0.1)
|
orm_adapter (~> 0.1)
|
||||||
|
@ -183,6 +190,9 @@ GEM
|
||||||
thin (~> 1.5.0)
|
thin (~> 1.5.0)
|
||||||
meta-tags (1.2.6)
|
meta-tags (1.2.6)
|
||||||
actionpack
|
actionpack
|
||||||
|
meta_request (0.2.3)
|
||||||
|
rack-contrib
|
||||||
|
railties
|
||||||
metaclass (0.0.1)
|
metaclass (0.0.1)
|
||||||
mime-types (1.21)
|
mime-types (1.21)
|
||||||
mocha (0.13.3)
|
mocha (0.13.3)
|
||||||
|
@ -239,6 +249,8 @@ GEM
|
||||||
rack (1.4.5)
|
rack (1.4.5)
|
||||||
rack-cache (1.2)
|
rack-cache (1.2)
|
||||||
rack (>= 0.4)
|
rack (>= 0.4)
|
||||||
|
rack-contrib (1.1.0)
|
||||||
|
rack (>= 0.9.1)
|
||||||
rack-protection (1.5.0)
|
rack-protection (1.5.0)
|
||||||
rack
|
rack
|
||||||
rack-ssl (1.3.3)
|
rack-ssl (1.3.3)
|
||||||
|
@ -396,6 +408,8 @@ DEPENDENCIES
|
||||||
airbrake (~> 3.1.2)
|
airbrake (~> 3.1.2)
|
||||||
ancestry (~> 1.3.0)
|
ancestry (~> 1.3.0)
|
||||||
attr_encrypted (= 1.2.1)
|
attr_encrypted (= 1.2.1)
|
||||||
|
better_errors
|
||||||
|
binding_of_caller
|
||||||
bluepill (~> 0.0.60)
|
bluepill (~> 0.0.60)
|
||||||
cancan (= 1.6.7)
|
cancan (= 1.6.7)
|
||||||
cape
|
cape
|
||||||
|
@ -420,6 +434,7 @@ DEPENDENCIES
|
||||||
jquery-rails (~> 2.0.2)
|
jquery-rails (~> 2.0.2)
|
||||||
mailcatcher
|
mailcatcher
|
||||||
meta-tags (~> 1.2.5)
|
meta-tags (~> 1.2.5)
|
||||||
|
meta_request
|
||||||
mock_redis (= 0.6.2)
|
mock_redis (= 0.6.2)
|
||||||
newrelic_rpm (~> 3.5.5.38)
|
newrelic_rpm (~> 3.5.5.38)
|
||||||
omniauth
|
omniauth
|
||||||
|
|
|
@ -1,24 +1,9 @@
|
||||||
class Hook < ActiveRecord::Base
|
class Hook < ActiveRecord::Base
|
||||||
NAMES = %w[
|
include Modules::Models::WebHooks
|
||||||
web
|
|
||||||
hipchat
|
|
||||||
].freeze
|
|
||||||
|
|
||||||
FIELDS = {
|
|
||||||
:web => {:url => :string},
|
|
||||||
:hipchat => {
|
|
||||||
:auth_token => :string,
|
|
||||||
:room => :string,
|
|
||||||
:restrict_to_branch => :string,
|
|
||||||
:notify => :boolean
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
belongs_to :project
|
belongs_to :project
|
||||||
|
|
||||||
before_validation :cleanup_data
|
before_validation :cleanup_data
|
||||||
validates :project_id, :presence => true
|
validates :project_id, :data, :presence => true
|
||||||
validates :data, :presence => true
|
|
||||||
validates :name, :presence => true, :inclusion => {:in => NAMES}
|
validates :name, :presence => true, :inclusion => {:in => NAMES}
|
||||||
|
|
||||||
attr_accessible :data, :name
|
attr_accessible :data, :name
|
||||||
|
@ -30,9 +15,9 @@ class Hook < ActiveRecord::Base
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def cleanup_data
|
def cleanup_data
|
||||||
if self.name.present? && fields = FIELDS[self.name.to_sym]
|
if self.name.present? && fields = SCHEMA[self.name.to_sym]
|
||||||
new_data = {}
|
new_data = {}
|
||||||
fields.each{ |f, t| new_data[f] = self.data[f] }
|
fields.each{ |type, field| new_data[field] = self.data[field] }
|
||||||
self.data = new_data
|
self.data = new_data
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
= hidden_field_tag 'hook[name]', @hook.name
|
= hidden_field_tag 'hook[name]', @hook.name
|
||||||
- Hook::FIELDS[@hook.name.to_sym].each do |field, type|
|
- Hook::SCHEMA[@hook.name.to_sym].each do |type, field|
|
||||||
.leftlist= t("activerecord.attributes.hook.data.#{field}")
|
.leftlist= t("activerecord.attributes.hook.data.#{field}")
|
||||||
.rightlist
|
.rightlist
|
||||||
|
- name, value = "hook[data][#{field}]", @hook.data[field]
|
||||||
- if type == :boolean
|
- if type == :boolean
|
||||||
= check_box_tag "hook[data][#{field}]", @hook.data[field], 1
|
= check_box_tag name, value, 1
|
||||||
|
- elsif type == :password
|
||||||
|
= password_field name, value
|
||||||
- else
|
- else
|
||||||
= text_field_tag "hook[data][#{field}]", @hook.data[field]
|
= text_field_tag name, value
|
||||||
.both
|
.both
|
|
@ -0,0 +1,58 @@
|
||||||
|
# -*- encoding : utf-8 -*-
|
||||||
|
module Modules::Models::WebHooks
|
||||||
|
|
||||||
|
class << self
|
||||||
|
protected
|
||||||
|
|
||||||
|
def add_hook(name)
|
||||||
|
NAMES << name.to_s
|
||||||
|
@schema = []
|
||||||
|
yield if block_given?
|
||||||
|
SCHEMA[name] = @schema
|
||||||
|
@schema = []
|
||||||
|
end
|
||||||
|
|
||||||
|
def add_to_schema(type, attrs)
|
||||||
|
attrs.each do |attr|
|
||||||
|
@schema << [type, attr.to_sym]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def boolean(*attrs)
|
||||||
|
add_to_schema :boolean, attrs
|
||||||
|
end
|
||||||
|
|
||||||
|
def string(*attrs)
|
||||||
|
add_to_schema :string, attrs
|
||||||
|
end
|
||||||
|
|
||||||
|
def password(*attrs)
|
||||||
|
add_to_schema :password, attrs
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
NAMES = []
|
||||||
|
SCHEMA = {}
|
||||||
|
add_hook :web do
|
||||||
|
string :url
|
||||||
|
end
|
||||||
|
add_hook :hipchat do
|
||||||
|
string :auth_token, :room, :restrict_to_branch
|
||||||
|
boolean :notify
|
||||||
|
end
|
||||||
|
add_hook :irc do
|
||||||
|
string :server, :port, :room, :nick, :branch_regexes
|
||||||
|
password :password
|
||||||
|
boolean :ssl, :message_without_join, :no_colors, :long_url, :notice
|
||||||
|
end
|
||||||
|
add_hook :jabber do
|
||||||
|
string :user
|
||||||
|
end
|
||||||
|
add_hook :twitter do
|
||||||
|
string :token, :secret
|
||||||
|
boolean :digest, :short_format
|
||||||
|
end
|
||||||
|
SCHEMA.freeze
|
||||||
|
NAMES.freeze
|
||||||
|
|
||||||
|
end
|
Loading…
Reference in New Issue