globals now implemented and documented
This commit is contained in:
parent
b312b4d563
commit
7b8d2547d0
|
@ -36,22 +36,62 @@ class GlobalSetting
|
||||||
)
|
)
|
||||||
|
|
||||||
class BaseProvider
|
class BaseProvider
|
||||||
def lookup(name, val)
|
def self.coerce(setting)
|
||||||
t = ENV["D_" << name.to_s.upcase]
|
return setting == "true" if setting == "true" || setting == "false"
|
||||||
if t.present?
|
return $1.to_i if setting.to_s.strip =~ /^([0-9]+)$/
|
||||||
t
|
setting
|
||||||
else
|
end
|
||||||
val.present? ? val : nil
|
|
||||||
|
|
||||||
|
def resolve(current, default)
|
||||||
|
BaseProvider.coerce(
|
||||||
|
if current.present?
|
||||||
|
current
|
||||||
|
else
|
||||||
|
default.present? ? default : nil
|
||||||
|
end
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class FileProvider < BaseProvider
|
||||||
|
def self.from(file)
|
||||||
|
if File.exists?(file)
|
||||||
|
parse(file)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
class FileProvider
|
def initialize(file)
|
||||||
def self.from(location)
|
@file = file
|
||||||
|
@data = {}
|
||||||
|
end
|
||||||
|
|
||||||
|
def read
|
||||||
|
File.read(@file).split("\n").each do |line|
|
||||||
|
if line =~ /([a-z_]+)\s*=\s*(\"([^\"]*)\"|\'([^\']*)\'|[^#]*)/
|
||||||
|
@data[$1.strip.to_sym] = ($4 || $3 || $2).strip
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def lookup(key,default)
|
||||||
|
resolve(@data[key], default)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
private
|
||||||
|
def self.parse(file)
|
||||||
|
provider = self.new(file)
|
||||||
|
provider.read
|
||||||
|
provider
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class EnvProvider
|
class EnvProvider < BaseProvider
|
||||||
|
def lookup(key, default)
|
||||||
|
resolve(ENV["DISCOURSE_" << key.to_s.upcase], default)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -60,6 +100,6 @@ class GlobalSetting
|
||||||
end
|
end
|
||||||
|
|
||||||
@provider =
|
@provider =
|
||||||
FileProvider.from(Rails.root + '/config/discourse.conf') ||
|
FileProvider.from(File.expand_path('../../../config/discourse.conf', __FILE__)) ||
|
||||||
EnvProvider.new
|
EnvProvider.new
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,6 +5,9 @@ require 'redis-store' # HACK
|
||||||
# Plugin related stuff
|
# Plugin related stuff
|
||||||
require_relative '../lib/discourse_plugin_registry'
|
require_relative '../lib/discourse_plugin_registry'
|
||||||
|
|
||||||
|
# Global config
|
||||||
|
require_relative '../app/models/global_setting'
|
||||||
|
|
||||||
if defined?(Bundler)
|
if defined?(Bundler)
|
||||||
# If you precompile assets before deploying to production, use this line
|
# If you precompile assets before deploying to production, use this line
|
||||||
Bundler.require(*Rails.groups(assets: %w(development test profile)))
|
Bundler.require(*Rails.groups(assets: %w(development test profile)))
|
||||||
|
|
|
@ -0,0 +1,76 @@
|
||||||
|
#
|
||||||
|
# DO NOT EDIT THIS FILE
|
||||||
|
# If you need to make changes create a file called discourse.conf in this directory with your changes
|
||||||
|
|
||||||
|
# Discourse supports multiple mechanisms for production config.
|
||||||
|
#
|
||||||
|
# 1. You can do nothing and get these defaults (not recommended, you should at least set hostname)
|
||||||
|
# 2. You can copy this file to config/discourse.conf and amend with your settings
|
||||||
|
# 3. You can pass in config from your environment, all the settings below are available.
|
||||||
|
Append DISCOURSE_ and upper case the setting in ENV. For example:
|
||||||
|
to pass in db_timeout of 200 you would use DISCOURSE_DB_TIMEOUT=200
|
||||||
|
|
||||||
|
# All settings apply to production only
|
||||||
|
|
||||||
|
# connection pool size
|
||||||
|
db_pool = 5
|
||||||
|
|
||||||
|
# database timeout in milliseconds
|
||||||
|
db_timeout = 5000
|
||||||
|
|
||||||
|
# socket file used to access db
|
||||||
|
db_socket
|
||||||
|
|
||||||
|
# host address for db server
|
||||||
|
db_host = localhost
|
||||||
|
|
||||||
|
# port running db server
|
||||||
|
db_port, 5432],
|
||||||
|
|
||||||
|
# database name running discourse
|
||||||
|
db_name = discourse
|
||||||
|
|
||||||
|
# username accessing database
|
||||||
|
db_username = discourse
|
||||||
|
|
||||||
|
# password used to access the db
|
||||||
|
db_password =
|
||||||
|
|
||||||
|
# hostname running the forum
|
||||||
|
hostname = "www.example.com"
|
||||||
|
|
||||||
|
# address of smtp server used to send emails
|
||||||
|
smtp_address =
|
||||||
|
|
||||||
|
# port of smtp server used to send emails
|
||||||
|
smtp_port = 25
|
||||||
|
|
||||||
|
# domain passed to smtp server
|
||||||
|
smtp_domain =
|
||||||
|
|
||||||
|
# username for smtp server
|
||||||
|
smtp_user_name =
|
||||||
|
|
||||||
|
# password for smtp server
|
||||||
|
smtp_password =
|
||||||
|
|
||||||
|
# enable TLS encryption for smtp connections
|
||||||
|
smtp_enable_start_tls = true
|
||||||
|
|
||||||
|
# enable MiniProfiler for administrators
|
||||||
|
enable_mini_profiler = true
|
||||||
|
|
||||||
|
# recommended, cdn used to access assets
|
||||||
|
cdn_url =
|
||||||
|
|
||||||
|
# comma delimited list of emails that have devloper level access
|
||||||
|
developer_emails =
|
||||||
|
|
||||||
|
# redis server address
|
||||||
|
redis_host = localhost
|
||||||
|
|
||||||
|
# redis server port
|
||||||
|
redis_port = 6379
|
||||||
|
|
||||||
|
# redis password
|
||||||
|
redis_password =
|
|
@ -0,0 +1,22 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
require 'tempfile'
|
||||||
|
|
||||||
|
describe GlobalSetting::FileProvider do
|
||||||
|
it "can parse a simple file" do
|
||||||
|
f = Tempfile.new('foo')
|
||||||
|
f.write(" # this is a comment\n")
|
||||||
|
f.write("\n")
|
||||||
|
f.write("a = 1000 # this is a comment\n")
|
||||||
|
f.write("b = \"10 # = 00\" # this is a # comment\n")
|
||||||
|
f.write("c = \'10 # = 00\' # this is a # comment\n")
|
||||||
|
f.close
|
||||||
|
|
||||||
|
provider = GlobalSetting::FileProvider.from(f.path)
|
||||||
|
|
||||||
|
provider.lookup(:a,"").should == 1000
|
||||||
|
provider.lookup(:b,"").should == "10 # = 00"
|
||||||
|
provider.lookup(:c,"").should == "10 # = 00"
|
||||||
|
|
||||||
|
f.unlink
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue