dead_simple_cms 0.10.1 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
- class_inheritable_hash :form_for_options
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
- class_inheritable_hash option_name, :instance_writer => false
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
@@ -1,3 +1,3 @@
1
1
  module DeadSimpleCMS
2
- VERSION = "0.10.1"
2
+ VERSION = "0.11.0"
3
3
  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.10.1
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-09-13 00:00:00.000000000 -07:00
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: &2168634220 !ruby/object:Gem::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: *2168634220
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: &2168633620 !ruby/object:Gem::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: *2168633620
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: &2168632880 !ruby/object:Gem::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: *2168632880
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: &2168632220 !ruby/object:Gem::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: *2168632220
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: &2168631700 !ruby/object:Gem::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: *2168631700
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: &2168631200 !ruby/object:Gem::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: *2168631200
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.6.2
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