replyr 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +14 -0
- data/MIT-LICENSE +20 -0
- data/README.md +94 -0
- data/Rakefile +32 -0
- data/lib/email_reply_parser/LICENSE +22 -0
- data/lib/email_reply_parser/email_reply_parser.rb +475 -0
- data/lib/generators/replyr/install_generator.rb +15 -0
- data/lib/generators/replyr/templates/mailman_daemon +12 -0
- data/lib/generators/replyr/templates/mailman_server +50 -0
- data/lib/generators/replyr/templates/replyr.rb.erb +8 -0
- data/lib/replyr/config.rb +22 -0
- data/lib/replyr/engine.rb +14 -0
- data/lib/replyr/handle_reply.rb +36 -0
- data/lib/replyr/reply_address.rb +111 -0
- data/lib/replyr/reply_email.rb +50 -0
- data/lib/replyr/version.rb +3 -0
- data/lib/replyr.rb +26 -0
- data/lib/tasks/replyr_tasks.rake +4 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/models/comment.rb +7 -0
- data/test/dummy/app/models/user.rb +3 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/config/application.rb +23 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +8 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +29 -0
- data/test/dummy/config/environments/production.rb +80 -0
- data/test/dummy/config/environments/test.rb +36 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/replyr.rb +2 -0
- data/test/dummy/config/initializers/secret_token.rb +12 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +56 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/development.log +0 -0
- data/test/dummy/log/test.log +12557 -0
- data/test/dummy/public/404.html +58 -0
- data/test/dummy/public/422.html +58 -0
- data/test/dummy/public/500.html +57 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/email_reply_parser/email_reply_parser_test.rb +488 -0
- data/test/email_reply_parser/emails/correct_sig.txt +4 -0
- data/test/email_reply_parser/emails/email_1_1.txt +13 -0
- data/test/email_reply_parser/emails/email_1_2.txt +51 -0
- data/test/email_reply_parser/emails/email_1_3.txt +55 -0
- data/test/email_reply_parser/emails/email_1_4.txt +5 -0
- data/test/email_reply_parser/emails/email_1_5.txt +15 -0
- data/test/email_reply_parser/emails/email_1_6.txt +15 -0
- data/test/email_reply_parser/emails/email_1_7.txt +12 -0
- data/test/email_reply_parser/emails/email_1_8.txt +6 -0
- data/test/email_reply_parser/emails/email_1_9.txt +9 -0
- data/test/email_reply_parser/emails/email_2_1.txt +25 -0
- data/test/email_reply_parser/emails/email_2_2.txt +10 -0
- data/test/email_reply_parser/emails/email_2_3.txt +14 -0
- data/test/email_reply_parser/emails/email_2_4.txt +14 -0
- data/test/email_reply_parser/emails/email_2_5.txt +15 -0
- data/test/email_reply_parser/emails/email_2_6.txt +11 -0
- data/test/email_reply_parser/emails/email_2_7.txt +5 -0
- data/test/email_reply_parser/emails/email_2_7_1.txt +5 -0
- data/test/email_reply_parser/emails/email_2_7_de.txt +5 -0
- data/test/email_reply_parser/emails/email_2_8.txt +3 -0
- data/test/email_reply_parser/emails/email_2_9.txt +9 -0
- data/test/email_reply_parser/emails/email_2nd_paragraph_starting_with_on.txt +12 -0
- data/test/email_reply_parser/emails/email_BlackBerry.txt +3 -0
- data/test/email_reply_parser/emails/email_bullets.txt +22 -0
- data/test/email_reply_parser/emails/email_from_address_in_quote_header.txt +12 -0
- data/test/email_reply_parser/emails/email_from_name_in_quote_header.txt +12 -0
- data/test/email_reply_parser/emails/email_hyphens.txt +5 -0
- data/test/email_reply_parser/emails/email_iPhone.txt +3 -0
- data/test/email_reply_parser/emails/email_iPhone_de.txt +3 -0
- data/test/email_reply_parser/emails/email_iPhone_de_2.txt +3 -0
- data/test/email_reply_parser/emails/email_mentions_own_email_address.txt +6 -0
- data/test/email_reply_parser/emails/email_mentions_own_name.txt +6 -0
- data/test/email_reply_parser/emails/email_multi_word_sent_from_my_mobile_device.txt +3 -0
- data/test/email_reply_parser/emails/email_multiline_quote_header_de_mx.txt +8 -0
- data/test/email_reply_parser/emails/email_multiline_quote_header_es_mx.txt +8 -0
- data/test/email_reply_parser/emails/email_multiline_quote_header_fr.txt +8 -0
- data/test/email_reply_parser/emails/email_multiline_quote_header_from_first.txt +11 -0
- data/test/email_reply_parser/emails/email_multiline_quote_header_from_replyto_date_to_subject.txt +12 -0
- data/test/email_reply_parser/emails/email_multiline_quote_header_from_to_date_subject.txt +11 -0
- data/test/email_reply_parser/emails/email_multiline_quote_header_none.txt +11 -0
- data/test/email_reply_parser/emails/email_multiline_quote_header_pt_br.txt +8 -0
- data/test/email_reply_parser/emails/email_multiline_quote_header_with_asterisks.txt +21 -0
- data/test/email_reply_parser/emails/email_multiline_quote_header_with_cc.txt +9 -0
- data/test/email_reply_parser/emails/email_multiline_quote_header_with_multiline_headers.txt +14 -0
- data/test/email_reply_parser/emails/email_no_signature_deliminator.txt +7 -0
- data/test/email_reply_parser/emails/email_no_signature_deliminator_adds_a_middle_initial.txt +7 -0
- data/test/email_reply_parser/emails/email_one_is_not_on.txt +10 -0
- data/test/email_reply_parser/emails/email_sent_from_my_not_signature.txt +3 -0
- data/test/email_reply_parser/emails/email_was_showing_as_nothing_visible.txt +13 -0
- data/test/email_reply_parser/emails/new_content/email_1_2.txt +28 -0
- data/test/replyr/handle_reply_test.rb +46 -0
- data/test/replyr/reply_address_test.rb +77 -0
- data/test/replyr/reply_email_test.rb +19 -0
- data/test/replyr_test.rb +7 -0
- data/test/support/emails/reply_multipart.eml +35 -0
- data/test/support/emails/reply_plain.eml +11 -0
- data/test/support/emails/reply_with_attachment.eml +466 -0
- data/test/test_helper.rb +23 -0
- metadata +228 -0
@@ -0,0 +1,50 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require "rubygems"
|
3
|
+
require "bundler/setup"
|
4
|
+
require "mailman"
|
5
|
+
|
6
|
+
ENV["RAILS_ENV"] ||= "development"
|
7
|
+
require File.expand_path("../../config/environment.rb", __FILE__)
|
8
|
+
|
9
|
+
Mailman.config.ignore_stdin = true
|
10
|
+
Mailman.config.logger = Logger.new File.expand_path("../../log/mailman_#{Rails.env}.log", __FILE__)
|
11
|
+
|
12
|
+
# Use Maildir
|
13
|
+
#
|
14
|
+
Mailman.config.maildir = "~/Maildir"
|
15
|
+
|
16
|
+
# Use Pop3
|
17
|
+
#
|
18
|
+
# Mailman.config.pop3 = {
|
19
|
+
# server: 'pop.gmail.com', port: 995, ssl: true,
|
20
|
+
# username: USERNAME,
|
21
|
+
# password: PASSWORD
|
22
|
+
# }
|
23
|
+
|
24
|
+
# Use IMAP
|
25
|
+
#
|
26
|
+
# Mailman.config.imap = {
|
27
|
+
# server: 'imap.gmail.com',
|
28
|
+
# port: 993, # usually 995, 993 for gmail
|
29
|
+
# ssl: true,
|
30
|
+
# username: USERNAME,
|
31
|
+
# password: PASSWORD,
|
32
|
+
# }
|
33
|
+
|
34
|
+
Mailman::Application.run do
|
35
|
+
|
36
|
+
# DO NOT CHANGE. Replyr Route for processing reply emails
|
37
|
+
to Replyr.address_pattern do
|
38
|
+
Replyr::ReplyEmail.process(message)
|
39
|
+
end
|
40
|
+
|
41
|
+
# add your custom routes (independent of Replyr) here
|
42
|
+
# to 'support%@example.org' do
|
43
|
+
# # ...
|
44
|
+
# end
|
45
|
+
#
|
46
|
+
# default do
|
47
|
+
# # ...
|
48
|
+
# end
|
49
|
+
|
50
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
# Configuration for Replyr
|
2
|
+
#
|
3
|
+
|
4
|
+
# Set the host name for your reply email addresses
|
5
|
+
Replyr.config.host = "example.com"
|
6
|
+
|
7
|
+
# Set a secure secret token to be used for salting the email-address
|
8
|
+
Replyr.config.secret = "<%= defined?(SecureRandom) ? SecureRandom.hex(32) : ActiveSupport::SecureRandom.hex(32) %>"
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Replyr
|
2
|
+
class Config
|
3
|
+
attr_accessor :prefix, :host, :secret, :user_class
|
4
|
+
|
5
|
+
def prefix
|
6
|
+
@prefix || "reply"
|
7
|
+
end
|
8
|
+
|
9
|
+
def user_class
|
10
|
+
@user_class || User
|
11
|
+
end
|
12
|
+
|
13
|
+
def host
|
14
|
+
@host || (raise RuntimeError, "Replyr.config.host is nil. Please set a host in an initializer.")
|
15
|
+
end
|
16
|
+
|
17
|
+
def secret
|
18
|
+
@secret || (raise RuntimeError, "Replyr.config.secret is nil. Please set a secure secret token in an initializer.")
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Replyr
|
2
|
+
module HandleReply
|
3
|
+
|
4
|
+
def self.included(base)
|
5
|
+
base.extend ClassMethods
|
6
|
+
end
|
7
|
+
|
8
|
+
module ClassMethods
|
9
|
+
|
10
|
+
# Usage:
|
11
|
+
# class Comment < ActiveRecord::Base
|
12
|
+
# handle_reply do |comment, user, text, files|
|
13
|
+
# Comment.create(body: text, author: user)
|
14
|
+
# end
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
def handle_reply(*options, &block)
|
18
|
+
options = options.extract_options!
|
19
|
+
|
20
|
+
define_method :handle_reply do |user, text, files = nil|
|
21
|
+
block.call(self, user, text, files)
|
22
|
+
end
|
23
|
+
|
24
|
+
define_method :reply_address_object_for_user do |user|
|
25
|
+
ReplyAddress.new(self, user)
|
26
|
+
end
|
27
|
+
|
28
|
+
define_method :reply_address_for_user do |user|
|
29
|
+
reply_address_object_for_user(user).to_s
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
require 'openssl'
|
2
|
+
|
3
|
+
module Replyr
|
4
|
+
class ReplyAddress
|
5
|
+
attr_accessor :model, :user
|
6
|
+
|
7
|
+
# Create a new reply address from a given user and model
|
8
|
+
#
|
9
|
+
def initialize(model, user)
|
10
|
+
@model = model
|
11
|
+
@user = user
|
12
|
+
end
|
13
|
+
|
14
|
+
# Create a reply address from a given address string
|
15
|
+
# Checks for validity of address and raises an ArgumentError
|
16
|
+
# if it's invalid.
|
17
|
+
#
|
18
|
+
def self.new_from_address(address)
|
19
|
+
parts = get_parsed_address(address)
|
20
|
+
|
21
|
+
model_class = class_from_normalized_model_name(parts[:model_name])
|
22
|
+
model = model_class.find(parts[:model_id])
|
23
|
+
user = Replyr.config.user_class.find(parts[:user_id])
|
24
|
+
|
25
|
+
address = new(model, user)
|
26
|
+
if address.token_valid?(parts[:token])
|
27
|
+
address
|
28
|
+
else
|
29
|
+
Replyr.logger.warn "Reply email address invalid."
|
30
|
+
nil
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Check if a given token is valid
|
35
|
+
#
|
36
|
+
def token_valid?(token)
|
37
|
+
token == self.token
|
38
|
+
end
|
39
|
+
|
40
|
+
# Split the reply email address. It has the following format:
|
41
|
+
# reply-comment-12-56-01ce26dc69094af9246ea7e7ce9970aff2b81cc9@reply.example.com
|
42
|
+
#
|
43
|
+
def self.get_parsed_address(address)
|
44
|
+
parsed = Mailman::Route::StringMatcher.new(Replyr.address_pattern).match(address)
|
45
|
+
|
46
|
+
if parsed.nil?
|
47
|
+
raise ArgumentError, "Malformed reply email address."
|
48
|
+
else
|
49
|
+
parsed.first # return Hash part
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# Returs the token from this address
|
54
|
+
#
|
55
|
+
def token
|
56
|
+
token_from_user_and_model(@user, @model)
|
57
|
+
end
|
58
|
+
|
59
|
+
# Creates a token from the passed user and model objects
|
60
|
+
# Uses the configured secret as a salt
|
61
|
+
#
|
62
|
+
def token_from_user_and_model(user, model)
|
63
|
+
user_id = id_from_model(user)
|
64
|
+
model_id = id_from_model(model)
|
65
|
+
model_name = normalized_model_name(model)
|
66
|
+
|
67
|
+
OpenSSL::HMAC.hexdigest(
|
68
|
+
OpenSSL::Digest.new('sha1'),
|
69
|
+
Replyr.config.secret,
|
70
|
+
"#{user_id}-#{model_name}-#{model_id}"
|
71
|
+
)
|
72
|
+
end
|
73
|
+
|
74
|
+
# Model name by be namespaced (e.g. MyApp::Comment)
|
75
|
+
# For the reply email address the model name will be converted to "my_app/comment".
|
76
|
+
# Then the slash "/" will be replaced with a plus sign "+", because
|
77
|
+
# slashes should not be used email addresses.
|
78
|
+
#
|
79
|
+
def normalized_model_name(model)
|
80
|
+
model.class.name.tableize.singularize.gsub("/", "+")
|
81
|
+
end
|
82
|
+
|
83
|
+
# Converts a normalized model_name back to a real model name
|
84
|
+
# and returns the class
|
85
|
+
#
|
86
|
+
def self.class_from_normalized_model_name(model_name)
|
87
|
+
model_name.gsub("+", "/").classify.constantize
|
88
|
+
end
|
89
|
+
|
90
|
+
# Returns the ID of an AR object.
|
91
|
+
# Uses primary key to find out the correct field
|
92
|
+
#
|
93
|
+
def id_from_model(object)
|
94
|
+
object.send(object.class.primary_key)
|
95
|
+
end
|
96
|
+
|
97
|
+
# Returns the address string
|
98
|
+
# (e.g reply-comment-12-56-01ce26dc69094af9246ea7e7ce9970aff2b81cc9@reply.example.com)
|
99
|
+
#
|
100
|
+
def address
|
101
|
+
user_id = id_from_model(@user)
|
102
|
+
model_id = id_from_model(@model)
|
103
|
+
model_name = normalized_model_name(@model)
|
104
|
+
|
105
|
+
local_part = [Replyr.config.prefix, model_name, model_id, user_id, token].join("-")
|
106
|
+
"#{local_part}@#{Replyr.config.host}"
|
107
|
+
end
|
108
|
+
alias_method :to_s, :address
|
109
|
+
|
110
|
+
end
|
111
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Replyr
|
2
|
+
class ReplyEmail
|
3
|
+
attr_accessor :to, :from, :subject, :body, :attached_files
|
4
|
+
|
5
|
+
def initialize(mail)
|
6
|
+
self.to = mail.to.first
|
7
|
+
self.from = mail.from.first
|
8
|
+
self.subject = mail.subject
|
9
|
+
self.body = mail.decoded # Returns the decoded text from the mail in UTF-8 format
|
10
|
+
|
11
|
+
# Extract Attachments and store as StringIO in attached_files
|
12
|
+
# can later be processed by e.g. carrierwave
|
13
|
+
#
|
14
|
+
self.attached_files = mail.attachments.map do |attachment|
|
15
|
+
file = StringIO.new(attachment.decoded)
|
16
|
+
file.class.class_eval { attr_accessor :original_filename, :content_type }
|
17
|
+
file.original_filename = attachment.filename
|
18
|
+
file.content_type = attachment.mime_type
|
19
|
+
file
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.process(mail)
|
24
|
+
reply_mail = new(mail)
|
25
|
+
reply_mail.process
|
26
|
+
end
|
27
|
+
|
28
|
+
# Checks if this incoming mail is a reply email
|
29
|
+
#
|
30
|
+
def is_reply_email?
|
31
|
+
to.starts_with?(Replyr.config.prefix)
|
32
|
+
end
|
33
|
+
|
34
|
+
def stripped_body
|
35
|
+
EmailReplyParser.parse_reply(body, from).to_s.force_encoding("UTF-8")
|
36
|
+
end
|
37
|
+
|
38
|
+
def process
|
39
|
+
if is_reply_email?
|
40
|
+
if reply_address = ReplyAddress.new_from_address(to)
|
41
|
+
reply_address.model.class.handle_reply(reply_token, stripped_body, attached_files)
|
42
|
+
else
|
43
|
+
# no valid reply_address
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
data/lib/replyr.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'mailman'
|
2
|
+
require 'email_reply_parser/email_reply_parser'
|
3
|
+
require "replyr/config"
|
4
|
+
require "replyr/reply_email"
|
5
|
+
require "replyr/reply_address"
|
6
|
+
require "replyr/handle_reply"
|
7
|
+
require 'replyr/engine'
|
8
|
+
|
9
|
+
module Replyr
|
10
|
+
class << self
|
11
|
+
attr_accessor :config, :logger
|
12
|
+
|
13
|
+
def config
|
14
|
+
@config ||= Replyr::Config.new
|
15
|
+
end
|
16
|
+
|
17
|
+
def setup_logger
|
18
|
+
@logger = (defined?(Rails) && Rails.logger) ? Rails.logger : Logger.new(STDOUT)
|
19
|
+
end
|
20
|
+
|
21
|
+
def address_pattern
|
22
|
+
"#{config.prefix}-%model_name%-%model_id%-%user_id%-%token%@#{config.host}"
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
== README
|
2
|
+
|
3
|
+
This README would normally document whatever steps are necessary to get the
|
4
|
+
application up and running.
|
5
|
+
|
6
|
+
Things you may want to cover:
|
7
|
+
|
8
|
+
* Ruby version
|
9
|
+
|
10
|
+
* System dependencies
|
11
|
+
|
12
|
+
* Configuration
|
13
|
+
|
14
|
+
* Database creation
|
15
|
+
|
16
|
+
* Database initialization
|
17
|
+
|
18
|
+
* How to run the test suite
|
19
|
+
|
20
|
+
* Services (job queues, cache servers, search engines, etc.)
|
21
|
+
|
22
|
+
* Deployment instructions
|
23
|
+
|
24
|
+
* ...
|
25
|
+
|
26
|
+
|
27
|
+
Please feel free to use a different markup language if you do not plan to run
|
28
|
+
<tt>rake doc:app</tt>.
|
data/test/dummy/Rakefile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
|
+
// listed below.
|
3
|
+
//
|
4
|
+
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
5
|
+
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
|
6
|
+
//
|
7
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
8
|
+
// compiled file.
|
9
|
+
//
|
10
|
+
// Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
|
11
|
+
// about supported directives.
|
12
|
+
//
|
13
|
+
//= require_tree .
|
@@ -0,0 +1,13 @@
|
|
1
|
+
/*
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
+
* listed below.
|
4
|
+
*
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
+
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
|
7
|
+
*
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the top of the
|
9
|
+
* compiled file, but it's generally better to create a new file per style scope.
|
10
|
+
*
|
11
|
+
*= require_self
|
12
|
+
*= require_tree .
|
13
|
+
*/
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Dummy</title>
|
5
|
+
<%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
|
6
|
+
<%= javascript_include_tag "application", "data-turbolinks-track" => true %>
|
7
|
+
<%= csrf_meta_tags %>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
|
11
|
+
<%= yield %>
|
12
|
+
|
13
|
+
</body>
|
14
|
+
</html>
|
data/test/dummy/bin/rake
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require File.expand_path('../boot', __FILE__)
|
2
|
+
|
3
|
+
require 'rails/all'
|
4
|
+
|
5
|
+
Bundler.require(*Rails.groups)
|
6
|
+
require "replyr"
|
7
|
+
|
8
|
+
module Dummy
|
9
|
+
class Application < Rails::Application
|
10
|
+
# Settings in config/environments/* take precedence over those specified here.
|
11
|
+
# Application configuration should go into files in config/initializers
|
12
|
+
# -- all .rb files in that directory are automatically loaded.
|
13
|
+
|
14
|
+
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
|
15
|
+
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
|
16
|
+
# config.time_zone = 'Central Time (US & Canada)'
|
17
|
+
|
18
|
+
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
|
19
|
+
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
|
20
|
+
# config.i18n.default_locale = :de
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
@@ -0,0 +1,8 @@
|
|
1
|
+
# Warning: The database defined as "test" will be erased and
|
2
|
+
# re-generated from your development database when you run "rake".
|
3
|
+
# Do not set this db to the same as development or production.
|
4
|
+
test:
|
5
|
+
adapter: sqlite3
|
6
|
+
database: db/test.sqlite3
|
7
|
+
pool: 5
|
8
|
+
timeout: 5000
|
@@ -0,0 +1,29 @@
|
|
1
|
+
Dummy::Application.configure do
|
2
|
+
# Settings specified here will take precedence over those in config/application.rb.
|
3
|
+
|
4
|
+
# In the development environment your application's code is reloaded on
|
5
|
+
# every request. This slows down response time but is perfect for development
|
6
|
+
# since you don't have to restart the web server when you make code changes.
|
7
|
+
config.cache_classes = false
|
8
|
+
|
9
|
+
# Do not eager load code on boot.
|
10
|
+
config.eager_load = false
|
11
|
+
|
12
|
+
# Show full error reports and disable caching.
|
13
|
+
config.consider_all_requests_local = true
|
14
|
+
config.action_controller.perform_caching = false
|
15
|
+
|
16
|
+
# Don't care if the mailer can't send.
|
17
|
+
config.action_mailer.raise_delivery_errors = false
|
18
|
+
|
19
|
+
# Print deprecation notices to the Rails logger.
|
20
|
+
config.active_support.deprecation = :log
|
21
|
+
|
22
|
+
# Raise an error on page load if there are pending migrations
|
23
|
+
config.active_record.migration_error = :page_load
|
24
|
+
|
25
|
+
# Debug mode disables concatenation and preprocessing of assets.
|
26
|
+
# This option may cause significant delays in view rendering with a large
|
27
|
+
# number of complex assets.
|
28
|
+
config.assets.debug = true
|
29
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
Dummy::Application.configure do
|
2
|
+
# Settings specified here will take precedence over those in config/application.rb.
|
3
|
+
|
4
|
+
# Code is not reloaded between requests.
|
5
|
+
config.cache_classes = true
|
6
|
+
|
7
|
+
# Eager load code on boot. This eager loads most of Rails and
|
8
|
+
# your application in memory, allowing both thread web servers
|
9
|
+
# and those relying on copy on write to perform better.
|
10
|
+
# Rake tasks automatically ignore this option for performance.
|
11
|
+
config.eager_load = true
|
12
|
+
|
13
|
+
# Full error reports are disabled and caching is turned on.
|
14
|
+
config.consider_all_requests_local = false
|
15
|
+
config.action_controller.perform_caching = true
|
16
|
+
|
17
|
+
# Enable Rack::Cache to put a simple HTTP cache in front of your application
|
18
|
+
# Add `rack-cache` to your Gemfile before enabling this.
|
19
|
+
# For large-scale production use, consider using a caching reverse proxy like nginx, varnish or squid.
|
20
|
+
# config.action_dispatch.rack_cache = true
|
21
|
+
|
22
|
+
# Disable Rails's static asset server (Apache or nginx will already do this).
|
23
|
+
config.serve_static_assets = false
|
24
|
+
|
25
|
+
# Compress JavaScripts and CSS.
|
26
|
+
config.assets.js_compressor = :uglifier
|
27
|
+
# config.assets.css_compressor = :sass
|
28
|
+
|
29
|
+
# Do not fallback to assets pipeline if a precompiled asset is missed.
|
30
|
+
config.assets.compile = false
|
31
|
+
|
32
|
+
# Generate digests for assets URLs.
|
33
|
+
config.assets.digest = true
|
34
|
+
|
35
|
+
# Version of your assets, change this if you want to expire all your assets.
|
36
|
+
config.assets.version = '1.0'
|
37
|
+
|
38
|
+
# Specifies the header that your server uses for sending files.
|
39
|
+
# config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
|
40
|
+
# config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx
|
41
|
+
|
42
|
+
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
|
43
|
+
# config.force_ssl = true
|
44
|
+
|
45
|
+
# Set to :debug to see everything in the log.
|
46
|
+
config.log_level = :info
|
47
|
+
|
48
|
+
# Prepend all log lines with the following tags.
|
49
|
+
# config.log_tags = [ :subdomain, :uuid ]
|
50
|
+
|
51
|
+
# Use a different logger for distributed setups.
|
52
|
+
# config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
|
53
|
+
|
54
|
+
# Use a different cache store in production.
|
55
|
+
# config.cache_store = :mem_cache_store
|
56
|
+
|
57
|
+
# Enable serving of images, stylesheets, and JavaScripts from an asset server.
|
58
|
+
# config.action_controller.asset_host = "http://assets.example.com"
|
59
|
+
|
60
|
+
# Precompile additional assets.
|
61
|
+
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
|
62
|
+
# config.assets.precompile += %w( search.js )
|
63
|
+
|
64
|
+
# Ignore bad email addresses and do not raise email delivery errors.
|
65
|
+
# Set this to true and configure the email server for immediate delivery to raise delivery errors.
|
66
|
+
# config.action_mailer.raise_delivery_errors = false
|
67
|
+
|
68
|
+
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
|
69
|
+
# the I18n.default_locale when a translation can not be found).
|
70
|
+
config.i18n.fallbacks = true
|
71
|
+
|
72
|
+
# Send deprecation notices to registered listeners.
|
73
|
+
config.active_support.deprecation = :notify
|
74
|
+
|
75
|
+
# Disable automatic flushing of the log to improve performance.
|
76
|
+
# config.autoflush_log = false
|
77
|
+
|
78
|
+
# Use default logging formatter so that PID and timestamp are not suppressed.
|
79
|
+
config.log_formatter = ::Logger::Formatter.new
|
80
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
Dummy::Application.configure do
|
2
|
+
# Settings specified here will take precedence over those in config/application.rb.
|
3
|
+
|
4
|
+
# The test environment is used exclusively to run your application's
|
5
|
+
# test suite. You never need to work with it otherwise. Remember that
|
6
|
+
# your test database is "scratch space" for the test suite and is wiped
|
7
|
+
# and recreated between test runs. Don't rely on the data there!
|
8
|
+
config.cache_classes = true
|
9
|
+
|
10
|
+
# Do not eager load code on boot. This avoids loading your whole application
|
11
|
+
# just for the purpose of running a single test. If you are using a tool that
|
12
|
+
# preloads Rails for running tests, you may have to set it to true.
|
13
|
+
config.eager_load = false
|
14
|
+
|
15
|
+
# Configure static asset server for tests with Cache-Control for performance.
|
16
|
+
config.serve_static_assets = true
|
17
|
+
config.static_cache_control = "public, max-age=3600"
|
18
|
+
|
19
|
+
# Show full error reports and disable caching.
|
20
|
+
config.consider_all_requests_local = true
|
21
|
+
config.action_controller.perform_caching = false
|
22
|
+
|
23
|
+
# Raise exceptions instead of rendering exception templates.
|
24
|
+
config.action_dispatch.show_exceptions = false
|
25
|
+
|
26
|
+
# Disable request forgery protection in test environment.
|
27
|
+
config.action_controller.allow_forgery_protection = false
|
28
|
+
|
29
|
+
# Tell Action Mailer not to deliver emails to the real world.
|
30
|
+
# The :test delivery method accumulates sent emails in the
|
31
|
+
# ActionMailer::Base.deliveries array.
|
32
|
+
config.action_mailer.delivery_method = :test
|
33
|
+
|
34
|
+
# Print deprecation notices to the stderr.
|
35
|
+
config.active_support.deprecation = :stderr
|
36
|
+
end
|