class Ez::Settings::Store
Attributes
backend[R]
errors[R]
group[R]
on_change[R]
Public Class Methods
new(group, backend, options = {})
click to toggle source
# File lib/ez/settings/store.rb, line 13 def initialize(group, backend, options = {}) @group = group @errors = ActiveModel::Errors.new(self) @backend = backend @on_change = options.fetch(:on_change, nil) define_accessors keys.each { |key| default_or_exists_value(data, key) } end
Public Instance Methods
invalid?()
click to toggle source
# File lib/ez/settings/store.rb, line 36 def invalid? !valid? end
schema()
click to toggle source
# File lib/ez/settings/store.rb, line 53 def schema { group.name => group.keys.map(&:name).each_with_object({}) do |key_name, schema| schema[key_name] = send(key_name) end } end
update(params)
click to toggle source
# File lib/ez/settings/store.rb, line 40 def update(params) params.each { |key, value| public_send("#{key}=", value) } validate return self unless errors.empty? on_change&.call(changes(params)) backend.write(schema) self end
valid?()
click to toggle source
# File lib/ez/settings/store.rb, line 32 def valid? errors.empty? end
validate()
click to toggle source
# File lib/ez/settings/store.rb, line 24 def validate @errors = ActiveModel::Errors.new(self) group.keys.select(&:required?).each do |key| errors.add(key.name, "can't be blank") if send(key.name).blank? end end
Private Instance Methods
changes(params)
click to toggle source
# File lib/ez/settings/store.rb, line 85 def changes(params) new_data = if params.is_a?(Hash) params.symbolize_keys elsif params.is_a?(ActionController::Parameters) params.permit(keys.map(&:name)).to_h.symbolize_keys end new_data.reject { |k, v| data[k] == v } end
data()
click to toggle source
# File lib/ez/settings/store.rb, line 69 def data @data ||= backend.read[group.name] || {} end
default_or_exists_value(from_data, key)
click to toggle source
# File lib/ez/settings/store.rb, line 63 def default_or_exists_value(from_data, key) value = from_data[key.name].nil? ? key.default : from_data[key.name] public_send("#{key.name}=", value) end
define_accessors()
click to toggle source
# File lib/ez/settings/store.rb, line 73 def define_accessors group.keys.map(&:name).each do |name| define_singleton_method(name) do instance_variable_get("@#{name}") end define_singleton_method("#{name}=") do |value| instance_variable_set("@#{name}", value) end end end