cockpit 0.0.1.7 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +100 -199
- data/Rakefile +5 -4
- data/lib/cockpit/core/definition.rb +93 -0
- data/lib/cockpit/core/definitions.rb +55 -0
- data/lib/cockpit/core/include.rb +90 -0
- data/lib/cockpit/core/settings.rb +148 -0
- data/lib/cockpit/core/store.rb +51 -0
- data/lib/cockpit/many/include.rb +18 -0
- data/lib/cockpit/many/settings.rb +21 -0
- data/lib/cockpit/moneta/active_record.rb +120 -0
- data/lib/cockpit/moneta/simple_active_record.rb +93 -0
- data/lib/cockpit.rb +4 -10
- data/test/lib/database.rb +1 -2
- data/test/lib/user.rb +5 -3
- data/test/test_active_record.rb +80 -0
- data/test/test_helper.rb +5 -7
- data/test/test_mongo.rb +82 -0
- data/test/test_stores.rb +125 -0
- metadata +33 -22
- data/app/models/setting.rb +0 -59
- data/init.rb +0 -1
- data/lib/cockpit/cockpit.rb +0 -101
- data/lib/cockpit/configuration.rb +0 -218
- data/lib/cockpit/definition.rb +0 -55
- data/lib/cockpit/extensions.rb +0 -25
- data/lib/cockpit/helper.rb +0 -44
- data/lib/cockpit/store.rb +0 -103
- data/lib/cockpit/tree_hash.rb +0 -116
- data/rails/init.rb +0 -1
- data/test/test_settings.rb +0 -228
- data/test/test_settings_in_database.rb +0 -153
- data/test/test_settings_on_model.rb +0 -68
data/lib/cockpit/helper.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
module Cockpit::Helper
|
2
|
-
|
3
|
-
# always returns either an array or a string
|
4
|
-
def c(*args)
|
5
|
-
options = args.extract_options!
|
6
|
-
result = args.collect {|i| Settings.get(i).value }
|
7
|
-
result = result.pop if result.length == 1
|
8
|
-
result.blank? ? nil : result.to_s
|
9
|
-
end
|
10
|
-
|
11
|
-
def setting_tag(tag)
|
12
|
-
|
13
|
-
end
|
14
|
-
|
15
|
-
def settings_tag(key, &block)
|
16
|
-
Settings(key).each_setting do |key, attributes, value|
|
17
|
-
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def setting_value(value)
|
22
|
-
result = case value
|
23
|
-
when Proc
|
24
|
-
value.call
|
25
|
-
when Cockpit::TreeHash
|
26
|
-
value
|
27
|
-
else
|
28
|
-
value
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def setting_options(attributes)
|
33
|
-
return {} unless (attributes.is_a?(Hash) && attributes[:options])
|
34
|
-
options = case attributes[:options]
|
35
|
-
when Proc
|
36
|
-
attributes[:options].call
|
37
|
-
else
|
38
|
-
attributes[:options]
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
43
|
-
|
44
|
-
ActionView::Base.send(:include, Cockpit::Helper) if defined?(ActionView)
|
data/lib/cockpit/store.rb
DELETED
@@ -1,103 +0,0 @@
|
|
1
|
-
module Cockpit
|
2
|
-
module Store
|
3
|
-
class Base
|
4
|
-
attr_accessor :configurable
|
5
|
-
|
6
|
-
def initialize(*args)
|
7
|
-
options = args.extract_options!
|
8
|
-
options.each do |k, v|
|
9
|
-
self.send("#{k.to_s}=", v) if self.respond_to?("#{k.to_s}=")
|
10
|
-
end
|
11
|
-
@configuration = args.first
|
12
|
-
end
|
13
|
-
|
14
|
-
def configuration
|
15
|
-
@configuration
|
16
|
-
end
|
17
|
-
|
18
|
-
def tree=(value)
|
19
|
-
@tree = value if value.is_a?(TreeHash)
|
20
|
-
@tree
|
21
|
-
end
|
22
|
-
|
23
|
-
def tree
|
24
|
-
@tree ||= TreeHash.new
|
25
|
-
end
|
26
|
-
|
27
|
-
def clear(options = {})
|
28
|
-
tree.each do |k, v|
|
29
|
-
tree.delete(k) unless (options[:except] && options[:except].include?(k.to_sym))
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def get(path)
|
34
|
-
tree.get(path)
|
35
|
-
end
|
36
|
-
alias_method :[], :get
|
37
|
-
|
38
|
-
def get!(path)
|
39
|
-
result = get(path)
|
40
|
-
raise "'#{path.to_s}' was not in Config" if result.blank?
|
41
|
-
result
|
42
|
-
end
|
43
|
-
|
44
|
-
def set(value)
|
45
|
-
return unless value.is_a?(Hash)
|
46
|
-
value.each { |k,v| set_one(k, v) }
|
47
|
-
end
|
48
|
-
|
49
|
-
def set_one(key, value)
|
50
|
-
tree.set(key, value)
|
51
|
-
end
|
52
|
-
|
53
|
-
def set!(value)
|
54
|
-
result = set(value)
|
55
|
-
raise "'#{path.to_s}' was not set in Config" if result.blank?
|
56
|
-
result
|
57
|
-
end
|
58
|
-
|
59
|
-
def []=(key, value)
|
60
|
-
set_one(key => value)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
class Memory < Base
|
65
|
-
|
66
|
-
end
|
67
|
-
|
68
|
-
class Database < Base
|
69
|
-
|
70
|
-
def clear(options = {})
|
71
|
-
configuration.setting_class.all.collect(&:destroy) if options[:hard] == true
|
72
|
-
super(options)
|
73
|
-
end
|
74
|
-
|
75
|
-
def find_or_create(key)
|
76
|
-
result = configuration.setting_class.find(key.to_s) rescue nil
|
77
|
-
result ||= configuration.setting_class.create(:key => key.to_s)
|
78
|
-
end
|
79
|
-
|
80
|
-
def set_one_with_database(key, value)
|
81
|
-
setting = find_or_create(key)
|
82
|
-
cast_as = (setting.cast_as || Cockpit.get_type(value)).to_s
|
83
|
-
attributes = {:value => value, :cast_as => cast_as}
|
84
|
-
attributes[:configurable] = self.configurable if self.configurable
|
85
|
-
setting.update_attributes(attributes)
|
86
|
-
set_one_without_database(key, Cockpit.type_cast(value, cast_as))
|
87
|
-
end
|
88
|
-
alias_method_chain :set_one, :database
|
89
|
-
|
90
|
-
def get(key)
|
91
|
-
result = super(key)
|
92
|
-
if result.blank? && setting = find_or_create(key)
|
93
|
-
set(key => setting.value)
|
94
|
-
result = super(key)
|
95
|
-
else
|
96
|
-
|
97
|
-
end
|
98
|
-
result
|
99
|
-
end
|
100
|
-
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
data/lib/cockpit/tree_hash.rb
DELETED
@@ -1,116 +0,0 @@
|
|
1
|
-
# http://www.daniel-azuma.com/blog/view/z3bqa0t01uugg1/implementing_dsl_blocks
|
2
|
-
module Cockpit
|
3
|
-
class TreeHash < Hash
|
4
|
-
|
5
|
-
def initialize
|
6
|
-
block = Proc.new {|h,k| h[k] = TreeHash.new(&block)}
|
7
|
-
super &block
|
8
|
-
end
|
9
|
-
|
10
|
-
def value_type
|
11
|
-
has_key?(:type) ? self[:type] : :string
|
12
|
-
end
|
13
|
-
|
14
|
-
def each_setting(&block)
|
15
|
-
dup.each do |k, v|
|
16
|
-
atrib = Hash.new
|
17
|
-
if v.has_key?(:value)
|
18
|
-
value = clone(v[:value])
|
19
|
-
atrib = clone(v)
|
20
|
-
else
|
21
|
-
v.each do |k, sub_v|
|
22
|
-
atrib[k] = clone(v[k]) unless sub_v.is_a?(TreeHash)
|
23
|
-
end
|
24
|
-
value = clone(v)
|
25
|
-
end
|
26
|
-
yield(k.to_s, atrib, value) if block_given?
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def dup
|
31
|
-
result = super
|
32
|
-
result.each do |k,v|
|
33
|
-
result[k] = v.dup if v.is_a?(TreeHash)
|
34
|
-
end
|
35
|
-
result
|
36
|
-
end
|
37
|
-
|
38
|
-
def children
|
39
|
-
hash = {}
|
40
|
-
each do |k, v|
|
41
|
-
hash[k] = v if v.is_a?(Hash)
|
42
|
-
end
|
43
|
-
hash
|
44
|
-
end
|
45
|
-
|
46
|
-
def get(key)
|
47
|
-
traverse(key)
|
48
|
-
end
|
49
|
-
|
50
|
-
def get_attribute(key, attribute)
|
51
|
-
get(key)[attribute.to_sym]
|
52
|
-
end
|
53
|
-
|
54
|
-
def set(key, value)
|
55
|
-
traverse(key, value)
|
56
|
-
end
|
57
|
-
|
58
|
-
def set_attribute(key, value)
|
59
|
-
traverse(key, value, false)
|
60
|
-
end
|
61
|
-
|
62
|
-
def set_attributes(hash)
|
63
|
-
hash.each { |k, v| set_attribute(k, v) }
|
64
|
-
self
|
65
|
-
end
|
66
|
-
|
67
|
-
def to_hash
|
68
|
-
hash = {}
|
69
|
-
self.each do |k, v|
|
70
|
-
hash[k] = v.is_a?(TreeHash) ? v.to_hash : v
|
71
|
-
end
|
72
|
-
hash
|
73
|
-
end
|
74
|
-
|
75
|
-
protected
|
76
|
-
def traverse(path, value = nil, as_node = true)
|
77
|
-
path = path.to_s.split('.')
|
78
|
-
child = path.pop.to_sym
|
79
|
-
parent = path.inject(self) { |h,k| h[k.to_sym] }
|
80
|
-
unless value.nil?
|
81
|
-
if as_node
|
82
|
-
if parent[child].has_key?(:type)
|
83
|
-
parent[child][:value] = Cockpit.type_cast(value, parent[child][:type])
|
84
|
-
else
|
85
|
-
parent[child][:value] = value
|
86
|
-
parent[child][:type] = Cockpit.get_type(value)
|
87
|
-
end
|
88
|
-
else
|
89
|
-
parent[child] = value
|
90
|
-
end
|
91
|
-
end
|
92
|
-
parent[child]
|
93
|
-
end
|
94
|
-
|
95
|
-
def method_missing(meth, *args, &block)
|
96
|
-
options = args.extract_options!
|
97
|
-
meth = meth.to_s.gsub("=", "").to_sym
|
98
|
-
if args.empty?
|
99
|
-
if self.has_key?(meth)
|
100
|
-
found = self[meth]
|
101
|
-
else
|
102
|
-
found = get(meth).set_attributes(options)
|
103
|
-
end
|
104
|
-
found = found.instance_eval(&block) if block_given?
|
105
|
-
found
|
106
|
-
else
|
107
|
-
get(meth).set_attributes({:type => Cockpit.get_type(args.first)}.merge(options).merge(:value => args.first))
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
private
|
112
|
-
def clone(object)
|
113
|
-
(object.respond_to?(:dup) ? object.dup : object) rescue object
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
data/rails/init.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require 'cockpit'
|
data/test/test_settings.rb
DELETED
@@ -1,228 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
-
|
3
|
-
class SettingsTest < ActiveSupport::TestCase
|
4
|
-
|
5
|
-
context "Settings" do
|
6
|
-
|
7
|
-
setup do
|
8
|
-
Settings.store = :memory
|
9
|
-
Settings.set(:lance => "first", :dane => 2)
|
10
|
-
end
|
11
|
-
|
12
|
-
should "have have values" do
|
13
|
-
desired_result = {
|
14
|
-
:lance => {
|
15
|
-
:type => :string,
|
16
|
-
:value => "first"
|
17
|
-
},
|
18
|
-
:dane => {
|
19
|
-
:type => :integer,
|
20
|
-
:value => 2
|
21
|
-
}
|
22
|
-
}
|
23
|
-
assert_equal(desired_result, Settings.tree)
|
24
|
-
end
|
25
|
-
|
26
|
-
context "get" do
|
27
|
-
|
28
|
-
setup do
|
29
|
-
Settings.clear
|
30
|
-
Settings.set(:lance => "first", :dane => 2)
|
31
|
-
end
|
32
|
-
|
33
|
-
should "be able to get values" do
|
34
|
-
assert_equal "first", Settings.get(:lance).value
|
35
|
-
assert_equal :string, Settings.get(:lance).value_type
|
36
|
-
assert_equal :integer, Settings.get(:dane).value_type
|
37
|
-
end
|
38
|
-
|
39
|
-
should "be able ot get values by using string" do
|
40
|
-
assert_equal "first", Settings.get("lance").value
|
41
|
-
end
|
42
|
-
|
43
|
-
should "be able to get values using all syntax" do
|
44
|
-
assert_equal "first", Settings.get("lance").value
|
45
|
-
assert_equal "first", Settings("lance").value
|
46
|
-
assert_equal "first", Settings["lance"].value
|
47
|
-
assert_equal "first", Settings.lance.value
|
48
|
-
end
|
49
|
-
|
50
|
-
should "return empty TreeHash if value doesn't exist" do
|
51
|
-
assert_equal({}, Settings.get("nope"))
|
52
|
-
assert_equal false, Settings.get("nope").nil?
|
53
|
-
assert Settings.get("nope").empty?
|
54
|
-
assert Settings.get("nope").blank?
|
55
|
-
assert_equal({}, Settings["asset.thumb.random"].value)
|
56
|
-
end
|
57
|
-
|
58
|
-
should "raise an error if we use exclamation on 'get!'" do
|
59
|
-
assert_raise(RuntimeError) { Settings.get!("nope") }
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
context "set" do
|
64
|
-
|
65
|
-
setup do
|
66
|
-
Settings.clear
|
67
|
-
end
|
68
|
-
|
69
|
-
should "be able to set new values" do
|
70
|
-
Settings.set(:name => "value")
|
71
|
-
assert_equal "value", Settings[:name].value
|
72
|
-
end
|
73
|
-
|
74
|
-
should "be able to set using []=" do
|
75
|
-
Settings[:name] = "value"
|
76
|
-
assert_equal "value", Settings[:name].value
|
77
|
-
end
|
78
|
-
|
79
|
-
should "not be able to set a value if it's a string" do
|
80
|
-
assert_equal nil, Settings.set("set value")
|
81
|
-
end
|
82
|
-
|
83
|
-
should "be able to set a value using parentheses syntax" do
|
84
|
-
Settings("path.to.hash" => "me")
|
85
|
-
assert_equal "me", Settings("path.to.hash").value
|
86
|
-
end
|
87
|
-
|
88
|
-
end
|
89
|
-
|
90
|
-
context "nested values" do
|
91
|
-
|
92
|
-
should "be able to set nested value by string key" do
|
93
|
-
Settings["a.nested.string"] = "value"
|
94
|
-
assert_equal "value", Settings["a.nested.string"].value
|
95
|
-
assert_kind_of Cockpit::TreeHash, Settings["a.nested"]
|
96
|
-
end
|
97
|
-
|
98
|
-
should "be able to change string to further nested hash" do
|
99
|
-
Settings["a.nested.string"] = "value"
|
100
|
-
assert_equal "value", Settings["a.nested.string"].value
|
101
|
-
Settings["a.nested.string.with.further.depth"] = "value"
|
102
|
-
assert_equal "value", Settings["a.nested.string.with.further.depth"].value
|
103
|
-
Settings["a.nested.string"] = "value"
|
104
|
-
assert_equal "value", Settings["a.nested.string"].value
|
105
|
-
end
|
106
|
-
|
107
|
-
end
|
108
|
-
|
109
|
-
context "with dsl" do
|
110
|
-
|
111
|
-
setup do
|
112
|
-
Settings.clear
|
113
|
-
Settings do
|
114
|
-
asset :title => "Asset (and related) Settings" do
|
115
|
-
thumb do
|
116
|
-
width 100, :tip => "Thumb's width"
|
117
|
-
height 100, :tip => "Thumb's height"
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
should "property should be a hash of values" do
|
124
|
-
desired_result = {
|
125
|
-
:type => :integer,
|
126
|
-
:value => 100,
|
127
|
-
:tip => "Thumb's width"
|
128
|
-
}
|
129
|
-
assert_equal(desired_result, Settings["asset.thumb.width"])
|
130
|
-
end
|
131
|
-
|
132
|
-
should "be able to call 'value' on object" do
|
133
|
-
assert_equal 100, Settings["asset.thumb.width.value"]
|
134
|
-
assert_equal 100, Settings["asset.thumb.width"].value
|
135
|
-
end
|
136
|
-
|
137
|
-
should "be able to call 'tip' if it has tooltip" do
|
138
|
-
assert_equal "Thumb's width", Settings["asset.thumb.width"].tip
|
139
|
-
end
|
140
|
-
|
141
|
-
should "be able to call 'tip' through chain" do
|
142
|
-
assert_equal "Thumb's width", Settings.asset.thumb.width.tip
|
143
|
-
end
|
144
|
-
|
145
|
-
context "should be able to take a lambda as a value" do
|
146
|
-
|
147
|
-
setup do
|
148
|
-
Settings.clear
|
149
|
-
@languages = %w(English Italian Spanish)
|
150
|
-
Settings do
|
151
|
-
site :title => "Default Site Settings" do
|
152
|
-
languages :value => lambda { %w(English Italian Spanish) }
|
153
|
-
end
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
should "have a proc as a value" do
|
158
|
-
assert_kind_of Proc, Settings["site.languages.value"]
|
159
|
-
end
|
160
|
-
|
161
|
-
should "be able to call the proc" do
|
162
|
-
assert @languages, Settings["site.languages.value"].call
|
163
|
-
end
|
164
|
-
|
165
|
-
end
|
166
|
-
|
167
|
-
context "should be able to take a Proc.new as a value" do
|
168
|
-
setup do
|
169
|
-
Settings.clear
|
170
|
-
@timezones = %w(pacific central eastern)
|
171
|
-
Settings do
|
172
|
-
site :title => "Default Site Settings" do
|
173
|
-
timezones :value => Proc.new { %w(pacific central eastern) }
|
174
|
-
end
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
should "have a proc as a value" do
|
179
|
-
assert_kind_of Proc, Settings["site.timezones.value"]
|
180
|
-
end
|
181
|
-
|
182
|
-
should "be able to call the proc" do
|
183
|
-
assert @timezones, Settings["site.timezones.value"].call
|
184
|
-
end
|
185
|
-
end
|
186
|
-
|
187
|
-
context "should be able to take a large dsl and make something of it!" do
|
188
|
-
|
189
|
-
setup do
|
190
|
-
Settings.clear
|
191
|
-
load_settings
|
192
|
-
end
|
193
|
-
|
194
|
-
should "find the nested teaser" do
|
195
|
-
assert_equal 2, Settings["site.teasers.right"].value
|
196
|
-
end
|
197
|
-
|
198
|
-
end
|
199
|
-
|
200
|
-
end
|
201
|
-
|
202
|
-
context "setting categories" do
|
203
|
-
|
204
|
-
setup do
|
205
|
-
Settings.clear
|
206
|
-
load_settings
|
207
|
-
end
|
208
|
-
|
209
|
-
should "be able to get settings by category" do
|
210
|
-
[:site, :asset].each do |type|
|
211
|
-
assert Settings[type].keys
|
212
|
-
end
|
213
|
-
end
|
214
|
-
|
215
|
-
should "traverse categories" do
|
216
|
-
Settings(:site).each_setting do |key, attributes, value|
|
217
|
-
assert attributes
|
218
|
-
#puts "Key: #{key.to_s}, Attributes: #{attributes.inspect}, Value: #{value.inspect}"
|
219
|
-
end
|
220
|
-
end
|
221
|
-
|
222
|
-
end
|
223
|
-
|
224
|
-
teardown { Settings.clear }
|
225
|
-
|
226
|
-
end
|
227
|
-
|
228
|
-
end
|
@@ -1,153 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
-
|
3
|
-
class SettingsTest < ActiveSupport::TestCase
|
4
|
-
|
5
|
-
context "Database Store" do
|
6
|
-
|
7
|
-
setup do
|
8
|
-
Settings.clear
|
9
|
-
Settings.store = :db
|
10
|
-
end
|
11
|
-
|
12
|
-
should "have a db as a store" do
|
13
|
-
assert_kind_of Cockpit::Store::Database, Settings.store
|
14
|
-
end
|
15
|
-
|
16
|
-
context "save to the database" do
|
17
|
-
|
18
|
-
setup do
|
19
|
-
Settings["lantial"] = "to database"
|
20
|
-
Settings["pollard"] = "another"
|
21
|
-
end
|
22
|
-
|
23
|
-
should "have saved lance into the database" do
|
24
|
-
assert_equal "to database", Setting.find_by_key("lantial").value
|
25
|
-
end
|
26
|
-
|
27
|
-
should "be able to change a database record through tree" do
|
28
|
-
assert_equal "another", Setting.find_by_key("pollard").value
|
29
|
-
Settings["pollard"] = "first change"
|
30
|
-
assert_equal "first change", Setting.find_by_key("pollard").value
|
31
|
-
end
|
32
|
-
|
33
|
-
should "NOT be able to change a database record independently of the tree" do
|
34
|
-
setting = Setting.find_by_key("pollard")
|
35
|
-
assert_equal "another", setting.value
|
36
|
-
setting.value = "changed!"
|
37
|
-
setting.save
|
38
|
-
|
39
|
-
assert_equal "changed!", Setting.find_by_key("pollard").value
|
40
|
-
assert_equal "changed!", Settings["pollard"].value
|
41
|
-
end
|
42
|
-
|
43
|
-
context "get value" do
|
44
|
-
|
45
|
-
setup do
|
46
|
-
Settings.store = :db
|
47
|
-
Settings.clear(:hard => true)
|
48
|
-
end
|
49
|
-
|
50
|
-
should "be able to get a previously created setting from the db" do
|
51
|
-
assert_equal Cockpit::TreeHash.new, Settings.tree
|
52
|
-
Setting.create(:key => "lantial", :value => "custom value")
|
53
|
-
assert_equal "custom value", Settings["lantial"].value
|
54
|
-
assert_equal({:lantial => {:type => :string, :value => "custom value"}}, Settings.tree)
|
55
|
-
end
|
56
|
-
|
57
|
-
should "be able to save objects using other syntax" do
|
58
|
-
key = "im.a.nested.key"
|
59
|
-
value = "wow"
|
60
|
-
assert_equal nil, Setting.find_by_key(key)
|
61
|
-
Settings.im.a.nested.key = value
|
62
|
-
assert_equal value, Settings(key).value
|
63
|
-
# PENDING!
|
64
|
-
# assert_equal value, Setting.find_by_key(key)
|
65
|
-
Settings("im.nesting.myself" => "here")
|
66
|
-
assert_equal "here", Setting.find_by_key("im.nesting.myself").value
|
67
|
-
Settings["me.too.please"] = "let me in"
|
68
|
-
assert_equal "let me in", Setting.find_by_key("me.too.please").value
|
69
|
-
Settings.set("finally.me" => "too")
|
70
|
-
assert_equal "too", Setting.find_by_key("finally.me").value
|
71
|
-
end
|
72
|
-
|
73
|
-
end
|
74
|
-
|
75
|
-
context "should not save large tree to database" do
|
76
|
-
|
77
|
-
setup do
|
78
|
-
Settings.clear
|
79
|
-
load_settings
|
80
|
-
end
|
81
|
-
|
82
|
-
should "find nested objects in database" do
|
83
|
-
assert_equal nil, Setting.find_by_key("site.title")
|
84
|
-
end
|
85
|
-
|
86
|
-
end
|
87
|
-
|
88
|
-
context "should find setting" do
|
89
|
-
|
90
|
-
setup do
|
91
|
-
Settings.store = :db
|
92
|
-
Settings("lantial" => "saved")
|
93
|
-
end
|
94
|
-
|
95
|
-
should "find the thing" do
|
96
|
-
setting = Setting.find("lantial")
|
97
|
-
assert setting
|
98
|
-
end
|
99
|
-
|
100
|
-
teardown do
|
101
|
-
Settings.store = :memory
|
102
|
-
end
|
103
|
-
|
104
|
-
end
|
105
|
-
|
106
|
-
end
|
107
|
-
|
108
|
-
should "be able to switch the store without modifying the tree" do
|
109
|
-
# pending
|
110
|
-
end
|
111
|
-
|
112
|
-
context "type casting" do
|
113
|
-
|
114
|
-
setup do
|
115
|
-
@datetime = DateTime.now
|
116
|
-
@time = Time.now
|
117
|
-
Settings.store = :db
|
118
|
-
Setting.detonate
|
119
|
-
Settings["a.string"] = "string"
|
120
|
-
Settings["a.boolean"] = true
|
121
|
-
Settings["a.false_boolean"] = false
|
122
|
-
Settings["a.integer"] = 10
|
123
|
-
Settings["a.float"] = 10.11
|
124
|
-
Settings["a.datetime"] = @datetime
|
125
|
-
Settings["a.time"] = @time
|
126
|
-
end
|
127
|
-
|
128
|
-
should "parse types" do
|
129
|
-
assert_equal "string", Setting.find("a.string").value
|
130
|
-
assert_equal true, Setting.find("a.boolean").value
|
131
|
-
assert_equal false, Setting.find("a.false_boolean").value
|
132
|
-
assert_equal 10, Setting.find("a.integer").value
|
133
|
-
assert_equal 10.11, Setting.find("a.float").value
|
134
|
-
assert_equal @time.to_s, Setting.find("a.time").value.to_s
|
135
|
-
end
|
136
|
-
|
137
|
-
should "parse datetime" do
|
138
|
-
# close but not quite
|
139
|
-
# assert_equal @datetime, Setting.find("a.datetime").value
|
140
|
-
# pending
|
141
|
-
end
|
142
|
-
|
143
|
-
teardown do
|
144
|
-
Setting.detonate
|
145
|
-
end
|
146
|
-
|
147
|
-
end
|
148
|
-
|
149
|
-
teardown { Settings.clear }
|
150
|
-
|
151
|
-
end
|
152
|
-
|
153
|
-
end
|