discourse/lib/site_settings/db_provider.rb
Sam 34be27f425 table_exists should be called aggresively while it is false or nil, to avoid bootstrapping issues
don't test 1.9.3 in travis, it blows up randomly due to incorrect implementation of weak refs in 1.9.3
2013-10-30 11:02:10 +11:00

65 lines
1.4 KiB
Ruby

module SiteSettings; end
class SiteSettings::DbProvider
def initialize(model)
@model = model
end
def all
return [] unless table_exists?
# note, not leaking out AR records, cause I want all editing to happen
# via this API
SqlBuilder.new("select name, data_type, value from #{@model.table_name}").map_exec(OpenStruct)
end
def find(name)
return nil unless table_exists?
# note, not leaking out AR records, cause I want all editing to happen
# via this API
SqlBuilder.new("select name, data_type, value from #{@model.table_name} where name = :name")
.map_exec(OpenStruct, name: name)
.first
end
def save(name, value, data_type)
return unless table_exists?
count = @model.where({
name: name
}).update_all({
name: name,
value: value,
data_type: data_type,
updated_at: Time.now
})
if count == 0
@model.create!(name: name, value: value, data_type: data_type)
end
true
end
def destroy(name)
return unless table_exists?
@model.where(name: name).destroy_all
end
def current_site
RailsMultisite::ConnectionManagement.current_db
end
protected
# table is not in the db yet, initial migration, etc
def table_exists?
@table_exists = ActiveRecord::Base.connection.table_exists? @model.table_name unless @table_exists
@table_exists
end
end