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.
- data/.travis.yml +1 -5
- data/Gemfile +3 -3
- data/VERSION +1 -1
- data/app/controllers/cms_admin/files_controller.rb +20 -5
- data/app/controllers/cms_content_controller.rb +1 -1
- data/app/models/cms/page.rb +19 -4
- data/app/views/cms_admin/categories/_form.html.erb +3 -3
- data/app/views/cms_admin/revisions/show.html.erb +3 -3
- data/comfortable_mexican_sofa.gemspec +3 -3
- data/config/initializers/comfortable_mexican_sofa.rb +1 -1
- data/config/locales/en.yml +1 -0
- data/config/locales/es.yml +1 -0
- data/config/locales/ja.yml +1 -0
- data/config/locales/pt-BR.yml +1 -0
- data/config/locales/zh-CN.yml +1 -0
- data/lib/comfortable_mexican_sofa/form_builder.rb +1 -1
- data/test/functional/cms_admin/files_controller_test.rb +4 -4
- data/test/gemfiles/Gemfile.rails.3.0 +1 -1
- data/test/gemfiles/Gemfile.rails.3.1 +1 -1
- data/test/gemfiles/Gemfile.rails.3.2 +1 -1
- data/test/test_helper.rb +2 -1
- data/test/unit/configuration_test.rb +2 -1
- data/test/unit/models/block_test.rb +5 -5
- data/test/unit/models/file_test.rb +2 -2
- data/test/unit/models/page_test.rb +28 -0
- data/test/unit/tags/page_file_test.rb +1 -1
- data/test/unit/tags/page_files_test.rb +1 -1
- metadata +25 -10
data/.travis.yml
CHANGED
@@ -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@
|
13
|
+
- oleg@khabarov.ca
|
18
14
|
branches:
|
19
15
|
only:
|
20
16
|
- master
|
data/Gemfile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.6.
|
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
|
-
|
40
|
-
|
41
|
-
|
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 =>
|
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.
|
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')
|
data/app/models/cms/page.rb
CHANGED
@@ -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 => /^\
|
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
|
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'
|
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.
|
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-
|
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.
|
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/
|
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
|
data/config/locales/en.yml
CHANGED
data/config/locales/es.yml
CHANGED
data/config/locales/ja.yml
CHANGED
data/config/locales/pt-BR.yml
CHANGED
data/config/locales/zh-CN.yml
CHANGED
@@ -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)
|
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
|
data/test/test_helper.rb
CHANGED
@@ -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, :
|
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
|
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.
|
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-
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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.
|
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
|