diff --git a/Gemfile b/Gemfile
index 86dcd2aa..c3945388 100644
--- a/Gemfile
+++ b/Gemfile
@@ -6,7 +6,7 @@ gem 'rails', '3.0.0.rc'
gem 'liquid', :git => 'git://github.com/locomotivecms/liquid.git', :ref => 'a41213c77cbc81dab87d'
gem 'bson_ext', '>= 1.0.1'
-gem 'mongoid', :git => 'git://github.com/durran/mongoid.git', :ref => 'e387a0d1dc74da057472'
+gem 'mongoid', '2.0.0.beta.16'
gem 'mongoid_acts_as_tree', '0.1.5'
gem 'mongo_session_store', '2.0.0.pre'
gem 'warden'
@@ -22,6 +22,7 @@ gem 'heroku'
gem 'httparty', '0.6.1'
gem 'RedCloth'
gem 'inherited_resources', '1.1.2'
+gem 'custom_fields', :git => 'git://github.com/locomotivecms/custom_fields.git'
gem 'jeweler'
# Development environment
diff --git a/Gemfile.lock b/Gemfile.lock
index 1643bee2..8bbc3387 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,15 +1,3 @@
-GIT
- remote: git://github.com/durran/mongoid.git
- revision: e387a0d
- ref: e387a0d1dc74da057472
- specs:
- mongoid (2.0.0.beta.15)
- activemodel (= 3.0.0.rc)
- bson (= 1.0.4)
- mongo (= 1.0.6)
- tzinfo (= 0.3.22)
- will_paginate (~> 3.0.pre)
-
GIT
remote: git://github.com/floehopper/mocha.git
revision: d1715ff
@@ -17,6 +5,12 @@ GIT
mocha (0.9.8.20090918115329)
rake
+GIT
+ remote: git://github.com/locomotivecms/custom_fields.git
+ revision: d393307
+ specs:
+ custom_fields (0.0.0.1)
+
GIT
remote: git://github.com/locomotivecms/liquid.git
revision: a41213c
@@ -152,10 +146,16 @@ GEM
treetop (>= 1.4.5)
mime-types (1.16)
mimetype-fu (0.1.2)
- mongo (1.0.6)
+ mongo (1.0.7)
bson (>= 1.0.4)
mongo_session_store (2.0.0.pre)
actionpack (~> 3.0)
+ mongoid (2.0.0.beta.16)
+ activemodel (= 3.0.0.rc)
+ bson (= 1.0.4)
+ mongo (= 1.0.7)
+ tzinfo (= 0.3.22)
+ will_paginate (~> 3.0.pre)
mongoid_acts_as_tree (0.1.5)
bson (>= 0.20.1)
mongoid (<= 2.0.0)
@@ -246,6 +246,7 @@ DEPENDENCIES
cgi_multipart_eof_fix
cucumber
cucumber-rails
+ custom_fields!
database_cleaner
devise!
factory_girl_rails
@@ -262,7 +263,7 @@ DEPENDENCIES
mimetype-fu
mocha!
mongo_session_store (= 2.0.0.pre)
- mongoid!
+ mongoid (= 2.0.0.beta.16)
mongoid_acts_as_tree (= 0.1.5)
mongrel
pickle!
diff --git a/app/controllers/admin/layouts_controller.rb b/app/controllers/admin/layouts_controller.rb
deleted file mode 100644
index de79835b..00000000
--- a/app/controllers/admin/layouts_controller.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-module Admin
- class LayoutsController < BaseController
-
- sections 'settings'
-
- respond_to :json, :only => :update
-
- def index
- @layouts = current_site.layouts.order_by([[:name, :asc]])
- end
-
- end
-end
diff --git a/app/controllers/admin/page_parts_controller.rb b/app/controllers/admin/page_parts_controller.rb
index d2bec19b..927ba150 100644
--- a/app/controllers/admin/page_parts_controller.rb
+++ b/app/controllers/admin/page_parts_controller.rb
@@ -1,15 +1,16 @@
-module Admin
- class PagePartsController < BaseController
-
- layout nil
-
- respond_to :json
-
- def index
- parts = current_site.layouts.find(params[:layout_id]).parts
-
- respond_with parts.collect(&:attributes)
- end
-
- end
-end
+# @DEPRECATED
+# module Admin
+# class PagePartsController < BaseController
+#
+# layout nil
+#
+# respond_to :json
+#
+# def index
+# parts = current_site.layouts.find(params[:layout_id]).parts
+#
+# respond_with parts.collect(&:attributes)
+# end
+#
+# end
+# end
diff --git a/app/models/extensions/page/parts.rb b/app/models/extensions/page/parts.rb
index ade0d1c0..422ec555 100644
--- a/app/models/extensions/page/parts.rb
+++ b/app/models/extensions/page/parts.rb
@@ -1,58 +1,59 @@
-module Models
- module Extensions
- module Page
- module Parts
-
- extend ActiveSupport::Concern
-
- included do
- embeds_many :parts, :class_name => 'PagePart'
-
- before_validation do |p|
- if p.parts.empty?
- p.parts << PagePart.build_body_part(p.respond_to?(:body) ? p.body : nil)
- end
- end
- end
-
- module InstanceMethods
-
- def parts_attributes=(attributes)
- self.update_parts(attributes.values.map { |attrs| PagePart.new(attrs) })
- end
-
- def joined_parts
- self.parts.enabled.map(&:template).join('')
- end
-
- protected
-
- def update_parts(parts)
- performed = []
-
- # add / update
- parts.each do |part|
- if (existing = self.parts.detect { |p| p.id == part.id || p.slug == part.slug })
- existing.attributes = part.attributes.delete_if { |k, v| %w{_id slug}.include?(k) }
- else
- self.parts << (existing = part)
- end
- performed << existing unless existing.disabled?
- end
-
- # disable missing parts
- (self.parts.map(&:slug) - performed.map(&:slug)).each do |slug|
- self.parts.detect { |p| p.slug == slug }.disabled = true
- end
- end
-
- def update_parts!(new_parts)
- self.update_parts(new_parts)
- self.save
- end
-
- end
- end
- end
- end
-end
+# @DEPRECATED
+# module Models
+# module Extensions
+# module Page
+# module Parts
+#
+# extend ActiveSupport::Concern
+#
+# included do
+# embeds_many :parts, :class_name => 'PagePart'
+#
+# before_validation do |p|
+# if p.parts.empty?
+# p.parts << PagePart.build_body_part(p.respond_to?(:body) ? p.body : nil)
+# end
+# end
+# end
+#
+# module InstanceMethods
+#
+# def parts_attributes=(attributes)
+# self.update_parts(attributes.values.map { |attrs| PagePart.new(attrs) })
+# end
+#
+# def joined_parts
+# self.parts.enabled.map(&:template).join('')
+# end
+#
+# protected
+#
+# def update_parts(parts)
+# performed = []
+#
+# # add / update
+# parts.each do |part|
+# if (existing = self.parts.detect { |p| p.id == part.id || p.slug == part.slug })
+# existing.attributes = part.attributes.delete_if { |k, v| %w{_id slug}.include?(k) }
+# else
+# self.parts << (existing = part)
+# end
+# performed << existing unless existing.disabled?
+# end
+#
+# # disable missing parts
+# (self.parts.map(&:slug) - performed.map(&:slug)).each do |slug|
+# self.parts.detect { |p| p.slug == slug }.disabled = true
+# end
+# end
+#
+# def update_parts!(new_parts)
+# self.update_parts(new_parts)
+# self.save
+# end
+#
+# end
+# end
+# end
+# end
+# end
diff --git a/app/models/extensions/page/render.rb b/app/models/extensions/page/render.rb
index 0131c21e..64cdd1a3 100644
--- a/app/models/extensions/page/render.rb
+++ b/app/models/extensions/page/render.rb
@@ -5,15 +5,6 @@ module Models
def render(context)
self.template.render(context)
-
- # FIXME : old code based on layout / parts
- # self.template.render(context)
- #
- # if self.layout
- # self.layout.template.render(context)
- # else
- # ::Liquid::Template.parse("{{ content_for_layout }}").render(context)
- # end
end
end
diff --git a/app/models/extensions/page/tree.rb b/app/models/extensions/page/tree.rb
index ae593bba..db67d642 100644
--- a/app/models/extensions/page/tree.rb
+++ b/app/models/extensions/page/tree.rb
@@ -24,6 +24,7 @@ module Models
# Fixme (Didier L.): Instances methods are defined before the include itself
alias :fix_position :hacked_fix_position
+ alias :descendants :hacked_descendants
end
module InstanceMethods
@@ -42,6 +43,11 @@ module Models
self.instance_variable_set :@_will_move, true
end
+ def hacked_descendants
+ return [] if new_record?
+ self.class.all_in(path_field => [self._id]).order_by tree_order
+ end
+
protected
def change_parent
diff --git a/app/models/layout.rb b/app/models/layout.rb
deleted file mode 100644
index 8f840fe4..00000000
--- a/app/models/layout.rb
+++ /dev/null
@@ -1,74 +0,0 @@
-# @deprecated
-class Layout < LiquidTemplate
-
- # acts_as_tree
-
- protected
-
- # TODO: move that in the liquify_template module
-
- def after_parse_template
- blocks = self.find_blocks(self.template.root)
- self.template.send(:instance_variable_set, :"@parent_blocks", blocks)
- end
-
- def find_blocks(node, blocks = {})
- if node.respond_to?(:nodelist) && node.nodelist
- node.nodelist.inject(blocks) do |b, node|
- if node.is_a?(Locomotive::Liquid::Tags::Block)
- b[node.name] = node
- end
- self.find_blocks(node, b) # FIXME: find nested blocks too
- b
- end
- end
- blocks
- end
-
- ## associations ##
-
- # references_many :pages
- # embeds_many :parts, :class_name => 'PagePart'
-
- ## callbacks ##
- # before_save :build_parts_from_value
- # after_save :update_parts_in_pages
-
- ## validations ##
- # validates_format_of :value, :with => Locomotive::Regexps::CONTENT_FOR_LAYOUT, :message => :missing_content_for_layout
-
- ## methods ##
-
- # protected
- #
- # def build_parts_from_value
- # if self.value_changed? || self.new_record?
- # self.parts.each { |p| p.disabled = true }
- #
- # self.value.scan(Locomotive::Regexps::CONTENT_FOR).each do |attributes|
- # slug = attributes[0].strip.downcase
- # name = slug.humanize
- # name = I18n.t('attributes.defaults.page_parts.name') if slug == 'layout'
- #
- # if part = self.parts.detect { |p| p.slug == slug }
- # part.name = name if name.present?
- # part.disabled = false
- # else
- # self.parts.build :slug => slug, :name => name || slug
- # end
- # end
- #
- # # body always first
- # body = self.parts.detect { |p| p.slug == 'layout' }
- # self.parts.delete(body)
- # self.parts.insert(0, body)
- #
- # @_update_pages = true if self.value_changed?
- # end
- # end
- #
- # def update_parts_in_pages
- # self.pages.each { |p| p.send(:update_parts!, self.parts) } if @_update_pages
- # end
-
-end
diff --git a/app/models/page.rb b/app/models/page.rb
index 5b5fd77b..81b72cc4 100644
--- a/app/models/page.rb
+++ b/app/models/page.rb
@@ -22,7 +22,6 @@ class Page
## associations ##
referenced_in :site
- # referenced_in :layout
## callbacks ##
before_validation :normalize_slug
diff --git a/app/models/page_part.rb b/app/models/page_part.rb
index 32cac9b0..f5afdca6 100644
--- a/app/models/page_part.rb
+++ b/app/models/page_part.rb
@@ -1,35 +1,36 @@
-class PagePart
-
- include Mongoid::Document
-
- ## fields ##
- field :name
- field :slug
- field :value
- field :disabled, :type => Boolean, :default => false
- field :value
-
- ## associations ##
- embedded_in :page, :inverse_of => :parts
-
- ## validations ##
- validates_presence_of :name, :slug
-
- ## named scopes ##
- scope :enabled, where(:disabled => false)
-
- ## methods ##
-
- def template
- "{% capture content_for_#{self.slug} %}#{self.value}{% endcapture %}"
- end
-
- def self.build_body_part(body_content = nil)
- self.new({
- :name => I18n.t('attributes.defaults.page_parts.name'),
- :value => body_content || I18n.t('attributes.defaults.pages.other.body'),
- :slug => 'layout'
- })
- end
-
-end
+# @DEPRECATED
+# class PagePart
+#
+# include Mongoid::Document
+#
+# ## fields ##
+# field :name
+# field :slug
+# field :value
+# field :disabled, :type => Boolean, :default => false
+# field :value
+#
+# ## associations ##
+# embedded_in :page, :inverse_of => :parts
+#
+# ## validations ##
+# validates_presence_of :name, :slug
+#
+# ## named scopes ##
+# scope :enabled, where(:disabled => false)
+#
+# ## methods ##
+#
+# def template
+# "{% capture content_for_#{self.slug} %}#{self.value}{% endcapture %}"
+# end
+#
+# def self.build_body_part(body_content = nil)
+# self.new({
+# :name => I18n.t('attributes.defaults.page_parts.name'),
+# :value => body_content || I18n.t('attributes.defaults.pages.other.body'),
+# :slug => 'layout'
+# })
+# end
+#
+# end
diff --git a/app/models/site.rb b/app/models/site.rb
index b3bf2541..40ea383a 100644
--- a/app/models/site.rb
+++ b/app/models/site.rb
@@ -11,11 +11,10 @@ class Site
## associations ##
references_many :pages
- references_many :layouts
- references_many :snippets
- references_many :theme_assets
- references_many :asset_collections
- references_many :content_types
+ references_many :snippets, :dependent => :destroy
+ references_many :theme_assets, :dependent => :destroy
+ references_many :asset_collections, :dependent => :destroy
+ references_many :content_types, :dependent => :destroy
embeds_many :memberships
## validations ##
@@ -28,11 +27,13 @@ class Site
## callbacks ##
after_create :create_default_pages!
before_save :add_subdomain_to_domains
- after_destroy :destroy_in_cascade!
+ after_destroy :destroy_pages
## named scopes ##
- scope :match_domain, lambda { |domain| { :where => { :domains => domain } } }
- scope :match_domain_with_exclusion_of, lambda { |domain, site| { :where => { :domains => domain, :_id.ne => site.id } } }
+ scope :match_domain, lambda { |domain| { :any_in => { :domains => [*domain] } } }
+ scope :match_domain_with_exclusion_of, lambda { |domain, site|
+ { :any_in => { :domains => [*domain] }, :where => { :_id.ne => site.id } }
+ }
## methods ##
@@ -67,7 +68,7 @@ class Site
return if self.domains.empty?
self.domains_without_subdomain.each do |domain|
- if not self.class.match_domain_with_exclusion_of(domain, self).empty?
+ if self.class.match_domain_with_exclusion_of(domain, self).any?
self.errors.add(:domains, :domain_taken, :value => domain)
end
@@ -88,10 +89,9 @@ class Site
end
end
- def destroy_in_cascade!
- %w{pages layouts snippets theme_assets asset_collections content_types}.each do |association|
- self.send(association).destroy_all
- end
+ def destroy_pages
+ # pages is a tree so we just need to delete the root (as well as the page not found page)
+ self.pages.index.first.try(:destroy) && self.pages.not_found.first.try(:destroy)
end
end
diff --git a/app/views/admin/layouts/_form.html.haml b/app/views/admin/layouts/_form.html.haml
deleted file mode 100644
index f05bf55f..00000000
--- a/app/views/admin/layouts/_form.html.haml
+++ /dev/null
@@ -1,13 +0,0 @@
-- content_for :head do
- = javascript_include_tag 'admin/plugins/codemirror/codemirror', 'admin/layouts.js'
- = image_picker_include_tags
-
-= f.inputs :name => :information do
- = f.input :name
-
-= f.inputs :name => :code do
- = f.custom_input :value, :css => 'code full', :with_label => false do
- %code{ :class => 'html' }
- = f.text_area :value
- .more
- = link_to t('admin.image_picker.link'), admin_theme_assets_path, :id => 'image-picker-link'
\ No newline at end of file
diff --git a/app/views/admin/layouts/_layout.html.haml b/app/views/admin/layouts/_layout.html.haml
deleted file mode 100644
index 7334abbb..00000000
--- a/app/views/admin/layouts/_layout.html.haml
+++ /dev/null
@@ -1,7 +0,0 @@
-%li
- %strong= link_to layout.name, edit_admin_layout_path(layout)
- .more
- %span!= t('.updated_at')
- = l layout.updated_at, :format => :short
-
- = link_to image_tag('admin/list/icons/trash.png'), admin_layout_path(layout), :class => 'remove', :confirm => t('admin.messages.confirm'), :method => :delete
diff --git a/app/views/admin/layouts/edit.html.haml b/app/views/admin/layouts/edit.html.haml
deleted file mode 100644
index 1477a38a..00000000
--- a/app/views/admin/layouts/edit.html.haml
+++ /dev/null
@@ -1,15 +0,0 @@
-- title t('.title')
-
-- content_for :submenu do
- = render 'admin/shared/menu/settings'
-
-- content_for :buttons do
- = admin_button_tag :new, new_admin_layout_url, :class => 'new'
-
-%p!= t('.help')
-
-= semantic_form_for @layout, :url => admin_layout_url(@layout), :html => { :class => 'save-with-shortcut' } do |form|
-
- = render 'form', :f => form
-
- = render 'admin/shared/form_actions', :back_url => admin_layouts_url, :button_label => :update
\ No newline at end of file
diff --git a/app/views/admin/layouts/index.html.haml b/app/views/admin/layouts/index.html.haml
deleted file mode 100644
index a1b9b705..00000000
--- a/app/views/admin/layouts/index.html.haml
+++ /dev/null
@@ -1,15 +0,0 @@
-- title t('.title')
-
-- content_for :submenu do
- = render 'admin/shared/menu/settings'
-
-- content_for :buttons do
- = admin_button_tag :new, new_admin_layout_url, :class => 'new'
-
-%p!= t('.help')
-
-- if @layouts.empty?
- %p.no-items!= t('.no_items', :url => new_admin_layout_url)
-- else
- %ul#layouts-list.list
- = render @layouts
diff --git a/app/views/admin/layouts/new.html.haml b/app/views/admin/layouts/new.html.haml
deleted file mode 100644
index 6814df19..00000000
--- a/app/views/admin/layouts/new.html.haml
+++ /dev/null
@@ -1,12 +0,0 @@
-- title t('.title')
-
-- content_for :submenu do
- = render 'admin/shared/menu/settings'
-
-%p!= t('.help')
-
-= semantic_form_for @layout, :url => admin_layouts_url do |form|
-
- = render 'form', :f => form
-
- = render 'admin/shared/form_actions', :back_url => admin_layouts_url, :button_label => :create
\ No newline at end of file
diff --git a/app/views/admin/pages/_form.html.haml b/app/views/admin/pages/_form.html.haml
index 95e5dcf1..70787104 100644
--- a/app/views/admin/pages/_form.html.haml
+++ b/app/views/admin/pages/_form.html.haml
@@ -6,8 +6,6 @@
= f.input :title
- / = f.input :layout_id, :as => :select, :collection => current_site.layouts.all.to_a, :input_html => { :data_url => admin_layout_page_parts_url('_id_to_replace_') }
-
- if not @page.index? and not @page.not_found?
= f.input :parent_id, :as => :select, :collection => parent_pages_options, :include_blank => false
diff --git a/app/views/admin/shared/menu/_settings.html.haml b/app/views/admin/shared/menu/_settings.html.haml
index 01107a83..5aa5fda5 100644
--- a/app/views/admin/shared/menu/_settings.html.haml
+++ b/app/views/admin/shared/menu/_settings.html.haml
@@ -1,6 +1,5 @@
%ul
= admin_submenu_item 'site', edit_admin_current_site_url
- / = admin_submenu_item 'layouts', admin_layouts_url
= admin_submenu_item 'snippets', admin_snippets_url
= admin_submenu_item 'theme_assets', admin_theme_assets_url
= admin_submenu_item 'account', edit_admin_my_account_url
\ No newline at end of file
diff --git a/config/locales/admin_ui_en.yml b/config/locales/admin_ui_en.yml
index 28f618e7..5ecd3340 100644
--- a/config/locales/admin_ui_en.yml
+++ b/config/locales/admin_ui_en.yml
@@ -20,7 +20,6 @@ en:
assets: Assets
settings: Settings
pages: Pages
- layouts: Layouts
snippets: Snippets
account: My account
site: Site
@@ -108,22 +107,6 @@ en:
week: 1 week
month: 1 month
- layouts:
- index:
- title: Listing layouts
- help: "Layouts give the look of a page (1, 2 or many columns)."
- no_items: "There are no layouts for now. Just click here to create the first one."
- new: new layout
- new:
- title: New layout
- help: "Fill in the form below to create your layout."
- edit:
- title: Editing layout
- help: "Fill in the form below to update your layout."
- new: new layout
- layout:
- updated_at: Updated at
-
snippets:
index:
title: Listing snippets
@@ -291,7 +274,7 @@ en:
cache_strategy: "Cache the page for better performance. The 'Simple' choice is a good compromise."
templatized: "Use the page as a template for a model you defined."
snippet:
- slug: "You need to know it in order to insert the snippet inside a page or a layout"
+ slug: "You need to know it in order to insert the snippet inside a page"
site:
meta_keywords: "Meta keywords used within the head tag of the page. They are separeted by an empty space. Required for SEO."
meta_description: "Meta description used within the head tag of the page. Required for SEO."
diff --git a/config/locales/admin_ui_fr.yml b/config/locales/admin_ui_fr.yml
index 96ffe2ac..a4ff64eb 100644
--- a/config/locales/admin_ui_fr.yml
+++ b/config/locales/admin_ui_fr.yml
@@ -30,7 +30,6 @@ fr:
assets: Média
settings: Paramètres
pages: Pages
- layouts: Gabarits
snippets: Snippets
account: Mon compte
site: Site
@@ -108,22 +107,6 @@ fr:
week: 1 semaine
month: 1 mois
- layouts:
- index:
- title: Liste gabarits
- help: "Les gabarits permettent de définir le squelette d'une page (1, 2 ou plusieurs colonnes)."
- no_items: "Il n'existe pas de gabarit. Vous pouvez commencer par créer un ici."
- new: nouveau gabarit
- new:
- title: Nouveau gabarit
- help: "Remplissez le formulaire ci-dessous pour créer votre gabarit."
- edit:
- title: Edition gabarit
- help: "Remplissez le formulaire ci-dessous pour mettre à jour votre gabarit."
- new: nouveau gabarit
- layout:
- updated_at: Mis à jour le
-
snippets:
index:
title: Liste des snippets
@@ -290,7 +273,7 @@ fr:
cache_strategy: "Cache la page pour de meilleure performance. L'option 'Simple' est le meilleur compromis."
templatized: "Utilise la page comme un template pour un modèle défini."
snippet:
- slug: "Utilisé pour insérer le snippet dans une page ou un gabarit."
+ slug: "Utilisé pour insérer le snippet dans une page."
site:
meta_keywords: "Mots-clés utilisés à l'intérieur de la balise HEAD. Ils sont séparés par un espace. Requis pour un meilleur référencement."
meta_description: "Description utilisée à l'intérieur de la balise HEAD. Requis pour un meilleur référencement."
diff --git a/config/locales/default_en.yml b/config/locales/default_en.yml
index 4fe91408..dadec81c 100644
--- a/config/locales/default_en.yml
+++ b/config/locales/default_en.yml
@@ -2,18 +2,17 @@ en:
date:
formats:
default: "%m/%d/%Y"
-
+
errors:
messages:
domain_taken: "%{value} is already taken"
invalid_domain: "%{value} is invalid"
- missing_content_for_layout: "should contain 'content_for_layout' liquid tag"
needs_admin_account: "One admin account is required at least"
protected_page: "You can not remove index or 404 pages"
extname_changed: "New file does not have the original extension"
array_too_short: "is too small (minimum element number is %{count})"
liquid_syntax_error: "Syntax error in page parts, please check the syntax"
-
+
attributes:
defaults:
pages:
@@ -27,7 +26,7 @@ en:
body: "Content goes here"
page_parts:
name: "Body"
-
+
pagination:
previous: "« Previous"
next: "Next »"
diff --git a/config/locales/default_fr.yml b/config/locales/default_fr.yml
index 8075e469..8bf88ee0 100644
--- a/config/locales/default_fr.yml
+++ b/config/locales/default_fr.yml
@@ -28,7 +28,6 @@ fr:
domain_taken: "%{value} a été déjà pris"
invalid_domain: "%{value} n'est pas valide"
- missing_content_for_layout: "doit contenir le tag liquid 'content_for_layout'"
needs_admin_account: "Un minimum d'un scompte admin est requis"
protected_page: "Vous ne pouvez pas supprimer les pages index et 404"
extname_changed: "Nouveau fichier n'a pas l'extension original"
@@ -53,7 +52,6 @@ fr:
attributes:
page:
title: Titre
- layout_id: Gabarit
parent: Parent
slug: Raccourci
templatized: Templatisée
@@ -79,9 +77,6 @@ fr:
language: Langue
new_password: "Nouveau mot de passe"
new_password_confirmation: "Confirmation nouveau mot de passe"
- layout:
- name: Nom
- body: Code
snippet:
body: Code
slug: Raccourci
diff --git a/config/locales/flash.en.yml b/config/locales/flash.en.yml
index 301b45b4..47727521 100644
--- a/config/locales/flash.en.yml
+++ b/config/locales/flash.en.yml
@@ -40,16 +40,6 @@ en:
notice: "My site was successfully updated."
alert: "My site was not updated."
- layouts:
- create:
- notice: "Layout was successfully created."
- alert: "Layout was not created."
- update:
- notice: "Layout was successfully updated."
- alert: "Layout was not updated."
- destroy:
- notice: "Layout was successfully deleted."
-
snippets:
create:
notice: "Snippet was successfully created."
diff --git a/config/locales/flash.fr.yml b/config/locales/flash.fr.yml
index 3a908486..c676030f 100644
--- a/config/locales/flash.fr.yml
+++ b/config/locales/flash.fr.yml
@@ -40,16 +40,6 @@ fr:
notice: "Mon site a été mis à jour avec succès."
alert: "Mon site n'a pas été mis à jour."
- layouts:
- create:
- notice: "Le gabarit a été crée avec succès."
- alert: "Le gabarit n'a pas été crée."
- update:
- notice: "Le gabarit a été mis à jour avec succès."
- alert: "Le gabarit n'a pas été mis à jour."
- destroy:
- notice: "Le gabarit a été supprimé avec succès."
-
snippets:
create:
notice: "Le snippet a été crée avec succès."
diff --git a/config/routes.rb b/config/routes.rb
index e15a618e..a2850980 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -17,9 +17,6 @@ Rails.application.routes.draw do
get :get_path, :on => :collection
end
- resources :layouts do
- resources :page_parts, :only => :index
- end
resources :snippets
resources :sites
diff --git a/features/admin/pages.feature b/features/admin/pages.feature
index 65b8de65..266055cb 100644
--- a/features/admin/pages.feature
+++ b/features/admin/pages.feature
@@ -18,7 +18,7 @@ Scenario: Creating a valid page
And I fill in "Title" with "Test"
And I fill in "Slug" with "test"
And I select "Home page" from "Parent"
- And I fill in "Body" with "Lorem ipsum...."
+ And I fill in "Layout Template" with "Lorem ipsum...."
And I press "Create"
Then I should see "Page was successfully created."
And I should have "Lorem ipsum...." in the test page layout
@@ -27,7 +27,7 @@ Scenario: Updating a valid page
When I go to pages
And I follow "Home page"
And I fill in "Title" with "Home page !"
- And I fill in "Body" with "My new content is here"
+ And I fill in "Layout Template" with "My new content is here"
And I press "Update"
Then I should see "Page was successfully updated."
And I should have "My new content is here" in the index page layout
diff --git a/features/step_definitions/admin_steps.rb b/features/step_definitions/admin_steps.rb
index e5020e0f..7b748343 100644
--- a/features/step_definitions/admin_steps.rb
+++ b/features/step_definitions/admin_steps.rb
@@ -27,13 +27,13 @@ end
### Common
-def create_layout_samples
- Factory(:layout, :site => @site, :name => 'One column', :value => %{
-
- My website
-
-
- {{ content_for_layout }}
-
- })
-end
+# def create_layout_samples
+# Factory(:layout, :site => @site, :name => 'One column', :value => %{
+#
+# My website
+#
+#
+# {{ content_for_layout }}
+#
+# })
+# end
diff --git a/features/step_definitions/page_steps.rb b/features/step_definitions/page_steps.rb
index e31560bb..f4b1b91f 100644
--- a/features/step_definitions/page_steps.rb
+++ b/features/step_definitions/page_steps.rb
@@ -17,29 +17,24 @@ Given /^a page named "([^"]*)" with the template:$/ do |page_slug, template|
@page = create_content_page(page_slug, '', template)
end
-# creates a layout
-Given /^a layout named "([^"]*)" with the source:$/ do |layout_name, layout_body|
- @layout = Factory(:layout, :name => layout_name, :value => layout_body, :site => @site)
-end
-
-# creates a part within a page
-Given /^the page named "([^"]*)" has the part "([^"]*)" with the content:$/ do |page_slug, part_slug, part_contents|
- page = @site.pages.where(:slug => page_slug).first
- raise "Could not find page: #{page_slug}" unless page
-
- # find or crate page part
- part = page.parts.where(:slug => part_slug).first
- unless part
- part = page.parts.build(:name => part_slug.titleize, :slug => part_slug)
- end
-
- # set part value
- part.value = part_contents
- part.should be_valid
-
- # save page with embedded part
- page.save
-end
+# # creates a part within a page
+# Given /^the page named "([^"]*)" has the part "([^"]*)" with the content:$/ do |page_slug, part_slug, part_contents|
+# page = @site.pages.where(:slug => page_slug).first
+# raise "Could not find page: #{page_slug}" unless page
+#
+# # find or crate page part
+# part = page.parts.where(:slug => part_slug).first
+# unless part
+# part = page.parts.build(:name => part_slug.titleize, :slug => part_slug)
+# end
+#
+# # set part value
+# part.value = part_contents
+# part.should be_valid
+#
+# # save page with embedded part
+# page.save
+# end
# try to render a page by slug
When /^I view the rendered page at "([^"]*)"$/ do |path|
diff --git a/lib/locomotive/regexps.rb b/lib/locomotive/regexps.rb
index 6ee60a01..459ff8ae 100644
--- a/lib/locomotive/regexps.rb
+++ b/lib/locomotive/regexps.rb
@@ -5,9 +5,5 @@ module Locomotive
DOMAIN = /^[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix
- CONTENT_FOR = /\{\{\s*content_for_([a-zA-Z]{1}[a-zA-Z_0-9]*)(\s+.*)?\s*\}\}/
-
- CONTENT_FOR_LAYOUT = /\{\{\s*content_for_layout\s*/
-
end
end
diff --git a/public/javascripts/admin/layouts.js b/public/javascripts/admin/layouts.js
deleted file mode 100644
index b7e24edd..00000000
--- a/public/javascripts/admin/layouts.js
+++ /dev/null
@@ -1,7 +0,0 @@
-$(document).ready(function() {
- $('a#image-picker-link').imagepicker({
- insertFn: function(link) {
- return "{{ theme_images." + link.attr('data-slug') + " }}";
- }
- });
-});
diff --git a/public/javascripts/admin/site.js b/public/javascripts/admin/site.js
index 19516a70..9fb667b8 100644
--- a/public/javascripts/admin/site.js
+++ b/public/javascripts/admin/site.js
@@ -17,8 +17,9 @@ $(document).ready(function() {
var newRow = lastRow.clone(true).removeClass('template').addClass('added').insertBefore(lastRow);
// should copy the value of the select box
+ var input_name = $('input#current_site_subdomain').attr('name').split('[')[0];
var input = newRow.find('input.label')
- .attr('name', 'site[domains][]');
+ .attr('name', input_name + '[domains][]');
if (lastRow.find('input.label').val() == '') input.val("undefined");
// then reset the form
diff --git a/spec/factories.rb b/spec/factories.rb
index 2017c1b0..93deb56a 100644
--- a/spec/factories.rb
+++ b/spec/factories.rb
@@ -67,41 +67,41 @@ Factory.define :liquid_template do |t|
end
-## Layouts ##
-Factory.define :layout do |l|
- l.name '1 main column + sidebar'
- l.value %{
-
- My website
-
-
-
-
- \{% block main %\}
- DEFAULT MAIN CONTENT
- \{% endblock %\}
-
-
- }
- l.site { Site.where(:subdomain => "acme").first || Factory(:site) }
-end
-
-Factory.define :base_layout, :parent => :layout do |l|
- l.name '1 main column + sidebar'
- l.value %{
-
- My website
-
-
-
- \{\{ content_for_layout | textile \}\}
-
- }
-end
+# ## Layouts ##
+# Factory.define :layout do |l|
+# l.name '1 main column + sidebar'
+# l.value %{
+#
+# My website
+#
+#
+#
+#
+# \{% block main %\}
+# DEFAULT MAIN CONTENT
+# \{% endblock %\}
+#
+#
+# }
+# l.site { Site.where(:subdomain => "acme").first || Factory(:site) }
+# end
+#
+# Factory.define :base_layout, :parent => :layout do |l|
+# l.name '1 main column + sidebar'
+# l.value %{
+#
+# My website
+#
+#
+#
+# \{\{ content_for_layout | textile \}\}
+#
+# }
+# end
## Snippets ##
diff --git a/spec/lib/locomotive/liquid/tags/consume_spec.rb b/spec/lib/locomotive/liquid/tags/consume_spec.rb
index 50c738ba..6719b67d 100644
--- a/spec/lib/locomotive/liquid/tags/consume_spec.rb
+++ b/spec/lib/locomotive/liquid/tags/consume_spec.rb
@@ -7,21 +7,21 @@ describe Locomotive::Liquid::Tags::Consume do
it 'validates a basic syntax' do
markup = 'blog from "http://blog.locomotiveapp.org"'
lambda do
- Locomotive::Liquid::Tags::Consume.new('consume', markup, ["{% endconsume %}"])
+ Locomotive::Liquid::Tags::Consume.new('consume', markup, ["{% endconsume %}"], {})
end.should_not raise_error
end
it 'validates more complex syntax with attributes' do
markup = 'blog from "http://www.locomotiveapp.org" username: "john", password: "easyone"'
lambda do
- Locomotive::Liquid::Tags::Consume.new('consume', markup, ["{% endconsume %}"])
+ Locomotive::Liquid::Tags::Consume.new('consume', markup, ["{% endconsume %}"], {})
end.should_not raise_error
end
it 'raises an error if the syntax is incorrect' do
markup = 'blog from http://www.locomotiveapp.org'
lambda do
- Locomotive::Liquid::Tags::Consume.new('consume', markup, ["{% endconsume %}"])
+ Locomotive::Liquid::Tags::Consume.new('consume', markup, ["{% endconsume %}"], {})
end.should raise_error
end
diff --git a/spec/lib/locomotive/liquid/tags/paginate_spec.rb b/spec/lib/locomotive/liquid/tags/paginate_spec.rb
index 54a1c5b6..10bbcc09 100644
--- a/spec/lib/locomotive/liquid/tags/paginate_spec.rb
+++ b/spec/lib/locomotive/liquid/tags/paginate_spec.rb
@@ -5,14 +5,14 @@ describe Locomotive::Liquid::Tags::Paginate do
it 'should have a valid syntax' do
markup = "contents.projects by 5"
lambda do
- Locomotive::Liquid::Tags::Paginate.new('paginate', markup, ["{% endpaginate %}"])
+ Locomotive::Liquid::Tags::Paginate.new('paginate', markup, ["{% endpaginate %}"], {})
end.should_not raise_error
end
it 'should raise an error if the syntax is incorrect' do
["contents.projects by a", "contents.projects", "contents.projects 5"].each do |markup|
lambda do
- Locomotive::Liquid::Tags::Paginate.new('paginate', markup, ["{% endpaginate %}"])
+ Locomotive::Liquid::Tags::Paginate.new('paginate', markup, ["{% endpaginate %}"], {})
end.should raise_error
end
end
diff --git a/spec/lib/locomotive/liquid/tags/with_scope_spec.rb b/spec/lib/locomotive/liquid/tags/with_scope_spec.rb
index e4cb6166..b1083d3f 100644
--- a/spec/lib/locomotive/liquid/tags/with_scope_spec.rb
+++ b/spec/lib/locomotive/liquid/tags/with_scope_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
describe Locomotive::Liquid::Tags::WithScope do
it 'should decode options (boolean, interger, ...)' do
- scope = Locomotive::Liquid::Tags::WithScope.new('with_scope', 'active:true price:42 title:\'foo\' hidden:false', ["{% endwith_scope %}"])
+ scope = Locomotive::Liquid::Tags::WithScope.new('with_scope', 'active:true price:42 title:\'foo\' hidden:false', ["{% endwith_scope %}"], {})
attributes = scope.send(:decode, scope.instance_variable_get(:@attributes))
attributes['active'].should == true
attributes['price'].should == 42
diff --git a/spec/models/layout_spec.rb b/spec/models/layout_spec.rb
deleted file mode 100644
index e8fe3cf6..00000000
--- a/spec/models/layout_spec.rb
+++ /dev/null
@@ -1,64 +0,0 @@
-require 'spec_helper'
-
-describe Layout do
-
- it 'should have a valid factory' do
- Factory.build(:layout).should be_valid
- end
-
- # ## validations ##
- #
- # it 'should validate presence of content_for_layout in value' do
- # layout = Factory.build(:layout, :value => 'without content_for_layout')
- # layout.should_not be_valid
- # layout.errors[:value].should == ["should contain 'content_for_layout' liquid tag"]
- # end
- #
- # context 'dealing with page parts' do
- #
- # before(:each) do
- # @layout = Factory.build(:layout)
- # end
- #
- # it 'should have 2 parts' do
- # @layout.send(:build_parts_from_value)
- # @layout.parts.size.should == 2
- #
- # @layout.parts.first.name.should == 'Body'
- # @layout.parts.first.slug.should == 'layout'
- #
- # @layout.parts.last.name.should == 'Left sidebar'
- # @layout.parts.last.slug.should == 'left_sidebar'
- # end
- #
- # it 'should not add parts to pages if layout does not change' do
- # @layout.stubs(:value_changed?).returns(false)
- # page = Factory.build(:page, :layout => @layout, :site => nil)
- # page.expects(:update_parts!).never
- # @layout.pages << page
- # @layout.save
- # end
- #
- # it 'should add parts to pages if layout changes' do
- # @layout.value = @layout.value + "..."
- # page = Factory.build(:page, :layout => @layout, :site => nil)
- # page.expects(:update_parts!)
- # @layout.pages << page
- # @layout.save
- # end
- #
- # end
- #
- # context 'parsing liquid template' do
- #
- # before(:each) do
- # @layout = Factory.build(:layout)
- # end
- #
- # it 'should not raise an error if template is empty' do
- # @layout.template.should be_nil
- # end
- #
- # end
-
-end
diff --git a/spec/models/page_spec.rb b/spec/models/page_spec.rb
index d0b4589b..c0cb46e3 100644
--- a/spec/models/page_spec.rb
+++ b/spec/models/page_spec.rb
@@ -105,120 +105,6 @@ describe Page do
end
- describe 'accepts_nested_attributes_for used for parts' do
-
- before(:each) do
- @page = Factory.build(:page)
- @page.parts.build(:name => 'Main content', :slug => 'layout')
- @page.parts.build(:name => 'Left column', :slug => 'left_sidebar')
- @page.parts.build(:name => 'Right column', :slug => 'right_sidebar')
- end
-
- it 'should add parts' do
- attributes = { '0' => { 'slug' => 'footer', 'name' => 'A custom footer', 'value' => 'End of page' } }
- @page.parts_attributes = attributes
- @page.parts.size.should == 4
- @page.parts.last.slug.should == 'footer'
- @page.parts.last.disabled.should == false
- end
-
- it 'should update parts' do
- attributes = { '0' => { 'slug' => 'layout', 'name' => 'A new name', 'value' => 'Hello world' } }
- @page.parts_attributes = attributes
- @page.parts.size.should == 3
- @page.parts.first.slug.should == 'layout'
- @page.parts.first.name.should == 'A new name'
- @page.parts.first.value.should == 'Hello world'
- end
-
- it 'should disable parts' do
- attributes = { '0' => { 'slug' => 'left_sidebar', 'disabled' => 'true' } }
- @page.parts_attributes = attributes
- @page.parts.size.should == 3
- @page.parts.first.disabled.should == true
- @page.parts[1].disabled.should == true
- @page.parts[2].disabled.should == true
- end
-
- it 'should add/update/disable parts at the same time' do
- @page.parts.size.should == 3
-
- attributes = {
- '0' => { 'slug' => 'layout', 'name' => 'Body', 'value' => 'Hello world' },
- '1' => { 'slug' => 'left_sidebar', 'disabled' => 'true' },
- '2' => { 'id' => @page.parts[2].id, 'value' => 'Content from right sidebar', 'disabled' => 'false' }
- }
- @page.parts_attributes = attributes
- @page.parts.size.should == 3
-
- @page.parts[0].value.should == 'Hello world'
- @page.parts[1].disabled.should == true
- @page.parts[2].disabled.should == false
- end
-
- it 'should update it with success (mongoid bug #71)' do
- @page.save
- @page = Page.first
-
- @page.parts.size.should == 3
- @page.parts_attributes = { '0' => { 'slug' => 'header', 'name' => 'A custom header', 'value' => 'Head of page' } }
- @page.parts.size.should == 4
-
- @page.save
- @page = Page.first
-
- @page.parts.size.should == 4
- end
-
- end
-
- describe 'dealing with page parts' do # DUPLICATED ?
-
- before(:each) do
- @page = Factory.build(:page)
- @parts = [
- PagePart.new(:name => 'Main content', :slug => 'layout'),
- PagePart.new(:name => 'Left column', :slug => 'left_sidebar'),
- PagePart.new(:name => 'Right column', :slug => 'right_sidebar')
- ]
- @page.send(:update_parts, @parts)
- end
-
- it 'should add new parts from an array of parts' do
- @page.parts.size.should == 3
- @page.parts.shift.name.should == 'Main content'
- @page.parts.shift.name.should == 'Left column'
- @page.parts.shift.name.should == 'Right column'
- end
-
- it 'should update parts' do
- @parts[1].name = 'Very left column'
- @page.send(:update_parts, @parts)
- @page.parts.size.should == 3
- @page.parts[1].name.should == 'Very left column'
- @page.parts[1].slug.should == 'left_sidebar'
- end
-
- it 'should disable parts' do
- @parts = [@parts.shift, @parts.pop]
- @page.send(:update_parts, @parts)
- @page.parts.size.should == 3
- @page.parts[1].name.should == 'Left column'
- @page.parts[1].disabled.should be_true
- end
-
- it 'should enable parts previously disabled' do
- parts_at_first = @parts.clone
- @parts = [@parts.shift, @parts.pop]
- @page.send(:update_parts, @parts)
- @page.send(:update_parts, parts_at_first)
- @page.parts.size.should == 3
- @page.parts[1].name.should == 'Left column'
- @page.parts[1].disabled.should be_true
- end
-
- end
-
describe 'acts as tree' do
before(:each) do
@@ -295,71 +181,6 @@ describe Page do
end
- context 'rendering' do
-
- before(:each) do
- @page = Factory.build(:page, :site => nil)
- @page.parts.build :slug => 'layout', :value => 'Hello world !'
- @page.parts.build :slug => 'left_sidebar', :value => 'A sidebar...'
- @page.send(:store_template)
- @layout = Factory.build(:layout, :site => nil)
- @layout.send(:store_template)
- @context = Liquid::Context.new
- end
-
- context 'without layout' do
-
- it 'should render the body part' do
- @page.render(@context).should == 'Hello world !'
- end
-
- end
-
- context 'with layout' do
-
- it 'should render both the body and sidebar parts' do
- @page.layout = @layout
- @page.render(@context).should == %{
-
- My website
-
-
-
-
-
- }
- end
-
- end
-
- end
-
-
- describe "creating a new page" do
-
- context "with a body" do
- before do
- @site = Factory(:site, :subdomain => "somethingweird")
- @page = Page.create({
- :slug => "some_slug",
- :title => "Page Title",
- :body => "Page Body",
- :published => true,
- :site => @site
- })
- end
-
- it "should be valid" do
- @page.should be_valid
- end
-
- it "should render the passed in body attribute of the page" do
- @page.render(Liquid::Context.new).should == "Page Body"
- end
- end
- end
-
-
describe 'templatized extension' do
before(:each) do
diff --git a/spec/models/site_spec.rb b/spec/models/site_spec.rb
index 05581e3d..ce4588fc 100644
--- a/spec/models/site_spec.rb
+++ b/spec/models/site_spec.rb
@@ -9,87 +9,87 @@ describe Site do
it 'should have a valid factory' do
Factory.build(:site).should be_valid
end
-
+
## Validations ##
-
+
it 'should validate presence of name' do
site = Factory.build(:site, :name => nil)
site.should_not be_valid
site.errors[:name].should == ["can't be blank"]
end
-
+
it 'should validate presence of subdomain' do
site = Factory.build(:site, :subdomain => nil)
site.should_not be_valid
site.errors[:subdomain].should == ["can't be blank"]
end
-
+
%w{test test42}.each do |subdomain|
it "should accept subdomain like '#{subdomain}'" do
Factory.build(:site, :subdomain => subdomain).should be_valid
end
end
-
+
['-', '_test', 'test_', 't est', '42', '42test', 'foo_bar'].each do |subdomain|
it "should not accept subdomain like '#{subdomain}'" do
(site = Factory.build(:site, :subdomain => subdomain)).should_not be_valid
site.errors[:subdomain].should == ['is invalid']
end
end
-
+
it "should not use reserved keywords as subdomain" do
%w{www admin email blog webmail mail support help site sites}.each do |subdomain|
(site = Factory.build(:site, :subdomain => subdomain)).should_not be_valid
site.errors[:subdomain].should == ['is reserved']
end
end
-
+
it 'should validate uniqueness of subdomain' do
Factory(:site)
(site = Factory.build(:site)).should_not be_valid
site.errors[:subdomain].should == ["is already taken"]
end
-
+
it 'should validate uniqueness of domains' do
Factory(:site, :domains => %w{www.acme.net www.acme.com})
-
+
(site = Factory.build(:site, :domains => %w{www.acme.com})).should_not be_valid
site.errors[:domains].should == ["www.acme.com is already taken"]
-
+
(site = Factory.build(:site, :subdomain => 'foo', :domains => %w{acme.example.com})).should_not be_valid
site.errors[:domains].should == ["acme.example.com is already taken"]
end
-
+
it 'should validate format of domains' do
site = Factory.build(:site, :domains => ['barformat.superlongextension', '-foo.net'])
site.should_not be_valid
site.errors[:domains].should == ['barformat.superlongextension is invalid', '-foo.net is invalid']
end
-
+
## Named scopes ##
-
+
it 'should retrieve sites by domain' do
site_1 = Factory(:site, :domains => %w{www.acme.net})
site_2 = Factory(:site, :subdomain => 'test', :domains => %w{www.example.com})
-
+
sites = Site.match_domain('www.acme.net')
sites.size.should == 1
sites.first.should == site_1
-
+
sites = Site.match_domain('www.example.com')
sites.size.should == 1
sites.first.should == site_2
-
+
sites = Site.match_domain('test.example.com')
sites.size.should == 1
sites.first.should == site_2
-
+
sites = Site.match_domain('www.unknown.com')
sites.should be_empty
end
-
+
## Associations ##
-
+
it 'should have many accounts' do
site = Factory.build(:site)
account_1, account_2 = Factory(:account), Factory(:account, :name => 'homer', :email => 'homer@simpson.net')
@@ -98,50 +98,41 @@ describe Site do
site.memberships.size.should == 2
site.accounts.should == [account_1, account_2]
end
-
+
## Methods ##
-
+
it 'should return domains without subdomain' do
site = Factory(:site, :domains => %w{www.acme.net www.acme.com})
site.domains.should == %w{www.acme.net www.acme.com acme.example.com}
site.domains_without_subdomain.should == %w{www.acme.net www.acme.com}
end
-
+
describe 'once created' do
-
+
before(:each) do
@site = Factory(:site)
end
-
+
it 'should create index and 404 pages' do
@site.pages.size.should == 2
@site.pages.first.slug.should == 'index'
@site.pages.last.slug.should == '404'
end
-
+
end
- describe 'delete in cascade' do
-
+ describe 'deleting in cascade' do
+
before(:each) do
@site = Factory(:site)
end
-
- it 'should destroy pages' do
- @site.pages.expects(:destroy_all)
- @site.destroy
+
+ it 'should also destroy pages' do
+ lambda {
+ @site.destroy
+ }.should change(Page, :count).by(-2)
end
-
- it 'should destroy layouts' do
- @site.layouts.expects(:destroy_all)
- @site.destroy
- end
-
- it 'should destroy snippets' do
- @site.snippets.expects(:destroy_all)
- @site.destroy
- end
-
+
end
end
diff --git a/vendor/plugins/custom_fields/.rspec b/vendor/plugins/custom_fields/.rspec
deleted file mode 100644
index f9b2fb78..00000000
--- a/vendor/plugins/custom_fields/.rspec
+++ /dev/null
@@ -1,3 +0,0 @@
---colour
---format nested
---backtrace
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/Gemfile b/vendor/plugins/custom_fields/Gemfile
deleted file mode 100644
index faa2af1a..00000000
--- a/vendor/plugins/custom_fields/Gemfile
+++ /dev/null
@@ -1,12 +0,0 @@
-source 'http://gemcutter.org'
-
-gem 'bson_ext', '>= 1.0.1'
-gem 'mongo_ext'
-gem 'mongoid', '2.0.0.beta.14'
-gem 'activesupport', '~>3.0.0.beta'
-gem 'carrierwave-rails3', :require => 'carrierwave'
-
-group :test do
- gem 'rspec', '>= 2.0.0.beta.10'
- gem 'mocha', :git => 'git://github.com/floehopper/mocha.git'
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/MIT-LICENSE b/vendor/plugins/custom_fields/MIT-LICENSE
deleted file mode 100644
index ec4ddd4c..00000000
--- a/vendor/plugins/custom_fields/MIT-LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2010 [name of plugin creator]
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/vendor/plugins/custom_fields/README b/vendor/plugins/custom_fields/README
deleted file mode 100644
index 25e32db2..00000000
--- a/vendor/plugins/custom_fields/README
+++ /dev/null
@@ -1,13 +0,0 @@
-CustomFields
-===========
-
-Introduction goes here.
-
-
-Example
-=======
-
-Example goes here.
-
-
-Copyright (c) 2010 [Didier Lafforgue], released under the MIT license
diff --git a/vendor/plugins/custom_fields/Rakefile b/vendor/plugins/custom_fields/Rakefile
deleted file mode 100644
index 9b68c536..00000000
--- a/vendor/plugins/custom_fields/Rakefile
+++ /dev/null
@@ -1,29 +0,0 @@
-require "rubygems"
-require "rake"
-require "rake/rdoctask"
-require "rspec"
-require "rspec/core/rake_task"
-
-desc 'Generate documentation for the custom_fields plugin.'
-Rake::RDocTask.new(:rdoc) do |rdoc|
- rdoc.rdoc_dir = 'rdoc'
- rdoc.title = 'CustomFields'
- rdoc.options << '--line-numbers' << '--inline-source'
- rdoc.rdoc_files.include('README')
- rdoc.rdoc_files.include('lib/**/*.rb')
-end
-
-Rspec::Core::RakeTask.new('spec:unit') do |spec|
- spec.pattern = "spec/unit/**/*_spec.rb"
- # spec.pattern = "spec/unit/custom_fields_for_spec.rb"
- # spec.pattern = "spec/unit/types/category_spec.rb"
-end
-
-Rspec::Core::RakeTask.new('spec:integration') do |spec|
- spec.pattern = "spec/integration/**/*_spec.rb"
- # spec.pattern = "spec/integration/types/category_spec.rb"
-end
-
-task :spec => ['spec:unit', 'spec:integration']
-
-task :default => :spec
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/init.rb b/vendor/plugins/custom_fields/init.rb
deleted file mode 100644
index 6f69f32d..00000000
--- a/vendor/plugins/custom_fields/init.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-# Include hook code here
-require File.dirname(__FILE__) + '/lib/custom_fields'
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/lib/custom_fields.rb b/vendor/plugins/custom_fields/lib/custom_fields.rb
deleted file mode 100644
index b895326e..00000000
--- a/vendor/plugins/custom_fields/lib/custom_fields.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-$:.unshift File.expand_path(File.dirname(__FILE__))
-
-require 'active_support'
-require 'carrierwave/orm/mongoid'
-
-require 'custom_fields/extensions/mongoid/hierarchy'
-require 'custom_fields/extensions/mongoid/associations/proxy'
-require 'custom_fields/extensions/mongoid/associations/references_many'
-require 'custom_fields/extensions/mongoid/associations/embeds_many'
-require 'custom_fields/types/default'
-require 'custom_fields/types/string'
-require 'custom_fields/types/text'
-require 'custom_fields/types/category'
-require 'custom_fields/types/boolean'
-require 'custom_fields/types/date'
-require 'custom_fields/types/file'
-require 'custom_fields/proxy_class_enabler'
-require 'custom_fields/field'
-require 'custom_fields/custom_fields_for'
-
-module Mongoid
- module CustomFields
- extend ActiveSupport::Concern
- included do
- include ::CustomFields::CustomFieldsFor
- end
- end
-end
diff --git a/vendor/plugins/custom_fields/lib/custom_fields/custom_fields_for.rb b/vendor/plugins/custom_fields/lib/custom_fields/custom_fields_for.rb
deleted file mode 100644
index 0fe1f5a5..00000000
--- a/vendor/plugins/custom_fields/lib/custom_fields/custom_fields_for.rb
+++ /dev/null
@@ -1,50 +0,0 @@
-module CustomFields
-
- module CustomFieldsFor
-
- def self.included(base)
- base.extend(ClassMethods)
- end
-
- # Enhance an embedded collection by providing methods to manage custom fields
- #
- # class Company
- # embeds_many :employees
- # custom_fields_for :employees
- # end
- #
- # class Employee
- # embedded_in :company, :inverse_of => :employees
- # field :name, String
- # end
- #
- # company.employee_custom_fields.build :label => 'His/her position', :_alias => 'position', :kind => 'String'
- #
- # company.employees.build :name => 'Michael Scott', :position => 'Regional manager'
- #
- module ClassMethods
-
- def custom_fields_for(collection_name)
- singular_name = collection_name.to_s.singularize
-
- class_eval <<-EOV
- field :#{singular_name}_custom_fields_counter, :type => Integer, :default => 0
-
- embeds_many :#{singular_name}_custom_fields, :class_name => "::CustomFields::Field"
-
- validates_associated :#{singular_name}_custom_fields
-
- accepts_nested_attributes_for :#{singular_name}_custom_fields, :allow_destroy => true
-
- def ordered_#{singular_name}_custom_fields
- self.#{singular_name}_custom_fields.sort { |a, b| (a.position || 0) <=> (b.position || 0) }
- end
-
- EOV
- end
-
- end
-
- end
-
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/lib/custom_fields/extensions/mongoid/associations/embeds_many.rb b/vendor/plugins/custom_fields/lib/custom_fields/extensions/mongoid/associations/embeds_many.rb
deleted file mode 100644
index a9c5a42c..00000000
--- a/vendor/plugins/custom_fields/lib/custom_fields/extensions/mongoid/associations/embeds_many.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-# encoding: utf-8
-module Mongoid #:nodoc:
- module Associations #:nodoc:
- class EmbedsMany < Proxy
-
- def initialize_with_custom_fields(parent, options, target_array = nil)
- if custom_fields?(parent, options.name)
- options = options.clone # 2 parent instances should not share the exact same option instance
-
- custom_fields = parent.send(:"ordered_#{custom_fields_association_name(options.name)}")
-
- klass = options.klass.to_klass_with_custom_fields(custom_fields)
- klass._parent = parent
- klass.association_name = options.name
-
- options.instance_eval <<-EOF
- def klass=(klass); @klass = klass; end
- def klass; @klass || class_name.constantize; end
- EOF
-
- options.klass = klass
- end
-
- initialize_without_custom_fields(parent, options, target_array)
- end
-
- alias_method_chain :initialize, :custom_fields
-
- end
- end
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/lib/custom_fields/extensions/mongoid/associations/proxy.rb b/vendor/plugins/custom_fields/lib/custom_fields/extensions/mongoid/associations/proxy.rb
deleted file mode 100644
index 83deeb03..00000000
--- a/vendor/plugins/custom_fields/lib/custom_fields/extensions/mongoid/associations/proxy.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-# encoding: utf-8
-module Mongoid #:nodoc
- module Associations #:nodoc
- class Proxy #:nodoc
-
- def custom_fields_association_name(association_name)
- "#{association_name.to_s.singularize}_custom_fields".to_sym
- end
-
- def custom_fields?(object, association_name)
- object.respond_to?(custom_fields_association_name(association_name))
- end
-
- def klass
- @klass
- end
-
- end
- end
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/lib/custom_fields/extensions/mongoid/associations/references_many.rb b/vendor/plugins/custom_fields/lib/custom_fields/extensions/mongoid/associations/references_many.rb
deleted file mode 100644
index fb18741a..00000000
--- a/vendor/plugins/custom_fields/lib/custom_fields/extensions/mongoid/associations/references_many.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-# encoding: utf-8
-module Mongoid #:nodoc:
- module Associations #:nodoc:
- # Represents an relational one-to-many association with an object in a
- # separate collection or database.
- class ReferencesMany < Proxy
-
- def initialize_with_custom_fields(parent, options, target_array = nil)
- if custom_fields?(parent, options.name)
- options = options.clone # 2 parent instances should not share the exact same option instance
-
- custom_fields = parent.send(:"ordered_#{custom_fields_association_name(options.name)}")
-
- klass = options.klass.to_klass_with_custom_fields(custom_fields)
- klass._parent = parent
- klass.association_name = options.name
-
- options.instance_eval <<-EOF
- def klass=(klass); @klass = klass; end
- def klass; @klass || class_name.constantize; end
- EOF
-
- options.klass = klass
- end
-
- initialize_without_custom_fields(parent, options, target_array)
- end
-
- alias_method_chain :initialize, :custom_fields
-
- end
- end
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/lib/custom_fields/extensions/mongoid/hierarchy.rb b/vendor/plugins/custom_fields/lib/custom_fields/extensions/mongoid/hierarchy.rb
deleted file mode 100644
index 9ddc9dc8..00000000
--- a/vendor/plugins/custom_fields/lib/custom_fields/extensions/mongoid/hierarchy.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-# encoding: utf-8
-module Mongoid #:nodoc
- module Hierarchy #:nodoc
- module InstanceMethods
-
- def parentize_with_custom_fields(object, association_name)
- if association_name.to_s.ends_with?('_custom_fields')
- self.singleton_class.associations = {}
- self.singleton_class.embedded_in object.class.to_s.underscore.to_sym, :inverse_of => association_name
- end
-
- parentize_without_custom_fields(object, association_name)
-
- if self.embedded? && self.instance_variable_get(:"@association_name").nil?
- self.instance_variable_set(:"@association_name", association_name) # weird bug with proxy class
- end
-
- if association_name.to_s.ends_with?('_custom_fields')
- self.send(:set_unique_name!)
- self.send(:set_alias)
- end
- end
-
- alias_method_chain :parentize, :custom_fields
-
- end
- end
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/lib/custom_fields/field.rb b/vendor/plugins/custom_fields/lib/custom_fields/field.rb
deleted file mode 100644
index 2cd0f990..00000000
--- a/vendor/plugins/custom_fields/lib/custom_fields/field.rb
+++ /dev/null
@@ -1,82 +0,0 @@
-module CustomFields
-
- class Field
- include ::Mongoid::Document
- include ::Mongoid::Timestamps
-
- # types ##
- include Types::Default
- include Types::String
- include Types::Text
- include Types::Category
- include Types::Boolean
- include Types::Date
- include Types::File
-
- ## fields ##
- field :label
- field :_alias
- field :_name
- field :kind
- field :hint
- field :position, :type => Integer, :default => 0
-
- ## validations ##
- validates_presence_of :label, :kind
- validate :uniqueness_of_label
-
- ## methods ##
-
- def field_type
- self.class.field_types[self.kind.downcase.to_sym]
- end
-
- def apply(klass)
- return unless self.valid?
-
- klass.field self._name, :type => self.field_type if self.field_type
-
- apply_method_name = :"apply_#{self.kind.downcase}_type"
-
- if self.respond_to?(apply_method_name)
- self.send(apply_method_name, klass)
- else
- apply_default_type(klass)
- end
- end
-
- def safe_alias
- self.set_alias
- self._alias
- end
-
- protected
-
- def uniqueness_of_label
- duplicate = self.siblings.detect { |f| f.label == self.label && f._id != self._id }
- if not duplicate.nil?
- self.errors.add(:label, :taken)
- end
- end
-
- def set_unique_name!
- self._name ||= "custom_field_#{self.increment_counter!}"
- end
-
- def set_alias
- return if self.label.blank? && self._alias.blank?
- self._alias = (self._alias.blank? ? self.label : self._alias).parameterize('_').downcase
- end
-
- def increment_counter!
- next_value = (self._parent.send(:"#{self.association_name}_counter") || 0) + 1
- self._parent.send(:"#{self.association_name}_counter=", next_value)
- next_value
- end
-
- def siblings
- self._parent.send(self.association_name)
- end
- end
-
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/lib/custom_fields/proxy_class_enabler.rb b/vendor/plugins/custom_fields/lib/custom_fields/proxy_class_enabler.rb
deleted file mode 100644
index e5321856..00000000
--- a/vendor/plugins/custom_fields/lib/custom_fields/proxy_class_enabler.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-module CustomFields
- module ProxyClassEnabler
-
- extend ActiveSupport::Concern
-
- included do
-
- cattr_accessor :klass_with_custom_fields
-
- def self.to_klass_with_custom_fields(fields)
- return klass_with_custom_fields unless klass_with_custom_fields.nil?
-
- klass = Class.new(self)
- klass.class_eval <<-EOF
- cattr_accessor :custom_fields, :_parent, :association_name
-
- def self.model_name
- @_model_name ||= ActiveModel::Name.new(self.superclass)
- end
-
- def custom_fields
- self.class.custom_fields
- end
- EOF
-
- klass.hereditary = false
- klass.custom_fields = fields
-
- [*fields].each { |field| field.apply(klass) }
-
- klass_with_custom_fields = klass
- end
-
- end
-
- end
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/lib/custom_fields/types/boolean.rb b/vendor/plugins/custom_fields/lib/custom_fields/types/boolean.rb
deleted file mode 100644
index 0384b90b..00000000
--- a/vendor/plugins/custom_fields/lib/custom_fields/types/boolean.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-module CustomFields
- module Types
- module Boolean
-
- extend ActiveSupport::Concern
-
- included do
- register_type :boolean
- end
-
- module InstanceMethods
-
- def apply_boolean_type(klass)
-
- klass.class_eval <<-EOF
- alias :#{self.safe_alias}= :#{self._name}=
-
- def #{self.safe_alias}
- ::Boolean.set(read_attribute(:#{self._name}))
- end
- EOF
-
- end
-
- end
-
- end
- end
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/lib/custom_fields/types/category.rb b/vendor/plugins/custom_fields/lib/custom_fields/types/category.rb
deleted file mode 100644
index 1ae98634..00000000
--- a/vendor/plugins/custom_fields/lib/custom_fields/types/category.rb
+++ /dev/null
@@ -1,85 +0,0 @@
-module CustomFields
- module Types
- module Category
-
- extend ActiveSupport::Concern
-
- included do
- embeds_many :category_items, :class_name => 'CustomFields::Types::Category::Item'
-
- validates_associated :category_items
-
- accepts_nested_attributes_for :category_items, :allow_destroy => true
-
- register_type :category, ::String
- end
-
- module InstanceMethods
-
- def ordered_category_items
- self.category_items.sort { |a, b| (a.position || 0) <=> (b.position || 0) }
- end
-
- def category_names
- self.category_items.collect(&:name)
- end
-
- def category_ids
- self.category_items.collect(&:_id)
- end
-
- def apply_category_type(klass)
- klass.cattr_accessor :"#{self.safe_alias}_items"
-
- klass.send("#{self.safe_alias}_items=", self.ordered_category_items)
-
- klass.class_eval <<-EOF
- def self.#{self.safe_alias}_names
- self.#{self.safe_alias}_items.collect(&:name)
- end
-
- def self.group_by_#{self.safe_alias}(list_method = nil)
- groups = (if self.embedded?
- list_method ||= self.association_name
- self._parent.send(list_method)
- else
- list_method ||= :all
- self.send(list_method)
- end).to_a.group_by(&:#{self._name})
-
- self.#{self.safe_alias}_items.collect do |category|
- {
- :name => category.name,
- :items => groups[category._id] || []
- }.with_indifferent_access
- end
- end
-
- def #{self.safe_alias}=(name)
- category_id = self.class.#{self.safe_alias}_items.find { |item| item.name == name }._id rescue name
- write_attribute(:#{self._name}, category_id)
- end
-
- def #{self.safe_alias}
- category_id = read_attribute(:#{self._name})
- self.class.#{self.safe_alias}_items.find { |item| item._id == category_id }.name rescue category_id
- end
- EOF
- end
-
- end
-
- class Item
-
- include Mongoid::Document
-
- field :name
- field :position, :type => Integer, :default => 0
-
- embedded_in :custom_field, :inverse_of => :category_items
-
- validates_presence_of :name
- end
- end
- end
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/lib/custom_fields/types/date.rb b/vendor/plugins/custom_fields/lib/custom_fields/types/date.rb
deleted file mode 100644
index feb17c29..00000000
--- a/vendor/plugins/custom_fields/lib/custom_fields/types/date.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-module CustomFields
- module Types
- module Date
-
- extend ActiveSupport::Concern
-
- included do
- register_type :date, ::Date
- end
-
- module InstanceMethods
-
- def apply_date_type(klass)
-
- klass.class_eval <<-EOF
- def #{self.safe_alias}
- self.#{self._name}.strftime(I18n.t('date.formats.default')) rescue nil
- end
-
- def #{self.safe_alias}=(value)
- if value.is_a?(String)
- date = ::Date._strptime(value, I18n.t('date.formats.default'))
- value = Date.new(date[:year], date[:mon], date[:mday])
- end
- self.#{self._name} = value
- end
- EOF
-
- end
-
- end
-
- end
- end
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/lib/custom_fields/types/default.rb b/vendor/plugins/custom_fields/lib/custom_fields/types/default.rb
deleted file mode 100644
index 5664c82d..00000000
--- a/vendor/plugins/custom_fields/lib/custom_fields/types/default.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-module CustomFields
- module Types
- module Default
- extend ActiveSupport::Concern
-
- included do
- cattr_accessor :field_types
- end
-
- module InstanceMethods
-
- def apply_default_type(klass)
- klass.class_eval <<-EOF
- alias :#{self.safe_alias} :#{self._name}
- alias :#{self.safe_alias}= :#{self._name}=
- EOF
- end
-
- end
-
- module ClassMethods
-
- def register_type(kind, klass = ::String)
- self.field_types ||= {}
- self.field_types[kind.to_sym] = klass unless klass.nil?
-
- self.class_eval <<-EOF
- def #{kind.to_s}?
- self.kind.downcase == '#{kind}' rescue false
- end
- EOF
- end
-
- end
- end
- end
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/lib/custom_fields/types/file.rb b/vendor/plugins/custom_fields/lib/custom_fields/types/file.rb
deleted file mode 100644
index 5c25aa47..00000000
--- a/vendor/plugins/custom_fields/lib/custom_fields/types/file.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-module CustomFields
- module Types
- module File
-
- extend ActiveSupport::Concern
-
- included do
- register_type :file, nil # do not create the default field
- end
-
- module InstanceMethods
-
- def apply_file_type(klass)
-
- klass.mount_uploader self._name, FileUploader
-
- self.apply_default_type(klass)
- end
-
- end
-
- class FileUploader < ::CarrierWave::Uploader::Base
- end
-
- end
- end
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/lib/custom_fields/types/string.rb b/vendor/plugins/custom_fields/lib/custom_fields/types/string.rb
deleted file mode 100644
index 74a279a2..00000000
--- a/vendor/plugins/custom_fields/lib/custom_fields/types/string.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-module CustomFields
- module Types
- module String
-
- extend ActiveSupport::Concern
-
- included do
- register_type :string
- end
-
- end
- end
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/lib/custom_fields/types/text.rb b/vendor/plugins/custom_fields/lib/custom_fields/types/text.rb
deleted file mode 100644
index 0b995f2d..00000000
--- a/vendor/plugins/custom_fields/lib/custom_fields/types/text.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-module CustomFields
- module Types
- module Text
-
- extend ActiveSupport::Concern
-
- included do
- field :text_formatting, :default => 'html'
-
- register_type :text
- end
-
- end
- end
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/spec/fixtures/doc.txt b/vendor/plugins/custom_fields/spec/fixtures/doc.txt
deleted file mode 100644
index 93b493a5..00000000
--- a/vendor/plugins/custom_fields/spec/fixtures/doc.txt
+++ /dev/null
@@ -1 +0,0 @@
-Hello world !
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/spec/integration/custom_fields_for_spec.rb b/vendor/plugins/custom_fields/spec/integration/custom_fields_for_spec.rb
deleted file mode 100644
index 68b1ecac..00000000
--- a/vendor/plugins/custom_fields/spec/integration/custom_fields_for_spec.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-require 'spec_helper'
-
-describe CustomFields::CustomFieldsFor do
-
- describe 'Saving' do
-
- before(:each) do
- @project = Project.new(:name => 'Locomotive')
- @project.person_custom_fields.build(:label => 'E-mail', :_alias => 'email', :kind => 'String')
- @project.person_custom_fields.build(:label => 'Age', :_alias => 'age', :kind => 'String')
- end
-
- context '@create' do
-
- it 'persists parent object' do
- lambda { @project.save }.should change(Project, :count).by(1)
- end
-
- it 'persists custom fields' do
- @project.save && @project.reload
- @project.person_custom_fields.count.should == 2
- end
-
- end
-
- end
-
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/spec/integration/types/category_spec.rb b/vendor/plugins/custom_fields/spec/integration/types/category_spec.rb
deleted file mode 100644
index c107dc0c..00000000
--- a/vendor/plugins/custom_fields/spec/integration/types/category_spec.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-require 'spec_helper'
-
-describe CustomFields::Types::Category do
-
- before(:each) do
- @project = Project.new(:name => 'Locomotive')
- @field = @project.task_custom_fields.build(:label => 'Main category', :_alias => 'main_category', :kind => 'Category')
- end
-
- context 'saving category items' do
-
- before(:each) do
- @field.category_items.build :name => 'Development'
- @field.category_items.build :name => 'Design'
- @field.updated_at = Time.now
- end
-
- it 'persists items' do
- @field.save.should be_true
- @project.reload
- @project.task_custom_fields.first.category_items.size.should == 2
- end
-
- end
-
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/spec/integration/types/file_spec.rb b/vendor/plugins/custom_fields/spec/integration/types/file_spec.rb
deleted file mode 100644
index 809144c9..00000000
--- a/vendor/plugins/custom_fields/spec/integration/types/file_spec.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-require 'spec_helper'
-
-describe CustomFields::Types::File do
-
- before(:each) do
- @project = Project.new(:name => 'Locomotive')
- @project.task_custom_fields.build(:label => 'Screenshot', :_alias => 'screenshot', :kind => 'File')
- @project.save
- @task = @project.tasks.build
- end
-
- it 'attaches file' do
- @task.screenshot = FixturedFile.open('doc.txt')
- @task.save
- @task.screenshot.url.should == '/uploads/doc.txt'
- end
-
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/spec/models/person.rb b/vendor/plugins/custom_fields/spec/models/person.rb
deleted file mode 100644
index 47ed257a..00000000
--- a/vendor/plugins/custom_fields/spec/models/person.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-class Person
-
- include Mongoid::Document
- include CustomFields::ProxyClassEnabler
-
- field :full_name
-
- embedded_in :project, :inverse_of => :people
-
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/spec/models/project.rb b/vendor/plugins/custom_fields/spec/models/project.rb
deleted file mode 100644
index 888487d6..00000000
--- a/vendor/plugins/custom_fields/spec/models/project.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-class Project
-
- include Mongoid::Document
- include CustomFields::ProxyClassEnabler
- include CustomFields::CustomFieldsFor
-
- field :name
- field :description
-
- references_many :people
- embeds_many :tasks
-
- custom_fields_for :people
- custom_fields_for :tasks
-
- scope :ordered, :order_by => [[:name, :asc]]
-
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/spec/models/task.rb b/vendor/plugins/custom_fields/spec/models/task.rb
deleted file mode 100644
index 36cba66e..00000000
--- a/vendor/plugins/custom_fields/spec/models/task.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-class Task
-
- include Mongoid::Document
- include CustomFields::ProxyClassEnabler
-
- field :title
-
- embedded_in :project, :inverse_of => :tasks
-
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/spec/spec_helper.rb b/vendor/plugins/custom_fields/spec/spec_helper.rb
deleted file mode 100644
index ccdf2e7c..00000000
--- a/vendor/plugins/custom_fields/spec/spec_helper.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-$LOAD_PATH.unshift(File.dirname(__FILE__))
-$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
-
-MODELS = File.join(File.dirname(__FILE__), 'models')
-$LOAD_PATH.unshift(MODELS)
-
-require 'rubygems'
-require 'bundler'
-Bundler.setup
-Bundler.require
-
-require 'mongoid'
-require 'mocha'
-require 'rspec'
-require 'custom_fields'
-
-Dir[ File.join(MODELS, "*.rb") ].sort.each { |file| require File.basename(file) }
-
-require 'support/mongoid'
-require 'support/carrierwave'
-
-Rspec.configure do |config|
- config.mock_with :mocha
- config.after :suite do
- Mongoid.master.collections.select { |c| c.name != 'system.indexes' }.each(&:drop)
- end
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/spec/support/carrierwave.rb b/vendor/plugins/custom_fields/spec/support/carrierwave.rb
deleted file mode 100644
index d44d512c..00000000
--- a/vendor/plugins/custom_fields/spec/support/carrierwave.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-require 'carrierwave/test/matchers'
-
-CarrierWave.configure do |config|
- config.storage = :file
- config.store_dir = "uploads"
- config.cache_dir = "cache"
- config.root = File.join(File.dirname(__FILE__), '..', 'tmp')
-end
-
-module FixturedFile
- def self.open(filename)
- File.new(self.path(filename))
- end
-
- def self.path(filename)
- File.join(File.dirname(__FILE__), '..', 'fixtures', filename)
- end
-
- def self.duplicate(filename)
- dst = File.join(File.dirname(__FILE__), '..', 'tmp', filename)
- FileUtils.cp self.path(filename), dst
- dst
- end
-
- def self.reset!
- FileUtils.rm_rf(File.join(File.dirname(__FILE__), '..', 'tmp'))
- FileUtils.mkdir(File.join(File.dirname(__FILE__), '..', 'tmp'))
- end
-end
-
-FixturedFile.reset!
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/spec/support/mongoid.rb b/vendor/plugins/custom_fields/spec/support/mongoid.rb
deleted file mode 100644
index 8cff576c..00000000
--- a/vendor/plugins/custom_fields/spec/support/mongoid.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-Mongoid.configure do |config|
- name = "custom_fields_test"
- host = "localhost"
- config.master = Mongo::Connection.new.db(name)
- # config.master = Mongo::Connection.new('localhost', '27017', :logger => Logger.new($stdout)).db(name)
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/spec/unit/custom_field_spec.rb b/vendor/plugins/custom_fields/spec/unit/custom_field_spec.rb
deleted file mode 100644
index 3799dd9f..00000000
--- a/vendor/plugins/custom_fields/spec/unit/custom_field_spec.rb
+++ /dev/null
@@ -1,42 +0,0 @@
-require 'spec_helper'
-
-describe CustomFields::Field do
-
- it 'is initialized' do
- lambda { CustomFields::Field.new }.should_not raise_error
- end
-
- context '#mongoid' do
-
- before(:each) do
- @field = CustomFields::Field.new(:label => 'manager', :_name => 'field_1', :kind => 'String', :_alias => 'manager')
- @field.stubs(:valid?).returns(true)
- @project = Project.to_klass_with_custom_fields(@field).new
- end
-
- it 'is added to the list of mongoid fields' do
- @project.fields['field_1'].should_not be_nil
- end
-
- end
-
- context 'on target class' do
-
- before(:each) do
- @field = CustomFields::Field.new(:label => 'manager', :_name => 'field_1', :kind => 'String', :_alias => 'manager')
- @field.stubs(:valid?).returns(true)
- @project = Project.to_klass_with_custom_fields(@field).new
- end
-
- it 'has a new field' do
- @project.respond_to?(:manager).should be_true
- end
-
- it 'sets / retrieves a value' do
- @project.manager = 'Mickael Scott'
- @project.manager.should == 'Mickael Scott'
- end
-
- end
-
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/spec/unit/custom_fields_for_spec.rb b/vendor/plugins/custom_fields/spec/unit/custom_fields_for_spec.rb
deleted file mode 100644
index 31135dd3..00000000
--- a/vendor/plugins/custom_fields/spec/unit/custom_fields_for_spec.rb
+++ /dev/null
@@ -1,106 +0,0 @@
-require 'spec_helper'
-
-describe CustomFields::CustomFieldsFor do
-
- context '#proxy class' do
-
- before(:each) do
- @project = Project.new
- @klass = @project.tasks.klass
- end
-
- it 'returns the proxy class in the association' do
- @klass.should == @project.tasks.build.class
- end
-
- it 'has a link to the parent' do
- @klass._parent.should == @project
- end
-
- it 'has the association name which references to' do
- @klass.association_name.should == 'tasks'
- end
-
- end
-
- context 'with embedded collection' do
-
- context '#association' do
-
- before(:each) do
- @project = Project.new
- end
-
- it 'has custom fields for embedded collection' do
- @project.respond_to?(:task_custom_fields).should be_true
- end
-
- end
-
- context '#building' do
-
- before(:each) do
- @project = Project.new
- @project.task_custom_fields.build :label => 'Short summary', :_alias => 'summary', :kind => 'String'
- @task = @project.tasks.build
- end
-
- it 'returns a new document whose Class is different from the original one' do
- @task.class.should_not == Task
- end
-
- it 'returns a new document with custom field' do
- @project.tasks.build
- @project.tasks.build
- @task.respond_to?(:summary).should be_true
- end
-
- it 'sets/gets custom attributes' do
- @task.summary = 'Lorem ipsum...'
- @task.summary.should == 'Lorem ipsum...'
- end
-
- end
-
- end
-
- context 'with related collection' do
-
- context '#association' do
-
- before(:each) do
- @project = Project.new
- end
-
- it 'has custom fields for related collections' do
- @project.respond_to?(:person_custom_fields).should be_true
- end
-
- end
-
- context '#building' do
-
- before(:each) do
- @project = Project.new
- @project.person_custom_fields.build :label => 'Position in the project', :_alias => 'position', :kind => 'String'
- @person = @project.people.build
- end
-
- it 'returns a new document whose Class is different from the original one' do
- @person.class.should_not == Person
- end
-
- it 'returns a new document with custom field' do
- @person.respond_to?(:position).should be_true
- end
-
- it 'sets/gets custom attributes' do
- @person.position = 'Designer'
- @person.position.should == 'Designer'
- end
-
- end
-
- end
-
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/spec/unit/proxy_class_enabler_spec.rb b/vendor/plugins/custom_fields/spec/unit/proxy_class_enabler_spec.rb
deleted file mode 100644
index ec7d5029..00000000
--- a/vendor/plugins/custom_fields/spec/unit/proxy_class_enabler_spec.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-require 'spec_helper'
-
-describe CustomFields::ProxyClassEnabler do
-
- context '#proxy klass' do
-
- before(:each) do
- @klass = Task.to_klass_with_custom_fields([])
- end
-
- it 'does not be flagged as a inherited document' do
- @klass.new.hereditary?.should be_false
- end
-
- it 'has a list of custom fields' do
- @klass.custom_fields.should == []
- end
-
- it 'has the exact same model name than its parent' do
- @klass.model_name.should == 'Task'
- end
-
- end
-
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/spec/unit/types/boolean_spec.rb b/vendor/plugins/custom_fields/spec/unit/types/boolean_spec.rb
deleted file mode 100644
index b28a68a1..00000000
--- a/vendor/plugins/custom_fields/spec/unit/types/boolean_spec.rb
+++ /dev/null
@@ -1,81 +0,0 @@
-require 'spec_helper'
-
-describe CustomFields::Types::Boolean do
-
- context 'on field class' do
-
- before(:each) do
- @field = CustomFields::Field.new
- end
-
- it 'returns true if it is a Boolean' do
- @field.kind = 'boolean'
- @field.boolean?.should be_true
- end
-
- it 'returns false if it is not a Boolean' do
- @field.kind = 'string'
- @field.boolean?.should be_false
- end
-
- end
-
- context 'on target class' do
-
- before(:each) do
- @project = build_project_with_boolean
- end
-
- context '#setting' do
-
- context '#true' do
-
- it 'sets value from an integer' do
- @project.active = 1
- @project.active.should == true
- @project.field_1.should == '1'
- end
-
- it 'sets value from a string' do
- @project.active = '1'
- @project.active.should == true
- @project.field_1.should == '1'
-
- @project.active = 'true'
- @project.active.should == true
- @project.field_1.should == 'true'
- end
-
- end
-
- context '#false' do
-
- it 'sets value from an integer' do
- @project.active = 0
- @project.active.should == false
- @project.field_1.should == '0'
- end
-
- it 'sets value from a string' do
- @project.active = '0'
- @project.active.should == false
- @project.field_1.should == '0'
-
- @project.active = 'false'
- @project.active.should == false
- @project.field_1.should == 'false'
- end
-
- end
-
- end
-
- end
-
- def build_project_with_boolean
- field = CustomFields::Field.new(:label => 'Active', :_name => 'field_1', :kind => 'Boolean')
- field.stubs(:valid?).returns(true)
- Project.to_klass_with_custom_fields(field).new
- end
-
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/spec/unit/types/category_spec.rb b/vendor/plugins/custom_fields/spec/unit/types/category_spec.rb
deleted file mode 100644
index 9dda3d66..00000000
--- a/vendor/plugins/custom_fields/spec/unit/types/category_spec.rb
+++ /dev/null
@@ -1,112 +0,0 @@
-require 'spec_helper'
-
-describe CustomFields::Types::Category do
-
- context 'on field class' do
-
- before(:each) do
- @field = CustomFields::Field.new
- end
-
- it 'has the category items field' do
- @field.respond_to?(:category_items).should be_true
- end
-
- it 'has the apply method used for the target object' do
- @field.respond_to?(:apply_category_type).should be_true
- end
-
- it 'returns true if it is a Category' do
- @field.kind = 'category'
- @field.category?.should be_true
- end
-
- it 'returns false if it is not a Category' do
- @field.kind = 'string'
- @field.category?.should be_false
- end
-
- end
-
- context 'on target class' do
-
- before(:each) do
- @project = build_project_with_category
- end
-
- it 'has getter/setter' do
- @project.respond_to?(:global_category).should be_true
- @project.respond_to?(:global_category=).should be_true
- end
-
- it 'has the values of this category' do
- @project.class.global_category_names.should == %w{Maintenance Design Development}
- end
-
- it 'sets the category from a name' do
- @project.global_category = 'Design'
- @project.global_category.should == 'Design'
- @project.field_1.should == '42'
- end
-
- it 'sets the category even it does not exit' do
- @project.global_category = 'Accounting'
- @project.global_category.should == 'Accounting'
- @project.field_1.should == 'Accounting'
- end
-
- context 'group by category' do
-
- before(:each) do
- seed_projects
- @groups = @project.class.group_by_global_category
- end
-
- it 'is an non empty array' do
- @groups.class.should == Array
- @groups.size.should == 3
- end
-
- it 'is an array of hash composed of a name' do
- @groups.collect { |g| g[:name] }.should == %w{Maintenance Design Development}
- end
-
- it 'is an array of hash composed of a list of objects' do
- @groups[0][:items].size.should == 0
- @groups[1][:items].size.should == 1
- @groups[2][:items].size.should == 2
- end
-
- it 'passes method to retrieve items' do
- @project.class.expects(:ordered)
- @project.class.group_by_global_category(:ordered)
- end
-
- end
-
- end
-
- def build_project_with_category
- field = build_category
- Project.to_klass_with_custom_fields(field).new
- end
-
- def build_category
- field = CustomFields::Field.new(:label => 'global_category', :_name => 'field_1', :kind => 'Category')
- field.stubs(:valid?).returns(true)
- field.category_items.build :name => 'Development', :_id => '41', :position => 2
- field.category_items.build :name => 'Design', :_id => '42', :position => 1
- field.category_items.build :name => 'Maintenance', :_id => '43', :position => 0
- field
- end
-
- def seed_projects
- list = [
- @project.class.new(:name => 'Locomotive CMS', :global_category => '41'),
- @project.class.new(:name => 'Ruby on Rails', :global_category => '41'),
- @project.class.new(:name => 'Dribble', :global_category => '42')
- ]
- @project.class.stubs(:all).returns(list)
- end
-
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/spec/unit/types/date_spec.rb b/vendor/plugins/custom_fields/spec/unit/types/date_spec.rb
deleted file mode 100644
index 4116b419..00000000
--- a/vendor/plugins/custom_fields/spec/unit/types/date_spec.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-require 'spec_helper'
-
-describe CustomFields::Types::Date do
-
- context 'on field class' do
-
- before(:each) do
- @field = CustomFields::Field.new
- end
-
- it 'returns true if it is a Date' do
- @field.kind = 'Date'
- @field.date?.should be_true
- end
-
- it 'returns false if it is not a Date' do
- @field.kind = 'string'
- @field.date?.should be_false
- end
-
- end
-
- context 'on target class' do
-
- before(:each) do
- @project = build_project_with_date
- @date = Date.parse('2010-06-29')
- end
-
- it 'sets value from a date' do
- @project.started_at = @date
- @project.started_at.should == '2010-06-29'
- @project.field_1.class.should == Date
- @project.field_1.should == @date
- end
-
- it 'sets value from a string' do
- @project.started_at = '2010-06-29'
- @project.started_at.class.should == String
- @project.started_at.should == '2010-06-29'
- @project.field_1.class.should == Date
- @project.field_1.should == @date
- end
-
- it 'sets nil value' do
- @project.started_at = nil
- @project.started_at.should be_nil
- @project.field_1.should be_nil
- end
-
- end
-
- def build_project_with_date
- field = CustomFields::Field.new(:label => 'Started at', :_name => 'field_1', :kind => 'Date')
- field.stubs(:valid?).returns(true)
- Project.to_klass_with_custom_fields(field).new
- end
-
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/spec/unit/types/file_spec.rb b/vendor/plugins/custom_fields/spec/unit/types/file_spec.rb
deleted file mode 100644
index 4b329e3f..00000000
--- a/vendor/plugins/custom_fields/spec/unit/types/file_spec.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-require 'spec_helper'
-
-describe CustomFields::Types::Date do
-
- context 'on field class' do
-
- before(:each) do
- @field = CustomFields::Field.new
- end
-
- it 'returns true if it is a Date' do
- @field.kind = 'File'
- @field.file?.should be_true
- end
-
- it 'returns false if it is not a Date' do
- @field.kind = 'string'
- @field.file?.should be_false
- end
-
- end
-
-end
\ No newline at end of file
diff --git a/vendor/plugins/custom_fields/uninstall.rb b/vendor/plugins/custom_fields/uninstall.rb
deleted file mode 100644
index 97383334..00000000
--- a/vendor/plugins/custom_fields/uninstall.rb
+++ /dev/null
@@ -1 +0,0 @@
-# Uninstall hook code here