diff --git a/Gemfile b/Gemfile index e0fa7b06..4b89e180 100644 --- a/Gemfile +++ b/Gemfile @@ -37,26 +37,26 @@ group :development do gem 'fastthread' end -# group :test, :development do -# gem 'ruby-debug' -# end +group :test, :development do + gem 'ruby-debug' +end -# group :test do -# gem 'autotest' -# gem 'growl-glue' -# gem 'rspec-rails', '2.0.0.beta.19' -# gem 'factory_girl_rails' -# gem 'pickle', :git => 'http://github.com/ianwhite/pickle.git' -# gem 'pickle-mongoid' -# gem 'capybara' -# -# # would be nice.. -# # gem 'capybara-envjs' -# -# gem 'database_cleaner' -# gem 'cucumber' -# gem 'cucumber-rails' -# gem 'spork' -# gem 'launchy' -# gem 'mocha', :git => 'git://github.com/floehopper/mocha.git' -# end \ No newline at end of file +group :test do + gem 'autotest' + gem 'growl-glue' + gem 'rspec-rails', '2.0.0.beta.19' + gem 'factory_girl_rails' + gem 'pickle', :git => 'http://github.com/ianwhite/pickle.git' + gem 'pickle-mongoid' + gem 'capybara' + + # would be nice.. + # gem 'capybara-envjs' + + gem 'database_cleaner' + gem 'cucumber' + gem 'cucumber-rails' + gem 'spork' + gem 'launchy' + gem 'mocha', :git => 'git://github.com/floehopper/mocha.git' +end \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock index 3ba4f3b3..065c7fef 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,3 +1,10 @@ +GIT + remote: git://github.com/floehopper/mocha.git + revision: e0a00a7b2adf8f11d3679879df9a5c47a5c36189 + specs: + mocha (0.9.8.20100819090654) + rake + GIT remote: git://github.com/locomotivecms/custom_fields.git revision: 89c4d7d @@ -11,6 +18,16 @@ GIT specs: liquid (2.1.3) +GIT + remote: http://github.com/ianwhite/pickle.git + revision: 65ba8b7337f38d0ab4c153b3ab687e13de7086c7 + specs: + pickle (0.4.2) + cucumber (>= 0.8) + rake + rspec (>= 1.3) + yard + PATH remote: /Users/didier/Desktop/NoCoffee/LocomotiveCMS/gems/carrierwave specs: @@ -51,6 +68,7 @@ GEM activesupport (3.0.0) arel (1.0.1) activesupport (~> 3.0.0) + autotest (4.4.1) aws (2.3.21) http_connection uuidtools @@ -59,10 +77,30 @@ GEM bson (1.0.4) bson_ext (1.0.4) builder (2.1.2) + capybara (0.3.9) + culerity (>= 0.2.4) + mime-types (>= 1.16) + nokogiri (>= 1.3.3) + rack (>= 1.0.0) + rack-test (>= 0.5.4) + selenium-webdriver (>= 0.0.3) cgi_multipart_eof_fix (2.5.0) + childprocess (0.0.7) + ffi (~> 0.6.3) + columnize (0.3.1) configuration (1.1.0) crack (0.1.8) + cucumber (0.9.2) + builder (~> 2.1.2) + diff-lcs (~> 1.1.2) + gherkin (~> 2.2.5) + json (~> 1.4.6) + term-ansicolor (~> 1.0.5) + cucumber-rails (0.3.2) + cucumber (>= 0.8.0) + culerity (0.2.12) daemons (1.1.0) + database_cleaner (0.5.2) delayed_job (2.1.0.pre2) activesupport (~> 3.0) daemons @@ -72,15 +110,26 @@ GEM devise (1.1.2) bcrypt-ruby (~> 2.1.2) warden (~> 0.10.7) + diff-lcs (1.1.2) erubis (2.6.6) abstract (>= 1.0.0) + factory_girl (1.3.2) + factory_girl_rails (1.0) + factory_girl (~> 1.3) + rails (>= 3.0.0.beta4) fastthread (1.0.7) + ffi (0.6.3) + rake (>= 0.8.7) formtastic-rails3 (1.0.0.beta3) actionpack (>= 3.0.0beta3) activesupport (>= 3.0.0beta3) gem_plugin (0.2.3) gemcutter (0.6.1) + gherkin (2.2.8) + json (~> 1.4.6) + term-ansicolor (~> 1.0.5) git (1.2.5) + growl-glue (1.0.7) haml (3.0.18) has_scope (0.5.0) heroku (1.10.6) @@ -98,10 +147,12 @@ GEM gemcutter (>= 0.1.0) git (>= 1.2.5) rubyforge (>= 2.0.0) + json (1.4.6) json_pure (1.4.6) launchy (0.3.7) configuration (>= 0.0.5) rake (>= 0.8.1) + linecache (0.43) mail (2.2.6.1) activesupport (>= 2.3.6) mime-types @@ -126,6 +177,10 @@ GEM daemons (>= 1.0.3) fastthread (>= 1.0.1) gem_plugin (>= 0.2.3) + nokogiri (1.4.3.1) + pickle-mongoid (0.1.6) + mongoid (>= 2.0.0.beta.7) + pickle (>= 0.3.0) polyglot (0.3.1) rack (1.2.1) rack-mount (0.6.13) @@ -150,9 +205,32 @@ GEM rest-client (1.4.2) mime-types (>= 1.16) rmagick (2.12.2) + rspec (2.0.0.beta.19) + rspec-core (= 2.0.0.beta.19) + rspec-expectations (= 2.0.0.beta.19) + rspec-mocks (= 2.0.0.beta.19) + rspec-core (2.0.0.beta.19) + rspec-expectations (2.0.0.beta.19) + diff-lcs (>= 1.1.2) + rspec-mocks (2.0.0.beta.19) + rspec-rails (2.0.0.beta.19) + rspec (= 2.0.0.beta.19) + webrat (>= 0.7.2.beta.1) + ruby-debug (0.10.3) + columnize (>= 0.1) + ruby-debug-base (~> 0.10.3.0) + ruby-debug-base (0.10.3) + linecache (>= 0.3) rubyforge (2.0.4) json_pure (>= 1.1.7) rubyzip (0.9.4) + selenium-webdriver (0.0.29) + childprocess (>= 0.0.7) + ffi (~> 0.6.3) + json_pure + rubyzip + spork (0.8.4) + term-ansicolor (1.0.5) thor (0.14.2) treetop (1.4.8) polyglot (>= 0.3.1) @@ -160,8 +238,13 @@ GEM uuidtools (2.1.1) warden (0.10.7) rack (>= 1.0.0) + webrat (0.7.2.beta.2) + nokogiri (>= 1.2.0) + rack (>= 1.0) + rack-test (>= 0.5.3) will_paginate (3.0.pre2) xml-simple (1.0.12) + yard (0.6.1) PLATFORMS ruby @@ -169,28 +252,42 @@ PLATFORMS DEPENDENCIES RedCloth actionmailer-with-request + autotest aws bson_ext (= 1.0.4) + capybara carrierwave! cgi_multipart_eof_fix + cucumber + cucumber-rails custom_fields! + database_cleaner delayed_job (= 2.1.0.pre2) delayed_job_mongoid (= 1.0.0.rc) devise (= 1.1.2) + factory_girl_rails fastthread formtastic-rails3 (= 1.0.0.beta3) + growl-glue haml (= 3.0.18) heroku httparty (= 0.6.1) inherited_resources (= 1.1.2) jeweler + launchy liquid! mimetype-fu + mocha! mongo_session_store (= 2.0.0.pre) mongoid (= 2.0.0.beta.17) mongoid_acts_as_tree (= 0.1.5) mongrel + pickle! + pickle-mongoid rails (= 3.0.0) rmagick (= 2.12.2) + rspec-rails (= 2.0.0.beta.19) + ruby-debug rubyzip + spork warden diff --git a/app/models/theme_asset.rb b/app/models/theme_asset.rb index 14828fb6..21274c41 100644 --- a/app/models/theme_asset.rb +++ b/app/models/theme_asset.rb @@ -21,8 +21,8 @@ class ThemeAsset ## callbacks ## before_validation :store_plain_text - before_validation :sanitize_folder - before_validation :build_local_path + before_save :sanitize_folder + before_save :build_local_path ## validations ## validates_presence_of :site, :source diff --git a/doc/TODO b/doc/TODO index e3015a84..81e9f008 100644 --- a/doc/TODO +++ b/doc/TODO @@ -40,8 +40,8 @@ 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) -- order yaml file (http://www.ruby-forum.com/topic/120295) -- fix tests +x order yaml file (http://www.ruby-forum.com/topic/120295) +x fix tests - global regions: keyword in editable element (http://www.mongodb.org/display/DOCS/Updating) - write my first tutorial about locomotive diff --git a/spec/lib/locomotive/liquid/drops/contents_spec.rb b/spec/lib/locomotive/liquid/drops/contents_spec.rb index 243c0a96..410b8620 100644 --- a/spec/lib/locomotive/liquid/drops/contents_spec.rb +++ b/spec/lib/locomotive/liquid/drops/contents_spec.rb @@ -24,10 +24,10 @@ describe Locomotive::Liquid::Drops::Contents do def render_template(template = '', assigns = {}) assigns = { - 'contents' => Locomotive::Liquid::Drops::Contents.new(@site) + 'contents' => Locomotive::Liquid::Drops::Contents.new }.merge(assigns) - Liquid::Template.parse(template).render assigns + Liquid::Template.parse(template).render(::Liquid::Context.new({}, assigns, { :site => @site })) end end diff --git a/spec/lib/locomotive/liquid/filters/html_spec.rb b/spec/lib/locomotive/liquid/filters/html_spec.rb index e4b5c2ad..ce95f18d 100644 --- a/spec/lib/locomotive/liquid/filters/html_spec.rb +++ b/spec/lib/locomotive/liquid/filters/html_spec.rb @@ -4,20 +4,47 @@ describe Locomotive::Liquid::Filters::Html do include Locomotive::Liquid::Filters::Html + before(:each) do + @context = build_context + end + it 'should return a link tag for a stylesheet file' do - result = "" + result = "" stylesheet_tag('main.css').should == result stylesheet_tag('main').should == result stylesheet_tag(nil).should == '' end + it 'should return a link tag for a stylesheet file with folder' do + result = "" + stylesheet_tag('trash/main.css').should == result + end + + it 'should return a link tag for a stylesheet file without touching the url' do + result = "" + stylesheet_tag('/trash/main.css').should == result + stylesheet_tag('/trash/main').should == result + end + it 'should return a script tag for a javascript file' do - result = %{} + result = %{} javascript_tag('main.js').should == result javascript_tag('main').should == result javascript_tag(nil).should == '' end + it 'should return a script tag for a javascript file with folder' do + result = %{} + javascript_tag('trash/main.js').should == result + javascript_tag('trash/main').should == result + end + + it 'should return a script tag for a javascript file without touching the url' do + result = %{} + javascript_tag('/trash/main.js').should == result + javascript_tag('/trash/main').should == result + end + it 'should return an image tag without paramaters' do image_tag('foo.jpg').should == "" end @@ -79,4 +106,15 @@ describe Locomotive::Liquid::Filters::Html do html.should == '' end + def build_context + Site.any_instance.stubs(:id).returns(42) + klass = Class.new + klass.class_eval do + def registers + { :site => Factory.build(:site) } + end + end + klass.new + end + end diff --git a/spec/models/theme_asset_spec.rb b/spec/models/theme_asset_spec.rb index 5015090f..5705bf75 100644 --- a/spec/models/theme_asset_spec.rb +++ b/spec/models/theme_asset_spec.rb @@ -23,10 +23,28 @@ describe ThemeAsset do @asset.height.should == 32 end - it 'should have a slug' do + end + + describe 'local path and folder' do + + it 'should set the local path based on the content type' do @asset.source = FixturedAsset.open('5k.png') @asset.save - @asset.slug.should == '5k' + @asset.local_path.should == 'images/5k.png' + end + + it 'should set the local path based on the folder' do + @asset.folder = 'trash' + @asset.source = FixturedAsset.open('5k.png') + @asset.save + @asset.local_path.should == 'images/trash/5k.png' + end + + it 'should set sanitize the local path' do + @asset.folder = '/images/à la poubelle' + @asset.source = FixturedAsset.open('5k.png') + @asset.save + @asset.local_path.should == 'images/a_la_poubelle/5k.png' end end @@ -64,10 +82,12 @@ describe ThemeAsset do before(:each) do ThemeAsset.any_instance.stubs(:site_id).returns('test') - @asset = Factory.build(:theme_asset, :site => Factory.build(:site)) - @asset.performing_plain_text = true - @asset.slug = 'a file' - @asset.plain_text = "Lorem ipsum" + @asset = Factory.build(:theme_asset, { + :site => Factory.build(:site), + :plain_text_name => 'test', + :plain_text => 'Lorem ipsum', + :performing_plain_text => true + }) end it 'should handle stylesheet' do @@ -84,24 +104,6 @@ describe ThemeAsset do @asset.source.should_not be_nil end - context 'shortcut urls' do - - before(:each) do - @image = Factory.build(:theme_asset, :source => FixturedAsset.open('5k.png')) - @image.source.stubs(:url).returns('5k.png') - @asset.stubs(:stylesheet?).returns(true) - @asset.site.theme_assets.stubs(:where).returns([@image]) - @asset.plain_text = 'body { background-image: url("/theme/images/5k.png"); } h1 { background-image: url("/images/5k.png"); }' - @asset.store_plain_text - end - - it 'replaces shortcut url if present' do - @asset.plain_text.should == 'body { background-image: url("/theme/images/5k.png"); } h1 { background-image: url("/images/5k.png"); }' - @asset.source.read.should == 'body { background-image: url("5k.png"); } h1 { background-image: url("/images/5k.png"); }' - end - - end - end end