grape-gen 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +16 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +31 -0
- data/Rakefile +2 -0
- data/bin/grape-gen +5 -0
- data/grape-scaffold.gemspec +24 -0
- data/lib/grape/generate/version.rb +5 -0
- data/lib/grape/generate.rb +91 -0
- data/template/Gemfile.tt +95 -0
- data/template/Guardfile +20 -0
- data/template/abilities/api_ability.rb +15 -0
- data/template/api/api_app.rb +85 -0
- data/template/api/mounts/auth.rb.tt +42 -0
- data/template/api/mounts/profile.rb.tt +24 -0
- data/template/config/application.yml.tt +33 -0
- data/template/config/boot.rb.tt +85 -0
- data/template/config/boot_faye.rb +22 -0
- data/template/config/boot_sidekiq.rb.tt +33 -0
- data/template/config/boot_spec.rb.tt +85 -0
- data/template/config/database.rb.tt +6 -0
- data/template/config/database.yml.tt +21 -0
- data/template/config/initializers/carrierwave.rb +3 -0
- data/template/config/initializers/core_ext.rb +14 -0
- data/template/config/initializers/em-patches/carrierwave.rb +13 -0
- data/template/config/initializers/em-patches/faye.rb +4 -0
- data/template/config/initializers/em-patches/lazy_evaluated_pool.rb +35 -0
- data/template/config/initializers/em-patches/mandrill.rb +45 -0
- data/template/config/initializers/em-patches/redis.rb +13 -0
- data/template/config/initializers/em-patches/redis_lazy_evaluated_pool.rb +19 -0
- data/template/config/initializers/em-patches/sidekiq.rb +46 -0
- data/template/config/initializers/em-patches/tire.rb +8 -0
- data/template/config/initializers/faye.rb +3 -0
- data/template/config/initializers/grape.rb +11 -0
- data/template/config/initializers/logging.rb +38 -0
- data/template/config/initializers/mandrill.rb +1 -0
- data/template/config/initializers/patches/redis_namespace.rb +96 -0
- data/template/config/initializers/sidekiq.rb +15 -0
- data/template/config/initializers/tire.rb +6 -0
- data/template/config/initializers/workflow.rb +31 -0
- data/template/config/logging.yml.tt +39 -0
- data/template/config/settings.rb +24 -0
- data/template/config/sidekiq.yml.tt +22 -0
- data/template/config.ru.tt +8 -0
- data/template/faye.ru +55 -0
- data/template/jobs/pong_time.rb +11 -0
- data/template/lib/faye_auth_extension.rb +61 -0
- data/template/lib/faye_publisher.rb +63 -0
- data/template/lib/mongoid/tire_plugin.rb +17 -0
- data/template/lib/warden/token_strategy.rb +18 -0
- data/template/mailers/registration_mailer.rb +17 -0
- data/template/models/user.rb.tt +75 -0
- data/template/public/faye.html +36 -0
- data/template/search_indexes/search_index.rb +60 -0
- data/template/search_indexes/user_index.rb +20 -0
- data/template/spec/api/mounts/auth_spec.rb.tt +37 -0
- data/template/spec/factories/user.rb +8 -0
- data/template/spec/spec_helper.rb.tt +132 -0
- data/template/uploaders/avatar_uploader.rb +23 -0
- data/template/views/v1/user/profile.json.jbuilder.tt +4 -0
- metadata +147 -0
@@ -0,0 +1,85 @@
|
|
1
|
+
# Defines our constants
|
2
|
+
RACK_ENV = ENV['RACK_ENV'] || 'development' unless defined?(RACK_ENV)
|
3
|
+
APP_ROOT = File.expand_path('../..', __FILE__) unless defined?(APP_ROOT)
|
4
|
+
|
5
|
+
# Load our dependencies
|
6
|
+
require 'rubygems' unless defined?(Gem)
|
7
|
+
require 'bundler/setup'
|
8
|
+
require 'yaml'
|
9
|
+
|
10
|
+
# Load initializers
|
11
|
+
Bundler.require(
|
12
|
+
:framework,
|
13
|
+
:db,
|
14
|
+
<% if @sidekiq -%>
|
15
|
+
:sidekiq,
|
16
|
+
<% end -%>
|
17
|
+
<% if @mandrill -%>
|
18
|
+
:mailer,
|
19
|
+
<% end -%>
|
20
|
+
:utils,
|
21
|
+
<% if @es -%>
|
22
|
+
:elastic_search,
|
23
|
+
<% end -%>
|
24
|
+
RACK_ENV
|
25
|
+
)
|
26
|
+
|
27
|
+
require_relative 'settings'
|
28
|
+
|
29
|
+
ApplicationSettings.source File.expand_path('config/application.yml', APP_ROOT)
|
30
|
+
ApplicationSettings.root = APP_ROOT
|
31
|
+
|
32
|
+
require_relative 'database'
|
33
|
+
|
34
|
+
Dir[ApplicationSettings.root('config/initializers/em-patches/*.rb')].each {|initializer| require initializer} unless RACK_ENV == 'test'
|
35
|
+
Dir[ApplicationSettings.root('config/initializers/*.rb')].each {|initializer|
|
36
|
+
require initializer unless initializer =~ /(faye|sidekiq|tire|mandrill)/
|
37
|
+
}
|
38
|
+
<% if @sidekiq %>
|
39
|
+
require 'sidekiq/testing'
|
40
|
+
<% end %>
|
41
|
+
|
42
|
+
<% if @dev_reload %>
|
43
|
+
RACK_APPLICATION = Grape::RackBuilder.setup do
|
44
|
+
%w{api models lib uploaders models abilities jobs search_indexes mailers}.each do |path|
|
45
|
+
add_source_path ApplicationSettings.root("#{path}/**/*.rb")
|
46
|
+
add_source_path ApplicationSettings.root("#{path}/*.rb")
|
47
|
+
end
|
48
|
+
|
49
|
+
use Warden::Manager do |config|
|
50
|
+
config.strategies.add(:access_token, TokenStrategy)
|
51
|
+
config.default_strategies :access_token
|
52
|
+
config.failure_app = API::Application
|
53
|
+
config.intercept_401 = false
|
54
|
+
end
|
55
|
+
|
56
|
+
use Rack::Config do |env|
|
57
|
+
env['api.tilt.root'] = ApplicationSettings.root('views')
|
58
|
+
end
|
59
|
+
|
60
|
+
mount 'API::Application', to: '/api'
|
61
|
+
|
62
|
+
logger Logging.logger[:rackbuilder]
|
63
|
+
end.boot!.application
|
64
|
+
<% else %>
|
65
|
+
%w{lib models uploaders models abilities jobs search_indexes mailers api}.each do |path|
|
66
|
+
Dir[ApplicationSettings.root("#{path}/**/*.rb")].each {|f| require f}
|
67
|
+
end
|
68
|
+
|
69
|
+
RACK_APPLICATION = Rack::Builder.new do
|
70
|
+
use Warden::Manager do |config|
|
71
|
+
config.strategies.add(:access_token, TokenStrategy)
|
72
|
+
config.default_strategies :access_token
|
73
|
+
config.failure_app = API::Application
|
74
|
+
config.intercept_401 = false
|
75
|
+
end
|
76
|
+
|
77
|
+
use Rack::Config do |env|
|
78
|
+
env['api.tilt.root'] = ApplicationSettings.root('views')
|
79
|
+
end
|
80
|
+
|
81
|
+
map '/api' do
|
82
|
+
run API::Application
|
83
|
+
end
|
84
|
+
end
|
85
|
+
<% end %>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
development: &dev
|
2
|
+
sessions:
|
3
|
+
default:
|
4
|
+
database: <%= @app_name %>
|
5
|
+
hosts:
|
6
|
+
- 127.0.0.1
|
7
|
+
|
8
|
+
options:
|
9
|
+
pool_size: 100
|
10
|
+
|
11
|
+
production: *dev
|
12
|
+
|
13
|
+
test:
|
14
|
+
sessions:
|
15
|
+
default:
|
16
|
+
database: <%= @app_name %>_test
|
17
|
+
hosts:
|
18
|
+
- 127.0.0.1
|
19
|
+
|
20
|
+
options:
|
21
|
+
pool_size: 100
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'em-synchrony'
|
2
|
+
require 'carrierwave/processing/mini_magick'
|
3
|
+
|
4
|
+
module CarrierWave
|
5
|
+
module MiniMagick
|
6
|
+
alias_method :old_manipulate!, :manipulate!
|
7
|
+
def manipulate!(&block)
|
8
|
+
EventMachine::Synchrony.defer do
|
9
|
+
old_manipulate!(&block)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'em-synchrony/connection_pool'
|
2
|
+
|
3
|
+
class LazyEvaluatedPool < EventMachine::Synchrony::ConnectionPool
|
4
|
+
def initialize(opts, &block)
|
5
|
+
@reserved = {} # map of in-progress connections
|
6
|
+
@available = [] # pool of free connections
|
7
|
+
@pending = [] # pending reservations (FIFO)
|
8
|
+
@config = opts
|
9
|
+
opts[:size].times do
|
10
|
+
@available.push(block) if block_given?
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
def acquire(fiber)
|
16
|
+
if conn = @available.pop
|
17
|
+
conn = self.instance_eval(&conn) if conn.respond_to?(:call)
|
18
|
+
@reserved[fiber.object_id] = conn
|
19
|
+
conn
|
20
|
+
else
|
21
|
+
Fiber.yield @pending.push fiber
|
22
|
+
acquire(fiber)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class << self
|
27
|
+
def pool_with_config(config, &block)
|
28
|
+
config[:size] ||= 10
|
29
|
+
LazyEvaluatedPool.new(config, &(block || connection))
|
30
|
+
end
|
31
|
+
private
|
32
|
+
def connection; raise 'Please, override connection method or supply block' end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# Patch mandrill API to play ball with EventMachine
|
2
|
+
module Mandrill
|
3
|
+
class API
|
4
|
+
def initialize(apikey=nil, debug=false)
|
5
|
+
@host = 'https://mandrillapp.com'
|
6
|
+
@path = '/api/1.0/'
|
7
|
+
|
8
|
+
@debug = debug
|
9
|
+
|
10
|
+
unless apikey
|
11
|
+
if ENV['MANDRILL_APIKEY']
|
12
|
+
apikey = ENV['MANDRILL_APIKEY']
|
13
|
+
else
|
14
|
+
apikey = read_configs
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
raise Error, 'You must provide a Mandrill API key' unless apikey
|
19
|
+
@apikey = apikey
|
20
|
+
end
|
21
|
+
|
22
|
+
def call(url, params={})
|
23
|
+
defer = EventMachine::DefaultDeferrable.new
|
24
|
+
params[:key] = @apikey
|
25
|
+
params = JSON.generate(params)
|
26
|
+
http = Mandrill::API.request.get(path: "#{@path}#{url}.json", headers: {'Content-Type' => 'application/json'}, body: params, keepalive: true)
|
27
|
+
http.callback do |r|
|
28
|
+
cast_error(r.response) if r.response_header.status != 200
|
29
|
+
defer.succeed(JSON.parse(r.response))
|
30
|
+
end
|
31
|
+
|
32
|
+
http.errback do |r|
|
33
|
+
raise Mandrill::ServiceUnavailableError.new
|
34
|
+
end
|
35
|
+
|
36
|
+
EventMachine::Synchrony.sync defer
|
37
|
+
end
|
38
|
+
|
39
|
+
class << self
|
40
|
+
def request
|
41
|
+
EventMachine::HttpRequest.new('https://mandrillapp.com/api/1.0/')
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'redis-namespace'
|
2
|
+
require_relative 'redis'
|
3
|
+
require_relative 'lazy_evaluated_pool'
|
4
|
+
|
5
|
+
class RedisLazyEvaluatedPool < LazyEvaluatedPool
|
6
|
+
CONFIG_DEFAULTS = {
|
7
|
+
url: 'redis://localhost:6379/0',
|
8
|
+
size: 10
|
9
|
+
}
|
10
|
+
private
|
11
|
+
def self.connection
|
12
|
+
Proc.new {
|
13
|
+
config = RedisLazyEvaluatedPool::CONFIG_DEFAULTS.merge (@config|| {}).deep_symbolize_keys
|
14
|
+
connection = EventMachine::Hiredis.connect(config[:url])
|
15
|
+
connection = Redis::Namespace.new(config[:namespace], redis: connection) if config[:namespace]
|
16
|
+
connection
|
17
|
+
}
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'sidekiq'
|
2
|
+
require_relative 'redis'
|
3
|
+
|
4
|
+
module Sidekiq
|
5
|
+
def self.redis=(hash)
|
6
|
+
if hash.is_a?(LazyEvaluatedPool)
|
7
|
+
@redis = hash
|
8
|
+
else
|
9
|
+
@_config_hash = hash
|
10
|
+
end
|
11
|
+
end
|
12
|
+
class Client
|
13
|
+
private
|
14
|
+
def raw_push(payloads)
|
15
|
+
@redis_pool.execute(false) do |conn|
|
16
|
+
# No need to wait MULTI command to finish
|
17
|
+
conn.async_command :multi
|
18
|
+
# Atomic push commands is also async
|
19
|
+
atomic_push(conn, payloads)
|
20
|
+
# After pipeline is built, call synced EXEC command
|
21
|
+
conn.exec
|
22
|
+
end
|
23
|
+
true
|
24
|
+
end
|
25
|
+
|
26
|
+
def atomic_push(conn, payloads)
|
27
|
+
if payloads.first['at']
|
28
|
+
conn.async_command(:zadd, 'schedule',payloads.map do |hash|
|
29
|
+
at = hash.delete('at').to_s
|
30
|
+
[at, Sidekiq.dump_json(hash)]
|
31
|
+
end)
|
32
|
+
else
|
33
|
+
q = payloads.first['queue']
|
34
|
+
to_push = payloads.map { |entry| Sidekiq.dump_json(entry) }
|
35
|
+
conn.async_command(:sadd, 'queues', q)
|
36
|
+
conn.async_command(:lpush,"queue:#{q}", to_push)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
Sidekiq.configure_client do |config|
|
43
|
+
config.redis = RedisLazyEvaluatedPool.pool_with_config(ApplicationSettings.sidekiq.redis)
|
44
|
+
end
|
45
|
+
|
46
|
+
SIDEKIQ_ON_EM = true
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'logging'
|
2
|
+
|
3
|
+
logger_config = YAML.load(File.read(ApplicationSettings.root('config/logging.yml')))[RACK_ENV.to_s].deep_symbolize_keys
|
4
|
+
|
5
|
+
apply_logger_config = ->(logger, config, buffering_options) do
|
6
|
+
logger.level = config[:level] || :debug
|
7
|
+
logger.additive = config[:additive] if logger.respond_to? 'additive='
|
8
|
+
logger.add_appenders(
|
9
|
+
(config[:appenders] || { default: {type: 'stdout'} }).map do |key, value|
|
10
|
+
case value
|
11
|
+
when String
|
12
|
+
Logging.appenders.send(key, value, buffering_options)
|
13
|
+
when Hash
|
14
|
+
layout = value.delete(:layout)
|
15
|
+
if layout
|
16
|
+
if layout.kind_of? String
|
17
|
+
value[:layout] = Logging.layouts.pattern(pattern: layout)
|
18
|
+
else
|
19
|
+
layout_type = layout.delete(:type) || :basic
|
20
|
+
value[:layout] = Logging.layouts.send(layout_type, layout)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
Logging.appenders.send(value[:type] || key, logger.name, buffering_options.merge!(value).symbolize_keys!)
|
25
|
+
else
|
26
|
+
Logging.appenders.send(key, logger.name, buffering_options)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
)
|
30
|
+
end
|
31
|
+
|
32
|
+
buferring_options = [:auto_flushing, :immediate_at, :flush_period]
|
33
|
+
bufferring = Hash[buferring_options.zip(logger_config.values_at(*buferring_options))]
|
34
|
+
routes = logger_config.delete(:routes) || []
|
35
|
+
|
36
|
+
apply_logger_config.call(Logging.logger.root, logger_config, bufferring)
|
37
|
+
|
38
|
+
routes.each { |route, settings| apply_logger_config.call(Logging.logger[route], settings, bufferring) }
|
@@ -0,0 +1 @@
|
|
1
|
+
MandrillMailer.config.api = ApplicationSettings.mandrill.api_key
|
@@ -0,0 +1,96 @@
|
|
1
|
+
class Redis
|
2
|
+
class Namespace
|
3
|
+
def call_with_namespace(command, *args, &block)
|
4
|
+
handling = COMMANDS[command.to_s.downcase]
|
5
|
+
|
6
|
+
if handling.nil?
|
7
|
+
fail("Redis::Namespace does not know how to handle '#{command}'.")
|
8
|
+
end
|
9
|
+
|
10
|
+
(before, after) = handling
|
11
|
+
|
12
|
+
# Add the namespace to any parameters that are keys.
|
13
|
+
case before
|
14
|
+
when :first
|
15
|
+
args[0] = add_namespace(args[0]) if args[0]
|
16
|
+
when :all
|
17
|
+
args = add_namespace(args)
|
18
|
+
when :exclude_first
|
19
|
+
first = args.shift
|
20
|
+
args = add_namespace(args)
|
21
|
+
args.unshift(first) if first
|
22
|
+
when :exclude_last
|
23
|
+
last = args.pop unless args.length == 1
|
24
|
+
args = add_namespace(args)
|
25
|
+
args.push(last) if last
|
26
|
+
when :exclude_options
|
27
|
+
if args.last.is_a?(Hash)
|
28
|
+
last = args.pop
|
29
|
+
args = add_namespace(args)
|
30
|
+
args.push(last)
|
31
|
+
else
|
32
|
+
args = add_namespace(args)
|
33
|
+
end
|
34
|
+
when :alternate
|
35
|
+
args.each_with_index { |a, i| args[i] = add_namespace(a) if i.even? }
|
36
|
+
when :sort
|
37
|
+
args[0] = add_namespace(args[0]) if args[0]
|
38
|
+
if args[1].is_a?(Hash)
|
39
|
+
[:by, :store].each do |key|
|
40
|
+
args[1][key] = add_namespace(args[1][key]) if args[1][key]
|
41
|
+
end
|
42
|
+
|
43
|
+
args[1][:get] = Array(args[1][:get])
|
44
|
+
|
45
|
+
args[1][:get].each_index do |i|
|
46
|
+
args[1][:get][i] = add_namespace(args[1][:get][i]) unless args[1][:get][i] == "#"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
when :eval_style
|
50
|
+
# redis.eval() and evalsha() can either take the form:
|
51
|
+
#
|
52
|
+
# redis.eval(script, [key1, key2], [argv1, argv2])
|
53
|
+
#
|
54
|
+
# Or:
|
55
|
+
#
|
56
|
+
# redis.eval(script, :keys => ['k1', 'k2'], :argv => ['arg1', 'arg2'])
|
57
|
+
#
|
58
|
+
# This is a tricky + annoying special case, where we only want the `keys`
|
59
|
+
# argument to be namespaced.
|
60
|
+
if args.last.is_a?(Hash)
|
61
|
+
args.last[:keys] = add_namespace(args.last[:keys])
|
62
|
+
else
|
63
|
+
args[1] = add_namespace(args[1])
|
64
|
+
end
|
65
|
+
when :scan_style
|
66
|
+
options = (args.last.kind_of?(Hash) ? args.pop : {})
|
67
|
+
options[:match] = add_namespace(options.fetch(:match, '*'))
|
68
|
+
args << options
|
69
|
+
|
70
|
+
if block
|
71
|
+
original_block = block
|
72
|
+
block = proc { |key| original_block.call rem_namespace(key) }
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
d = EventMachine::DefaultDeferrable.new
|
77
|
+
|
78
|
+
# Dispatch the command to Redis and store the result.
|
79
|
+
result = @redis.send(command, *args, &block)
|
80
|
+
|
81
|
+
result.callback do |result|
|
82
|
+
case after
|
83
|
+
when :all
|
84
|
+
result = rem_namespace(result)
|
85
|
+
when :first
|
86
|
+
result[0] = rem_namespace(result[0]) if result
|
87
|
+
when :second
|
88
|
+
result[1] = rem_namespace(result[1]) if result
|
89
|
+
end
|
90
|
+
d.succeed(result)
|
91
|
+
end
|
92
|
+
|
93
|
+
d
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'redis-namespace'
|
2
|
+
|
3
|
+
if RACK_ENV == 'test'
|
4
|
+
require 'sidekiq/testing'
|
5
|
+
Sidekiq::Testing.fake!
|
6
|
+
else
|
7
|
+
Sidekiq.configure_server do |config|
|
8
|
+
config.redis = ApplicationSettings.sidekiq.redis
|
9
|
+
end
|
10
|
+
|
11
|
+
Sidekiq.configure_client do |config|
|
12
|
+
config.redis = ApplicationSettings.sidekiq.redis unless defined?(SIDEKIQ_ON_EM)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
Sidekiq::Logging.logger = Logging.logger[:sidekiq]
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Workflow
|
2
|
+
module Adapter
|
3
|
+
module Mongoid
|
4
|
+
def self.included(klass)
|
5
|
+
klass.send :include, InstanceMethods
|
6
|
+
end
|
7
|
+
module InstanceMethods
|
8
|
+
def load_workflow_state
|
9
|
+
send(self.class.workflow_column)
|
10
|
+
end
|
11
|
+
|
12
|
+
def persist_workflow_state(new_value)
|
13
|
+
update_attributes(self.class.workflow_column => new_value)
|
14
|
+
end
|
15
|
+
|
16
|
+
def before_validation
|
17
|
+
attributes[self.class.workflow_column] = current_state.to_s
|
18
|
+
super
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
module Mongoid
|
26
|
+
module Document
|
27
|
+
module ClassMethods
|
28
|
+
def workflow_adapter; Workflow::Adapter::Mongoid end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
development: &dev
|
2
|
+
# Autoflush logs after 100 messages
|
3
|
+
auto_flushing: 1
|
4
|
+
# Flush logs each N seconds, empty to disable
|
5
|
+
flush_period:
|
6
|
+
# Log all levels by default
|
7
|
+
level: :debug
|
8
|
+
# Root appenders
|
9
|
+
appenders:
|
10
|
+
stdout: true
|
11
|
+
|
12
|
+
production:
|
13
|
+
# Flush logs each N seconds, empty to disable
|
14
|
+
flush_period: 3
|
15
|
+
immediate_at:
|
16
|
+
- :exception
|
17
|
+
- :error
|
18
|
+
- :fatal
|
19
|
+
level: :fatal
|
20
|
+
|
21
|
+
routes:
|
22
|
+
database:
|
23
|
+
additive: false
|
24
|
+
level: :debug
|
25
|
+
appenders:
|
26
|
+
default:
|
27
|
+
type: rolling_file
|
28
|
+
filename: log/database.log
|
29
|
+
<% if @faye %>
|
30
|
+
faye:
|
31
|
+
additive: false
|
32
|
+
level: :debug
|
33
|
+
appenders:
|
34
|
+
default:
|
35
|
+
type: rolling_file
|
36
|
+
filename: log/faye.log
|
37
|
+
<% end %>
|
38
|
+
|
39
|
+
test: *dev
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'logging'
|
2
|
+
require 'settingslogic'
|
3
|
+
Logging.init :devel, :debug, :response, :info, :warn, :error, :fatal
|
4
|
+
|
5
|
+
class ApplicationSettings < Settingslogic
|
6
|
+
namespace RACK_ENV.to_s
|
7
|
+
class << self
|
8
|
+
def root=(value)
|
9
|
+
instance[:app_root] = value
|
10
|
+
end
|
11
|
+
|
12
|
+
def root(*path)
|
13
|
+
return File.expand_path(File.join(path), instance[:app_root]) if path
|
14
|
+
instance[:app_root]
|
15
|
+
end
|
16
|
+
|
17
|
+
# @return [String]
|
18
|
+
def api_absolute_url(uri)
|
19
|
+
"#{api_root}#{uri}"
|
20
|
+
end
|
21
|
+
|
22
|
+
# @return [String]
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
---
|
2
|
+
:concurrency: 3
|
3
|
+
:pidfile: tmp/pids/sidekiq.pid
|
4
|
+
development:
|
5
|
+
:concurrency: 3
|
6
|
+
production:
|
7
|
+
:concurrency: 3
|
8
|
+
:queues:
|
9
|
+
- default
|
10
|
+
:schedule:
|
11
|
+
# 'DelayedJobs::YourJob':
|
12
|
+
# every: 10s
|
13
|
+
# queue: default
|
14
|
+
# description: Sample job schedule
|
15
|
+
<% if @faye %>
|
16
|
+
'DelayedJobs::PongTime':
|
17
|
+
every: 5s
|
18
|
+
queue: default
|
19
|
+
description: Notify connected faye users about current time
|
20
|
+
<% end %>
|
21
|
+
|
22
|
+
|