comfortable_mexican_sofa 1.6.18 → 1.6.19

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,19 +2,15 @@ before_install:
2
2
  - gem update --system
3
3
  - gem --version
4
4
  rvm:
5
- - 1.8.7
6
5
  - 1.9.2
7
6
  - 1.9.3
8
- # - rbx-2.0
9
- - ree
10
- # - jruby
11
7
  gemfile:
12
8
  - test/gemfiles/Gemfile.rails.3.0
13
9
  - test/gemfiles/Gemfile.rails.3.1
14
10
  - test/gemfiles/Gemfile.rails.3.2
15
11
  notifications:
16
12
  recipients:
17
- - oleg@twg.ca
13
+ - oleg@khabarov.ca
18
14
  branches:
19
15
  only:
20
16
  - master
data/Gemfile CHANGED
@@ -1,8 +1,8 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
- gem 'rails', '>=3.0.0'
4
- gem 'active_link_to', '~>1.0.0'
5
- gem 'paperclip', '>=2.3.0'
3
+ gem 'rails', '>= 3.0.0'
4
+ gem 'active_link_to', '~> 1.0.0'
5
+ gem 'paperclip', '>= 2.3.0'
6
6
 
7
7
  group :test do
8
8
  gem 'sqlite3'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.6.18
1
+ 1.6.19
@@ -12,7 +12,7 @@ class CmsAdmin::FilesController < CmsAdmin::BaseController
12
12
  def new
13
13
  @file = @site.files.new
14
14
  end
15
-
15
+
16
16
  def create
17
17
  respond_to do |format|
18
18
  format.html do
@@ -36,11 +36,26 @@ class CmsAdmin::FilesController < CmsAdmin::BaseController
36
36
  io = Rails.env.test??
37
37
  request.env['RAW_POST_DATA'].clone :
38
38
  request.env['rack.input'].clone
39
- io.class.class_eval { attr_accessor :original_filename, :content_type }
40
- io.original_filename = request.env['HTTP_X_FILE_NAME']
41
- io.content_type = request.env['CONTENT_TYPE']
39
+ # Unfortunately, this ends up copying the data twice.
40
+ # Once from the stream to the tempfile here, and second, in
41
+ # the file to another tempfile down in PaperClip UploadFileAdapter..
42
+ file = Tempfile.new(request.env["HTTP_X_FILE_NAME"])
43
+ file.binmode
44
+ # FileUtils.copy_stream ends up throwing Conversion Errors from ASCII-8BIT to UTF-8
45
+ # FileUtils.copy_stream(io, file)
46
+ while data = io.read(16*1024)
47
+ file.write(data)
48
+ end
49
+ file.rewind
50
+ # We use a delegation class on the file returned
51
+ upload = ActionDispatch::Http::UploadedFile.new(
52
+ :filename => request.env['HTTP_X_FILE_NAME'],
53
+ :tempfile => file,
54
+ :type => request.env['CONTENT_TYPE'],
55
+ :head => request.headers # Not really needed
56
+ )
42
57
  @file = @site.files.create!(
43
- (params[:file] || { }).merge(:file => io)
58
+ (params[:file] || { }).merge(:file => upload)
44
59
  )
45
60
  end
46
61
  end
@@ -60,7 +60,7 @@ protected
60
60
 
61
61
  def load_cms_page
62
62
  @cms_page = @cms_site.pages.published.find_by_full_path!("/#{params[:cms_path]}")
63
- return redirect_to(@cms_page.target_page.full_path) if @cms_page.target_page
63
+ return redirect_to(@cms_page.target_page.url) if @cms_page.target_page
64
64
 
65
65
  rescue ActiveRecord::RecordNotFound
66
66
  if @cms_page = @cms_site.pages.published.find_by_full_path('/404')
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  class Cms::Page < ActiveRecord::Base
2
3
 
3
4
  ComfortableMexicanSofa.establish_connection(self)
@@ -24,10 +25,12 @@ class Cms::Page < ActiveRecord::Base
24
25
  # -- Callbacks ------------------------------------------------------------
25
26
  before_validation :assigns_label,
26
27
  :assign_parent
28
+ after_validation :escape_slug
27
29
  before_create :assign_position
28
30
  before_save :assign_full_path,
29
31
  :set_cached_content
30
32
  after_save :sync_child_pages
33
+ after_find :unescape_slug_and_path
31
34
 
32
35
  # -- Validations ----------------------------------------------------------
33
36
  validates :site_id,
@@ -36,7 +39,7 @@ class Cms::Page < ActiveRecord::Base
36
39
  :presence => true
37
40
  validates :slug,
38
41
  :presence => true,
39
- :format => /^\w[\.a-z0-9_-]*$/i,
42
+ :format => /^\p{Alnum}[\.\p{Alnum}_-]*$/i,
40
43
  :uniqueness => { :scope => :parent_id },
41
44
  :unless => lambda{ |p| p.site && (p.site.pages.count == 0 || p.site.pages.root == self) }
42
45
  validates :layout,
@@ -60,7 +63,8 @@ class Cms::Page < ActiveRecord::Base
60
63
  end
61
64
 
62
65
  # -- Instance Methods -----------------------------------------------------
63
- # For previewing purposes sometimes we need to have full_path set
66
+ # For previewing purposes sometimes we need to have full_path set. This
67
+ # full path take care of the pages and its childs but not of the site path
64
68
  def full_path
65
69
  self.read_attribute(:full_path) || self.assign_full_path
66
70
  end
@@ -119,7 +123,7 @@ class Cms::Page < ActiveRecord::Base
119
123
 
120
124
  # Full url for a page
121
125
  def url
122
- "http://#{self.site.hostname}#{self.full_path}"
126
+ "http://" + "#{self.site.hostname}/#{self.site.path}/#{self.full_path}".squeeze("/")
123
127
  end
124
128
 
125
129
  # Method to collect prevous state of blocks for revisions
@@ -139,7 +143,7 @@ protected
139
143
  end
140
144
 
141
145
  def assign_full_path
142
- self.full_path = self.parent ? "#{self.parent.full_path}/#{self.slug}".squeeze('/') : '/'
146
+ self.full_path = self.parent ? "#{CGI::escape(self.parent.full_path).gsub('%2F', '/')}/#{self.slug}".squeeze('/') : '/'
143
147
  end
144
148
 
145
149
  def assign_position
@@ -166,5 +170,16 @@ protected
166
170
  def sync_child_pages
167
171
  children.each{ |p| p.save! } if full_path_changed?
168
172
  end
173
+
174
+ # Escape slug unless it's nonexistent (root)
175
+ def escape_slug
176
+ self.slug = CGI::escape(self.slug) unless self.slug.nil?
177
+ end
178
+
179
+ # Unescape the slug and full path back into their original forms unless they're nonexistent
180
+ def unescape_slug_and_path
181
+ self.slug = CGI::unescape(self.slug) unless self.slug.nil?
182
+ self.full_path = CGI::unescape(self.full_path) unless self.full_path.nil?
183
+ end
169
184
 
170
185
  end
@@ -2,11 +2,11 @@
2
2
  <% if (categories = @site.categories.of_type(object.class.to_s)).present? %>
3
3
  <%= form.simple_field t('.label'), nil, :class => 'categories' do %>
4
4
  <% categories.each do |category| %>
5
- <%= hidden_field_tag "#{object.class.to_s.demodulize.downcase}[category_ids][#{category.id}]", 0, :id => nil %>
5
+ <%= hidden_field_tag "#{object.class.to_s.demodulize.underscore.downcase}[category_ids][#{category.id}]", 0, :id => nil %>
6
6
  <label>
7
- <%= check_box_tag "#{object.class.to_s.demodulize.downcase}[category_ids][#{category.id}]", 1, object.categories.member?(category), :id => nil %>
7
+ <%= check_box_tag "#{object.class.to_s.demodulize.underscore.downcase}[category_ids][#{category.id}]", 1, object.categories.member?(category), :id => nil %>
8
8
  <%= category.label %>
9
9
  </label>
10
10
  <% end %>
11
11
  <% end %>
12
- <% end %>
12
+ <% end %>
@@ -13,16 +13,16 @@
13
13
  <%= comfy_form_for @revision, :url => {:action => :revert} do |form| %>
14
14
  <%= form.simple_field do %>
15
15
  <div class='current'>
16
- <div class='title'>Current</div>
16
+ <div class='title'><%= t('.current') %></div>
17
17
  </div>
18
18
  <div class='versioned'>
19
- <div class='title'><%= @revision.created_at %></div>
19
+ <div class='title'><%= l(@revision.created_at) %></div>
20
20
  </div>
21
21
  <% end %>
22
22
 
23
23
  <% @current_content.each do |label, content| %>
24
24
 
25
- <%= form.simple_field label do %>
25
+ <%= form.simple_field Cms::Layout.human_attribute_name(label) do %>
26
26
  <div class='current'>
27
27
  <div class='content'><%= content %></div>
28
28
  </div>
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "comfortable_mexican_sofa"
8
- s.version = "1.6.18"
8
+ s.version = "1.6.19"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Oleg Khabarov", "The Working Group Inc"]
12
- s.date = "2012-03-27"
12
+ s.date = "2012-05-24"
13
13
  s.description = ""
14
14
  s.email = "oleg@theworkinggroup.ca"
15
15
  s.extra_rdoc_files = [
@@ -322,7 +322,7 @@ Gem::Specification.new do |s|
322
322
  ]
323
323
  s.homepage = "http://github.com/comfy/comfortable-mexican-sofa"
324
324
  s.require_paths = ["lib"]
325
- s.rubygems_version = "1.8.10"
325
+ s.rubygems_version = "1.8.21"
326
326
  s.summary = "ComfortableMexicanSofa is a powerful CMS Engine for Ruby on Rails 3 applications"
327
327
 
328
328
  if s.respond_to? :specification_version then
@@ -33,7 +33,7 @@ ComfortableMexicanSofa.configure do |config|
33
33
  # File uploads use Paperclip and can support filesystem or s3 uploads. Override
34
34
  # the upload method and appropriate settings based on Paperclip. For S3 see:
35
35
  # http://rdoc.info/gems/paperclip/2.3.8/Paperclip/Storage/S3, and for
36
- # filesystem see: http://rdoc.info/gems/paperclip/2.3.8/Paperclip/Storage/S3
36
+ # filesystem see: http://rdoc.info/gems/paperclip/2.3.8/Paperclip/Storage/Filesystem
37
37
  # config.upload_file_options = {:url => '/system/:class/:id/:attachment/:style/:filename'}
38
38
 
39
39
  # Sofa allows you to setup entire site from files. Database is updated with each
@@ -190,6 +190,7 @@ en:
190
190
  full_path: Full Path
191
191
  slug: Slug
192
192
  update: Update to this Revision
193
+ current: Current
193
194
 
194
195
  files:
195
196
  index:
@@ -190,6 +190,7 @@ es:
190
190
  full_path: Ruta completa
191
191
  slug: Identificador
192
192
  update: Actualizar a esta versión
193
+ current: Corriente
193
194
 
194
195
  files:
195
196
  index:
@@ -190,6 +190,7 @@ ja:
190
190
  full_path: フルパス
191
191
  slug: スラッグ
192
192
  update: このリビジョンに更新
193
+ current: Current
193
194
 
194
195
  files:
195
196
  index:
@@ -190,6 +190,7 @@ pt-BR:
190
190
  full_path: Caminho completo
191
191
  slug: Identificador
192
192
  update: Atualizar para esta revisão
193
+ current: Atual
193
194
 
194
195
  files:
195
196
  index:
@@ -190,6 +190,7 @@ zh-CN:
190
190
  full_path: 全路径
191
191
  slug: 嵌条
192
192
  update: 更新到该修订版本
193
+ current: Current
193
194
 
194
195
  files:
195
196
  index:
@@ -43,7 +43,7 @@ class ComfortableMexicanSofa::FormBuilder < ActionView::Helpers::FormBuilder
43
43
  end
44
44
 
45
45
  def label_for(field, options={})
46
- label = options.delete(:label) || object.class.human_attribute_name(field).capitalize
46
+ label = options.delete(:label) || object.class.human_attribute_name(field)
47
47
  for_value = options[:id] || "#{object_name}_#{field}"
48
48
  %Q{<label for="#{for_value}">#{label}</label>}.html_safe
49
49
  end
@@ -61,7 +61,7 @@ class CmsAdmin::FilesControllerTest < ActionController::TestCase
61
61
  post :create, :site_id => cms_sites(:default), :file => {
62
62
  :label => 'Test File',
63
63
  :description => 'Test Description',
64
- :file => [fixture_file_upload('files/image.jpg')]
64
+ :file => [fixture_file_upload('files/image.jpg', "image/jpeg")]
65
65
  }
66
66
  assert_response :redirect
67
67
  file = Cms::File.last
@@ -90,8 +90,8 @@ class CmsAdmin::FilesControllerTest < ActionController::TestCase
90
90
  :label => 'Test File',
91
91
  :description => 'Test Description',
92
92
  :file => [
93
- fixture_file_upload('files/image.jpg'),
94
- fixture_file_upload('files/image.gif')
93
+ fixture_file_upload('files/image.jpg', "image/jpeg"),
94
+ fixture_file_upload('files/image.gif', "image/gif")
95
95
  ]
96
96
  }
97
97
  assert_response :redirect
@@ -170,7 +170,7 @@ class CmsAdmin::FilesControllerTest < ActionController::TestCase
170
170
  def test_reorder
171
171
  file_one = cms_files(:default)
172
172
  file_two = cms_sites(:default).files.create(
173
- :file => fixture_file_upload('files/image.jpg')
173
+ :file => fixture_file_upload('files/image.jpg', "image/jpeg")
174
174
  )
175
175
  assert_equal 0, file_one.position
176
176
  assert_equal 1, file_two.position
@@ -2,7 +2,7 @@ source 'http://rubygems.org'
2
2
 
3
3
  gem 'rails', '3.0.12'
4
4
  gem 'active_link_to', '1.0.0'
5
- gem 'paperclip', '>=2.3.0'
5
+ gem 'paperclip', '>= 2.3.0'
6
6
 
7
7
  group :test do
8
8
  gem 'sqlite3'
@@ -2,7 +2,7 @@ source 'http://rubygems.org'
2
2
 
3
3
  gem 'rails', '3.1.4'
4
4
  gem 'active_link_to', '1.0.0'
5
- gem 'paperclip', '>=2.3.0'
5
+ gem 'paperclip', '>= 2.3.0'
6
6
 
7
7
  group :test do
8
8
  gem 'sqlite3'
@@ -2,7 +2,7 @@ source 'http://rubygems.org'
2
2
 
3
3
  gem 'rails', '3.2.2'
4
4
  gem 'active_link_to', '1.0.0'
5
- gem 'paperclip', '>=2.3.0'
5
+ gem 'paperclip', '>= 2.3.0'
6
6
 
7
7
  group :test do
8
8
  gem 'sqlite3'
@@ -32,7 +32,8 @@ class ActiveSupport::TestCase
32
32
  'en' => 'English',
33
33
  'es' => 'Español',
34
34
  'pt-BR' => 'Português Brasileiro',
35
- 'zh-CN' => '简体中文'
35
+ 'zh-CN' => '简体中文',
36
+ 'ja' => '日本語'
36
37
  }
37
38
  config.admin_locale = nil
38
39
  config.upload_file_options = { :url => '/system/:class/:id/:attachment/:style/:filename' }
@@ -20,7 +20,8 @@ class ConfigurationTest < ActiveSupport::TestCase
20
20
  'en' => 'English',
21
21
  'es' => 'Español',
22
22
  'pt-BR' => 'Português Brasileiro',
23
- 'zh-CN' => '简体中文'
23
+ 'zh-CN' => '简体中文',
24
+ 'ja' => '日本語'
24
25
  }), config.locales
25
26
  assert_equal nil, config.admin_locale
26
27
  assert_equal nil, config.database_config
@@ -98,7 +98,7 @@ class CmsBlockTest < ActiveSupport::TestCase
98
98
  :parent_id => cms_pages(:default).id,
99
99
  :blocks_attributes => [
100
100
  { :identifier => 'file',
101
- :content => [fixture_file_upload('files/image.jpg'), fixture_file_upload('files/document.pdf')] }
101
+ :content => [fixture_file_upload('files/image.jpg', "image/jpeg"), fixture_file_upload('files/document.pdf', "application/pdf")] }
102
102
  ]
103
103
  )
104
104
  assert_equal 1, page.blocks.count
@@ -116,7 +116,7 @@ class CmsBlockTest < ActiveSupport::TestCase
116
116
  page.update_attributes!(
117
117
  :blocks_attributes => [
118
118
  { :identifier => 'file',
119
- :content => fixture_file_upload('files/document.pdf') }
119
+ :content => fixture_file_upload('files/document.pdf', "application/pdf") }
120
120
  ]
121
121
  )
122
122
  page.reload
@@ -142,7 +142,7 @@ class CmsBlockTest < ActiveSupport::TestCase
142
142
  :parent_id => cms_pages(:default).id,
143
143
  :blocks_attributes => [
144
144
  { :identifier => 'files',
145
- :content => [fixture_file_upload('files/image.jpg'), fixture_file_upload('files/image.gif')] }
145
+ :content => [fixture_file_upload('files/image.jpg', "image/jpeg"), fixture_file_upload('files/image.gif', "image/gif")] }
146
146
  ]
147
147
  )
148
148
  assert_equal 1, page.blocks.count
@@ -159,7 +159,7 @@ class CmsBlockTest < ActiveSupport::TestCase
159
159
  page.update_attributes!(
160
160
  :blocks_attributes => [
161
161
  { :identifier => 'files',
162
- :content => [fixture_file_upload('files/document.pdf'), fixture_file_upload('files/image.gif')] }
162
+ :content => [fixture_file_upload('files/document.pdf', "application/pdf"), fixture_file_upload('files/image.gif', "image/gif")] }
163
163
  ]
164
164
  )
165
165
  page.reload
@@ -190,7 +190,7 @@ class CmsBlockTest < ActiveSupport::TestCase
190
190
  },
191
191
  '1' => {
192
192
  :identifier => 'file',
193
- :content => fixture_file_upload('files/document.pdf')
193
+ :content => fixture_file_upload('files/document.pdf', "application/pdf")
194
194
  },
195
195
  '2' => {
196
196
  :identifier => 'footer',
@@ -12,7 +12,7 @@ class CmsFileTest < ActiveSupport::TestCase
12
12
  assert_no_difference 'Cms::File.count' do
13
13
  file = Cms::File.create
14
14
  assert file.errors.present?
15
- assert_has_errors_on file, :site_id, :file_file_name, :file
15
+ assert_has_errors_on file, :site_id, :file
16
16
  end
17
17
  end
18
18
 
@@ -60,7 +60,7 @@ class CmsFileTest < ActiveSupport::TestCase
60
60
 
61
61
  def test_create_failure
62
62
  assert_no_difference 'Cms::File.count' do
63
- cms_sites(:default).files.create(:file => '')
63
+ cms_sites(:default).files.create
64
64
  end
65
65
  end
66
66
 
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
3
 
3
4
  class CmsPageTest < ActiveSupport::TestCase
@@ -51,6 +52,9 @@ class CmsPageTest < ActiveSupport::TestCase
51
52
 
52
53
  page.slug = 'inva lid'
53
54
  assert page.invalid?
55
+
56
+ page.slug = 'acción'
57
+ assert page.valid?
54
58
  end
55
59
 
56
60
  def test_label_assignment
@@ -201,8 +205,32 @@ class CmsPageTest < ActiveSupport::TestCase
201
205
  end
202
206
 
203
207
  def test_url
208
+ site = cms_sites(:default)
209
+
204
210
  assert_equal 'http://test.host/', cms_pages(:default).url
205
211
  assert_equal 'http://test.host/child-page', cms_pages(:child).url
212
+
213
+ site.update_attribute(:path, '/en/site')
214
+ cms_pages(:default).reload
215
+ cms_pages(:child).reload
216
+
217
+ assert_equal 'http://test.host/en/site/', cms_pages(:default).url
218
+ assert_equal 'http://test.host/en/site/child-page', cms_pages(:child).url
219
+ end
220
+
221
+ def test_unicode_slug_escaping
222
+ page = cms_pages(:child)
223
+ page_1 = cms_sites(:default).pages.create!(new_params(:parent => page, :slug => 'tést-ünicode-slug'))
224
+ assert_equal CGI::escape('tést-ünicode-slug'), page_1.slug
225
+ assert_equal CGI::escape('/child-page/tést-ünicode-slug').gsub('%2F', '/'), page_1.full_path
226
+ end
227
+
228
+ def test_unicode_slug_unescaping
229
+ page = cms_pages(:child)
230
+ page_1 = cms_sites(:default).pages.create!(new_params(:parent => page, :slug => 'tést-ünicode-slug'))
231
+ found_page = cms_sites(:default).pages.where(:slug => CGI::escape('tést-ünicode-slug')).first
232
+ assert_equal 'tést-ünicode-slug', found_page.slug
233
+ assert_equal '/child-page/tést-ünicode-slug', found_page.full_path
206
234
  end
207
235
 
208
236
  protected
@@ -48,7 +48,7 @@ class PageFileTagTest < ActiveSupport::TestCase
48
48
  page.update_attributes!(
49
49
  :blocks_attributes => [
50
50
  { :identifier => 'file',
51
- :content => fixture_file_upload('files/image.jpg') }
51
+ :content => fixture_file_upload('files/image.jpg', "image/jpeg") }
52
52
  ]
53
53
  )
54
54
  file = tag.block.files.first
@@ -48,7 +48,7 @@ class PageFilesTagTest < ActiveSupport::TestCase
48
48
  page.update_attributes!(
49
49
  :blocks_attributes => [
50
50
  { :identifier => 'files',
51
- :content => [fixture_file_upload('files/image.jpg'), fixture_file_upload('files/image.gif')] }
51
+ :content => [fixture_file_upload('files/image.jpg', "image/jpeg"), fixture_file_upload('files/image.gif', "image/gif")] }
52
52
  ]
53
53
  )
54
54
  files = tag.block.files
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: comfortable_mexican_sofa
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.18
4
+ version: 1.6.19
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-03-27 00:00:00.000000000Z
13
+ date: 2012-05-24 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
17
- requirement: &70136202167420 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,15 @@ dependencies:
22
22
  version: 3.0.0
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70136202167420
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: 3.0.0
26
31
  - !ruby/object:Gem::Dependency
27
32
  name: active_link_to
28
- requirement: &70136202165640 !ruby/object:Gem::Requirement
33
+ requirement: !ruby/object:Gem::Requirement
29
34
  none: false
30
35
  requirements:
31
36
  - - ~>
@@ -33,10 +38,15 @@ dependencies:
33
38
  version: 1.0.0
34
39
  type: :runtime
35
40
  prerelease: false
36
- version_requirements: *70136202165640
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: 1.0.0
37
47
  - !ruby/object:Gem::Dependency
38
48
  name: paperclip
39
- requirement: &70136202164120 !ruby/object:Gem::Requirement
49
+ requirement: !ruby/object:Gem::Requirement
40
50
  none: false
41
51
  requirements:
42
52
  - - ! '>='
@@ -44,7 +54,12 @@ dependencies:
44
54
  version: 2.3.0
45
55
  type: :runtime
46
56
  prerelease: false
47
- version_requirements: *70136202164120
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: 2.3.0
48
63
  description: ''
49
64
  email: oleg@theworkinggroup.ca
50
65
  executables: []
@@ -369,7 +384,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
369
384
  version: '0'
370
385
  segments:
371
386
  - 0
372
- hash: 4174227568118290577
387
+ hash: 1154446217690371427
373
388
  required_rubygems_version: !ruby/object:Gem::Requirement
374
389
  none: false
375
390
  requirements:
@@ -378,7 +393,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
378
393
  version: '0'
379
394
  requirements: []
380
395
  rubyforge_project:
381
- rubygems_version: 1.8.10
396
+ rubygems_version: 1.8.21
382
397
  signing_key:
383
398
  specification_version: 3
384
399
  summary: ComfortableMexicanSofa is a powerful CMS Engine for Ruby on Rails 3 applications