mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-11-24 16:18:42 -05:00
41 lines
958 B
Ruby
41 lines
958 B
Ruby
|
# API to wrap up plugin store rows
|
||
|
class PluginStore
|
||
|
def self.get(plugin_name, key)
|
||
|
if row = PluginStoreRow.where(plugin_name: plugin_name, key: key).first
|
||
|
cast_value(row.type_name, row.value)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def self.set(plugin_name, key, value)
|
||
|
hash = {plugin_name: plugin_name, key: key}
|
||
|
row = PluginStoreRow.where(hash).first || row = PluginStoreRow.new(hash)
|
||
|
|
||
|
row.type_name = determine_type(value)
|
||
|
# nil are stored as nil
|
||
|
row.value =
|
||
|
if row.type_name == "JSON"
|
||
|
value.to_json
|
||
|
elsif value
|
||
|
value.to_s
|
||
|
end
|
||
|
|
||
|
row.save
|
||
|
end
|
||
|
|
||
|
protected
|
||
|
|
||
|
|
||
|
def self.determine_type(value)
|
||
|
value.is_a?(Hash) ? "JSON" : value.class.to_s
|
||
|
end
|
||
|
|
||
|
def self.cast_value(type, value)
|
||
|
case type
|
||
|
when "Fixnum" then value.to_i
|
||
|
when "TrueClass", "FalseClass" then value == "true"
|
||
|
when "JSON" then ActiveSupport::HashWithIndifferentAccess.new(::JSON.parse(value))
|
||
|
else value
|
||
|
end
|
||
|
end
|
||
|
end
|