annotate plugins/redmine_checkout/lib/checkout/setting_patch.rb @ 1613:90bed4e10cc8 deploy

Download file link
author Chris Cannam
date Wed, 30 Aug 2017 17:24:37 +0100
parents b4b72f1eb644
children
rev   line source
Chris@16 1 require_dependency 'setting'
Chris@16 2
Chris@16 3 module Checkout
Chris@16 4 module SettingPatch
Chris@16 5 def self.included(base) # :nodoc:
Chris@16 6 base.extend(ClassMethods)
Chris@16 7
Chris@16 8 base.class_eval do
Chris@16 9 unloadable
Chris@16 10
Chris@16 11 # Defines getter and setter for each setting
Chris@16 12 # Then setting values can be read using: Setting.some_setting_name
Chris@16 13 # or set using Setting.some_setting_name = "some value"
Chris@16 14 Redmine::Plugin.find(:redmine_checkout).settings[:default].keys.each do |name|
Chris@16 15 if name.start_with?('protocols_')
Chris@16 16 default = "[]"
Chris@16 17 else
Chris@16 18 default = <<-END_SRC
Chris@16 19 begin
Chris@16 20 default = Setting.available_settings['plugin_redmine_checkout']['default']['#{name}']
Chris@16 21 # perform a deep copy of the default
Chris@16 22 Marshal::load(Marshal::dump(default))
Chris@16 23 end
Chris@16 24 END_SRC
Chris@16 25 end
Chris@16 26
Chris@16 27 src = <<-END_SRC
Chris@16 28 def self.checkout_#{name}
Chris@16 29 self.plugin_redmine_checkout[:#{name}] || #{default}
Chris@16 30 end
Chris@16 31
Chris@16 32 def self.checkout_#{name}?
Chris@16 33 self.checkout_#{name}.to_i > 0
Chris@16 34 end
Chris@16 35
Chris@16 36 def self.checkout_#{name}=(value)
Chris@16 37 setting = Setting.plugin_redmine_checkout
Chris@16 38 setting[:#{name}] = value
Chris@16 39 Setting.plugin_redmine_checkout = setting
Chris@16 40 end
Chris@16 41 END_SRC
Chris@16 42 class_eval src, __FILE__, __LINE__
Chris@16 43 end
Chris@16 44
Chris@16 45 class <<self
Chris@16 46 alias_method :store_without_checkout, :[]=
Chris@16 47 alias_method :[]=, :store_with_checkout
Chris@16 48
Chris@16 49 alias_method :retrieve_without_checkout, :[]
Chris@16 50 alias_method :[], :retrieve_with_checkout
Chris@16 51 end
Chris@16 52 end
Chris@16 53 end
Chris@16 54
Chris@16 55 module ClassMethods
Chris@16 56 def store_with_checkout(name, value)
Chris@16 57 if name.to_s.starts_with? "checkout_"
Chris@16 58 self.send("#{name}=", value)
Chris@16 59 else
Chris@16 60 store_without_checkout(name, value)
Chris@16 61 end
Chris@16 62 end
Chris@16 63
Chris@16 64 def retrieve_with_checkout(name)
Chris@16 65 if name.to_s.starts_with? "checkout_"
Chris@16 66 self.send("#{name}")
Chris@16 67 else
Chris@16 68 retrieve_without_checkout(name)
Chris@16 69 end
Chris@16 70 end
Chris@16 71 end
Chris@16 72 end
Chris@16 73 end
Chris@16 74
Chris@16 75 Setting.send(:include, Checkout::SettingPatch)