Sha256: 2ae41738f3bf0db6070a248ee8f5dae22845d548b18676e9b6a040da9eb39a70
Contents?: true
Size: 1.08 KB
Versions: 1
Compression:
Stored size: 1.08 KB
Contents
module MissileEmitter module Configurable # 配置项列表(klass => [key1, key2, ...]) # eg. {Setting => [:logo, :copyright, ...]} option_names = {} MissileEmitter do |klass, key_field = :key, value_field = :value, key, &default| (option_names[klass] ||= [].to_set) << key klass.define_singleton_method key do |&writer| setting = find_or_initialize_by key_field => key value = setting.send value_field if setting.new_record? # 记录不存在 value = setting.instance_exec &(writer || default || -> { value }) else value = setting.instance_exec &writer if writer end setting.attributes = {value_field => value} setting.save! value end end extend ActiveSupport::Concern included do # 获取所有配置:Klass.options ---> {logo: '', copyright: '', ...} define_singleton_method :options do option_names.fetch(self, []).each_with_object({}) do |key, result| result[key] = send key end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
missile_emitter-0.3.9 | lib/missile_emitter/configurable.rb |