mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-12-20 12:32:39 -05:00
66 lines
1.4 KiB
Ruby
66 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.update_all({
|
||
|
name: name,
|
||
|
value: value,
|
||
|
data_type: data_type,
|
||
|
updated_at: Time.now
|
||
|
}, {
|
||
|
name: name
|
||
|
})
|
||
|
|
||
|
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 if @table_exists == nil
|
||
|
@table_exists
|
||
|
end
|
||
|
|
||
|
end
|