dead_simple_cms 0.10.1 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/dead_simple_cms.rb +2 -1
- data/lib/dead_simple_cms/attribute/collection.rb +16 -1
- data/lib/dead_simple_cms/attribute/type/all.rb +22 -1
- data/lib/dead_simple_cms/attribute/type/base.rb +2 -2
- data/lib/dead_simple_cms/configuration.rb +4 -1
- data/lib/dead_simple_cms/rails/action_view/form_builders/interface.rb +3 -3
- data/lib/dead_simple_cms/version.rb +1 -1
- data/spec/dead_simple_cms/attribute/collection_spec.rb +5 -0
- data/spec/dead_simple_cms/attribute/type/all_spec.rb +32 -0
- metadata +51 -17
data/lib/dead_simple_cms.rb
CHANGED
@@ -80,7 +80,8 @@ module DeadSimpleCMS
|
|
80
80
|
|
81
81
|
# Register any additional attribute classes for use in your configuration.
|
82
82
|
register_attribute_classes(Attribute::Type::String, Attribute::Type::Text, Attribute::Type::Numeric, Attribute::Type::Integer,
|
83
|
-
Attribute::Type::Float, Attribute::Type::Boolean, Attribute::Type::File, Attribute::Type::Image, Attribute::Type::Symbol
|
83
|
+
Attribute::Type::Float, Attribute::Type::Boolean, Attribute::Type::File, Attribute::Type::Image, Attribute::Type::Symbol,
|
84
|
+
Attribute::Type::Datetime)
|
84
85
|
|
85
86
|
# Set the default form builder used for building the CMS forms in the app. You can replace this with :simple_form,
|
86
87
|
# :simple_form_with_bootstrap or pass in the actual builder class. Your builder class must include the interface:
|
@@ -22,6 +22,21 @@ module DeadSimpleCMS
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def update_attributes(attributes)
|
25
|
+
# Sometimes we have to do initial preparing of attributes, before sending them to updating.
|
26
|
+
# For example, if we use select_datetime from Rails, it creates many fields in params, so the resulting
|
27
|
+
# params may look like:
|
28
|
+
#
|
29
|
+
# {'foo' => 'bar', 'date(1i)' => '2000', 'date(2i)' => '10', 'date(3i)' => '30'}
|
30
|
+
#
|
31
|
+
# Of course we have to modify it to put everything into the same key, like:
|
32
|
+
#
|
33
|
+
# {'foo' => 'bar', 'date' => '2000-10-30'}
|
34
|
+
#
|
35
|
+
# or something like that. So, if your attribute type requires such transformations, please specify
|
36
|
+
# .convert_attributes method in it.
|
37
|
+
Configuration.attribute_classes.each do |klass|
|
38
|
+
klass.convert_attributes(attributes) if klass.respond_to?(:convert_attributes)
|
39
|
+
end
|
25
40
|
attributes.each { |k, v| send("#{k}=", v) }
|
26
41
|
end
|
27
42
|
|
@@ -42,4 +57,4 @@ module DeadSimpleCMS
|
|
42
57
|
|
43
58
|
end
|
44
59
|
end
|
45
|
-
end
|
60
|
+
end
|
@@ -46,6 +46,27 @@ module DeadSimpleCMS
|
|
46
46
|
value && value.to_i
|
47
47
|
end
|
48
48
|
end
|
49
|
+
class Datetime < Base
|
50
|
+
self.default_input_type = :datetime
|
51
|
+
|
52
|
+
def self.convert_attributes(attributes)
|
53
|
+
date_attrs = attributes.keys.inject({}) do |new_hash, key|
|
54
|
+
if key =~ /\(\d+i\)$/
|
55
|
+
attr_name = key.match(/^(.*)\(\d+i\)$/)[1]
|
56
|
+
new_hash[attr_name] ||= {}
|
57
|
+
new_hash[attr_name][key] = attributes.delete(key)
|
58
|
+
end
|
59
|
+
new_hash
|
60
|
+
end
|
61
|
+
if date_attrs.present?
|
62
|
+
date_attrs.each do |attr_name, values|
|
63
|
+
datetime = ::DateTime.civil(*values.sort.map(&:second).map(&:to_i))
|
64
|
+
attributes[attr_name] = datetime
|
65
|
+
end
|
66
|
+
end
|
67
|
+
attributes
|
68
|
+
end
|
69
|
+
end
|
49
70
|
# Public: File attributes are stored at some publicly accessible url.
|
50
71
|
class File < Base
|
51
72
|
self.default_input_type = :file
|
@@ -106,4 +127,4 @@ module DeadSimpleCMS
|
|
106
127
|
end
|
107
128
|
end
|
108
129
|
end
|
109
|
-
end
|
130
|
+
end
|
@@ -20,7 +20,7 @@ module DeadSimpleCMS
|
|
20
20
|
# Public: a Symbol representing the default input type required for forms
|
21
21
|
class_attribute :default_input_type, :instance_writer => false
|
22
22
|
|
23
|
-
VALID_INPUT_TYPES = [:string, :text, :select, :file, :radio].freeze
|
23
|
+
VALID_INPUT_TYPES = [:string, :text, :select, :file, :radio, :datetime].freeze
|
24
24
|
|
25
25
|
attr_reader :hint, :input_type, :group_hierarchy, :required
|
26
26
|
attr_accessor :section
|
@@ -74,4 +74,4 @@ module DeadSimpleCMS
|
|
74
74
|
end
|
75
75
|
end
|
76
76
|
end
|
77
|
-
end
|
77
|
+
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
module DeadSimpleCMS
|
2
2
|
class Configuration
|
3
|
+
class_attribute :attribute_classes
|
4
|
+
self.attribute_classes = []
|
3
5
|
|
4
6
|
def section(identifier, options={}, &block)
|
5
7
|
section = DeadSimpleCMS::Section.new(identifier, options, &block)
|
@@ -16,6 +18,7 @@ module DeadSimpleCMS
|
|
16
18
|
classes.each do |klass|
|
17
19
|
DeadSimpleCMS::Section::Builder.define_attribute_builder_method(klass)
|
18
20
|
Group::Configuration.define_attribute_builder_method(klass)
|
21
|
+
attribute_classes << klass
|
19
22
|
end
|
20
23
|
end
|
21
24
|
|
@@ -47,4 +50,4 @@ module DeadSimpleCMS
|
|
47
50
|
end
|
48
51
|
|
49
52
|
end
|
50
|
-
end
|
53
|
+
end
|
@@ -10,12 +10,12 @@ module DeadSimpleCMS
|
|
10
10
|
class_attribute :form_for_method
|
11
11
|
self.form_for_method = :form_for
|
12
12
|
|
13
|
-
|
13
|
+
class_attribute :form_for_options
|
14
14
|
self.form_for_options = {}
|
15
15
|
|
16
16
|
[:update, :actions, :preview, :attribute].each do |name|
|
17
17
|
option_name = "#{name}_options"
|
18
|
-
|
18
|
+
class_attribute option_name, :instance_writer => false
|
19
19
|
self.send("#{option_name}=", {})
|
20
20
|
end
|
21
21
|
end
|
@@ -69,4 +69,4 @@ module DeadSimpleCMS
|
|
69
69
|
end
|
70
70
|
end
|
71
71
|
end
|
72
|
-
end
|
72
|
+
end
|
@@ -23,6 +23,11 @@ describe DeadSimpleCMS::Attribute::Collection do
|
|
23
23
|
subject.update_attributes(:foo => :bar)
|
24
24
|
end
|
25
25
|
|
26
|
+
it "should convert attributes if there is attribute types, which support that" do
|
27
|
+
subject.stub(:foo=)
|
28
|
+
DeadSimpleCMS::Attribute::Type::Datetime.should_receive(:convert_attributes).with(:foo => :bar)
|
29
|
+
subject.update_attributes(:foo => :bar)
|
30
|
+
end
|
26
31
|
end
|
27
32
|
|
28
33
|
describe "#add_attribute" do
|
@@ -119,6 +119,38 @@ describe DeadSimpleCMS::Attribute::Type::Numeric do
|
|
119
119
|
its(:default_input_type) { should == :string }
|
120
120
|
|
121
121
|
end
|
122
|
+
describe DeadSimpleCMS::Attribute::Type::Datetime do
|
123
|
+
|
124
|
+
include_context "Attribute Setup"
|
125
|
+
|
126
|
+
its(:default_input_type) { should == :datetime }
|
127
|
+
|
128
|
+
describe ".convert_attributes" do
|
129
|
+
let(:original_attributes) do
|
130
|
+
{
|
131
|
+
"foo" => "bar",
|
132
|
+
"bla(1i)" => "2000",
|
133
|
+
"bla(2i)" => "10",
|
134
|
+
"bla(3i)" => "23",
|
135
|
+
"bla(4i)" => "11",
|
136
|
+
"bla(5i)" => "55"
|
137
|
+
}
|
138
|
+
end
|
139
|
+
let(:final_attributes) { { "foo" => "bar", "bla" => DateTime.civil(2000, 10, 23, 11, 55) } }
|
140
|
+
subject { described_class.convert_attributes(original_attributes) }
|
141
|
+
|
142
|
+
it "returns hash with datatime object instead of flat string values" do
|
143
|
+
subject.should == final_attributes
|
144
|
+
end
|
145
|
+
|
146
|
+
it "modifies original attributes" do
|
147
|
+
subject
|
148
|
+
original_attributes.should == final_attributes
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
|
122
154
|
describe DeadSimpleCMS::Attribute::Type::Integer do
|
123
155
|
|
124
156
|
include_context "Attribute Setup"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dead_simple_cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,12 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
13
|
-
default_executable:
|
12
|
+
date: 2012-12-07 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: activesupport
|
17
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
18
17
|
none: false
|
19
18
|
requirements:
|
20
19
|
- - ! '>='
|
@@ -22,10 +21,15 @@ dependencies:
|
|
22
21
|
version: '3.0'
|
23
22
|
type: :runtime
|
24
23
|
prerelease: false
|
25
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3.0'
|
26
30
|
- !ruby/object:Gem::Dependency
|
27
31
|
name: activemodel
|
28
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
29
33
|
none: false
|
30
34
|
requirements:
|
31
35
|
- - ! '>='
|
@@ -33,10 +37,15 @@ dependencies:
|
|
33
37
|
version: '3.0'
|
34
38
|
type: :runtime
|
35
39
|
prerelease: false
|
36
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '3.0'
|
37
46
|
- !ruby/object:Gem::Dependency
|
38
47
|
name: simple_form
|
39
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
40
49
|
none: false
|
41
50
|
requirements:
|
42
51
|
- - ! '>='
|
@@ -44,10 +53,15 @@ dependencies:
|
|
44
53
|
version: '0'
|
45
54
|
type: :development
|
46
55
|
prerelease: false
|
47
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
48
62
|
- !ruby/object:Gem::Dependency
|
49
63
|
name: rails
|
50
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
51
65
|
none: false
|
52
66
|
requirements:
|
53
67
|
- - ! '>='
|
@@ -55,10 +69,15 @@ dependencies:
|
|
55
69
|
version: '3.0'
|
56
70
|
type: :development
|
57
71
|
prerelease: false
|
58
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '3.0'
|
59
78
|
- !ruby/object:Gem::Dependency
|
60
79
|
name: rspec
|
61
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
62
81
|
none: false
|
63
82
|
requirements:
|
64
83
|
- - ! '>='
|
@@ -66,10 +85,15 @@ dependencies:
|
|
66
85
|
version: '0'
|
67
86
|
type: :development
|
68
87
|
prerelease: false
|
69
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
70
94
|
- !ruby/object:Gem::Dependency
|
71
95
|
name: sqlite3
|
72
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
73
97
|
none: false
|
74
98
|
requirements:
|
75
99
|
- - ! '>='
|
@@ -77,7 +101,12 @@ dependencies:
|
|
77
101
|
version: '0'
|
78
102
|
type: :development
|
79
103
|
prerelease: false
|
80
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
81
110
|
description: ! "Dead Simple CMS is a library for modifying different parts of your
|
82
111
|
website without the overhead of having a\nfullblown CMS. The idea with this library
|
83
112
|
is simple: provide an easy way to hook into different parts of your\napplication
|
@@ -167,7 +196,6 @@ files:
|
|
167
196
|
- spec/setup/shared.rb
|
168
197
|
- spec/setup/test_file_uploader.rb
|
169
198
|
- spec/spec_helper.rb
|
170
|
-
has_rdoc: true
|
171
199
|
homepage: http://github.com/Aryk/dead_simple_cms
|
172
200
|
licenses: []
|
173
201
|
post_install_message:
|
@@ -180,15 +208,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
180
208
|
- - ! '>='
|
181
209
|
- !ruby/object:Gem::Version
|
182
210
|
version: '0'
|
211
|
+
segments:
|
212
|
+
- 0
|
213
|
+
hash: -4057074833708238682
|
183
214
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
184
215
|
none: false
|
185
216
|
requirements:
|
186
217
|
- - ! '>='
|
187
218
|
- !ruby/object:Gem::Version
|
188
219
|
version: '0'
|
220
|
+
segments:
|
221
|
+
- 0
|
222
|
+
hash: -4057074833708238682
|
189
223
|
requirements: []
|
190
224
|
rubyforge_project:
|
191
|
-
rubygems_version: 1.
|
225
|
+
rubygems_version: 1.8.24
|
192
226
|
signing_key:
|
193
227
|
specification_version: 3
|
194
228
|
summary: DeadSimpleCMS provides a way to define, modify, and present custom variables
|