diff --git a/Gemfile.lock b/Gemfile.lock index 55ff43f7..2ab0eb5d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -111,7 +111,7 @@ GEM rack-test (>= 0.5.4) selenium-webdriver (~> 2.0) xpath (~> 0.1.4) - carrierwave (0.6.0) + carrierwave (0.6.1) activemodel (>= 3.2.0) activesupport (>= 3.2.0) carrierwave-mongoid (0.1.3) @@ -148,7 +148,7 @@ GEM orm_adapter (~> 0.0.3) warden (~> 1.1) diff-lcs (1.1.3) - dragonfly (0.9.11) + dragonfly (0.9.12) rack ejs (1.0.0) erubis (2.7.0) @@ -176,7 +176,7 @@ GEM formatador (0.2.1) formtastic (2.0.2) rails (~> 3.0) - fssm (0.2.8.1) + fssm (0.2.9) gherkin (2.9.3) json (>= 1.4.6) haml (3.1.4) @@ -214,7 +214,7 @@ GEM mocha (0.9.12) mongo (1.5.2) bson (= 1.5.2) - mongoid (2.4.7) + mongoid (2.4.8) activemodel (~> 3.1) mongo (~> 1.3) tzinfo (~> 0.3.22) @@ -279,7 +279,7 @@ GEM railties (>= 3.0) rspec (~> 2.8.0) ruby-hmac (0.4.0) - rubyzip (0.9.6.1) + rubyzip (0.9.7) sanitize (2.0.3) nokogiri (>= 1.4.4, < 1.6) sass (3.1.15) @@ -303,7 +303,7 @@ GEM treetop (1.4.10) polyglot polyglot (>= 0.3.1) - tzinfo (0.3.32) + tzinfo (0.3.33) uglifier (1.2.4) execjs (>= 0.3.0) multi_json (>= 1.0.2) diff --git a/app/assets/javascripts/locomotive/models/page.js.coffee b/app/assets/javascripts/locomotive/models/page.js.coffee index 352b440c..49c0169a 100644 --- a/app/assets/javascripts/locomotive/models/page.js.coffee +++ b/app/assets/javascripts/locomotive/models/page.js.coffee @@ -16,7 +16,7 @@ class Locomotive.Models.Page extends Backbone.Model toJSON: -> _.tap super, (hash) => - _.each ['edit_url', 'parent_id_text', 'response_type_text'], (key) => delete hash[key] + _.each ['fullpath', 'localized_fullpaths', 'edit_url', 'parent_id_text', 'response_type_text'], (key) => delete hash[key] delete hash['editable_elements'] hash.editable_elements = @get('editable_elements').toJSONForSave() if @get('editable_elements')? && @get('editable_elements').length > 0 diff --git a/app/assets/javascripts/locomotive/views/pages/_form_view.js.coffee b/app/assets/javascripts/locomotive/views/pages/_form_view.js.coffee index 35fa1168..b2b42730 100644 --- a/app/assets/javascripts/locomotive/views/pages/_form_view.js.coffee +++ b/app/assets/javascripts/locomotive/views/pages/_form_view.js.coffee @@ -72,7 +72,7 @@ class Locomotive.Views.Pages.FormView extends Locomotive.Views.Shared.FormView @editor = CodeMirror.fromTextArea input.get()[0], mode: 'liquid' autoMatchParens: false - lineNumbers: false + lineNumbers: true passDelay: 50 tabMode: 'shift' theme: 'default' diff --git a/app/models/locomotive/extensions/page/fullpath.rb b/app/models/locomotive/extensions/page/fullpath.rb index 57b90ba9..5381efb7 100644 --- a/app/models/locomotive/extensions/page/fullpath.rb +++ b/app/models/locomotive/extensions/page/fullpath.rb @@ -16,6 +16,8 @@ module Locomotive before_validation :get_wildcards_from_parent before_validation :add_slug_to_wildcards before_save :build_fullpath + after_update :propagate_fullpath_changes + # before_save :set_children_autosave # before_rearrange :foo #propagate_fullpath_changes # after_save :propagate_fullpath_changes @@ -137,6 +139,12 @@ module Locomotive end end + def propagate_fullpath_changes + if self.fullpath_changed? || self.wildcards_changed? + self.rearrange_children! + end + end + # def must_propagate_fullpath_changes? # self.wildcard_changed? || self.slug_changed? # end diff --git a/app/models/locomotive/page.rb b/app/models/locomotive/page.rb index 2e126c2d..c4109ee8 100644 --- a/app/models/locomotive/page.rb +++ b/app/models/locomotive/page.rb @@ -49,7 +49,7 @@ module Locomotive scope :not_found, :where => { :slug => '404', :depth => 0 } scope :published, :where => { :published => true } scope :handle, lambda { |handle| { :where => { :handle => handle } } } - scope :minimal_attributes, lambda { |attrs = []| { :only => (attrs || []) + %w(title slug fullpath position depth published with_wildcards redirect listed response_type parent_id site_id created_at updated_at) } } + scope :minimal_attributes, lambda { |attrs = []| { :only => (attrs || []) + %w(title slug fullpath position depth published with_wildcards redirect listed wildcard response_type parent_id parent_ids site_id created_at updated_at) } } ## methods ## diff --git a/app/views/locomotive/pages/_form.html.haml b/app/views/locomotive/pages/_form.html.haml index e825b23d..1c877e4b 100644 --- a/app/views/locomotive/pages/_form.html.haml +++ b/app/views/locomotive/pages/_form.html.haml @@ -38,9 +38,9 @@ = f.input :published, :as => :'Locomotive::Toggle' - = f.input :listed, :as => :'Locomotive::Toggle' + = f.input :listed, :as => :'Locomotive::Toggle', :wrapper_html => { :style => "#{'display: none' if @page.has_wildcards?}" } - = f.input :redirect, :as => :'Locomotive::Toggle', :wrapper_html => { :style => "#{'display: none' if !@page.default_response_type?}" } + = f.input :redirect, :as => :'Locomotive::Toggle', :wrapper_html => { :style => "#{'display: none' if !@page.default_response_type? || @page.has_wildcards?}" } = f.input :cache_strategy, :as => :select, :collection => options_for_page_cache_strategy, :include_blank => false, :wrapper_html => { :style => "#{'display: none' if @page.redirect?}" } diff --git a/config/initializers/haml.rb b/config/initializers/haml.rb index 31febf8b..711427e0 100644 --- a/config/initializers/haml.rb +++ b/config/initializers/haml.rb @@ -1 +1,2 @@ -# Haml::Template.options[:ugly] = true # improve performance in dev \ No newline at end of file +Haml::Template.options[:ugly] = true +Haml::Template.options[:format] = :html5 \ No newline at end of file diff --git a/doc/TODO b/doc/TODO index 6c11b652..e019557d 100644 --- a/doc/TODO +++ b/doc/TODO @@ -1,424 +1,11 @@ BOARD: -x namespace assets -x bugs: - x toggler - x advanced options (redirect url missing) - x locomotive_media (not animating on open) - x undefined method `_selector' for # -x editable_elements => view + handlebar template -x editable_short_text => tinymce -x editable_file => - x backbone / handlebar - x new formtastic inputs -x menu / submenu in full css3 (no images) -x fix css in firefox -x update page in ajax -x edit my site - x css - x robots.txt - x domains - x roles - x save -x fix other sections - x edit my account - x create a new site - x create a new accounts - x theme assets - x polish the page - x snippets - x delete in ajax - x upload many files at once - x import/export - x export - x site picker - x content types - x move content instances into their own collection - x manage custom_fields - x automatic name - x required - x editable plugin: add class depending on the type => surrounding span instead - x position - x open the nested form - x remove an entry - x look n feel - x display errors - x slugify - x refactor highlighted_field (field id instead of name) - x other content type options - x show / hide options of a field based on its type - x select: add/edit/remove options - x text: formatting - x change in main menu - x manage contents - x list (highlighted field) - x slugify - x crud - x new - x date - x checkbox - x html - x file - x edit - x destroy - x public_form (previously api something) - x bug text formatting - x custom_fields: use the appropriate icon to drag select options - x bug ui with contents popup - x use list_or_group_entries instead of ordered_entries -x i18n - x add locales a site responds to - x locale switcher - x constraint: one locale at least - x front - x pages - x inline-editor - x back to default locale (if changed in settings) and when creating new pages / entries -- inline editor - x rack - x iframe - (- remove inline-editor tag) - x save editable elements - x notification (growl) - x change page - x i18n - - style the "ADMIN" button - - aloha: - x remove sidebar - - i18n - - insert image -x deployment - x fix integration problems - x pre-compile assets -x API - x authentication from a token + controller to deliver a token - x api routes - x change api location - (- add a way to custom the as_json method within the presenters (by default as_json ?) + custom responder ?) - x REST actions: - x CRUD theme assets - x CRUD snippets - x CRUD content assets - x CRUD pages - x CRUD content types - x data ? -x script to migrate existing site - x i18n -x upgrade to rails 3.2 (https://github.com/locomotivecms/engine/pull/281/files) -x missing custom_fields - x belongs_to - x has_many - x many_to_many -x simplify cells integration when modifying a menu from the main app -x heroku module for locomotive -x refactoring - x remove the import / export scripts - x remove the cross domain authentication (use auth_token instead) - x where to put Locomotive::InlineEditorMiddleware ? -x global regions: keyword in editable element (http://www.mongodb.org/display/DOCS/Updating) -x override sort for contents - -- bugs / ui tweaks - x unable to toggle the "required" check_boxes for content types - x unable to sign out - x unable to remove a field - x "back to admin" link does not work if inline editor disabled - x unable to delete memberships - - editable_elements does not display the first time they get created (and if there are no existing ones) - - display by categories does not work when localized - - disallow to click twice on the submit form button (spinner ?) - - message to notify people if their browser is too old - - weird behaviour when changing the default locale of a site - -? install a site by default at the first installation (without asking) - -BACKLOG: - -- custom_fields: - - validation: regexp (pre-defined regexps ?) - x new type: belongs_to => association -- inline editing (http://www.aloha-editor.com/wiki/index.php/Aloha_PHP_Example) - - html view in the aloha popup - - editable elements should wrap a tag: div, h1, ...etc (default span) - - edit images (upload new ones, ...etc) => wait for aloha or send them an email ? -- cucumber features for admin pages (in progress) -(- duostack/doutcloud version) -- write my first tutorial about locomotive -- upgrade warning if new version of locomotive (maybe based on the commit id) -- deploying workflow: - - roll back a bad update - - conflicts with content types - - dev -> staging -> production - - sync data - - import only theme assets -- endless pagination - -- tooltip to explain the difference between 1.) Admin 2.) Author 3.) Designer? -- [bushido] guiders / welcome page / devise cas authentication (SSO) - -REFACTORING: - - - move content_type and content_instances in the CustomFields plugin (much more appropriate) - -BUGS: - x mode author: settings KO + editable elements non visibles - x locales pour le locomotive editor => KO - ! impossible de sauvegarder une page - - -NICE TO HAVE: -- export site -- super_finder -- traffic statistics -- asset picker (content instance) -- page with regexp url ? -- automatic update ! -- page not found (front) => if logged in, link to create the page -- switch to list (theme assets / assets ?). delete all in once (with checkbox) or see details (updated_at, size, ...etc) -- code completion ? http://blog.quplo.com/2010/06/common-sense-code-completion/ - -DONE: - -x tiny mce or similar for custom field text type. -x refactor custom field types -x new custom field types - x boolean -x enable/disable text formatting -x custom fields for asset collections -x [BUG] impossible to remove many assets in an asset collection -x new custom field type: date -x missing key: en, admin, theme_assets, images, no_items -x new custom field type: file - x update custom_fields plugin - x locomotive ui - x liquid templates -x rss parser -x localize application in French - x default - x devise - x carrierwave - x localize devise emails - x admin -x change credits in the admin footer -x license -x textile filter -x [bug] varnish can not be refreshed in heroku so "max-age" has to be disabled => modify cache strategy -x "remember me" should always be enabled -x sitemap -x refactoring admin crud (pages + layouts + snippets) -x flash messages in French -x save layout / snippet / page / stylesheet / javascript with CMD + S (ajax) -x change action icons according to the right action [Sacha] -x publish event when saving form in ajax (for instance, in order to update account name or site name) -x page templatized (bound to a model) -x theme asset picker when editing layout / snippet -x templatized: do not display content with visible / active set to false -x theme assets: disable version if not image (handled by the new version of Carrierwave) -x rack app to map pretty asset url to S3 => shortcut urls instead -x site selector (cross domain authentication) -x nice error page -x nice 404 page (admin section) -x liquid inheritance -x bug editable_xxx disabled for nil block -! duplicated block name -x display liquid errors -x theme assets selector in page editor -x saving page in ajax -x editable_long_text tag -x blocking issue when modifying the parent of 2 templates => one of the 2 children has reference of the first child -x editable_file tag -x stylish file field -x remove not used editable element all in once -x default content from parent editable element -x unable to upload/remove editable file -x customize tinyMCE: no html popup => div popup, nice icons -x add images / files inside long text element (back-office side at first ?) -x create a repo for a tool "a la" vision -x asset collections => liquid -x images tag to write -! apply http://github.com/flori/json/commit/2c0f8d2c9b15a33b8d10ffcb1959aef54d320b57 -x snippet dependencies => do not work correctly -? google analytics tag -x mask internal asset_collections -x refactor ui for the theme assets page -x fix assets liquid tags / filters -x upload and insert new images in a css or js from the ui is broken -x proxy for fonts (http://markevans.github.com/dragonfly/file.Rails3.html) -x order yaml file (http://www.ruby-forum.com/topic/120295) -x fix tests -x inline editing (http://www.aloha-editor.com/wiki/index.php/Aloha_PHP_Example) - x spinner - x save automatically (callback) => store modifications - x admin buttons - x edit page - x save / cancel - x back to back-office => admin settings of the page - (- duplicate page ?) - (- super bonus statistics) - x locale - x store page toolbar status in cookie - x trim short text content - x namespace js functions -x import tool: - x select field (see custom fields and nocoffee theme) ? - x disable sub tasks by passing options - x exceptions - x page to import theme - x contents: group_by, oder_by, api_enabled - x folders for theme assets - x theme assets whitelist - x fonts - x asset collections -x rewrite the unzip process (for the import) -x bug with asset collections (assets disappear if we save the collection ?!) -x import tool: - x asset whitelist - x do not override existing site name - x add samples option - x content types - x asset collections - x page templatized (tied to content type) - x remove existing pages / contents option => reset - x give choice to reset site / add samples - x french translatations -x cosmetic / ui bugs / bugs: - x segmentation fault with with_scope - x paginate is not working - x redirection in dev does not work correctly for cross domain - x drag&drop for assets ('last' class issue) - x increase the input field width for domain names - x assets within custom contents are not deleted when the whole content type gets destroyed (after_destroy callback ?) -x api - x handle html request (for now, it's just json) -x installation guide - x detect if new installation - x no-site error redirects to the first step - x steps: - x welcome: domains, ...etc - x Create account - x Create new site (name, subdomain) / Import theme (worker or list of sites from fs) -x import: - x ordered pages ? - x order_by for content_types ? created_at, updated_at -x liquid: - x nav - x no_wrapper option - x regexp to get rid of some pages - x filters - x default_pagination: labels -x [content types] the "display column" selector should not include file types -x Worker => Heroku / S3 (not so sure finally) -x jammit-s3: assets -x copy assets.yml config file when using it as gem (http://asciicasts.com/episodes/218-making-generators-in-rails-3) -x import theme without delayed_job -x rspec 2.3 -x ruby 1.9.2: - x DelayedJob not working -x new version of Aloha-Editor -x locomotive gem: test with staging -x nav tag: - x site | page | parent - x retrieve only important page information from mongodb -x published by default when importing pages -x page redirection -x notify accounts when new instance of models (opt): none, one or many accounts. Used for contact form. - x implementation - x emails - x tests -x fix bug issue about (custom fields) -x moving to mongoid 2.0.0 rc.6 - x accepts_nested_attributes (javascript part) - x check the theme uploader - x release new version of CustomFields, ActsAsTree gems -x add metadata to sites -x pull requests #31 et #32 -x password / new_password -x bugs - x custom_fields not deleted (doesn't use index anymore) - ? editable_elements slug becomes nil - x editable_elements not updated (doesn't use index anymore) - x uploading videos http://groups.google.com/group/carrierwave/browse_thread/thread/6e211d98f1ff4bc0/51717c2167695ca2?lnk=gst&q=version#51717c2167695ca2 -x custom fields: accepts_nested_attributes weird behaviour when creating new content type + adding random fields -x better icons for mime type (css3) -x validation for custom fields: required done -x pull request #44 -x bug on dates (https://github.com/locomotivecms/engine/issues#issue/48) -x generated sitemaps are invalid (url + date) -x integrate new locomotivecms home -x seo section for the page form: seo title, seo keywords, seo description -x bugs: #50, #51 -x 2 different sites on the same main domain (one in www, the other one in something else) (Raphael Costa) -! asset collections: custom resizing if image -x bushido version - x default template -~ editable_elements: inheritable: false (Mattias) => seems to be fixed by Dirk's last pull request (#44) => content tag -x resizing images on the fly -x locomedia tinyMCE plugin (Bernd) -x remove asset_collections - x site templates - x tinyMCE plugin - x vignette.rb - x code - x helpers - x ui - x rake task - x internal collection - x assign same _id -x pick up a theme_asset -x pull request locomedia -x refactor slugify method (use parameterize + create a module) -x contents permalink (UI) -x BUG: has_one / has_many. Delete an author -x bushido changes in the master -? edit sidebar (inline editor). Unable to reset it -x SEO: support and support/ should be 2 different pages. Remove trailing slash -x issue #91: httparty -x issue #90: seo metadata -x issue #57: seo page title -x issue #56 -x tweak ui: form, quick link to edit a model in the popup menu -x Has_one => group by in the select -x better hints: - x notify the user that after changing the page title, they still have to click "update" for the change to be saved - x created_by ASC => "Creation date ascending" -x cancan: (authors / designers / admin) - x model - x ui - x controllers / views: - x page - x content / content type - x asset - x site - x account - x snippet - x theme asset - x features / specs -x enable rack-cache only for a specific url -x more cucumber tests for the content types -x check hosting: - x heroku - x bushi.do - x unable to reach the console - x deploy => okay - x unable to set a new subdomain -x liquid tag: Date.today (now), add a test to compare 2 dates -? better ui: increase text field length (auto sizable ?) + refactor error message - - trigger refresh at startup -x bugs - x heroku: unable to upload a new file => okay - x import => okay - x delete an item => okay -x bug: duplicate fields (new entry) when errors in the content type form -x tinyMCE => fullscreen -x export site -x rake task to import a remote template -x MERGE -x remove withelist for assets since we've got now roles -x admin role is not correctly set when creating a new website -x the required star for file field is not shown -x Rights to set roles (ticket #104) -x export: problems with templatized pages (source => multi levels pages) -x do not rename files for fonts -x icon for redirection page in the pages section (back-office) -x installed on heroku with source -x test and/or convert existing templates (the 2 of the themes section) \ No newline at end of file +x page with regexp url => wildcards +- with_scope allowed for the find tag +- nested relationships (find tag) +- script to migrate from templatized to wildcard +- seo title (content_entry should be available) +- write more tests + - find_spec + - features +- clean code \ No newline at end of file diff --git a/lib/locomotive.rb b/lib/locomotive.rb index 02a6c73d..e15c1310 100644 --- a/lib/locomotive.rb +++ b/lib/locomotive.rb @@ -2,6 +2,7 @@ require 'locomotive/version' require 'locomotive/core_ext' require 'locomotive/configuration' require 'locomotive/logger' +require 'locomotive/haml' require 'locomotive/formtastic' require 'locomotive/dragonfly' require 'locomotive/kaminari' diff --git a/lib/locomotive/formtastic.rb b/lib/locomotive/formtastic.rb index d8c8d2f1..541bd51d 100644 --- a/lib/locomotive/formtastic.rb +++ b/lib/locomotive/formtastic.rb @@ -10,4 +10,4 @@ module Formtastic end end end -end +end \ No newline at end of file diff --git a/lib/locomotive/haml.rb b/lib/locomotive/haml.rb new file mode 100644 index 00000000..f24f58f0 --- /dev/null +++ b/lib/locomotive/haml.rb @@ -0,0 +1,30 @@ +require 'haml/helpers/action_view_mods' + +# Only preserve whitespace in the tag's content: https://github.com/nex3/haml/pull/503 +module ActionView + module Helpers #:nodoc: + module TagHelper + + def content_tag_with_haml_and_preserve(name, content_or_options_with_block = nil, *args, &block) + return content_tag_without_haml(name, content_or_options_with_block, *args, &block) unless is_haml? + + preserve = haml_buffer.options[:preserve].include?(name.to_s) + + if block_given? + if block_is_haml?(block) && preserve + content_tag_without_haml(name, content_or_options_with_block, *args) {preserve(&block)} + else + content_tag_without_haml(name, content_or_options_with_block, *args, &block) + end + else + if preserve && content_or_options_with_block + content_or_options_with_block = Haml::Helpers.preserve(content_or_options_with_block) + end + content = content_tag_without_haml(name, content_or_options_with_block, *args, &block) + end + end + + alias_method :content_tag_with_haml, :content_tag_with_haml_and_preserve + end + end +end \ No newline at end of file diff --git a/lib/locomotive/liquid/tags/find.rb b/lib/locomotive/liquid/tags/find.rb new file mode 100644 index 00000000..a017f443 --- /dev/null +++ b/lib/locomotive/liquid/tags/find.rb @@ -0,0 +1,46 @@ +module Locomotive + module Liquid + module Tags + class Find < ::Liquid::Tag + + Syntax = /(#{::Liquid::Expression}+)?/ + + def initialize(tag_name, markup, tokens, context) + if markup =~ Syntax + @options = markup.scan(::Liquid::QuotedFragment) + + syntax_error! if @options.size != 2 + else + syntax_error! + end + + super + end + + def render(context) + Rails.logger.debug "\n\n =>>>>>>> #{@options.inspect} / #{context['params'].inspect}" + + permalink = context[@options.last] + site = context.registers[:site] + type = site.content_types.where(:slug => @options.first).first + entry = type.klass_with_custom_fields(:entries).find_by_permalink(permalink) + entry_name = @options.first.singularize + + context.scopes.last['content_entry'] = entry + context.scopes.last[entry_name] = entry + + '' + end + + protected + + def syntax_error! + raise ::Liquid::SyntaxError.new("Syntax Error in 'find' - Valid syntax: find , ") + end + + end + + ::Liquid::Template.register_tag('find', Find) + end + end +end diff --git a/lib/locomotive/liquid/tags/google_analytics.rb b/lib/locomotive/liquid/tags/google_analytics.rb index fd89d24f..f98edbca 100644 --- a/lib/locomotive/liquid/tags/google_analytics.rb +++ b/lib/locomotive/liquid/tags/google_analytics.rb @@ -1,5 +1,5 @@ -module Liquid - module Locomotive +module Locomotive + module Liquid module Tags class GoogleAnalytics < ::Liquid::Tag diff --git a/lib/locomotive/liquid/tags/inline_editor.rb b/lib/locomotive/liquid/tags/inline_editor.rb index 7b9a87f2..35e8be69 100644 --- a/lib/locomotive/liquid/tags/inline_editor.rb +++ b/lib/locomotive/liquid/tags/inline_editor.rb @@ -1,5 +1,5 @@ -module Liquid - module Locomotive +module Locomotive + module Liquid module Tags class InlineEditor < ::Liquid::Tag diff --git a/lib/locomotive/liquid/tags/nav.rb b/lib/locomotive/liquid/tags/nav.rb index f0562a6a..f1ad96e5 100644 --- a/lib/locomotive/liquid/tags/nav.rb +++ b/lib/locomotive/liquid/tags/nav.rb @@ -34,7 +34,7 @@ module Locomotive end else - raise ::Liquid::SyntaxError.new("Syntax Error in 'nav' - Valid syntax: nav ") + raise ::Liquid::SyntaxError.new("Syntax Error in 'nav' - Valid syntax: nav , ") end super diff --git a/lib/locomotive/render.rb b/lib/locomotive/render.rb index 564820d3..941fbc6e 100644 --- a/lib/locomotive/render.rb +++ b/lib/locomotive/render.rb @@ -62,7 +62,7 @@ module Locomotive assigns.merge!(flash.to_hash.stringify_keys) # data from public submissions - assigns.merge!(@page.wildcards_hash.stringify_keys) if @page.has_wildcards? + assigns['params'].merge!(@page.wildcards_hash.stringify_keys) if @page.has_wildcards? registers = { :controller => self, diff --git a/spec/dummy/config/initializers/haml.rb b/spec/dummy/config/initializers/haml.rb index df0b4de4..711427e0 100644 --- a/spec/dummy/config/initializers/haml.rb +++ b/spec/dummy/config/initializers/haml.rb @@ -1 +1,2 @@ -Haml::Template.options[:ugly] = true # improve performance in dev \ No newline at end of file +Haml::Template.options[:ugly] = true +Haml::Template.options[:format] = :html5 \ No newline at end of file diff --git a/spec/lib/locomotive/liquid/tags/find_spec.rb b/spec/lib/locomotive/liquid/tags/find_spec.rb new file mode 100644 index 00000000..e62934d1 --- /dev/null +++ b/spec/lib/locomotive/liquid/tags/find_spec.rb @@ -0,0 +1,52 @@ +require 'spec_helper' + +describe Locomotive::Liquid::Tags::Find do + + it 'is valid if the 2 arguments are present' do + lambda do + Locomotive::Liquid::Tags::Find.new('find', 'projects, params.permalink', [], {}) + end.should_not raise_error + end + + it 'is not valid if one of the 2 arguments is missing' do + lambda do + Locomotive::Liquid::Tags::Find.new('find', 'projects', [], {}) + end.should raise_error + end + + # it 'tests' do + # tag = Locomotive::Liquid::Tags::Find.new('find', 'projects, params.permalink', [], {}) + # puts tag.inspect + # # attributes = scope.send(:decode, scope.instance_variable_get(:@attributes), ::Liquid::Context.new) + # # attributes['active'].should == true + # # attributes['price'].should == 42 + # # attributes['title'].should == 'foo' + # # attributes['hidden'].should == false + # end + + # it 'decodes more complex options' do + # scope = Locomotive::Liquid::Tags::WithScope.new('with_scope', 'price.gt:42.0 price.lt:50', ["{% endwith_scope %}"], {}) + # attributes = scope.send(:decode, scope.instance_variable_get(:@attributes), ::Liquid::Context.new) + # attributes['price.gt'].should == 42.0 + # attributes['price.lt'].should == 50 + # end + # + # it 'decodes context variable' do + # scope = Locomotive::Liquid::Tags::WithScope.new('with_scope', 'category: params.type', ["{% endwith_scope %}"], {}) + # attributes = scope.send(:decode, scope.instance_variable_get(:@attributes), ::Liquid::Context.new({ 'params' => { 'type' => 'posts' } })) + # attributes['category'].should == 'posts' + # end + # + # it 'allows order_by option' do + # scope = Locomotive::Liquid::Tags::WithScope.new('with_scope', 'order_by:\'name DESC\'', ["{% endwith_scope %}"], {}) + # attributes = scope.send(:decode, scope.instance_variable_get(:@attributes), ::Liquid::Context.new) + # attributes['order_by'].should == 'name DESC' + # end + # + # it 'stores attributes in the context' do + # template = ::Liquid::Template.parse("{% with_scope active:true title:'foo' %}{{ with_scope.active }}-{{ with_scope.title }}{% endwith_scope %}") + # text = template.render + # text.should == "true-foo" + # end + +end diff --git a/spec/models/locomotive/extensions/page/fullpath_spec.rb b/spec/models/locomotive/extensions/page/fullpath_spec.rb index 9034423d..1747a99b 100644 --- a/spec/models/locomotive/extensions/page/fullpath_spec.rb +++ b/spec/models/locomotive/extensions/page/fullpath_spec.rb @@ -95,6 +95,8 @@ describe Locomotive::Page do @projects_page = FactoryGirl.create(:page, :site => @home_page.site, :parent => @month_page, :slug => 'projects') @project_page = FactoryGirl.create(:page, :site => @home_page.site, :parent => @projects_page, :slug => 'project', :wildcard => true) @posts_page = FactoryGirl.create(:page, :site => @home_page.site, :parent => @month_page, :slug => 'posts') + + [@home_page, @archives_page, @month_page, @projects_page, @project_page, @posts_page].map(&:reload) end it 'keeps the wildcards as they were if we modify a slug of an ancestor' do @@ -103,6 +105,15 @@ describe Locomotive::Page do @project_page.fullpath.should == 'my_archives/month/projects/*' end + it 'modifies a wildcard' do + @month_page.update_attributes :wildcard => true + @month_page.reload + @month_page.update_attributes :slug => 'a_month' + @project_page.reload + @project_page.fullpath.should == 'archives/*/projects/*' + @project_page.wildcards.should == %w(a_month project) + end + it 'turns a page into a wildcards one' do @month_page.update_attributes :wildcard => true @project_page.reload @@ -113,6 +124,7 @@ describe Locomotive::Page do it 'turns off the wildcard property of page' do @month_page.update_attributes :wildcard => true + @month_page.reload @month_page.update_attributes :wildcard => false @project_page.reload @project_page.fullpath.should == 'archives/month/projects/*'