fix issue #78
This commit is contained in:
parent
8f36f5a2d8
commit
8ad6ee580e
4
Gemfile
4
Gemfile
@ -2,6 +2,8 @@ source :rubygems
|
|||||||
|
|
||||||
# add in all the runtime dependencies
|
# add in all the runtime dependencies
|
||||||
|
|
||||||
|
gem 'rake', '0.8.7'
|
||||||
|
|
||||||
gem 'rails', '>= 3.0.7'
|
gem 'rails', '>= 3.0.7'
|
||||||
|
|
||||||
gem 'warden'
|
gem 'warden'
|
||||||
@ -20,7 +22,7 @@ gem 'inherited_resources', '~> 1.1.2'
|
|||||||
gem 'rmagick', '2.12.2'
|
gem 'rmagick', '2.12.2'
|
||||||
gem 'locomotive_carrierwave', '0.5.0.1.beta3', :require => 'carrierwave'
|
gem 'locomotive_carrierwave', '0.5.0.1.beta3', :require => 'carrierwave'
|
||||||
|
|
||||||
gem 'custom_fields', '1.0.0.beta.12'
|
gem 'custom_fields', '1.0.0.beta.13'
|
||||||
gem 'fog', '0.3.7'
|
gem 'fog', '0.3.7'
|
||||||
gem 'mimetype-fu'
|
gem 'mimetype-fu'
|
||||||
gem 'actionmailer-with-request', :require => 'actionmailer_with_request'
|
gem 'actionmailer-with-request', :require => 'actionmailer_with_request'
|
||||||
|
20
Gemfile.lock
20
Gemfile.lock
@ -1,6 +1,6 @@
|
|||||||
GIT
|
GIT
|
||||||
remote: git://github.com/floehopper/mocha.git
|
remote: git://github.com/floehopper/mocha.git
|
||||||
revision: 7dd9512a874f89b8037d7320fe7988c222f439e1
|
revision: adeb8ae0189963cf3024f2b37d5348a7feaae11e
|
||||||
specs:
|
specs:
|
||||||
mocha (0.9.12.20110213002255)
|
mocha (0.9.12.20110213002255)
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ GEM
|
|||||||
cucumber-rails (0.3.2)
|
cucumber-rails (0.3.2)
|
||||||
cucumber (>= 0.8.0)
|
cucumber (>= 0.8.0)
|
||||||
culerity (0.2.15)
|
culerity (0.2.15)
|
||||||
custom_fields (1.0.0.beta.12)
|
custom_fields (1.0.0.beta.13)
|
||||||
activesupport (>= 3.0.7)
|
activesupport (>= 3.0.7)
|
||||||
locomotive_carrierwave
|
locomotive_carrierwave
|
||||||
mongoid (~> 2.0.1)
|
mongoid (~> 2.0.1)
|
||||||
@ -110,7 +110,7 @@ GEM
|
|||||||
factory_girl_rails (1.0.1)
|
factory_girl_rails (1.0.1)
|
||||||
factory_girl (~> 1.3)
|
factory_girl (~> 1.3)
|
||||||
railties (>= 3.0.0)
|
railties (>= 3.0.0)
|
||||||
ffi (1.0.8)
|
ffi (1.0.9)
|
||||||
fog (0.3.7)
|
fog (0.3.7)
|
||||||
builder
|
builder
|
||||||
excon (>= 0.2.3)
|
excon (>= 0.2.3)
|
||||||
@ -120,7 +120,7 @@ GEM
|
|||||||
net-ssh (~> 2.0.23)
|
net-ssh (~> 2.0.23)
|
||||||
nokogiri (~> 1.4.3.1)
|
nokogiri (~> 1.4.3.1)
|
||||||
ruby-hmac
|
ruby-hmac
|
||||||
formatador (0.1.3)
|
formatador (0.1.4)
|
||||||
formtastic (1.2.3)
|
formtastic (1.2.3)
|
||||||
actionpack (>= 2.3.7)
|
actionpack (>= 2.3.7)
|
||||||
activesupport (>= 2.3.7)
|
activesupport (>= 2.3.7)
|
||||||
@ -146,7 +146,7 @@ GEM
|
|||||||
yui-compressor (>= 0.9.1)
|
yui-compressor (>= 0.9.1)
|
||||||
json (1.5.1)
|
json (1.5.1)
|
||||||
json_pure (1.4.6)
|
json_pure (1.4.6)
|
||||||
kgio (2.4.0)
|
kgio (2.4.1)
|
||||||
launchy (0.3.7)
|
launchy (0.3.7)
|
||||||
configuration (>= 0.0.5)
|
configuration (>= 0.0.5)
|
||||||
rake (>= 0.8.1)
|
rake (>= 0.8.1)
|
||||||
@ -172,11 +172,10 @@ GEM
|
|||||||
mimetype-fu (0.1.2)
|
mimetype-fu (0.1.2)
|
||||||
mongo (1.3.1)
|
mongo (1.3.1)
|
||||||
bson (>= 1.3.1)
|
bson (>= 1.3.1)
|
||||||
mongoid (2.0.1)
|
mongoid (2.0.2)
|
||||||
activemodel (~> 3.0)
|
activemodel (~> 3.0)
|
||||||
mongo (~> 1.3)
|
mongo (~> 1.3)
|
||||||
tzinfo (~> 0.3.22)
|
tzinfo (~> 0.3.22)
|
||||||
will_paginate (~> 3.0.pre)
|
|
||||||
net-ssh (2.0.24)
|
net-ssh (2.0.24)
|
||||||
nokogiri (1.4.3.1)
|
nokogiri (1.4.3.1)
|
||||||
open4 (1.0.1)
|
open4 (1.0.1)
|
||||||
@ -185,7 +184,7 @@ GEM
|
|||||||
rake
|
rake
|
||||||
polyglot (0.3.1)
|
polyglot (0.3.1)
|
||||||
proxies (0.2.1)
|
proxies (0.2.1)
|
||||||
rack (1.2.2)
|
rack (1.2.3)
|
||||||
rack-mount (0.6.14)
|
rack-mount (0.6.14)
|
||||||
rack (>= 1.0.0)
|
rack (>= 1.0.0)
|
||||||
rack-test (0.5.7)
|
rack-test (0.5.7)
|
||||||
@ -257,7 +256,7 @@ GEM
|
|||||||
rack
|
rack
|
||||||
warden (0.10.7)
|
warden (0.10.7)
|
||||||
rack (>= 1.0.0)
|
rack (>= 1.0.0)
|
||||||
will_paginate (3.0.pre2)
|
will_paginate (2.3.15)
|
||||||
yui-compressor (0.9.6)
|
yui-compressor (0.9.6)
|
||||||
POpen4 (>= 0.1.4)
|
POpen4 (>= 0.1.4)
|
||||||
|
|
||||||
@ -275,7 +274,7 @@ DEPENDENCIES
|
|||||||
capybara
|
capybara
|
||||||
cucumber (= 0.8.5)
|
cucumber (= 0.8.5)
|
||||||
cucumber-rails
|
cucumber-rails
|
||||||
custom_fields (= 1.0.0.beta.12)
|
custom_fields (= 1.0.0.beta.13)
|
||||||
database_cleaner
|
database_cleaner
|
||||||
delayed_job (= 2.1.4)
|
delayed_job (= 2.1.4)
|
||||||
delayed_job_mongoid (= 1.0.2)
|
delayed_job_mongoid (= 1.0.2)
|
||||||
@ -298,6 +297,7 @@ DEPENDENCIES
|
|||||||
mongoid (~> 2.0.1)
|
mongoid (~> 2.0.1)
|
||||||
pickle
|
pickle
|
||||||
rails (>= 3.0.7)
|
rails (>= 3.0.7)
|
||||||
|
rake (= 0.8.7)
|
||||||
rmagick (= 2.12.2)
|
rmagick (= 2.12.2)
|
||||||
rspec-rails (= 2.3.1)
|
rspec-rails (= 2.3.1)
|
||||||
ruby-debug
|
ruby-debug
|
||||||
|
@ -25,7 +25,6 @@ class ContentInstance
|
|||||||
after_create :send_notifications
|
after_create :send_notifications
|
||||||
|
|
||||||
## named scopes ##
|
## named scopes ##
|
||||||
scope :persisted, where(:updated_at.ne => nil)
|
|
||||||
scope :latest_updated, :order_by => :updated_at.desc, :limit => Locomotive.config.lastest_items_nb
|
scope :latest_updated, :order_by => :updated_at.desc, :limit => Locomotive.config.lastest_items_nb
|
||||||
|
|
||||||
## methods ##
|
## methods ##
|
||||||
|
@ -18,7 +18,7 @@ class ContentType
|
|||||||
embeds_many :contents, :class_name => 'ContentInstance', :validate => false do
|
embeds_many :contents, :class_name => 'ContentInstance', :validate => false do
|
||||||
def visible
|
def visible
|
||||||
@target.find_all { |c| c.visible? }
|
@target.find_all { |c| c.visible? }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
## named scopes ##
|
## named scopes ##
|
||||||
@ -69,6 +69,10 @@ class ContentType
|
|||||||
self.ordered_contents
|
self.ordered_contents
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def latest_updated_contents
|
||||||
|
self.contents.latest_updated.reject { |c| !c.persisted? }
|
||||||
|
end
|
||||||
|
|
||||||
def ordered_contents(conditions = {})
|
def ordered_contents(conditions = {})
|
||||||
column = self.order_by.to_sym
|
column = self.order_by.to_sym
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
.inner
|
.inner
|
||||||
%h2!= t('admin.contents.index.lastest_items')
|
%h2!= t('admin.contents.index.lastest_items')
|
||||||
%ul
|
%ul
|
||||||
- content_type.contents.persisted.latest_updated.each do |content|
|
- content_type.latest_updated_contents.each do |content|
|
||||||
%li
|
%li
|
||||||
= link_to truncate(content.send(content_type.highlighted_field_name).to_s, :length => 20), edit_admin_content_path(content_type.slug, content)
|
= link_to truncate(content.send(content_type.highlighted_field_name).to_s, :length => 20), edit_admin_content_path(content_type.slug, content)
|
||||||
%span= time_ago_in_words(content.updated_at)
|
%span= time_ago_in_words(content.updated_at)
|
||||||
|
10
features/admin/contents.feature
Normal file
10
features/admin/contents.feature
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
Feature: Manage Contents
|
||||||
|
In order to manage instances from custom content types
|
||||||
|
As an administrator
|
||||||
|
I want to add/edit/delete custom contents of my site
|
||||||
|
|
||||||
|
Background:
|
||||||
|
Given I have the site: "test site" set up
|
||||||
|
And I am an authenticated user
|
||||||
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
|||||||
|
# Custom options for CustomFields
|
||||||
|
CustomFields.options = {
|
||||||
|
:reserved_aliases => Mongoid.destructive_fields + %w(created_at updated_at)
|
||||||
|
}
|
||||||
|
|
||||||
# Set correct paths
|
# Set correct paths
|
||||||
module CustomFields
|
module CustomFields
|
||||||
module Types
|
module Types
|
||||||
@ -17,4 +22,3 @@ module CustomFields
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ Gem::Specification.new do |s|
|
|||||||
s.add_dependency "rmagick", "2.12.2"
|
s.add_dependency "rmagick", "2.12.2"
|
||||||
s.add_dependency "locomotive_carrierwave", "0.5.0.1.beta3"
|
s.add_dependency "locomotive_carrierwave", "0.5.0.1.beta3"
|
||||||
|
|
||||||
s.add_dependency "custom_fields", "1.0.0.beta.12"
|
s.add_dependency "custom_fields", "1.0.0.beta.13"
|
||||||
s.add_dependency "fog", "0.3.7"
|
s.add_dependency "fog", "0.3.7"
|
||||||
s.add_dependency "mimetype-fu"
|
s.add_dependency "mimetype-fu"
|
||||||
s.add_dependency "actionmailer-with-request"
|
s.add_dependency "actionmailer-with-request"
|
||||||
|
@ -17,20 +17,20 @@ describe ContentType do
|
|||||||
# Validations ##
|
# Validations ##
|
||||||
|
|
||||||
%w{site name}.each do |field|
|
%w{site name}.each do |field|
|
||||||
it "should validate presence of #{field}" do
|
it "requires the presence of #{field}" do
|
||||||
content_type = Factory.build(:content_type, field.to_sym => nil)
|
content_type = Factory.build(:content_type, field.to_sym => nil)
|
||||||
content_type.should_not be_valid
|
content_type.should_not be_valid
|
||||||
content_type.errors[field.to_sym].should == ["can't be blank"]
|
content_type.errors[field.to_sym].should == ["can't be blank"]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should validate presence of slug' do
|
it 'requires the presence of slug' do
|
||||||
content_type = Factory.build(:content_type, :name => nil, :slug => nil)
|
content_type = Factory.build(:content_type, :name => nil, :slug => nil)
|
||||||
content_type.should_not be_valid
|
content_type.should_not be_valid
|
||||||
content_type.errors[:slug].should == ["can't be blank"]
|
content_type.errors[:slug].should == ["can't be blank"]
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should validate uniqueness of slug' do
|
it 'is not valid if slug is not unique' do
|
||||||
content_type = Factory.build(:content_type)
|
content_type = Factory.build(:content_type)
|
||||||
content_type.content_custom_fields.build :label => 'anything', :kind => 'String'
|
content_type.content_custom_fields.build :label => 'anything', :kind => 'String'
|
||||||
content_type.save
|
content_type.save
|
||||||
@ -38,12 +38,21 @@ describe ContentType do
|
|||||||
content_type.errors[:slug].should == ["is already taken"]
|
content_type.errors[:slug].should == ["is already taken"]
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should validate size of content custom fields' do
|
it 'is not valid if there is not at least one field' do
|
||||||
content_type = Factory.build(:content_type)
|
content_type = Factory.build(:content_type)
|
||||||
content_type.should_not be_valid
|
content_type.should_not be_valid
|
||||||
content_type.errors[:content_custom_fields].should == ["is too small (minimum element number is 1)"]
|
content_type.errors[:content_custom_fields].should == ["is too small (minimum element number is 1)"]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
%w(created_at updated_at).each do |_alias|
|
||||||
|
it "does not allow #{_alias} as alias" do
|
||||||
|
content_type = Factory.build(:content_type)
|
||||||
|
field = content_type.content_custom_fields.build :label => 'anything', :kind => 'String', :_alias => _alias
|
||||||
|
field.valid?.should be_false
|
||||||
|
field.errors[:_alias].should == ['is reserved']
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context '#ordered_contents' do
|
context '#ordered_contents' do
|
||||||
|
Loading…
Reference in New Issue
Block a user