Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into set_charset_for_mysql
Browse files Browse the repository at this point in the history
Conflicts:
	db/schema.rb
  • Loading branch information
knu committed Aug 27, 2014
2 parents 393e3c4 + 0227496 commit 857b8ea
Show file tree
Hide file tree
Showing 63 changed files with 786 additions and 274 deletions.
8 changes: 5 additions & 3 deletions .env.example
Expand Up @@ -70,9 +70,11 @@ EMAIL_FROM_ADDRESS=from_address@gmail.com
# Number of lines of log messages to keep per Agent
AGENT_LOG_LENGTH=200

#############################
# OAuth Configuration #
#############################
########################################################################################################
# OAuth Configuration #
# More information at the wiki: https://github.com/cantino/huginn/wiki/Configuring-OAuth-applications #
########################################################################################################

TWITTER_OAUTH_KEY=
TWITTER_OAUTH_SECRET=

Expand Down
4 changes: 2 additions & 2 deletions .travis.yml
Expand Up @@ -2,13 +2,13 @@ language: ruby
cache: bundler
bundler_args: --without development production
env:
- APP_SECRET_TOKEN=b2724973fd81c2f4ac0f92ac48eb3f0152c4a11824c122bcf783419a4c51d8b9bba81c8ba6a66c7de599677c7f486242cf819775c433908e77c739c5c8ae118d TWITTER_OAUTH_KEY=twitteroauthkey TWITTER_OAUTH_SECRET=twitteroauthsecret
- APP_SECRET_TOKEN=b2724973fd81c2f4ac0f92ac48eb3f0152c4a11824c122bcf783419a4c51d8b9bba81c8ba6a66c7de599677c7f486242cf819775c433908e77c739c5c8ae118d
rvm:
- 2.0.0
- 2.1.1
- 1.9.3
before_install:
- travis_retry gem install bundler
- travis_retry gem install bundler
before_script:
- mysql -e 'create database huginn_test;'
- bundle exec rake db:migrate db:test:prepare
Expand Down
3 changes: 2 additions & 1 deletion Gemfile
Expand Up @@ -56,6 +56,8 @@ gem 'uglifier', '>= 1.3.0'
gem 'select2-rails', '~> 3.5.4'
gem 'jquery-rails', '~> 3.1.0'
gem 'ace-rails-ap', '~> 2.0.1'
gem 'spectrum-rails'


# geokit-rails doesn't work with geokit 1.8.X but it specifies ~> 1.5
# in its own Gemfile.
Expand Down Expand Up @@ -128,4 +130,3 @@ else
gem 'unicorn', platform: :ruby_18
gem 'rails_12factor', platform: :ruby_18
end

3 changes: 3 additions & 0 deletions Gemfile.lock
Expand Up @@ -315,6 +315,8 @@ GEM
simplecov-html (0.8.0)
slack-notifier (0.5.0)
slop (3.6.0)
spectrum-rails (1.3.4)
railties (>= 3.1)
sprockets (2.11.0)
hike (~> 1.2)
multi_json (~> 1.0)
Expand Down Expand Up @@ -444,6 +446,7 @@ DEPENDENCIES
select2-rails (~> 3.5.4)
shoulda-matchers
slack-notifier (~> 0.5.0)
spectrum-rails
therubyracer (~> 0.12.1)
twilio-ruby (~> 3.11.5)
twitter (~> 5.8.0)
Expand Down
7 changes: 6 additions & 1 deletion app/assets/javascripts/application.js.coffee.erb
Expand Up @@ -6,6 +6,7 @@
#= require json2
#= require jquery.json-editor
#= require latlon_and_geo
#= require spectrum
#= require ./worker-checker
#= require_self

Expand Down Expand Up @@ -60,6 +61,10 @@ showEventDescriptions = ->
$(".event-descriptions").html("").hide()

$(document).ready ->
$('.navbar .dropdown.dropdown-hover').hover \
-> $(this).addClass('open'),
-> $(this).removeClass('open')

# JSON Editor
window.jsonEditor = setupJsonEditor()[0]

Expand Down Expand Up @@ -164,7 +169,7 @@ $(document).ready ->

$(".description").html(json.description_html) if json.description_html?

$('.oauthable-form').html($(json.form).find('.oauthable-form').html()) if json.form?
$('.oauthable-form').html(json.form) if json.form?

if $("#agent_options").hasClass("showing-default") || $("#agent_options").val().match(/\A\s*(\{\s*\}|)\s*\Z/g)
window.jsonEditor.json = json.options
Expand Down
15 changes: 15 additions & 0 deletions app/assets/stylesheets/application.css.scss.erb
Expand Up @@ -12,6 +12,7 @@
*= require select2-bootstrap
*= require jquery.json-editor
*= require rickshaw
*= require spectrum
*= require_tree .
*= require_self
*/
Expand Down Expand Up @@ -186,3 +187,17 @@ h2 .scenario, a span.label.scenario {
.color-success {
color: #5cb85c;
}

.form-group {
.sp-replacer {
@extend .form-control;
}

.sp-preview {
width: 100%;
}

.sp-dd {
display: none;
}
}
43 changes: 42 additions & 1 deletion app/concerns/liquid_droppable.rb
@@ -1,9 +1,50 @@
module LiquidDroppable
extend ActiveSupport::Concern

# In subclasses of this base class, "locals" take precedence over
# methods.
class Drop < Liquid::Drop
def initialize(object)
class << self
def inherited(subclass)
class << subclass
attr_reader :drop_methods

# Make all public methods private so that #before_method
# catches everything.
def drop_methods!
return if @drop_methods

@drop_methods = Set.new

(public_instance_methods - Drop.public_instance_methods).each { |name|
@drop_methods << name.to_s
private name
}
end
end
end
end

def initialize(object, locals = nil)
self.class.drop_methods!

@object = object
@locals = locals || {}
end

def before_method(name)
if @locals.include?(name)
@locals[name]
elsif self.class.drop_methods.include?(name)
__send__(name)
end
end

def each
return to_enum(__method__) unless block_given?
self.class.drop_methods.each { |name|
yield [name, __send__(name)]
}
end
end

Expand Down
6 changes: 3 additions & 3 deletions app/concerns/oauthable.rb
Expand Up @@ -11,11 +11,11 @@ def oauthable?
true
end

def valid_services(current_user)
def valid_services_for(user)
if valid_oauth_providers == :all
current_user.available_services
user.available_services
else
current_user.available_services.where(provider: valid_oauth_providers)
user.available_services.where(provider: valid_oauth_providers)
end
end

Expand Down
4 changes: 2 additions & 2 deletions app/concerns/twitter_concern.rb
Expand Up @@ -25,11 +25,11 @@ def twitter_consumer_secret
end

def twitter_oauth_token
self.service.token
service.token
end

def twitter_oauth_token_secret
self.service.secret
service.secret
end

def twitter
Expand Down
3 changes: 3 additions & 0 deletions app/concerns/web_request_concern.rb
@@ -1,3 +1,6 @@
require 'faraday'
require 'faraday_middleware'

module WebRequestConcern
extend ActiveSupport::Concern

Expand Down
15 changes: 8 additions & 7 deletions app/controllers/agents_controller.rb
Expand Up @@ -31,14 +31,15 @@ def run
end

def type_details
agent = Agent.build_for_type(params[:type], current_user, {})
@agent = Agent.build_for_type(params[:type], current_user, {})
render :json => {
:can_be_scheduled => agent.can_be_scheduled?,
:default_schedule => agent.default_schedule,
:can_receive_events => agent.can_receive_events?,
:can_create_events => agent.can_create_events?,
:options => agent.default_options,
:description_html => agent.html_description
:can_be_scheduled => @agent.can_be_scheduled?,
:default_schedule => @agent.default_schedule,
:can_receive_events => @agent.can_receive_events?,
:can_create_events => @agent.can_create_events?,
:options => @agent.default_options,
:description_html => @agent.html_description,
:form => render_to_string(partial: 'oauth_dropdown')
}
end

Expand Down
23 changes: 23 additions & 0 deletions app/controllers/application_controller.rb
Expand Up @@ -13,4 +13,27 @@ def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :username, :email, :password, :remember_me) }
devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :email, :password, :password_confirmation, :current_password) }
end

def upgrade_warning
return unless current_user
twitter_oauth_check
basecamp_auth_check
end

private
def twitter_oauth_check
if ENV['TWITTER_OAUTH_KEY'].blank? || ENV['TWITTER_OAUTH_SECRET'].blank?
if @twitter_agent = current_user.agents.where("type like 'Agents::Twitter%'").first
@twitter_oauth_key = @twitter_agent.options['consumer_key'].presence || @twitter_agent.credential('twitter_consumer_key')
@twitter_oauth_secret = @twitter_agent.options['consumer_secret'].presence || @twitter_agent.credential('twitter_consumer_secret')
end
end
end

def basecamp_auth_check
if ENV['THIRTY_SEVEN_SIGNALS_OAUTH_KEY'].blank? || ENV['THIRTY_SEVEN_SIGNALS_OAUTH_SECRET'].blank?
@basecamp_agent = current_user.agents.where(type: 'Agents::BasecampAgent').first
end
end

end
2 changes: 2 additions & 0 deletions app/controllers/home_controller.rb
@@ -1,6 +1,8 @@
class HomeController < ApplicationController
skip_before_filter :authenticate_user!

before_filter :upgrade_warning, only: :index

def index
end

Expand Down
2 changes: 2 additions & 0 deletions app/controllers/scenarios_controller.rb
Expand Up @@ -45,6 +45,8 @@ def export
@exporter = AgentsExporter.new(:name => @scenario.name,
:description => @scenario.description,
:guid => @scenario.guid,
:tag_fg_color => @scenario.tag_fg_color,
:tag_bg_color => @scenario.tag_bg_color,
:source_url => @scenario.public? && export_scenario_url(@scenario),
:agents => @scenario.agents)
response.headers['Content-Disposition'] = 'attachment; filename="' + @exporter.filename + '"'
Expand Down
1 change: 1 addition & 0 deletions app/controllers/services_controller.rb
@@ -1,4 +1,5 @@
class ServicesController < ApplicationController
before_filter :upgrade_warning, only: :index

def index
@services = current_user.services.page(params[:page])
Expand Down
4 changes: 2 additions & 2 deletions app/helpers/agent_helper.rb
Expand Up @@ -8,11 +8,11 @@ def agent_show_view(agent)

def scenario_links(agent)
agent.scenarios.map { |scenario|
link_to(scenario.name, scenario, class: "label label-info")
link_to(scenario.name, scenario, class: "label", style: style_colors(scenario))
}.join(" ").html_safe
end

def agent_show_class(agent)
agent.short_type.underscore.dasherize
end
end
end
7 changes: 7 additions & 0 deletions app/helpers/markdown_helper.rb
@@ -0,0 +1,7 @@
module MarkdownHelper

def markdown(text)
Kramdown::Document.new(text, :auto_ids => false).to_html.html_safe
end

end
23 changes: 23 additions & 0 deletions app/helpers/scenario_helper.rb
@@ -0,0 +1,23 @@
module ScenarioHelper

def style_colors(scenario)
colors = {
color: scenario.tag_fg_color || default_scenario_fg_color,
background_color: scenario.tag_bg_color || default_scenario_bg_color
}.map { |key, value| "#{key.to_s.dasherize}:#{value}" }.join(';')
end

def scenario_label(scenario, text = nil)
text ||= scenario.name
content_tag :span, text, class: 'label scenario', style: style_colors(scenario)
end

def default_scenario_bg_color
'#5BC0DE'
end

def default_scenario_fg_color
'#FFFFFF'
end

end
5 changes: 5 additions & 0 deletions app/helpers/service_helper.rb
@@ -0,0 +1,5 @@
module ServiceHelper
def has_oauth_configuration_for(provider)
ENV["#{provider.upcase}_OAUTH_KEY"].present? && ENV["#{provider.upcase}_OAUTH_SECRET"].present?
end
end
16 changes: 3 additions & 13 deletions app/models/agent.rb
Expand Up @@ -44,7 +44,7 @@ class Agent < ActiveRecord::Base
after_save :possibly_update_event_expirations

belongs_to :user, :inverse_of => :agents
belongs_to :service
belongs_to :service, :inverse_of => :agents
has_many :events, -> { order("events.id desc") }, :dependent => :delete_all, :inverse_of => :agent
has_one :most_recent_event, :inverse_of => :agent, :class_name => "Event", :order => "events.id desc"
has_many :logs, -> { order("agent_logs.id desc") }, :dependent => :delete_all, :inverse_of => :agent, :class_name => "AgentLog"
Expand Down Expand Up @@ -392,7 +392,7 @@ def type
@object.short_type
end

METHODS = [
[
:name,
:type,
:options,
Expand All @@ -403,19 +403,9 @@ def type
:disabled,
:keep_events_for,
:propagate_immediately,
]

METHODS.each { |attr|
].each { |attr|
define_method(attr) {
@object.__send__(attr)
} unless method_defined?(attr)
}

def each(&block)
return to_enum(__method__) unless block

METHODS.each { |attr|
yield [attr, __sent__(attr)]
}
end
end

0 comments on commit 857b8ea

Please sign in to comment.