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) |