merging
This commit is contained in:
commit
0b7cc6ebd2
15
Gemfile
15
Gemfile
@ -6,22 +6,18 @@ gem 'rake', '0.9.2'
|
||||
|
||||
gem 'rails', '~> 3.1.1'
|
||||
|
||||
gem 'devise', :git => 'git://github.com/plataformatec/devise.git'
|
||||
# gem 'devise', '~> 1.4.9' # FIXME: waiting for the new devise gem coming soon
|
||||
gem 'devise', :git => 'git://github.com/plataformatec/devise.git'# FIXME: waiting for the new devise gem coming soon
|
||||
gem 'cancan', '~> 1.6.7'
|
||||
|
||||
gem 'bson', '~> 1.3.1'
|
||||
gem 'mongo', '~> 1.3.1'
|
||||
gem 'bson_ext', '~> 1.3.1'
|
||||
gem 'bson_ext', '~> 1.4.0'
|
||||
gem 'mongoid', '~> 2.3.3'
|
||||
gem 'locomotive_mongoid_acts_as_tree', '0.1.5.7', :require => 'mongoid_acts_as_tree', :path => '../gems/acts_as_tree' # TODO: REPLACE IT
|
||||
gem 'locomotive_mongoid_acts_as_tree', :git => 'git@github.com:locomotivecms/mongoid_acts_as_tree.git'
|
||||
gem 'custom_fields', :git => 'git://github.com/locomotivecms/custom_fields.git'
|
||||
#gem 'custom_fields', '~> 1.1.0.rc1', :path => '../gems/custom_fields'
|
||||
gem 'will_paginate', '~> 3.0.2'
|
||||
gem 'kaminari'
|
||||
|
||||
gem 'haml', '~> 3.1.3'
|
||||
gem 'sass-rails', '~> 3.1.4'
|
||||
gem "compass", :git => 'git://github.com/chriseppstein/compass.git', :branch => 'rails31'
|
||||
gem "compass", :git => 'git://github.com/chriseppstein/compass.git'
|
||||
gem 'coffee-script', '~> 2.2.0'
|
||||
gem 'uglifier', '~> 1.0.4'
|
||||
gem 'jquery-rails', '~> 1.0.16'
|
||||
@ -82,7 +78,6 @@ group :test do
|
||||
gem 'capybara'
|
||||
gem 'database_cleaner'
|
||||
|
||||
gem 'spork', '~> 0.9.0.rc'
|
||||
gem 'launchy'
|
||||
gem 'mocha', '0.9.12' # :git => 'git://github.com/floehopper/mocha.git'
|
||||
end
|
||||
|
47
Gemfile.lock
47
Gemfile.lock
@ -1,9 +1,8 @@
|
||||
GIT
|
||||
remote: git://github.com/chriseppstein/compass.git
|
||||
revision: 22e2458b77519e8eb8463170c1a1fe4bab105f3e
|
||||
branch: rails31
|
||||
revision: ebd758a7999a74611a3d682ba72c661a83f97498
|
||||
specs:
|
||||
compass (0.12.0.alpha.0.22e2458)
|
||||
compass (0.12.alpha.0.ebd758a)
|
||||
chunky_png (~> 1.2)
|
||||
fssm (>= 0.2.7)
|
||||
sass (~> 3.1)
|
||||
@ -27,7 +26,7 @@ GIT
|
||||
|
||||
GIT
|
||||
remote: git://github.com/plataformatec/devise.git
|
||||
revision: e8aabd465216bcb260448056c8ed4580d099a8c9
|
||||
revision: a5aa03b98328d8e1fdb4081a74b3c04ff9593607
|
||||
specs:
|
||||
devise (1.5.0.dev)
|
||||
bcrypt-ruby (~> 3.0)
|
||||
@ -40,8 +39,9 @@ GIT
|
||||
specs:
|
||||
handlebars-rails (0.9.1)
|
||||
|
||||
PATH
|
||||
remote: ../gems/acts_as_tree
|
||||
GIT
|
||||
remote: git@github.com:locomotivecms/mongoid_acts_as_tree.git
|
||||
revision: ca494d22c3d7946385aba1153c017d9c30e9f9d3
|
||||
specs:
|
||||
locomotive_mongoid_acts_as_tree (0.1.5.7)
|
||||
|
||||
@ -87,8 +87,8 @@ GEM
|
||||
autotest (4.4.6)
|
||||
ZenTest (>= 4.4.1)
|
||||
bcrypt-ruby (3.0.1)
|
||||
bson (1.3.1)
|
||||
bson_ext (1.3.1)
|
||||
bson (1.4.0)
|
||||
bson_ext (1.4.0)
|
||||
builder (3.0.0)
|
||||
bushido (0.0.35)
|
||||
highline (>= 1.6.1)
|
||||
@ -103,7 +103,7 @@ GEM
|
||||
rack-test (>= 0.5.4)
|
||||
selenium-webdriver (~> 2.0)
|
||||
xpath (~> 0.1.4)
|
||||
carrierwave (0.5.7)
|
||||
carrierwave (0.5.8)
|
||||
activesupport (~> 3.0)
|
||||
carrierwave-mongoid (0.1.3)
|
||||
carrierwave (>= 0.5.6)
|
||||
@ -120,10 +120,10 @@ GEM
|
||||
execjs
|
||||
coffee-script-source (1.1.3)
|
||||
columnize (0.3.4)
|
||||
cucumber (1.1.2)
|
||||
cucumber (1.1.1)
|
||||
builder (>= 2.1.2)
|
||||
diff-lcs (>= 1.1.2)
|
||||
gherkin (~> 2.6.2)
|
||||
gherkin (~> 2.6.0)
|
||||
json (>= 1.4.6)
|
||||
term-ansicolor (>= 1.0.6)
|
||||
cucumber-rails (1.2.0)
|
||||
@ -178,11 +178,13 @@ GEM
|
||||
multi_json
|
||||
multi_xml
|
||||
i18n (0.6.0)
|
||||
jquery-rails (1.0.17)
|
||||
jquery-rails (1.0.16)
|
||||
railties (~> 3.0)
|
||||
thor (~> 0.14)
|
||||
json (1.5.4)
|
||||
json (1.6.1)
|
||||
json_pure (1.6.1)
|
||||
kaminari (0.12.4)
|
||||
rails (>= 3.0.0)
|
||||
kgio (2.6.0)
|
||||
launchy (2.0.5)
|
||||
addressable (~> 2.2.6)
|
||||
@ -197,8 +199,8 @@ GEM
|
||||
mime-types (1.17.2)
|
||||
mimetype-fu (0.1.2)
|
||||
mocha (0.9.12)
|
||||
mongo (1.3.1)
|
||||
bson (>= 1.3.1)
|
||||
mongo (1.4.0)
|
||||
bson (= 1.4.0)
|
||||
mongoid (2.3.3)
|
||||
activemodel (~> 3.1)
|
||||
mongo (~> 1.3)
|
||||
@ -284,7 +286,7 @@ GEM
|
||||
archive-tar-minitar (>= 0.5.2)
|
||||
rubyzip (0.9.4)
|
||||
sanitize (2.0.3)
|
||||
nokogiri (< 1.6, >= 1.4.4)
|
||||
nokogiri (>= 1.4.4, < 1.6)
|
||||
sass (3.1.10)
|
||||
sass-rails (3.1.4)
|
||||
actionpack (~> 3.1.0)
|
||||
@ -297,11 +299,10 @@ GEM
|
||||
ffi (= 1.0.9)
|
||||
json_pure
|
||||
rubyzip
|
||||
spork (0.9.0.rc9)
|
||||
sprockets (2.0.3)
|
||||
hike (~> 1.2)
|
||||
rack (~> 1.0)
|
||||
tilt (!= 1.3.0, ~> 1.1)
|
||||
tilt (~> 1.1, != 1.3.0)
|
||||
term-ansicolor (1.0.7)
|
||||
thor (0.14.6)
|
||||
tilt (1.3.3)
|
||||
@ -320,7 +321,6 @@ GEM
|
||||
raindrops (~> 0.6)
|
||||
warden (1.1.0)
|
||||
rack (>= 1.0)
|
||||
will_paginate (3.0.2)
|
||||
xpath (0.1.4)
|
||||
nokogiri (~> 1.3)
|
||||
|
||||
@ -333,8 +333,7 @@ DEPENDENCIES
|
||||
ZenTest
|
||||
actionmailer-with-request (~> 0.3.0)
|
||||
autotest
|
||||
bson (~> 1.3.1)
|
||||
bson_ext (~> 1.3.1)
|
||||
bson_ext (~> 1.4.0)
|
||||
bushido (= 0.0.35)
|
||||
cancan (~> 1.6.7)
|
||||
capybara
|
||||
@ -360,13 +359,13 @@ DEPENDENCIES
|
||||
highline (~> 1.6.2)
|
||||
httparty (~> 0.8.1)
|
||||
jquery-rails (~> 1.0.16)
|
||||
kaminari
|
||||
launchy
|
||||
linecache (= 0.43)
|
||||
locomotive_liquid (= 2.2.2)
|
||||
locomotive_mongoid_acts_as_tree (= 0.1.5.7)!
|
||||
locomotive_mongoid_acts_as_tree!
|
||||
mimetype-fu (~> 0.1.2)
|
||||
mocha (= 0.9.12)
|
||||
mongo (~> 1.3.1)
|
||||
mongoid (~> 2.3.3)
|
||||
pickle
|
||||
rack-cache (~> 1.1)
|
||||
@ -382,10 +381,8 @@ DEPENDENCIES
|
||||
rubyzip
|
||||
sanitize (~> 2.0.3)
|
||||
sass-rails (~> 3.1.4)
|
||||
spork (~> 0.9.0.rc)
|
||||
tinymce-rails
|
||||
uglifier (~> 1.0.4)
|
||||
unicorn
|
||||
uploadify-rails!
|
||||
will_paginate (~> 3.0.2)
|
||||
xpath (~> 0.1.4)
|
||||
|
@ -3,8 +3,6 @@ module Locomotive
|
||||
|
||||
sections 'settings', 'site'
|
||||
|
||||
actions :show, :new, :create
|
||||
|
||||
skip_load_and_authorize_resource
|
||||
|
||||
before_filter :authorize_import
|
||||
@ -23,7 +21,8 @@ module Locomotive
|
||||
end
|
||||
end
|
||||
|
||||
def new; end
|
||||
def new
|
||||
end
|
||||
|
||||
def create
|
||||
begin
|
||||
|
@ -3,12 +3,13 @@ module Locomotive
|
||||
|
||||
sections 'settings', 'account'
|
||||
|
||||
actions :edit, :update
|
||||
|
||||
respond_to :json, :only => :update
|
||||
|
||||
skip_load_and_authorize_resource
|
||||
|
||||
def edit
|
||||
end
|
||||
|
||||
def update
|
||||
update! { edit_my_account_url }
|
||||
end
|
||||
|
@ -1,8 +1,6 @@
|
||||
module Locomotive
|
||||
class SitesController < BaseController
|
||||
|
||||
defaults :instance_name => 'site'
|
||||
|
||||
sections 'settings'
|
||||
|
||||
def create
|
||||
|
@ -32,7 +32,7 @@ module Locomotive
|
||||
can :touch, [Page, ThemeAsset]
|
||||
can :sort, Page
|
||||
|
||||
can :manage, [ContentInstance, Asset]
|
||||
can :manage, [ContentInstance, ContentAsset]
|
||||
|
||||
can :touch, Site do |site|
|
||||
site == @site
|
||||
@ -50,7 +50,7 @@ module Locomotive
|
||||
|
||||
can :manage, ThemeAsset
|
||||
|
||||
can :manage, Asset
|
||||
can :manage, ContentAsset
|
||||
|
||||
can :manage, Site do |site|
|
||||
site == @site
|
||||
|
@ -27,7 +27,7 @@ module Locomotive
|
||||
end
|
||||
|
||||
def reset_switch_site_token!
|
||||
self.switch_site_token = ActiveSupport::SecureRandom.base64(8).gsub("/", "_").gsub(/=+$/, "")
|
||||
self.switch_site_token = SecureRandom.base64(8).gsub("/", "_").gsub(/=+$/, "")
|
||||
self.save
|
||||
end
|
||||
|
||||
@ -37,7 +37,7 @@ module Locomotive
|
||||
end
|
||||
|
||||
def self.find_using_switch_site_token!(token, age = 1.minute)
|
||||
self.find_using_switch_site_token(token, age) || raise(Mongoid::Errors::DocumentNotFound.new(self, token))
|
||||
self.find_using_switch_site_token(token, age) || raise(::Mongoid::Errors::DocumentNotFound.new(self, token))
|
||||
end
|
||||
|
||||
def devise_mailer
|
||||
|
@ -5,7 +5,11 @@ module Locomotive
|
||||
include ::Mongoid::Timestamps
|
||||
|
||||
## extensions ##
|
||||
include CustomFields::ProxyClassEnabler
|
||||
#
|
||||
# FIXME: I cannot find the module below defined in custom fields or the
|
||||
# locomotive CMS engine. Please uncomment when the module is available
|
||||
#
|
||||
# include CustomFields::ProxyClassEnabler
|
||||
include Extensions::Shared::Seo
|
||||
|
||||
## fields (dynamic fields) ##
|
||||
|
@ -1 +0,0 @@
|
||||
# require 'will_paginate/array'
|
8
features/engine/has_many.feature
Normal file
8
features/engine/has_many.feature
Normal file
@ -0,0 +1,8 @@
|
||||
Feature: Has Many Association
|
||||
As a designer
|
||||
In order to make dealing with models easier
|
||||
I want to be able to display other models that have a has many association
|
||||
|
||||
Scenario: Paginating a has many association
|
||||
Given I have a site set up
|
||||
Then I should be able to view a paginaed list of a has many association
|
8
features/engine/pagination.feature
Normal file
8
features/engine/pagination.feature
Normal file
@ -0,0 +1,8 @@
|
||||
Feature: Pagination
|
||||
As a designer
|
||||
In order to display a sensible amount of items per page
|
||||
I want to be able to paginate through models
|
||||
|
||||
Scenario: Paginating through a model
|
||||
Given I have a site set up
|
||||
Then I should be able to display paginated models
|
@ -66,4 +66,3 @@ end
|
||||
Then %r{^I should see once the "([^"]*)" field$} do |field|
|
||||
page.should have_css("#content_#{field.underscore.downcase}_input", :count => 1)
|
||||
end
|
||||
|
||||
|
61
features/step_definitions/has_many_steps.rb
Normal file
61
features/step_definitions/has_many_steps.rb
Normal file
@ -0,0 +1,61 @@
|
||||
Given %r{^I have an? "([^"]*)" model which has many "([^"]*)"$} do |parent_model, child_model|
|
||||
@parent_model = FactoryGirl.build(:content_type, :site => @site, :name => parent_model).tap do |ct|
|
||||
ct.content_custom_fields.build :label => 'Body', :kind => 'string', :required => false
|
||||
ct.save!
|
||||
end
|
||||
@child_model = FactoryGirl.build(:content_type, :site => @site, :name => child_model).tap do |ct|
|
||||
ct.content_custom_fields.build :label => 'Body', :kind => 'string', :required => false
|
||||
ct.content_custom_fields.build :label => parent_model.singularize, :kind => 'has_one', :required => false, :target => parent_model
|
||||
ct.save!
|
||||
end
|
||||
|
||||
@parent_model.content_custom_fields.build({
|
||||
:label => child_model,
|
||||
:kind => 'has_many',
|
||||
:target => @child_model.content_klass.to_s,
|
||||
:reverse_lookup => @child_model.content_klass.custom_field_alias_to_name(parent_model.downcase.singularize)
|
||||
})
|
||||
end
|
||||
|
||||
Then /^I should be able to view a paginaed list of a has many association$/ do
|
||||
# Create models
|
||||
Given %{I have an "Articles" model which has many "Comments"}
|
||||
|
||||
# Create contents
|
||||
article = @parent_model.contents.create!(:slug => 'parent', :body => 'Parent')
|
||||
@child_model.contents.create!(:slug => 'one', :body => 'One', :custom_field_2 => article.id.to_s)
|
||||
@child_model.contents.create!(:slug => 'two', :body => 'Two', :custom_field_2 => article.id.to_s)
|
||||
@child_model.contents.create!(:slug => 'three', :body => 'Three', :custom_field_2 => article.id.to_s)
|
||||
|
||||
@child_model.contents.each do |comment|
|
||||
article.comments << comment
|
||||
end
|
||||
|
||||
# Create a page
|
||||
raw_template = %{
|
||||
{% for article in contents.articles %}
|
||||
{% paginate article.comments by 2 %}
|
||||
{% for comment in paginate.collection %}
|
||||
{{ comment.body }}
|
||||
{% endfor %}
|
||||
{{ paginate | default_pagination }}
|
||||
{% endpaginate %}
|
||||
{% endfor %}
|
||||
}
|
||||
|
||||
# Create a page
|
||||
FactoryGirl.create(:page, :site => @site, :slug => 'hello', :raw_template => raw_template)
|
||||
|
||||
# The page should have the first two comments
|
||||
visit '/hello'
|
||||
page.should have_content 'One'
|
||||
page.should have_content 'Two'
|
||||
page.should_not have_content 'Three'
|
||||
|
||||
|
||||
# The second page should have the last comment
|
||||
click_link '2'
|
||||
page.should_not have_content 'One'
|
||||
page.should_not have_content 'Two'
|
||||
page.should have_content 'Three'
|
||||
end
|
35
features/step_definitions/pagination_steps.rb
Normal file
35
features/step_definitions/pagination_steps.rb
Normal file
@ -0,0 +1,35 @@
|
||||
Then /^I should be able to display paginated models$/ do
|
||||
# Create our article model and three articles
|
||||
@article_model = FactoryGirl.build(:content_type, :site => @site, :name => 'Articles').tap do |ct|
|
||||
ct.content_custom_fields.build :label => 'Body', :kind => 'string', :required => false
|
||||
ct.save!
|
||||
end
|
||||
|
||||
%w(First Second Third).each do |body|
|
||||
@article_model.contents.create!(:body => body)
|
||||
end
|
||||
|
||||
# Create a page with template
|
||||
raw_template = %{
|
||||
{% paginate contents.articles by 2 %}
|
||||
{% for article in paginate.collection %}
|
||||
{{ article.body }}
|
||||
{% endfor %}
|
||||
{{ paginate | default_pagination }}
|
||||
{% endpaginate %}
|
||||
}
|
||||
FactoryGirl.create(:page, :site => @site, :slug => 'hello', :raw_template => raw_template)
|
||||
|
||||
# The page should have the first two articles
|
||||
visit '/hello'
|
||||
page.should have_content 'First'
|
||||
page.should have_content 'Second'
|
||||
page.should_not have_content 'Third'
|
||||
|
||||
# The second page should have the last article
|
||||
click_link '2'
|
||||
page.should_not have_content 'First'
|
||||
page.should_not have_content 'Second'
|
||||
page.should have_content 'Third'
|
||||
end
|
||||
|
@ -13,6 +13,10 @@ Given /^I have the site: "([^"]*)" set up(?: with #{capture_fields})?$/ do |site
|
||||
@admin.should_not be_nil
|
||||
end
|
||||
|
||||
Given /^I have a site set up$/ do
|
||||
Given %{I have the site: "test site" set up}
|
||||
end
|
||||
|
||||
Given /^I have a designer and an author$/ do
|
||||
FactoryGirl.create(:designer, :site => Site.first)
|
||||
FactoryGirl.create(:author, :site => Site.first)
|
||||
|
@ -9,6 +9,7 @@ require 'locomotive/logger'
|
||||
|
||||
require 'locomotive/formtastic'
|
||||
require 'locomotive/dragonfly'
|
||||
require 'locomotive/kaminari'
|
||||
require 'locomotive/liquid'
|
||||
require 'locomotive/mongoid'
|
||||
require 'locomotive/carrierwave'
|
||||
|
@ -2,7 +2,7 @@ require 'devise'
|
||||
require 'mongoid'
|
||||
require 'mongoid/railtie'
|
||||
require 'mongoid_acts_as_tree'
|
||||
require 'will_paginate'
|
||||
require 'kaminari'
|
||||
require 'haml'
|
||||
require 'liquid'
|
||||
require 'formtastic'
|
||||
|
17
lib/locomotive/kaminari.rb
Normal file
17
lib/locomotive/kaminari.rb
Normal file
@ -0,0 +1,17 @@
|
||||
require 'kaminari'
|
||||
|
||||
module Kaminari
|
||||
class PaginatableArray < Array
|
||||
def to_liquid(options = {})
|
||||
{
|
||||
:collection => to_a,
|
||||
:current_page => current_page,
|
||||
:previous_page => first_page? ? nil : current_page - 1,
|
||||
:next_page => last_page? ? nil : current_page + 1,
|
||||
:total_entries => total_count,
|
||||
:total_pages => num_pages,
|
||||
:per_page => limit_value
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
@ -64,16 +64,7 @@ module Locomotive
|
||||
protected
|
||||
|
||||
def paginate(options = {})
|
||||
@collection = self.collection.paginate(options)
|
||||
{
|
||||
:collection => @collection,
|
||||
:current_page => @collection.current_page,
|
||||
:previous_page => @collection.previous_page,
|
||||
:next_page => @collection.next_page,
|
||||
:total_entries => @collection.total_entries,
|
||||
:total_pages => @collection.total_pages,
|
||||
:per_page => @collection.per_page
|
||||
}
|
||||
@collection = Kaminari.paginate_array(self.collection).page(options[:page]).per(options[:per_page])
|
||||
end
|
||||
|
||||
def collection
|
||||
|
@ -36,13 +36,16 @@ module Locomotive
|
||||
|
||||
raise ::Liquid::ArgumentError.new("Cannot paginate array '#{@collection_name}'. Not found.") if collection.nil?
|
||||
|
||||
pagination = collection.send(:paginate, {
|
||||
:page => context['current_page'],
|
||||
:per_page => @per_page }).stringify_keys
|
||||
|
||||
if collection.is_a? Array
|
||||
pagination = Kaminari.paginate_array(collection).page(context['current_page']).per(@per_page).to_liquid.stringify_keys
|
||||
else
|
||||
pagination = collection.send(:paginate, {
|
||||
:page => context['current_page'],
|
||||
:per_page => @per_page }).to_liquid.stringify_keys
|
||||
end
|
||||
page_count, current_page = pagination['total_pages'], pagination['current_page']
|
||||
|
||||
path = context.registers[:page].fullpath
|
||||
path = context['path']
|
||||
|
||||
pagination['previous'] = link(I18n.t('pagination.previous'), current_page - 1, path) if pagination['previous_page']
|
||||
pagination['next'] = link(I18n.t('pagination.next'), current_page + 1, path) if pagination['next_page']
|
||||
|
@ -65,6 +65,7 @@ module Locomotive
|
||||
'contents' => Locomotive::Liquid::Drops::Contents.new,
|
||||
'current_page' => self.params[:page],
|
||||
'params' => self.params,
|
||||
'path' => request.path,
|
||||
'url' => request.url,
|
||||
'now' => Time.now.utc,
|
||||
'today' => Date.today
|
||||
|
@ -39,7 +39,7 @@ module Locomotive
|
||||
end
|
||||
|
||||
def render_no_site_error
|
||||
render :template => '/admin/errors/no_site', :layout => false
|
||||
render :template => '/admin/errors/no_site', :layout => false, :status => :not_found
|
||||
end
|
||||
|
||||
def validate_site_membership
|
||||
|
@ -21,10 +21,14 @@ Gem::Specification.new do |s|
|
||||
s.add_dependency 'warden'
|
||||
s.add_dependency 'devise', '1.3.4'
|
||||
s.add_dependency 'devise_bushido_authenticatable', '1.0.0.alpha10'
|
||||
|
||||
s.add_dependency 'mongo', '~> 1.3.1'
|
||||
s.add_dependency 'bson', '~> 1.3.1'
|
||||
s.add_dependency 'bson_ext', '~> 1.3.1'
|
||||
s.add_dependency 'mongoid', '~> 2.0.2'
|
||||
s.add_dependency 'bson_ext', '~> 1.4.0'
|
||||
|
||||
s.add_dependency 'locomotive_mongoid_acts_as_tree', '0.1.5.7'
|
||||
s.add_dependency 'will_paginate', '~> 3.0.0'
|
||||
s.add_dependency 'kaminari'
|
||||
|
||||
s.add_dependency 'haml', '3.1.2'
|
||||
s.add_dependency 'sass', '3.1.2'
|
||||
|
@ -3,9 +3,6 @@ require 'spec_helper'
|
||||
describe Locomotive::Liquid::Drops::Contents do
|
||||
|
||||
before(:each) do
|
||||
# Reload the file (needed for spork)
|
||||
load File.join(Rails.root, 'lib', 'locomotive', 'liquid', 'drops', 'contents.rb')
|
||||
|
||||
@site = FactoryGirl.build(:site)
|
||||
@content_type = FactoryGirl.build(:content_type, :site => @site, :slug => 'projects')
|
||||
end
|
||||
|
@ -52,7 +52,8 @@ describe Locomotive::Liquid::Tags::Paginate do
|
||||
{},
|
||||
{
|
||||
'projects' => options.has_key?(:collection) ? options[:collection] : PaginatedCollection.new(['Ruby on Rails', 'jQuery', 'mongodb', 'Liquid', 'sqlite3']),
|
||||
'current_page' => options[:page] || 1
|
||||
'current_page' => options[:page] || 1,
|
||||
'path' => '/'
|
||||
}, {
|
||||
:page => FactoryGirl.build(:page)
|
||||
}, true)
|
||||
|
@ -147,11 +147,19 @@ describe Locomotive::Routing::SiteDispatcher do
|
||||
|
||||
describe '#render_no_site_error' do
|
||||
|
||||
it 'renders the no site template with no layout' do
|
||||
@controller.expects(:render).with(:template => '/admin/errors/no_site', :layout => false)
|
||||
before :each do
|
||||
@controller.instance_variable_set('@_response', ActionDispatch::Response.new)
|
||||
@controller.send(:render_no_site_error)
|
||||
end
|
||||
|
||||
it 'should have a no site error message' do
|
||||
@controller.response.body.should include 'No Site'
|
||||
end
|
||||
|
||||
it 'should have a 404 not found status' do
|
||||
@controller.response.should be_not_found
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
describe '#validate_site_membership' do
|
||||
|
@ -1,6 +1,6 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe Ability do
|
||||
describe Locomotive::Ability do
|
||||
|
||||
before :each do
|
||||
@site = FactoryGirl.create(:site)
|
||||
@ -13,7 +13,7 @@ describe Ability do
|
||||
|
||||
context 'pages' do
|
||||
|
||||
subject { Page.new }
|
||||
subject { Locomotive::Page.new }
|
||||
|
||||
context 'management' do
|
||||
it 'should allow management of pages from (admin, designer, author)' do
|
||||
@ -33,7 +33,7 @@ describe Ability do
|
||||
|
||||
context 'content instance' do
|
||||
|
||||
subject { ContentInstance.new }
|
||||
subject { Locomotive::ContentInstance.new }
|
||||
|
||||
context 'management' do
|
||||
it 'should allow management of pages from (admin, designer, author)' do
|
||||
@ -47,7 +47,7 @@ describe Ability do
|
||||
|
||||
context 'content type' do
|
||||
|
||||
subject { ContentType.new }
|
||||
subject { Locomotive::ContentType.new }
|
||||
|
||||
context 'management' do
|
||||
it 'should allow management of pages from (admin, designer)' do
|
||||
@ -67,7 +67,7 @@ describe Ability do
|
||||
|
||||
context 'theme assets' do
|
||||
|
||||
subject { ThemeAsset.new }
|
||||
subject { Locomotive::ThemeAsset.new }
|
||||
|
||||
context 'management' do
|
||||
it 'should allow management of pages from (admin, designer)' do
|
||||
@ -87,7 +87,7 @@ describe Ability do
|
||||
|
||||
context 'site' do
|
||||
|
||||
subject { Site.new }
|
||||
subject { Locomotive::Site.new }
|
||||
|
||||
context 'management' do
|
||||
it 'should allow management of pages from (admin)' do
|
||||
@ -115,7 +115,7 @@ describe Ability do
|
||||
|
||||
context 'membership' do
|
||||
|
||||
subject { Membership.new }
|
||||
subject { Locomotive::Membership.new }
|
||||
|
||||
context 'management' do
|
||||
it 'should allow management of memberships from (admin, designer)' do
|
@ -1,6 +1,6 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe Account do
|
||||
describe Locomotive::Account do
|
||||
|
||||
it 'should have a valid factory' do
|
||||
FactoryGirl.build(:account).should be_valid
|
||||
@ -17,7 +17,7 @@ describe Account do
|
||||
end
|
||||
|
||||
it "should have a default locale" do
|
||||
account = Account.new
|
||||
account = Locomotive::Account.new
|
||||
account.locale.should == 'en'
|
||||
end
|
||||
|
||||
@ -31,8 +31,8 @@ describe Account do
|
||||
|
||||
it 'should own many sites' do
|
||||
account = FactoryGirl.create(:account)
|
||||
site_1 = FactoryGirl.create(:site, :memberships => [Membership.new(:account => account)])
|
||||
site_2 = FactoryGirl.create(:site, :subdomain => 'foo', :memberships => [Membership.new(:account => account)])
|
||||
site_1 = FactoryGirl.create(:site, :memberships => [Locomotive::Membership.new(:account => account)])
|
||||
site_2 = FactoryGirl.create(:site, :memberships => [Locomotive::Membership.new(:account => account)])
|
||||
account.reload.sites.to_a.should == [site_1, site_2]
|
||||
end
|
||||
|
||||
@ -40,14 +40,14 @@ describe Account do
|
||||
|
||||
before(:each) do
|
||||
@account = FactoryGirl.build(:account)
|
||||
@site_1 = FactoryGirl.build(:site, :subdomain => 'foo', :memberships => [FactoryGirl.build(:membership, :account => @account)])
|
||||
@site_2 = FactoryGirl.build(:site, :subdomain => 'bar', :memberships => [FactoryGirl.build(:membership, :account => @account)])
|
||||
@site_1 = FactoryGirl.build(:site,:memberships => [FactoryGirl.build(:membership, :account => @account)])
|
||||
@site_2 = FactoryGirl.build(:site,:memberships => [FactoryGirl.build(:membership, :account => @account)])
|
||||
@account.stubs(:sites).returns([@site_1, @site_2])
|
||||
Site.any_instance.stubs(:save).returns(true)
|
||||
Locomotive::Site.any_instance.stubs(:save).returns(true)
|
||||
end
|
||||
|
||||
it 'should also delete memberships' do
|
||||
Site.any_instance.stubs(:admin_memberships).returns(['junk', 'dirt'])
|
||||
Locomotive::Site.any_instance.stubs(:admin_memberships).returns(['junk', 'dirt'])
|
||||
@site_1.memberships.first.expects(:destroy)
|
||||
@site_2.memberships.first.expects(:destroy)
|
||||
@account.destroy
|
||||
@ -78,13 +78,13 @@ describe Account do
|
||||
context 'retrieving an account' do
|
||||
|
||||
it 'does not find it with an empty token' do
|
||||
Account.find_using_switch_site_token(nil).should be_nil
|
||||
Locomotive::Account.find_using_switch_site_token(nil).should be_nil
|
||||
end
|
||||
|
||||
it 'raises an exception if not found' do
|
||||
lambda {
|
||||
Account.find_using_switch_site_token!(nil)
|
||||
}.should raise_error(Mongoid::Errors::DocumentNotFound)
|
||||
expect {
|
||||
Locomotive::Account.find_using_switch_site_token!(nil)
|
||||
}.to raise_error Mongoid::Errors::DocumentNotFound
|
||||
end
|
||||
|
||||
end
|
@ -2,12 +2,12 @@
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
describe Asset do
|
||||
describe Locomotive::ContentAsset do
|
||||
|
||||
describe 'attaching a file' do
|
||||
|
||||
before(:each) do
|
||||
Asset.any_instance.stubs(:site_id).returns('test')
|
||||
Locomotive::ContentAsset.any_instance.stubs(:site_id).returns('test')
|
||||
@asset = FactoryGirl.build(:asset)
|
||||
end
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
describe ContentInstance do
|
||||
describe Locomotive::ContentInstance do
|
||||
|
||||
before(:each) do
|
||||
Site.any_instance.stubs(:create_default_pages!).returns(true)
|
@ -1,6 +1,6 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe ContentType do
|
||||
describe Locomotive::ContentType do
|
||||
|
||||
before(:each) do
|
||||
Site.any_instance.stubs(:create_default_pages!).returns(true)
|
@ -1,6 +1,6 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe EditableElement do
|
||||
describe Locomotive::EditableElement do
|
||||
|
||||
before(:each) do
|
||||
@site = FactoryGirl.create(:site)
|
@ -1,6 +1,6 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe Membership do
|
||||
describe Locomotive::Membership do
|
||||
|
||||
it 'should have a valid factory' do
|
||||
FactoryGirl.build(:membership, :account => FactoryGirl.build(:account)).should be_valid
|
@ -2,7 +2,7 @@
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
describe Page do
|
||||
describe Locomotive::Page do
|
||||
|
||||
before(:each) do
|
||||
Site.any_instance.stubs(:create_default_pages!).returns(true)
|
@ -1,6 +1,6 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe Site do
|
||||
describe Locomotive::Site do
|
||||
|
||||
it 'should have a valid factory' do
|
||||
FactoryGirl.build(:site).should be_valid
|
@ -1,6 +1,6 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe Snippet do
|
||||
describe Locomotive::Snippet do
|
||||
|
||||
it 'should have a valid factory' do
|
||||
FactoryGirl.build(:snippet).should be_valid
|
@ -2,7 +2,7 @@
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
describe ThemeAsset do
|
||||
describe Locomotive::ThemeAsset do
|
||||
|
||||
describe 'attaching a file' do
|
||||
|
@ -1,93 +1,41 @@
|
||||
# Note: if segmentation fault with spork / imagemagick on mac os x, take a look at:
|
||||
# http://stackoverflow.com/questions/2838307/why-is-this-rmagick-call-generating-a-segmentation-fault
|
||||
ENV["RAILS_ENV"] ||= 'test'
|
||||
|
||||
require 'rubygems'
|
||||
require 'spork'
|
||||
require 'rails/mongoid'
|
||||
require File.join(File.dirname(__FILE__), 'dummy', 'config', 'environment.rb')
|
||||
require 'rspec/rails'
|
||||
require 'factory_girl'
|
||||
|
||||
# figure out where we are being loaded from
|
||||
if $LOADED_FEATURES.grep(/spec\/spec_helper\.rb/).any?
|
||||
begin
|
||||
raise "foo"
|
||||
rescue => e
|
||||
puts <<-MSG
|
||||
===================================================
|
||||
It looks like spec_helper.rb has been loaded
|
||||
multiple times. Normalize the require to:
|
||||
# Requires supporting ruby files with custom matchers and macros, etc,
|
||||
# in spec/support/ and its subdirectories.
|
||||
Dir[File.join(File.dirname(__FILE__), 'support', '**', '*.rb')].each { |f| require f }
|
||||
|
||||
require "spec/spec_helper"
|
||||
Locomotive.configure_for_test
|
||||
|
||||
Things like File.join and File.expand_path will
|
||||
cause it to be loaded multiple times.
|
||||
RSpec.configure do |config|
|
||||
|
||||
Loaded this time from:
|
||||
config.include(Locomotive::RSpec::Matchers)
|
||||
|
||||
#{e.backtrace.join("\n ")}
|
||||
===================================================
|
||||
MSG
|
||||
config.mock_with :mocha
|
||||
|
||||
config.before(:each) do
|
||||
Locomotive.config.heroku = false
|
||||
end
|
||||
end
|
||||
|
||||
require 'database_cleaner'
|
||||
config.before(:suite) do
|
||||
DatabaseCleaner.strategy = :truncation
|
||||
DatabaseCleaner.orm = 'mongoid'
|
||||
end
|
||||
|
||||
Spork.prefork do
|
||||
# Loading more in this block will cause your tests to run faster. However,
|
||||
# if you change any configuration or code from libraries loaded here, you'll
|
||||
# need to restart spork for it take effect.
|
||||
|
||||
# This file is copied to spec/ when you run 'rails generate rspec:install'
|
||||
ENV["RAILS_ENV"] ||= 'test'
|
||||
|
||||
# Avoid preloading models
|
||||
require 'rails/mongoid'
|
||||
Spork.trap_class_method(Rails::Mongoid, :load_models)
|
||||
|
||||
require File.expand_path('../../config/environment', __FILE__)
|
||||
|
||||
require 'rspec/rails'
|
||||
|
||||
require 'factory_girl'
|
||||
Spork.trap_class_method(FactoryGirl, :find_definitions)
|
||||
|
||||
# Requires supporting ruby files with custom matchers and macros, etc,
|
||||
# in spec/support/ and its subdirectories.
|
||||
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
|
||||
|
||||
Locomotive.configure_for_test
|
||||
|
||||
RSpec.configure do |config|
|
||||
|
||||
config.include(Locomotive::RSpec::Matchers)
|
||||
|
||||
config.mock_with :mocha
|
||||
|
||||
config.before(:each) do
|
||||
Locomotive.config.heroku = false
|
||||
end
|
||||
|
||||
require 'database_cleaner'
|
||||
config.before(:suite) do
|
||||
DatabaseCleaner.strategy = :truncation
|
||||
DatabaseCleaner.orm = 'mongoid'
|
||||
end
|
||||
|
||||
config.before(:each) do
|
||||
if self.described_class != Locomotive::Import::Job
|
||||
DatabaseCleaner.clean
|
||||
end
|
||||
end
|
||||
|
||||
config.before(:all) do
|
||||
if self.described_class == Locomotive::Import::Job
|
||||
DatabaseCleaner.clean
|
||||
end
|
||||
config.before(:each) do
|
||||
if self.described_class != Locomotive::Import::Job
|
||||
DatabaseCleaner.clean
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
Spork.each_run do
|
||||
# This code will be run each time you run your specs.
|
||||
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
|
||||
|
||||
# loading ruby file directly breaks the tests
|
||||
# Dir[Rails.root.join('app/models/*.rb')].each { |f| load f }
|
||||
config.before(:all) do
|
||||
if self.described_class == Locomotive::Import::Job
|
||||
DatabaseCleaner.clean
|
||||
end
|
||||
end
|
||||
end
|
@ -1,22 +1,22 @@
|
||||
FactoryGirl.define do
|
||||
|
||||
## Site ##
|
||||
factory :site do
|
||||
factory :site, :class => Locomotive::Site do
|
||||
name 'Acme Website'
|
||||
subdomain 'acme'
|
||||
# subdomain 'acme'
|
||||
created_at Time.now
|
||||
|
||||
factory "test site" do
|
||||
name 'Locomotive test website'
|
||||
subdomain 'test'
|
||||
# subdomain 'test'
|
||||
|
||||
after_build do |site_test|
|
||||
site_test.memberships.build :account => Account.where(:name => "Admin").first || Factory("admin user"), :role => 'admin'
|
||||
site_test.memberships.build :account => Locomotive::Account.where(:name => "Admin").first || Factory("admin user"), :role => 'admin'
|
||||
end
|
||||
|
||||
factory "another site" do
|
||||
name "Locomotive test website #2"
|
||||
subdomain "test2"
|
||||
# subdomain "test2"
|
||||
end
|
||||
|
||||
end
|
||||
@ -41,7 +41,7 @@ FactoryGirl.define do
|
||||
end
|
||||
|
||||
# Accounts ##
|
||||
factory :account do
|
||||
factory :account, :class => Locomotive::Account do
|
||||
name 'Bart Simpson'
|
||||
email 'bart@simpson.net'
|
||||
password 'easyone'
|
||||
@ -74,7 +74,7 @@ FactoryGirl.define do
|
||||
end
|
||||
|
||||
## Memberships ##
|
||||
factory :membership do
|
||||
factory :membership, :class => Locomotive::Membership do
|
||||
role 'admin'
|
||||
account { Account.where(:name => "Bart Simpson").first || Factory('admin user') }
|
||||
|
||||
@ -96,46 +96,49 @@ FactoryGirl.define do
|
||||
end
|
||||
|
||||
## Pages ##
|
||||
factory :page do
|
||||
factory :page, :class => Locomotive::Page do
|
||||
title 'Home page'
|
||||
slug 'index'
|
||||
published true
|
||||
site { Site.where(:subdomain => "acme").first || Factory(:site) }
|
||||
site { Locomotive::Site.where(:subdomain => "acme").first || Factory(:site) }
|
||||
|
||||
factory :sub_page do
|
||||
title 'Subpage'
|
||||
slug 'subpage'
|
||||
published true
|
||||
site { Site.where(:subdomain => "acme").first || Factory(:site) }
|
||||
parent { Page.where(:slug => "index").first || Factory(:page) }
|
||||
site { Locomotive::Site.where(:subdomain => "acme").first || Factory(:site) }
|
||||
parent { Locomotive::Page.where(:slug => "index").first || Factory(:page) }
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
## Snippets ##
|
||||
factory :snippet do
|
||||
factory :snippet, :class => Locomotive::Snippet do
|
||||
name 'My website title'
|
||||
slug 'header'
|
||||
template %{<title>Acme</title>}
|
||||
site { Site.where(:subdomain => "acme").first || Factory(:site) }
|
||||
site { Locomotive::Site.where(:subdomain => "acme").first || Factory(:site) }
|
||||
end
|
||||
|
||||
|
||||
## Assets ##
|
||||
factory :asset do
|
||||
site { Site.where(:subdomain => "acme").first || Factory(:site) }
|
||||
factory :asset, :class => Locomotive::ContentAsset do
|
||||
site { Locomotive::Site.where(:subdomain => "acme").first || Factory(:site) }
|
||||
end
|
||||
|
||||
|
||||
## Theme assets ##
|
||||
factory :theme_asset do
|
||||
site { Site.where(:subdomain => "acme").first || Factory(:site) }
|
||||
factory :theme_asset, :class => Locomotive::ThemeAsset do
|
||||
site { Locomotive::Site.where(:subdomain => "acme").first || Factory(:site) }
|
||||
end
|
||||
|
||||
## Content types ##
|
||||
factory :content_type do
|
||||
factory :content_type, :class => Locomotive::ContentType do
|
||||
name 'My project'
|
||||
site { Site.where(:subdomain => "acme").first || Factory(:site) }
|
||||
site { Locomotive::Site.where(:subdomain => "acme").first || Factory(:site) }
|
||||
end
|
||||
|
||||
factory :content_instance, :class => Locomotive::ContentInstance do
|
||||
end
|
||||
|
||||
end
|
@ -29,8 +29,8 @@ def Locomotive.configure_for_test(force = false)
|
||||
|
||||
Locomotive.define_subdomain_and_domains_options
|
||||
|
||||
Object.send(:remove_const, 'Site') if Object.const_defined?('Site')
|
||||
load 'site.rb'
|
||||
Object.send(:remove_const, 'Locomotive::Site') if Object.const_defined?('Locomotive::Site')
|
||||
load 'locomotive/site.rb'
|
||||
|
||||
FactoryGirl.factories.clear
|
||||
load File.join(Rails.root, 'spec', 'factories.rb')
|
||||
|
Loading…
Reference in New Issue
Block a user