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.
@@ -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