diff options
author | James Thompson <james.b.thompson@gmail.com> | 2012-03-14 11:40:16 +0200 |
---|---|---|
committer | James Thompson <james.b.thompson@gmail.com> | 2012-03-14 11:40:16 +0200 |
commit | 56d7747f54e86993415b76c92e101608e5ea44e2 (patch) | |
tree | 025b7b37f50c4c291e7e676286e7767c40adb1f9 | |
download | refinerycms-pc_banners-56d7747f54e86993415b76c92e101608e5ea44e2.tar.gz refinerycms-pc_banners-56d7747f54e86993415b76c92e101608e5ea44e2.tar.bz2 refinerycms-pc_banners-56d7747f54e86993415b76c92e101608e5ea44e2.zip |
initial commit
86 files changed, 2598 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ff4a7bc --- /dev/null +++ b/.gitignore @@ -0,0 +1,91 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile ~/.gitignore_global + +# Ignore bundler config +/.bundle + +# Ignore the default SQLite database. +/db/*.sqlite3 + +# Ignore all logfiles and tempfiles. +/log/*.log +/tmp +# Rails +.bundle +db/*.sqlite3 +db/*.sqlite3-journal +*.log +tmp +tmp/**/* + +# Documentation +doc/api +doc/app +.yardoc +.yardopts +coverage + +# Public Uploads +public/system/* +public/themes/* + +# Public Cache +public/javascripts/cache +public/stylesheets/cache + +# Vendor Cache +vendor/cache + +# Acts as Indexed +index/**/* + +# Refinery Specific +*.tmproj +*.autobackupbyrefinery.* +refinerycms-*.gem + +# Mac +.DS_Store + +# Windows +Thumbs.db + +# NetBeans +nbproject + +# Eclipse +.project + +# Redcar +.redcar + +# Rubinius +*.rbc + +# Vim +*.swp +*.swo + +# RubyMine +.idea + +# E-texteditor +.eprj + +# Backup +*~ + +# Capybara Bug +capybara-*html + +# sass +.sass-cache +.sass-cache/* + +#rvm +.rvmrc +.rvmrc.* + @@ -0,0 +1,69 @@ +source "http://rubygems.org" + +gemspec + +gem 'refinerycms', '~> 2.0.0' + +# Refinery/rails should pull in the proper versions of these +group :assets do + gem 'sass-rails' + gem 'coffee-rails' + gem 'uglifier' +end + +gem 'jquery-rails' + +group :development, :test do + gem 'refinerycms-testing', '~> 2.0.0' + gem 'factory_girl_rails' + gem 'generator_spec' + + require 'rbconfig' + + platforms :jruby do + gem 'activerecord-jdbcsqlite3-adapter' + gem 'activerecord-jdbcmysql-adapter' + gem 'activerecord-jdbcpostgresql-adapter' + gem 'jruby-openssl' + end + + unless defined?(JRUBY_VERSION) + gem 'sqlite3' + gem 'mysql' + gem 'pg' + end + + platforms :mswin, :mingw do + gem 'win32console' + gem 'rb-fchange', '~> 0.0.5' + gem 'rb-notifu', '~> 0.0.4' + end + + platforms :ruby do + gem 'spork', '0.9.0.rc9' + gem 'guard-spork' + + unless ENV['TRAVIS'] + if RbConfig::CONFIG['target_os'] =~ /darwin/i + gem 'rb-fsevent', '>= 0.3.9' + gem 'growl', '~> 1.0.3' + end + if RbConfig::CONFIG['target_os'] =~ /linux/i + gem 'rb-inotify', '>= 0.5.1' + gem 'libnotify', '~> 0.1.3' + end + end + end + + platforms :jruby do + unless ENV['TRAVIS'] + if RbConfig::CONFIG['target_os'] =~ /darwin/i + gem 'growl', '~> 1.0.3' + end + if RbConfig::CONFIG['target_os'] =~ /linux/i + gem 'rb-inotify', '>= 0.5.1' + gem 'libnotify', '~> 0.1.3' + end + end + end +end diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..69cff5e --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,285 @@ +PATH + remote: . + specs: + refinerycms-banners (1.0) + refinerycms-core (~> 2.0.1) + +GEM + remote: http://rubygems.org/ + specs: + actionmailer (3.2.2) + actionpack (= 3.2.2) + mail (~> 2.4.0) + actionpack (3.2.2) + activemodel (= 3.2.2) + activesupport (= 3.2.2) + builder (~> 3.0.0) + erubis (~> 2.7.0) + journey (~> 1.0.1) + rack (~> 1.4.0) + rack-cache (~> 1.1) + rack-test (~> 0.6.1) + sprockets (~> 2.1.2) + activemodel (3.2.2) + activesupport (= 3.2.2) + builder (~> 3.0.0) + activerecord (3.2.2) + activemodel (= 3.2.2) + activesupport (= 3.2.2) + arel (~> 3.0.2) + tzinfo (~> 0.3.29) + activeresource (3.2.2) + activemodel (= 3.2.2) + activesupport (= 3.2.2) + activesupport (3.2.2) + i18n (~> 0.6) + multi_json (~> 1.0) + acts_as_indexed (0.7.7) + addressable (2.2.7) + arel (3.0.2) + awesome_nested_set (2.1.2) + activerecord (>= 3.0.0) + babosa (0.3.5) + bcrypt-ruby (3.0.1-x86-mingw32) + builder (3.0.0) + capybara (1.1.2) + mime-types (>= 1.16) + nokogiri (>= 1.3.3) + rack (>= 1.0.0) + rack-test (>= 0.5.4) + selenium-webdriver (~> 2.0) + xpath (~> 0.1.4) + childprocess (0.3.1) + ffi (~> 1.0.6) + coffee-rails (3.2.2) + coffee-script (>= 2.2.0) + railties (~> 3.2.0) + coffee-script (2.2.0) + coffee-script-source + execjs + coffee-script-source (1.2.0) + database_cleaner (0.7.1) + devise (2.0.4) + bcrypt-ruby (~> 3.0) + orm_adapter (~> 0.0.3) + railties (~> 3.1) + warden (~> 1.1.1) + diff-lcs (1.1.3) + dragonfly (0.9.10) + rack + erubis (2.7.0) + execjs (1.3.0) + multi_json (~> 1.0) + factory_girl (2.5.2) + activesupport (>= 2.3.9) + factory_girl_rails (1.6.0) + factory_girl (~> 2.5.0) + railties (>= 3.0.0) + ffi (1.0.11) + friendly_id (4.0.1) + fuubar (1.0.0) + rspec (~> 2.0) + rspec-instafail (~> 0.2.0) + ruby-progressbar (~> 0.0.10) + generator_spec (0.8.5) + rails (>= 3.0, < 4.0) + rspec-rails + globalize3 (0.2.0) + activemodel (>= 3.0.0) + activerecord (>= 3.0.0) + paper_trail (~> 2) + guard (1.0.1) + ffi (>= 0.5.0) + thor (~> 0.14.6) + guard-rspec (0.6.0) + guard (>= 0.10.0) + guard-spork (0.5.2) + guard (>= 0.10.0) + spork (>= 0.8.4) + hike (1.2.1) + i18n (0.6.0) + journey (1.0.3) + jquery-rails (2.0.1) + railties (>= 3.2.0, < 5.0) + thor (~> 0.14) + json (1.6.5) + json_pure (1.6.5) + launchy (2.0.5) + addressable (~> 2.2.6) + mail (2.4.3) + i18n (>= 0.4.0) + mime-types (~> 1.16) + treetop (~> 1.4.8) + mime-types (1.17.2) + multi_json (1.1.0) + mysql (2.8.1-x86-mingw32) + nokogiri (1.5.2-x86-mingw32) + orm_adapter (0.0.6) + paper_trail (2.6.0) + rails (~> 3) + pg (0.13.2-x86-mingw32) + polyglot (0.3.3) + rack (1.4.1) + rack-cache (1.2) + rack (>= 0.4) + rack-ssl (1.3.2) + rack + rack-test (0.6.1) + rack (>= 1.0) + rails (3.2.2) + actionmailer (= 3.2.2) + actionpack (= 3.2.2) + activerecord (= 3.2.2) + activeresource (= 3.2.2) + activesupport (= 3.2.2) + bundler (~> 1.0) + railties (= 3.2.2) + railties (3.2.2) + actionpack (= 3.2.2) + activesupport (= 3.2.2) + rack-ssl (~> 1.3.2) + rake (>= 0.8.7) + rdoc (~> 3.4) + thor (~> 0.14.6) + rake (0.9.2.2) + rb-fchange (0.0.5) + ffi + rb-notifu (0.0.4) + rdoc (3.12) + json (~> 1.4) + refinerycms (2.0.1) + bundler (~> 1.0) + refinerycms-authentication (= 2.0.1) + refinerycms-core (= 2.0.1) + refinerycms-dashboard (= 2.0.1) + refinerycms-images (= 2.0.1) + refinerycms-pages (= 2.0.1) + refinerycms-resources (= 2.0.1) + refinerycms-authentication (2.0.1) + devise (~> 2.0.0) + refinerycms-core (= 2.0.1) + refinerycms-core (2.0.1) + acts_as_indexed (~> 0.7.7) + awesome_nested_set (~> 2.1.0) + coffee-rails (~> 3.2.1) + friendly_id (~> 4.0.1) + globalize3 (~> 0.2.0) + jquery-rails (~> 2.0.0) + rails (>= 3.1.3, < 3.3) + sass-rails (~> 3.2.3) + truncate_html (~> 0.5) + uglifier (>= 1.0.3) + will_paginate (~> 3.0.2) + refinerycms-dashboard (2.0.1) + refinerycms-core (= 2.0.1) + refinerycms-images (2.0.1) + dragonfly (~> 0.9.8) + rack-cache (>= 0.5.3) + refinerycms-core (= 2.0.1) + refinerycms-pages (2.0.1) + awesome_nested_set (~> 2.1.0) + babosa (!= 0.3.6) + refinerycms-core (= 2.0.1) + seo_meta (~> 1.2.0) + refinerycms-resources (2.0.1) + dragonfly (~> 0.9.8) + rack-cache (>= 0.5.3) + refinerycms-core (= 2.0.1) + refinerycms-testing (2.0.1) + capybara (~> 1.1.0) + database_cleaner (~> 0.7.1) + factory_girl_rails (~> 1.6.0) + fuubar + guard-rspec (~> 0.6.0) + guard-spork (~> 0.5.2) + json_pure + launchy + rack-test (~> 0.6.0) + refinerycms-core (= 2.0.1) + rspec-instafail + rspec-rails (~> 2.8.1) + rspec (2.8.0) + rspec-core (~> 2.8.0) + rspec-expectations (~> 2.8.0) + rspec-mocks (~> 2.8.0) + rspec-core (2.8.0) + rspec-expectations (2.8.0) + diff-lcs (~> 1.1.2) + rspec-instafail (0.2.2) + rspec-mocks (2.8.0) + rspec-rails (2.8.1) + actionpack (>= 3.0) + activesupport (>= 3.0) + railties (>= 3.0) + rspec (~> 2.8.0) + ruby-progressbar (0.0.10) + rubyzip (0.9.6.1) + sass (3.1.15) + sass-rails (3.2.4) + railties (~> 3.2.0) + sass (>= 3.1.10) + tilt (~> 1.3) + selenium-webdriver (2.20.0) + childprocess (>= 0.2.5) + ffi (~> 1.0) + multi_json (~> 1.0) + rubyzip + seo_meta (1.2.0) + railties (>= 3.0.0) + spork (0.9.0-x86-mingw32) + win32-process + sprockets (2.1.2) + hike (~> 1.2) + rack (~> 1.0) + tilt (~> 1.1, != 1.3.0) + sqlite3 (1.3.5-x86-mingw32) + thor (0.14.6) + tilt (1.3.3) + treetop (1.4.10) + polyglot + polyglot (>= 0.3.1) + truncate_html (0.5.4) + tzinfo (0.3.32) + uglifier (1.2.3) + execjs (>= 0.3.0) + multi_json (>= 1.0.2) + warden (1.1.1) + rack (>= 1.0) + will_paginate (3.0.3) + win32-api (1.4.8-x86-mingw32) + win32-process (0.6.5) + windows-pr (>= 1.1.2) + win32console (1.3.0-x86-mingw32) + windows-api (0.4.1) + win32-api (>= 1.4.5) + windows-pr (1.2.1) + win32-api (>= 1.4.5) + windows-api (>= 0.3.0) + xpath (0.1.4) + nokogiri (~> 1.3) + +PLATFORMS + x86-mingw32 + +DEPENDENCIES + activerecord-jdbcmysql-adapter + activerecord-jdbcpostgresql-adapter + activerecord-jdbcsqlite3-adapter + coffee-rails + factory_girl_rails + generator_spec + guard-spork + jquery-rails + jruby-openssl + mysql + pg + rb-fchange (~> 0.0.5) + rb-notifu (~> 0.0.4) + refinerycms (~> 2.0.0) + refinerycms-banners! + refinerycms-testing (~> 2.0.0) + sass-rails + spork (= 0.9.0.rc9) + sqlite3 + uglifier + win32console diff --git a/Guardfile b/Guardfile new file mode 100644 index 0000000..7ee7e0f --- /dev/null +++ b/Guardfile @@ -0,0 +1,27 @@ +guard 'spork', :wait => 60, :cucumber => false, :rspec_env => { 'RAILS_ENV' => 'test' } do + watch('config/application.rb') + watch('config/environment.rb') + watch(%r{^config/environments/.+\.rb$}) + watch(%r{^config/initializers/.+\.rb$}) + watch('spec/spec_helper.rb') + watch(%r{^spec/support/.+\.rb$}) + watch(%r{^vendor/extensions/(.+)/spec/support/.+\.rb$}) +end + +guard 'rspec', :version => 2, :cli => "--color --drb --format Fuubar", :all_on_start => false, :all_after_pass => false do + watch(%r{^spec/.+_spec\.rb$}) + watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" } + watch('spec/spec_helper.rb') { "spec" } + + # Rails example + watch(%r{^spec/.+_spec\.rb$}) + watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" } + watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" } + watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/requests/#{m[1]}_spec.rb"] } + watch(%r{^spec/support/(.+)\.rb$}) { "spec" } + watch('spec/spec_helper.rb') { "spec" } + watch('config/routes.rb') { "spec/routing" } + watch('app/controllers/application_controller.rb') { "spec/controllers" } + # Capybara request specs + watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/requests/#{m[1]}_spec.rb" } +end diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..4f4018f --- /dev/null +++ b/Rakefile @@ -0,0 +1,20 @@ +#!/usr/bin/env rake +begin + require 'bundler/setup' +rescue LoadError + puts 'You must `gem install bundler` and `bundle install` to run rake tasks' +end + +ENGINE_PATH = File.dirname(__FILE__) +APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__) + +if File.exists?(APP_RAKEFILE) + load 'rails/tasks/extension.rake' +end + +require "refinerycms-testing" +Refinery::Testing::Railtie.load_tasks +Refinery::Testing::Railtie.load_dummy_tasks(ENGINE_PATH) + +load File.expand_path('../tasks/testing.rake', __FILE__) +load File.expand_path('../tasks/rspec.rake', __FILE__) diff --git a/app/controllers/refinery/banners/admin/banners_controller.rb b/app/controllers/refinery/banners/admin/banners_controller.rb new file mode 100644 index 0000000..1992bcf --- /dev/null +++ b/app/controllers/refinery/banners/admin/banners_controller.rb @@ -0,0 +1,12 @@ +module Refinery + module Banners + module Admin + class BannersController < ::Refinery::AdminController + + crudify :'refinery/banners/banner', + :title_attribute => 'name', :xhr_paging => true + + end + end + end +end diff --git a/app/controllers/refinery/banners/banners_controller.rb b/app/controllers/refinery/banners/banners_controller.rb new file mode 100644 index 0000000..5ada5e0 --- /dev/null +++ b/app/controllers/refinery/banners/banners_controller.rb @@ -0,0 +1,34 @@ +module Refinery + module Banners + class BannersController < ::ApplicationController + + before_filter :find_all_banners + before_filter :find_page + + def index + # you can use meta fields from your model instead (e.g. browser_title) + # by swapping @page for @banner in the line below: + present(@page) + end + + def show + @banner = Banner.find(params[:id]) + + # you can use meta fields from your model instead (e.g. browser_title) + # by swapping @page for @banner in the line below: + present(@page) + end + + protected + + def find_all_banners + @banners = Banner.order('position ASC') + end + + def find_page + @page = ::Refinery::Page.where(:link_url => "/banners").first + end + + end + end +end diff --git a/app/models/refinery/banners/banner.rb b/app/models/refinery/banners/banner.rb new file mode 100644 index 0000000..eaa1713 --- /dev/null +++ b/app/models/refinery/banners/banner.rb @@ -0,0 +1,27 @@ +module Refinery + module Banners + class Banner < Refinery::Core::BaseModel + self.table_name = 'refinery_banners' + + acts_as_indexed :fields => [:name, :url, :title, :description] + + validates :name, :presence => true + validates_presence_of :start_date + validates_length_of :title, :in => 0..255, :allow_nil => true + validates_length_of :description, :in => 0..255, :allow_nil => true + + belongs_to :image, :class_name => '::Refinery::Image' + has_and_belongs_to_many :pages, :class_name => '::Refinery::Page', :join_table => 'refinery_banners_pages' + + scope :not_expired, lambda { + banners = Arel::Table.new(::Refinery::Banners::Banner.table_name) + where(banners[:expiry_date].eq(nil).or(banners[:expiry_date].gt(Time.now))) + } + scope :active, where(:is_active => true) + scope :published, lambda { + not_expired.active.where("start_date <= ?", Time.now).order(:position) + } + + end + end +end
\ No newline at end of file diff --git a/app/views/refinery/banners/admin/banners/_actions.html.erb b/app/views/refinery/banners/admin/banners/_actions.html.erb new file mode 100644 index 0000000..f2a1681 --- /dev/null +++ b/app/views/refinery/banners/admin/banners/_actions.html.erb @@ -0,0 +1,25 @@ +<ul> + <% if ::Refinery::Banners::Admin::BannersController.searchable? %> + <li> + <%= render '/refinery/admin/search', :url => refinery.banners_admin_banners_path %> + </li> + <% end %> + <li> + <%= link_to t('.create_new'), refinery.new_banners_admin_banner_path, + :class => "add_icon" %> + </li> +<% if !searching? && ::Refinery::Banners::Admin::BannersController.sortable? && ::Refinery::Banners::Banner.any? %> + <li> + <%= link_to t('.reorder', :what => "Banners"), + refinery.banners_admin_banners_path, + :id => "reorder_action", + :class => "reorder_icon" %> + + <%= link_to t('.reorder_done', :what => "Banners"), + refinery.banners_admin_banners_path, + :id => "reorder_action_done", + :style => "display: none;", + :class => "reorder_icon" %> + </li> +<% end %> +</ul> diff --git a/app/views/refinery/banners/admin/banners/_banner.html.erb b/app/views/refinery/banners/admin/banners/_banner.html.erb new file mode 100644 index 0000000..9a362a2 --- /dev/null +++ b/app/views/refinery/banners/admin/banners/_banner.html.erb @@ -0,0 +1,20 @@ +<li class='clearfix record <%= cycle("on", "on-hover") %>' id="<%= dom_id(banner) -%>"> + <span class='title'> + <%= banner.name %> + + </span> + <span class='actions'> + + <%= link_to refinery_icon_tag("application_go.png"), refinery.banners_banner_path(banner), + :title => t('.view_live_html'), + :target => "_blank" %> + + <%= link_to refinery_icon_tag("application_edit.png"), refinery.edit_banners_admin_banner_path(banner), + :title => t('.edit') %> + <%= link_to refinery_icon_tag("delete.png"), refinery.banners_admin_banner_path(banner), + :class => "cancel confirm-delete", + :title => t('.delete'), + :confirm => t('message', :scope => 'refinery.admin.delete', :title => banner.name), + :method => :delete %> + </span> +</li> diff --git a/app/views/refinery/banners/admin/banners/_banners.html.erb b/app/views/refinery/banners/admin/banners/_banners.html.erb new file mode 100644 index 0000000..0027493 --- /dev/null +++ b/app/views/refinery/banners/admin/banners/_banners.html.erb @@ -0,0 +1,2 @@ +<%= will_paginate @banners if Refinery::Banners::Admin::BannersController.pageable? %> +<%= render 'sortable_list' %> diff --git a/app/views/refinery/banners/admin/banners/_form.html.erb b/app/views/refinery/banners/admin/banners/_form.html.erb new file mode 100644 index 0000000..2cd827f --- /dev/null +++ b/app/views/refinery/banners/admin/banners/_form.html.erb @@ -0,0 +1,74 @@ +<%= form_for [refinery, :banners_admin, @banner] do |f| -%> + <%= render '/refinery/admin/error_messages', + :object => @banner, + :include_object_name => true %> + + <%= hidden_field_tag 'banner[page_ids][]' %> + + <div class='field'> + <%= f.label :name -%> + <%= f.text_field :name, :class => 'larger widest' -%> + + </div> + + <div class='field'> + <%= f.label :title -%> + <%= f.text_field :title -%> + + </div> + + <div class='field'> + <%= f.label :description -%> + <%= f.text_field :description -%> + + </div> + + <div class='field'> + <%= f.label :image -%> + <%= render '/refinery/admin/image_picker', + :f => f, + :field => :image_id, + :image => @banner.image, + :toggle_image_display => false %> + + </div> + + <div class='field'> + <%= f.label :url -%> + <%= f.text_field :url -%> + + </div> + + <div class='field'> + <%= f.label :is_active -%> + <%= f.check_box :is_active, :checked => @banner[:is_active] -%> + + </div> + + <div class='field'> + <%= f.label :start_date -%> + <%= f.date_select :start_date -%> + + </div> + + <div class='field'> + <%= f.label :expiry_date -%> + <%= f.date_select :expiry_date -%> + + </div> + + <div class="field"> + <%= f.label :pages %> + <% Refinery::Page.all.each do |page| %> + <div> + <%= check_box_tag "banner[page_ids][]", page.id, @banner.pages.include?(page) %> + <%= page.title %> + </div> + <% end %> + </div> + + <%= render '/refinery/admin/form_actions', :f => f, + :continue_editing => false, + :delete_title => t('delete', :scope => 'refinery.banners.admin.banners.banner'), + :delete_confirmation => t('message', :scope => 'refinery.admin.delete', :title => @banner.name) %> +<% end -%> diff --git a/app/views/refinery/banners/admin/banners/_records.html.erb b/app/views/refinery/banners/admin/banners/_records.html.erb new file mode 100644 index 0000000..109fb04 --- /dev/null +++ b/app/views/refinery/banners/admin/banners/_records.html.erb @@ -0,0 +1,18 @@ +<% if searching? %> + <h2><%= t('results_for', :scope => 'refinery.admin.search', :query => params[:search]) %></h2> +<% end %> +<div class='pagination_container'> + <% if @banners.any? %> + <%= render 'banners' %> + <% else %> + <p> + <% unless searching? %> + <strong> + <%= t('.no_items_yet') %> + </strong> + <% else %> + <%= t('no_results', :scope => 'refinery.admin.search') %> + <% end %> + </p> + <% end %> +</div> diff --git a/app/views/refinery/banners/admin/banners/_sortable_list.html.erb b/app/views/refinery/banners/admin/banners/_sortable_list.html.erb new file mode 100644 index 0000000..0a0aac1 --- /dev/null +++ b/app/views/refinery/banners/admin/banners/_sortable_list.html.erb @@ -0,0 +1,5 @@ +<ul id='sortable_list'> + <%= render :partial => 'banner', :collection => @banners %> +</ul> +<%= render '/refinery/admin/sortable_list', + :continue_reordering => (local_assigns.keys.include?(:continue_reordering)) ? continue_reordering : true %> diff --git a/app/views/refinery/banners/admin/banners/edit.html.erb b/app/views/refinery/banners/admin/banners/edit.html.erb new file mode 100644 index 0000000..2d34363 --- /dev/null +++ b/app/views/refinery/banners/admin/banners/edit.html.erb @@ -0,0 +1 @@ +<%= render 'form' %> diff --git a/app/views/refinery/banners/admin/banners/index.html.erb b/app/views/refinery/banners/admin/banners/index.html.erb new file mode 100644 index 0000000..5413e3c --- /dev/null +++ b/app/views/refinery/banners/admin/banners/index.html.erb @@ -0,0 +1,7 @@ +<section id='records'> + <%= render 'records' %> +</section> +<aside id='actions'> + <%= render 'actions' %> +</aside> +<%= render '/refinery/admin/make_sortable', :tree => false if !searching? and ::Refinery::Banners::Admin::BannersController.sortable? and ::Refinery::Banners::Banner.count > 1 %> diff --git a/app/views/refinery/banners/admin/banners/new.html.erb b/app/views/refinery/banners/admin/banners/new.html.erb new file mode 100644 index 0000000..2d34363 --- /dev/null +++ b/app/views/refinery/banners/admin/banners/new.html.erb @@ -0,0 +1 @@ +<%= render 'form' %> diff --git a/app/views/refinery/banners/shared/_banner_image.html.erb b/app/views/refinery/banners/shared/_banner_image.html.erb new file mode 100644 index 0000000..74eebb4 --- /dev/null +++ b/app/views/refinery/banners/shared/_banner_image.html.erb @@ -0,0 +1 @@ +<%= image_fu(banner_image.image, '960x310#c') %>
\ No newline at end of file diff --git a/app/views/refinery/banners/shared/_banners.html.erb b/app/views/refinery/banners/shared/_banners.html.erb new file mode 100644 index 0000000..d436cc7 --- /dev/null +++ b/app/views/refinery/banners/shared/_banners.html.erb @@ -0,0 +1,9 @@ +<div id="slider"> + <% if @page.present? and @page.banners.published.present? %> + <%= render :partial => 'refinery/banners/shared/banner_image', :collection => @page.banners.published %> + <% elsif @banners.present? then %> + <%= render :partial => 'refinery/banners/shared/banner_image', :collection => @banners %> + <% else %> + <!--todo: insert static images here--> + <% end %> +</div>
\ No newline at end of file diff --git a/config/locales/en.yml b/config/locales/en.yml new file mode 100644 index 0000000..519a5dd --- /dev/null +++ b/config/locales/en.yml @@ -0,0 +1,35 @@ +en: + refinery: + plugins: + banners: + title: Banners + banners: + admin: + banners: + actions: + create_new: Add New Banner + reorder: Reorder Banners + reorder_done: Done Reordering Banners + records: + title: Banners + sorry_no_results: Sorry! There are no results found. + no_items_yet: There are no Banners yet. Click "Add New Banner" to add your first banner. + banner: + view_live_html: View this banner live <br/><em>(opens in a new window)</em> + edit: Edit this banner + delete: Remove this banner forever + banners: + show: + other: Other Banners + activerecord: + attributes: + 'refinery/banners/banner': + name: Name + title: Title + description: Description + image: Image + url: Url + is_active: Is Active + start_date: Start Date + expiry_date: Expiry Date + position: Position
\ No newline at end of file diff --git a/config/locales/es.yml b/config/locales/es.yml new file mode 100644 index 0000000..567da7f --- /dev/null +++ b/config/locales/es.yml @@ -0,0 +1,36 @@ +es: + refinery: + plugins: + banners: + title: Banners +# article: masculino/femenino + banners: + admin: + banners: + actions: + create_new: Crear nuevo banner + reorder: Reordenar banners + reorder_done: Reordenación de banners completada + records: + title: Banners + sorry_no_results: Lo siento, no hay resultados + no_items_yet: No hay banners todavÃa. Pulsa en "Crear nuevo Banner" para crear tu primer banner. + banner: + view_live_html: Ver este banner como abierto al público <br/><em>(abre en ventana nueva)</em> + edit: Editar este banner + delete: Borrar este banner para siempre + banners: + show: + other: Otros banners + activerecord: + attributes: + 'refinery/banners/banner': + name: Name + title: Title + description: Description + image: Image + url: Url + is_active: Is Active + start_date: Start Date + expiry_date: Expiry Date + position: Position
\ No newline at end of file diff --git a/config/locales/fr.yml b/config/locales/fr.yml new file mode 100644 index 0000000..3a2b0ba --- /dev/null +++ b/config/locales/fr.yml @@ -0,0 +1,35 @@ +fr: + refinery: + plugins: + banners: + title: Banners + banners: + admin: + banners: + actions: + create_new: Créer un(e) nouve(au/l/lle) Banner + reorder: Réordonner les Banners + reorder_done: Fin de réordonnancement des Banners + records: + title: Banners + sorry_no_results: "Désolé ! Aucun résultat." + no_items_yet: 'Il n''y a actuellement aucun(e) Banner. Cliquer sur "Créer un(e) nouve(au/l/lle) Banner" pour créer votre premi(er/ère) banner.' + banner: + view_live_html: Voir ce(t/tte) banner <br/><em>(Ouvre une nouvelle fenêtre)</em> + edit: Modifier ce(t/tte) banner + delete: Supprimer définitivement ce(t/tte) banner + banners: + show: + other: Autres Banners + activerecord: + attributes: + 'refinery/banners/banner': + name: Name + title: Title + description: Description + image: Image + url: Url + is_active: Is Active + start_date: Start Date + expiry_date: Expiry Date + position: Position
\ No newline at end of file diff --git a/config/locales/nb.yml b/config/locales/nb.yml new file mode 100644 index 0000000..04debc5 --- /dev/null +++ b/config/locales/nb.yml @@ -0,0 +1,35 @@ +nb: + refinery: + plugins: + banners: + title: Banners + banners: + admin: + banners: + actions: + create_new: Lag en ny Banner + reorder: Endre rekkefølgen på Banners + reorder_done: Ferdig å endre rekkefølgen Banners + records: + title: Banners + sorry_no_results: Beklager! Vi fant ikke noen resultater. + no_items_yet: Det er ingen Banners enda. Klikk på "Lag en ny Banner" for å legge til din første banner. + banner: + view_live_html: Vis hvordan denne banner ser ut offentlig <br/><em>(åpner i et nytt vindu)</em> + edit: Rediger denne banner + delete: Fjern denne banner permanent + banners: + show: + other: Andre Banners + activerecord: + attributes: + 'refinery/banners/banner': + name: Name + title: Title + description: Description + image: Image + url: Url + is_active: Is Active + start_date: Start Date + expiry_date: Expiry Date + position: Position
\ No newline at end of file diff --git a/config/locales/nl.yml b/config/locales/nl.yml new file mode 100644 index 0000000..c637b8a --- /dev/null +++ b/config/locales/nl.yml @@ -0,0 +1,35 @@ +nl: + refinery: + plugins: + banners: + title: Banners + banners: + admin: + banners: + actions: + create_new: Maak een nieuwe Banner + reorder: Wijzig de volgorde van de Banners + reorder_done: Klaar met het wijzingen van de volgorde van de Banners + records: + title: Banners + sorry_no_results: Helaas! Er zijn geen resultaten gevonden. + no_items_yet: Er zijn nog geen Banners. Druk op 'Maak een nieuwe Banner' om de eerste aan te maken. + banner: + view_live_html: Bekijk deze banner op de website <br/><em>(opent een nieuw venster)</em> + edit: Bewerk deze banner + delete: Verwijder deze banner voor eeuwig + banners: + show: + other: Andere Banners + activerecord: + attributes: + 'refinery/banners/banner': + name: Name + title: Title + description: Description + image: Image + url: Url + is_active: Is Active + start_date: Start Date + expiry_date: Expiry Date + position: Position
\ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb new file mode 100644 index 0000000..bc26998 --- /dev/null +++ b/config/routes.rb @@ -0,0 +1,19 @@ +Refinery::Core::Engine.routes.append do + + # Frontend routes + namespace :banners do + resources :banners, :path => '', :only => [:index, :show] + end + + # Admin routes + namespace :banners, :path => '' do + namespace :admin, :path => 'refinery' do + resources :banners, :except => :show do + collection do + post :update_positions + end + end + end + end + +end diff --git a/db/migrate/1_create_banners_banners.rb b/db/migrate/1_create_banners_banners.rb new file mode 100644 index 0000000..680fd7b --- /dev/null +++ b/db/migrate/1_create_banners_banners.rb @@ -0,0 +1,34 @@ +class CreateBannersBanners < ActiveRecord::Migration + + def up + create_table :refinery_banners do |t| + t.string :name + t.string :title + t.string :description + t.integer :image_id + t.string :url + t.boolean :is_active + t.date :start_date + t.date :expiry_date + t.integer :position + t.integer :position + + t.timestamps + end + + end + + def down + if defined?(::Refinery::UserPlugin) + ::Refinery::UserPlugin.destroy_all({:name => "refinerycms-banners"}) + end + + if defined?(::Refinery::Page) + ::Refinery::Page.delete_all({:link_url => "/banners/banners"}) + end + + drop_table :refinery_banners + + end + +end diff --git a/db/migrate/2_create_banners_banners_pages.rb b/db/migrate/2_create_banners_banners_pages.rb new file mode 100644 index 0000000..89af8e9 --- /dev/null +++ b/db/migrate/2_create_banners_banners_pages.rb @@ -0,0 +1,15 @@ +class CreateBannersBannersPages < ActiveRecord::Migration + def self.up + create_table :refinery_banners_pages, :id => false do |t| + t.integer :page_id + t.integer :banner_id + end + + add_index :refinery_banners_pages, :page_id + add_index :refinery_banners_pages, :banner_id + end + + def self.down + drop_table :refinery_banners_pages + end +end diff --git a/db/seeds.rb b/db/seeds.rb new file mode 100644 index 0000000..ccde242 --- /dev/null +++ b/db/seeds.rb @@ -0,0 +1,23 @@ +if defined?(::Refinery::User) + ::Refinery::User.all.each do |user| + if user.plugins.where(:name => 'refinerycms-banners').blank? + user.plugins.create(:name => 'refinerycms-banners', + :position => (user.plugins.maximum(:position) || -1) +1) + end + end +end + + +#url = "/banners" +#if defined?(::Refinery::Page) && ::Refinery::Page.where(:link_url => url).empty? +# page = ::Refinery::Page.create( +# :title => 'Banners', +# :link_url => url, +# :deletable => false, +# :menu_match => "^#{url}(\/|\/.+?|)$" +# ) +# Refinery::Pages.default_parts.each do |default_page_part| +# page.parts.create(:title => default_page_part, :body => nil) +# end +#end + diff --git a/lib/generators/refinery/banners_generator.rb b/lib/generators/refinery/banners_generator.rb new file mode 100644 index 0000000..f799d9d --- /dev/null +++ b/lib/generators/refinery/banners_generator.rb @@ -0,0 +1,18 @@ +module Refinery + class BannersGenerator < Rails::Generators::Base + + def rake_db + rake("refinery_banners:install:migrations") + end + + def append_load_seed_data + create_file 'db/seeds.rb' unless File.exists?(File.join(destination_root, 'db', 'seeds.rb')) + append_file 'db/seeds.rb', :verbose => true do + <<-EOH + +Refinery::Banners::Engine.load_seed + EOH + end + end + end +end diff --git a/lib/page_extensions.rb b/lib/page_extensions.rb new file mode 100644 index 0000000..973c177 --- /dev/null +++ b/lib/page_extensions.rb @@ -0,0 +1,17 @@ +module Refinery + module Banners + module Extensions + module Page + module ClassMethods + def add_banners_relationship + has_and_belongs_to_many :banners, :class_name => '::Refinery::Banners::Banner', :join_table => 'refinery_banners_pages' + end + end + + def self.included(base) + base.extend(ClassMethods).add_banners_relationship + end + end + end + end +end
\ No newline at end of file diff --git a/lib/refinery/banners.rb b/lib/refinery/banners.rb new file mode 100644 index 0000000..0004091 --- /dev/null +++ b/lib/refinery/banners.rb @@ -0,0 +1,21 @@ +require 'refinerycms-core' + +module Refinery + autoload :BannersGenerator, 'generators/refinery/banners_generator' + + module Banners + require 'refinery/banners/engine' + + class << self + attr_writer :root + + def root + @root ||= Pathname.new(File.expand_path('../../../', __FILE__)) + end + + def factory_paths + @factory_paths ||= [ root.join('spec', 'factories').to_s ] + end + end + end +end diff --git a/lib/refinery/banners/engine.rb b/lib/refinery/banners/engine.rb new file mode 100644 index 0000000..0299bb8 --- /dev/null +++ b/lib/refinery/banners/engine.rb @@ -0,0 +1,32 @@ +module Refinery + module Banners + class Engine < Rails::Engine + include Refinery::Engine + isolate_namespace Refinery::Banners + + engine_name :refinery_banners + + initializer "register refinerycms_banners plugin" do + Refinery::Plugin.register do |plugin| + plugin.name = "banners" + plugin.url = proc { Refinery::Core::Engine.routes.url_helpers.banners_admin_banners_path } + plugin.pathname = root + plugin.activity = { + :class_name => :'refinery/banners/banner', + :title => 'name' + } + + end + end + + config.to_prepare do + require 'page_extensions' + Refinery::Page.send :include, Refinery::Banners::Extensions::Page + end + + config.after_initialize do + Refinery.register_extension(Refinery::Banners) + end + end + end +end diff --git a/lib/refinerycms-pc_banners.rb b/lib/refinerycms-pc_banners.rb new file mode 100644 index 0000000..01a5409 --- /dev/null +++ b/lib/refinerycms-pc_banners.rb @@ -0,0 +1 @@ +require 'refinery/banners'
\ No newline at end of file diff --git a/lib/tasks/refinery/banners.rake b/lib/tasks/refinery/banners.rake new file mode 100644 index 0000000..b82fb87 --- /dev/null +++ b/lib/tasks/refinery/banners.rake @@ -0,0 +1,13 @@ +namespace :refinery do + + namespace :banners do + + # call this task by running: rake refinery:banners:my_task + # desc "Description of my task below" + # task :my_task => :environment do + # # add your logic here + # end + + end + +end
\ No newline at end of file diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..e721ef9 --- /dev/null +++ b/readme.md @@ -0,0 +1,10 @@ +# Banners extension for Refinery CMS. + +## How to build this extension as a gem + + cd vendor/extensions/banners + gem build refinerycms-pc_banners.gemspec + gem install refinerycms-pc_banners.gem + + # Sign up for a http://rubygems.org/ account and publish the gem + gem push refinerycms-pc_banners.gem
\ No newline at end of file diff --git a/refinerycms-pc_banners.gemspec b/refinerycms-pc_banners.gemspec new file mode 100644 index 0000000..3c82605 --- /dev/null +++ b/refinerycms-pc_banners.gemspec @@ -0,0 +1,18 @@ +# Encoding: UTF-8 + +Gem::Specification.new do |s| + s.platform = Gem::Platform::RUBY + s.name = 'refinerycms-pc_banners' + s.version = '2.0.0' + s.description = 'Ruby on Rails Banners extension for Refinery CMS' + s.date = '2012-03-11' + s.summary = 'Banners extension for Refinery CMS' + s.require_paths = %w(lib) + s.files = Dir["{app,config,db,lib}/**/*"] + ["readme.md"] + + # Runtime dependencies + s.add_dependency 'refinerycms-core', '~> 2.0.1' + + # Development dependencies (usually used for testing) + s.add_development_dependency 'refinerycms-testing', '~> 2.0.1' +end diff --git a/spec/dummy/.gitignore b/spec/dummy/.gitignore new file mode 100644 index 0000000..d2213b0 --- /dev/null +++ b/spec/dummy/.gitignore @@ -0,0 +1,76 @@ +# Rails +.bundle +db/*.sqlite3 +db/*.sqlite3-journal +*.log +tmp +tmp/**/* + +# Documentation +doc/api +doc/app +.yardoc +.yardopts +coverage + +# Public Uploads +public/system/* +public/themes/* + +# Public Cache +public/javascripts/cache +public/stylesheets/cache + +# Vendor Cache +vendor/cache + +# Acts as Indexed +index/**/* + +# Refinery Specific +*.tmproj +*.autobackupbyrefinery.* +refinerycms-*.gem + +# Mac +.DS_Store + +# Windows +Thumbs.db + +# NetBeans +nbproject + +# Eclipse +.project + +# Redcar +.redcar + +# Rubinius +*.rbc + +# Vim +*.swp +*.swo + +# RubyMine +.idea + +# E-texteditor +.eprj + +# Backup +*~ + +# Capybara Bug +capybara-*html + +# sass +.sass-cache +.sass-cache/* + +#rvm +.rvmrc +.rvmrc.* + diff --git a/spec/dummy/README.rdoc b/spec/dummy/README.rdoc new file mode 100644 index 0000000..7c36f23 --- /dev/null +++ b/spec/dummy/README.rdoc @@ -0,0 +1,261 @@ +== Welcome to Rails + +Rails is a web-application framework that includes everything needed to create +database-backed web applications according to the Model-View-Control pattern. + +This pattern splits the view (also called the presentation) into "dumb" +templates that are primarily responsible for inserting pre-built data in between +HTML tags. The model contains the "smart" domain objects (such as Account, +Product, Person, Post) that holds all the business logic and knows how to +persist themselves to a database. The controller handles the incoming requests +(such as Save New Account, Update Product, Show Post) by manipulating the model +and directing data to the view. + +In Rails, the model is handled by what's called an object-relational mapping +layer entitled Active Record. This layer allows you to present the data from +database rows as objects and embellish these data objects with business logic +methods. You can read more about Active Record in +link:files/vendor/rails/activerecord/README.html. + +The controller and view are handled by the Action Pack, which handles both +layers by its two parts: Action View and Action Controller. These two layers +are bundled in a single package due to their heavy interdependence. This is +unlike the relationship between the Active Record and Action Pack that is much +more separate. Each of these packages can be used independently outside of +Rails. You can read more about Action Pack in +link:files/vendor/rails/actionpack/README.html. + + +== Getting Started + +1. At the command prompt, create a new Rails application: + <tt>rails new myapp</tt> (where <tt>myapp</tt> is the application name) + +2. Change directory to <tt>myapp</tt> and start the web server: + <tt>cd myapp; rails server</tt> (run with --help for options) + +3. Go to http://localhost:3000/ and you'll see: + "Welcome aboard: You're riding Ruby on Rails!" + +4. Follow the guidelines to start developing your application. You can find +the following resources handy: + +* The Getting Started Guide: http://guides.rubyonrails.org/getting_started.html +* Ruby on Rails Tutorial Book: http://www.railstutorial.org/ + + +== Debugging Rails + +Sometimes your application goes wrong. Fortunately there are a lot of tools that +will help you debug it and get it back on the rails. + +First area to check is the application log files. Have "tail -f" commands +running on the server.log and development.log. Rails will automatically display +debugging and runtime information to these files. Debugging info will also be +shown in the browser on requests from 127.0.0.1. + +You can also log your own messages directly into the log file from your code +using the Ruby logger class from inside your controllers. Example: + + class WeblogController < ActionController::Base + def destroy + @weblog = Weblog.find(params[:id]) + @weblog.destroy + logger.info("#{Time.now} Destroyed Weblog ID ##{@weblog.id}!") + end + end + +The result will be a message in your log file along the lines of: + + Mon Oct 08 14:22:29 +1000 2007 Destroyed Weblog ID #1! + +More information on how to use the logger is at http://www.ruby-doc.org/core/ + +Also, Ruby documentation can be found at http://www.ruby-lang.org/. There are +several books available online as well: + +* Programming Ruby: http://www.ruby-doc.org/docs/ProgrammingRuby/ (Pickaxe) +* Learn to Program: http://pine.fm/LearnToProgram/ (a beginners guide) + +These two books will bring you up to speed on the Ruby language and also on +programming in general. + + +== Debugger + +Debugger support is available through the debugger command when you start your +Mongrel or WEBrick server with --debugger. This means that you can break out of +execution at any point in the code, investigate and change the model, and then, +resume execution! You need to install ruby-debug to run the server in debugging +mode. With gems, use <tt>sudo gem install ruby-debug</tt>. Example: + + class WeblogController < ActionController::Base + def index + @posts = Post.all + debugger + end + end + +So the controller will accept the action, run the first line, then present you +with a IRB prompt in the server window. Here you can do things like: + + >> @posts.inspect + => "[#<Post:0x14a6be8 + @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}>, + #<Post:0x14a6620 + @attributes={"title"=>"Rails", "body"=>"Only ten..", "id"=>"2"}>]" + >> @posts.first.title = "hello from a debugger" + => "hello from a debugger" + +...and even better, you can examine how your runtime objects actually work: + + >> f = @posts.first + => #<Post:0x13630c4 @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}> + >> f. + Display all 152 possibilities? (y or n) + +Finally, when you're ready to resume execution, you can enter "cont". + + +== Console + +The console is a Ruby shell, which allows you to interact with your +application's domain model. Here you'll have all parts of the application +configured, just like it is when the application is running. You can inspect +domain models, change values, and save to the database. Starting the script +without arguments will launch it in the development environment. + +To start the console, run <tt>rails console</tt> from the application +directory. + +Options: + +* Passing the <tt>-s, --sandbox</tt> argument will rollback any modifications + made to the database. +* Passing an environment name as an argument will load the corresponding + environment. Example: <tt>rails console production</tt>. + +To reload your controllers and models after launching the console run +<tt>reload!</tt> + +More information about irb can be found at: +link:http://www.rubycentral.org/pickaxe/irb.html + + +== dbconsole + +You can go to the command line of your database directly through <tt>rails +dbconsole</tt>. You would be connected to the database with the credentials +defined in database.yml. Starting the script without arguments will connect you +to the development database. Passing an argument will connect you to a different +database, like <tt>rails dbconsole production</tt>. Currently works for MySQL, +PostgreSQL and SQLite 3. + +== Description of Contents + +The default directory structure of a generated Ruby on Rails application: + + |-- app + | |-- assets + | |-- images + | |-- javascripts + | `-- stylesheets + | |-- controllers + | |-- helpers + | |-- mailers + | |-- models + | `-- views + | `-- layouts + |-- config + | |-- environments + | |-- initializers + | `-- locales + |-- db + |-- doc + |-- lib + | `-- tasks + |-- log + |-- public + |-- script + |-- test + | |-- fixtures + | |-- functional + | |-- integration + | |-- performance + | `-- unit + |-- tmp + | |-- cache + | |-- pids + | |-- sessions + | `-- sockets + `-- vendor + |-- assets + `-- stylesheets + `-- plugins + +app + Holds all the code that's specific to this particular application. + +app/assets + Contains subdirectories for images, stylesheets, and JavaScript files. + +app/controllers + Holds controllers that should be named like weblogs_controller.rb for + automated URL mapping. All controllers should descend from + ApplicationController which itself descends from ActionController::Base. + +app/models + Holds models that should be named like post.rb. Models descend from + ActiveRecord::Base by default. + +app/views + Holds the template files for the view that should be named like + weblogs/index.html.erb for the WeblogsController#index action. All views use + eRuby syntax by default. + +app/views/layouts + Holds the template files for layouts to be used with views. This models the + common header/footer method of wrapping views. In your views, define a layout + using the <tt>layout :default</tt> and create a file named default.html.erb. + Inside default.html.erb, call <% yield %> to render the view using this + layout. + +app/helpers + Holds view helpers that should be named like weblogs_helper.rb. These are + generated for you automatically when using generators for controllers. + Helpers can be used to wrap functionality for your views into methods. + +config + Configuration files for the Rails environment, the routing map, the database, + and other dependencies. + +db + Contains the database schema in schema.rb. db/migrate contains all the + sequence of Migrations for your schema. + +doc + This directory is where your application documentation will be stored when + generated using <tt>rake doc:app</tt> + +lib + Application specific libraries. Basically, any kind of custom code that + doesn't belong under controllers, models, or helpers. This directory is in + the load path. + +public + The directory available for the web server. Also contains the dispatchers and the + default HTML files. This should be set as the DOCUMENT_ROOT of your web + server. + +script + Helper scripts for automation and generation. + +test + Unit and functional tests along with fixtures. When using the rails generate + command, template test files will be generated for you and placed in this + directory. + +vendor + External libraries that the application depends on. Also includes the plugins + subdirectory. If the app has frozen rails, those gems also go here, under + vendor/rails/. This directory is in the load path. diff --git a/spec/dummy/Rakefile b/spec/dummy/Rakefile new file mode 100644 index 0000000..40f1538 --- /dev/null +++ b/spec/dummy/Rakefile @@ -0,0 +1,7 @@ +#!/usr/bin/env rake +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Dummy::Application.load_tasks
\ No newline at end of file diff --git a/spec/dummy/app/assets/javascripts/application.js b/spec/dummy/app/assets/javascripts/application.js new file mode 100644 index 0000000..9097d83 --- /dev/null +++ b/spec/dummy/app/assets/javascripts/application.js @@ -0,0 +1,15 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// the compiled file. +// +// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD +// GO AFTER THE REQUIRES BELOW. +// +//= require jquery +//= require jquery_ujs +//= require_tree . diff --git a/spec/dummy/app/assets/stylesheets/application.css b/spec/dummy/app/assets/stylesheets/application.css new file mode 100644 index 0000000..3b5cc66 --- /dev/null +++ b/spec/dummy/app/assets/stylesheets/application.css @@ -0,0 +1,13 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, + * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the top of the + * compiled file, but it's generally better to create a new file per style scope. + * + *= require_self + *= require_tree . +*/ diff --git a/spec/dummy/app/controllers/application_controller.rb b/spec/dummy/app/controllers/application_controller.rb new file mode 100644 index 0000000..e8065d9 --- /dev/null +++ b/spec/dummy/app/controllers/application_controller.rb @@ -0,0 +1,3 @@ +class ApplicationController < ActionController::Base + protect_from_forgery +end diff --git a/spec/dummy/app/decorators/controllers/refinery/.gitkeep b/spec/dummy/app/decorators/controllers/refinery/.gitkeep new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/spec/dummy/app/decorators/controllers/refinery/.gitkeep diff --git a/spec/dummy/app/decorators/models/refinery/.gitkeep b/spec/dummy/app/decorators/models/refinery/.gitkeep new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/spec/dummy/app/decorators/models/refinery/.gitkeep diff --git a/spec/dummy/app/helpers/application_helper.rb b/spec/dummy/app/helpers/application_helper.rb new file mode 100644 index 0000000..de6be79 --- /dev/null +++ b/spec/dummy/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/spec/dummy/app/mailers/.gitkeep b/spec/dummy/app/mailers/.gitkeep new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/spec/dummy/app/mailers/.gitkeep diff --git a/spec/dummy/app/models/.gitkeep b/spec/dummy/app/models/.gitkeep new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/spec/dummy/app/models/.gitkeep diff --git a/spec/dummy/app/views/sitemap/index.xml.builder b/spec/dummy/app/views/sitemap/index.xml.builder new file mode 100644 index 0000000..8e89852 --- /dev/null +++ b/spec/dummy/app/views/sitemap/index.xml.builder @@ -0,0 +1,25 @@ +xml.instruct! + +xml.urlset "xmlns" => "http://www.sitemaps.org/schemas/sitemap/0.9" do + + @locales.each do |locale| + ::I18n.locale = locale + ::Refinery::Page.live.in_menu.includes(:parts).each do |page| + # exclude sites that are external to our own domain. + page_url = if page.url.is_a?(Hash) + # This is how most pages work without being overriden by link_url + page.url.merge({:only_path => false}) + elsif page.url.to_s !~ /^http/ + # handle relative link_url addresses. + [request.protocol, request.host_with_port, page.url].join + end + + # Add XML entry only if there is a valid page_url found above. + xml.url do + xml.loc url_for(page_url) + xml.lastmod page.updated_at.to_date + end if page_url.present? and page.show_in_menu? + end + end + +end diff --git a/spec/dummy/config.ru b/spec/dummy/config.ru new file mode 100644 index 0000000..1989ed8 --- /dev/null +++ b/spec/dummy/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Dummy::Application diff --git a/spec/dummy/config/application.rb b/spec/dummy/config/application.rb new file mode 100644 index 0000000..81d5db4 --- /dev/null +++ b/spec/dummy/config/application.rb @@ -0,0 +1,62 @@ +require File.expand_path('../boot', __FILE__) + +require 'rails/all' + +require 'bundler/setup' + +# If you have a Gemfile, require the default gems, the ones in the +# current environment and also include :assets gems if in development +# or test environments. +Bundler.require *Rails.groups(:assets) + +require 'refinerycms' + +module Dummy + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Custom directories with classes and modules you want to be autoloadable. + # config.autoload_paths += %W(#{config.root}/extras) + + # Only load the plugins named here, in the order given (default is alphabetical). + # :all can be used as a placeholder for all plugins not explicitly named. + # config.plugins = [ :exception_notification, :ssl_requirement, :all ] + + # Activate observers that should always be running. + # config.active_record.observers = :cacher, :garbage_collector, :forum_observer + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Configure the default encoding used in templates for Ruby 1.9. + config.encoding = "utf-8" + + # Configure sensitive parameters which will be filtered from the log file. + config.filter_parameters += [:password] + + # Use SQL instead of Active Record's schema dumper when creating the database. + # This is necessary if your schema can't be completely dumped by the schema dumper, + # like if you have constraints or database-specific column types + # config.active_record.schema_format = :sql + + # Enforce whitelist mode for mass assignment. + # This will create an empty whitelist of attributes available for mass-assignment for all models + # in your app. As such, your models will need to explicitly whitelist or blacklist accessible + # parameters by using an attr_accessible or attr_protected declaration. + # config.active_record.whitelist_attributes = true + + # Enable the asset pipeline + config.assets.enabled = true + + # Version of your assets, change this if you want to expire all your assets + config.assets.version = '1.0' + end +end + diff --git a/spec/dummy/config/boot.rb b/spec/dummy/config/boot.rb new file mode 100644 index 0000000..074f555 --- /dev/null +++ b/spec/dummy/config/boot.rb @@ -0,0 +1,6 @@ +require 'rubygems' +gemfile = File.expand_path("../../../../Gemfile", __FILE__) + +ENV['BUNDLE_GEMFILE'] = gemfile +require 'bundler' +Bundler.setup diff --git a/spec/dummy/config/database.yml b/spec/dummy/config/database.yml new file mode 100644 index 0000000..d6f6d00 --- /dev/null +++ b/spec/dummy/config/database.yml @@ -0,0 +1,18 @@ +login: &login + + adapter: sqlite3 + pool: 5 + timeout: 5000 + + +development: + <<: *login + database: dummy_dev + +test: + <<: *login + database: dummy_test + +production: + <<: *login + database: dummy_prod
\ No newline at end of file diff --git a/spec/dummy/config/database.yml.mysql b/spec/dummy/config/database.yml.mysql new file mode 100644 index 0000000..75cca95 --- /dev/null +++ b/spec/dummy/config/database.yml.mysql @@ -0,0 +1,20 @@ +development: &development + adapter: mysql2 + host: localhost + username: root + password: + database: your_local_database + +test: &test + adapter: mysql2 + host: localhost + username: root + password: + database: your_test_database + +production: &production + adapter: mysql2 + host: localhost + database: your_production_database + username: your_production_database_login + password: your_production_database_password diff --git a/spec/dummy/config/database.yml.postgresql b/spec/dummy/config/database.yml.postgresql new file mode 100644 index 0000000..09c55d3 --- /dev/null +++ b/spec/dummy/config/database.yml.postgresql @@ -0,0 +1,58 @@ +# PostgreSQL. Versions 7.4 and 8.x are supported. +# +# Install the pg driver: +# gem install pg +# On Mac OS X with macports: +# gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config +# On Windows: +# gem install pg +# Choose the win32 build. +# Install PostgreSQL and put its /bin directory on your path. +# +# Configure Using Gemfile +# gem 'pg' +# +development: + adapter: postgresql + encoding: unicode + database: refinery_database_development + pool: 5 + username: postgres + password: postgres + min_messages: warning + + # Connect on a TCP socket. Omitted by default since the client uses a + # domain socket that doesn't need configuration. Windows does not have + # domain sockets, so uncomment these lines. + #host: localhost + #port: 5432 + + # Schema search path. The server defaults to $user,public + #schema_search_path: myapp,sharedapp,public + + # Minimum log levels, in increasing order: + # debug5, debug4, debug3, debug2, debug1, + # log, notice, warning, error, fatal, and panic + # The server defaults to notice. + #min_messages: warning + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + adapter: postgresql + encoding: unicode + database: refinery_database_test + pool: 5 + username: postgres + password: postgres + min_messages: warning + +production: + adapter: postgresql + encoding: unicode + database: refinery_database_production + pool: 5 + username: postgres + password: postgres + min_messages: warning diff --git a/spec/dummy/config/database.yml.sqlite3 b/spec/dummy/config/database.yml.sqlite3 new file mode 100644 index 0000000..a511ffe --- /dev/null +++ b/spec/dummy/config/database.yml.sqlite3 @@ -0,0 +1,18 @@ +# SQLite version 3.x +development: + adapter: <%= "jdbc" if defined?(JRUBY_PLATFORM) %>sqlite3 + database: db/development.sqlite3 + timeout: 5000 + +# Warning: The database defined as 'test' will be erased and +# re-generated from your development database when you run 'rake'. +# Do not set this db to the same as development or production. +test: + adapter: <%= "jdbc" if defined?(JRUBY_PLATFORM) %>sqlite3 + database: db/test.sqlite3 + timeout: 5000 + +production: + adapter: <%= "jdbc" if defined?(JRUBY_PLATFORM) %>sqlite3 + database: db/production.sqlite3 + timeout: 5000 diff --git a/spec/dummy/config/environment.rb b/spec/dummy/config/environment.rb new file mode 100644 index 0000000..3da5eb9 --- /dev/null +++ b/spec/dummy/config/environment.rb @@ -0,0 +1,5 @@ +# Load the rails application +require File.expand_path('../application', __FILE__) + +# Initialize the rails application +Dummy::Application.initialize! diff --git a/spec/dummy/config/environments/development.rb b/spec/dummy/config/environments/development.rb new file mode 100644 index 0000000..82c74d1 --- /dev/null +++ b/spec/dummy/config/environments/development.rb @@ -0,0 +1,37 @@ +Dummy::Application.configure do + # Settings specified here will take precedence over those in config/application.rb + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Log error messages when you accidentally call methods on nil. + config.whiny_nils = true + + # Show full error reports and disable caching + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger + config.active_support.deprecation = :log + + # Only use best-standards-support built into browsers + config.action_dispatch.best_standards_support = :builtin + + # Raise exception on mass assignment protection for Active Record models + config.active_record.mass_assignment_sanitizer = :strict + + # Log the query plan for queries taking more than this (works + # with SQLite, MySQL, and PostgreSQL) + config.active_record.auto_explain_threshold_in_seconds = 0.5 + + # Do not compress assets + config.assets.compress = false + + # Expands the lines which load the assets + config.assets.debug = true +end diff --git a/spec/dummy/config/environments/production.rb b/spec/dummy/config/environments/production.rb new file mode 100644 index 0000000..c49a90c --- /dev/null +++ b/spec/dummy/config/environments/production.rb @@ -0,0 +1,71 @@ +Dummy::Application.configure do + + # Refinery has set config.assets.initialize_on_precompile = false by default. + config.assets.initialize_on_precompile = false + + # Settings specified here will take precedence over those in config/application.rb + + # Code is not reloaded between requests + config.cache_classes = true + + # Full error reports are disabled and caching is turned on + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Disable Rails's static asset server (Apache or nginx will already do this) + config.serve_static_assets = false + + # Compress JavaScripts and CSS + config.assets.compress = true + + # Don't fallback to assets pipeline if a precompiled asset is missed + config.assets.compile = true + + # Generate digests for assets URLs + config.assets.digest = true + + # Defaults to Rails.root.join("public/assets") + # config.assets.manifest = YOUR_PATH + + # Specifies the header that your server uses for sending files + # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache + # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # See everything in the log (default is :info) + # config.log_level = :debug + + # Prepend all log lines with the following tags + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server + # config.action_controller.asset_host = "http://assets.example.com" + + # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added) + # config.assets.precompile += %w( search.js ) + + # Disable delivery errors, bad email addresses will be ignored + # config.action_mailer.raise_delivery_errors = false + + # Enable threaded mode + # config.threadsafe! + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation can not be found) + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners + config.active_support.deprecation = :notify + + # Log the query plan for queries taking more than this (works + # with SQLite, MySQL, and PostgreSQL) + # config.active_record.auto_explain_threshold_in_seconds = 0.5 +end diff --git a/spec/dummy/config/environments/test.rb b/spec/dummy/config/environments/test.rb new file mode 100644 index 0000000..f1a4814 --- /dev/null +++ b/spec/dummy/config/environments/test.rb @@ -0,0 +1,37 @@ +Dummy::Application.configure do + # Settings specified here will take precedence over those in config/application.rb + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Configure static asset server for tests with Cache-Control for performance + config.serve_static_assets = true + config.static_cache_control = "public, max-age=3600" + + # Log error messages when you accidentally call methods on nil + config.whiny_nils = true + + # Show full error reports and disable caching + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Raise exception on mass assignment protection for Active Record models + config.active_record.mass_assignment_sanitizer = :strict + + # Print deprecation notices to the stderr + config.active_support.deprecation = :stderr +end diff --git a/spec/dummy/config/initializers/backtrace_silencers.rb b/spec/dummy/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..59385cd --- /dev/null +++ b/spec/dummy/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/spec/dummy/config/initializers/devise.rb b/spec/dummy/config/initializers/devise.rb new file mode 100644 index 0000000..027a6ba --- /dev/null +++ b/spec/dummy/config/initializers/devise.rb @@ -0,0 +1,229 @@ +require 'devise' + +# Use this hook to configure devise mailer, warden hooks and so forth. +# Many of these configuration options can be set straight in your model. +Devise.setup do |config| + # ==> Mailer Configuration + # Configure the e-mail address which will be shown in Devise::Mailer, + # note that it will be overwritten if you use your own mailer class with default "from" parameter. + # config.mailer_sender = "please-change-me-at-config-initializers-devise@example.com" + + # Configure the class responsible to send e-mails. + # config.mailer = "Devise::Mailer" + + # Automatically apply schema changes in tableless databases + config.apply_schema = false + + # ==> ORM configuration + # Load and configure the ORM. Supports :active_record (default) and + # :mongoid (bson_ext recommended) by default. Other ORMs may be + # available as additional gems. + require 'devise/orm/active_record' + + # ==> Configuration for any authentication mechanism + # Configure which keys are used when authenticating a user. The default is + # just :email. You can configure it to use [:username, :subdomain], so for + # authenticating a user, both parameters are required. Remember that those + # parameters are used only when authenticating and not when retrieving from + # session. If you need permissions, you should implement that in a before filter. + # You can also supply a hash where the value is a boolean determining whether + # or not authentication should be aborted when the value is not present. + config.authentication_keys = [ :login ] + + # Configure parameters from the request object used for authentication. Each entry + # given should be a request method and it will automatically be passed to the + # find_for_authentication method and considered in your model lookup. For instance, + # if you set :request_keys to [:subdomain], :subdomain will be used on authentication. + # The same considerations mentioned for authentication_keys also apply to request_keys. + # config.request_keys = [] + + # Configure which authentication keys should be case-insensitive. + # These keys will be downcased upon creating or modifying a user and when used + # to authenticate or find a user. Default is :email. + config.case_insensitive_keys = [] + + # Configure which authentication keys should have whitespace stripped. + # These keys will have whitespace before and after removed upon creating or + # modifying a user and when used to authenticate or find a user. Default is :email. + # config.strip_whitespace_keys = [ :email ] + + # Tell if authentication through request.params is enabled. True by default. + # It can be set to an array that will enable params authentication only for the + # given stratragies, for example, `config.params_authenticatable = [:database]` will + # enable it only for database (email + password) authentication. + # config.params_authenticatable = true + + # Tell if authentication through HTTP Basic Auth is enabled. False by default. + # It can be set to an array that will enable http authentication only for the + # given stratragies, for example, `config.http_authenticatable = [:token]` will + # enable it only for token authentication. + # config.http_authenticatable = false + + # If http headers should be returned for AJAX requests. True by default. + # config.http_authenticatable_on_xhr = true + + # The realm used in Http Basic Authentication. "Application" by default. + # config.http_authentication_realm = "Application" + + # It will change confirmation, password recovery and other workflows + # to behave the same regardless if the e-mail provided was right or wrong. + # Does not affect registerable. + # config.paranoid = true + + # By default Devise will store the user in session. You can skip storage for + # :http_auth and :token_auth by adding those symbols to the array below. + # Notice that if you are skipping storage for all authentication paths, you + # may want to disable generating routes to Devise's sessions controller by + # passing :skip => :sessions to `devise_for` in your config/routes.rb + config.skip_session_storage = [:http_auth] + + # ==> Configuration for :database_authenticatable + # For bcrypt, this is the cost for hashing the password and defaults to 10. If + # using other encryptors, it sets how many times you want the password re-encrypted. + # + # Limiting the stretches to just one in testing will increase the performance of + # your test suite dramatically. However, it is STRONGLY RECOMMENDED to not use + # a value less than 10 in other environments. + config.stretches = Rails.env.test? ? 1 : 10 + + # Setup a pepper to generate the encrypted password. + # config.pepper = <%= SecureRandom.hex(64).inspect %> + + # ==> Configuration for :confirmable + # A period that the user is allowed to access the website even without + # confirming his account. For instance, if set to 2.days, the user will be + # able to access the website for two days without confirming his account, + # access will be blocked just in the third day. Default is 0.days, meaning + # the user cannot access the website without confirming his account. + # config.allow_unconfirmed_access_for = 2.days + + # If true, requires any email changes to be confirmed (exctly the same way as + # initial account confirmation) to be applied. Requires additional unconfirmed_email + # db field (see migrations). Until confirmed new email is stored in + # unconfirmed email column, and copied to email column on successful confirmation. + # config.reconfirmable = true + + # Defines which key will be used when confirming an account + # config.confirmation_keys = [ :email ] + + # ==> Configuration for :rememberable + # The time the user will be remembered without asking for credentials again. + # config.remember_for = 2.weeks + + # If true, extends the user's remember period when remembered via cookie. + # config.extend_remember_period = false + + # If true, uses the password salt as remember token. This should be turned + # to false if you are not using database authenticatable. + config.use_salt_as_remember_token = true + + # Options to be passed to the created cookie. For instance, you can set + # :secure => true in order to force SSL only cookies. + # config.cookie_options = {} + + # ==> Configuration for :validatable + # Range for password length. Default is 6..128. + config.password_length = 4..128 + + # Email regex used to validate email formats. It simply asserts that + # an one (and only one) @ exists in the given string. This is mainly + # to give user feedback and not to assert the e-mail validity. + # config.email_regexp = /\A[^@]+@[^@]+\z/ + + # ==> Configuration for :timeoutable + # The time you want to timeout the user session without activity. After this + # time the user will be asked for credentials again. Default is 30 minutes. + # config.timeout_in = 30.minutes + + # ==> Configuration for :lockable + # Defines which strategy will be used to lock an account. + # :failed_attempts = Locks an account after a number of failed attempts to sign in. + # :none = No lock strategy. You should handle locking by yourself. + # config.lock_strategy = :failed_attempts + + # Defines which key will be used when locking and unlocking an account + # config.unlock_keys = [ :email ] + + # Defines which strategy will be used to unlock an account. + # :email = Sends an unlock link to the user email + # :time = Re-enables login after a certain amount of time (see :unlock_in below) + # :both = Enables both strategies + # :none = No unlock strategy. You should handle unlocking by yourself. + # config.unlock_strategy = :both + + # Number of authentication tries before locking an account if lock_strategy + # is failed attempts. + # config.maximum_attempts = 20 + + # Time interval to unlock the account if :time is enabled as unlock_strategy. + # config.unlock_in = 1.hour + + # ==> Configuration for :recoverable + # + # Defines which key will be used when recovering the password for an account + # config.reset_password_keys = [ :email ] + + # Time interval you can reset your password with a reset password key. + # Don't put a too small interval or your users won't have the time to + # change their passwords. + config.reset_password_within = 6.hours + + # ==> Configuration for :encryptable + # Allow you to use another encryption algorithm besides bcrypt (default). You can use + # :sha1, :sha512 or encryptors from others authentication tools as :clearance_sha1, + # :authlogic_sha512 (then you should set stretches above to 20 for default behavior) + # and :restful_authentication_sha1 (then you should set stretches to 10, and copy + # REST_AUTH_SITE_KEY to pepper) + # config.encryptor = :sha512 + + # ==> Configuration for :token_authenticatable + # Defines name of the authentication token params key + # config.token_authentication_key = :auth_token + + # ==> Scopes configuration + # Turn scoped views on. Before rendering "sessions/new", it will first check for + # "users/sessions/new". It's turned off by default because it's slower if you + # are using only default views. + # config.scoped_views = false + + # Configure the default scope given to Warden. By default it's the first + # devise role declared in your routes (usually :user). + # config.default_scope = :user + + # Configure sign_out behavior. + # Sign_out action can be scoped (i.e. /users/sign_out affects only :user scope). + # The default is true, which means any logout action will sign out all active scopes. + # config.sign_out_all_scopes = true + + # ==> Navigation configuration + # Lists the formats that should be treated as navigational. Formats like + # :html, should redirect to the sign in page when the user does not have + # access, but formats like :xml or :json, should return 401. + # + # If you have any extra navigational formats, like :iphone or :mobile, you + # should add them to the navigational formats lists. + # + # The "*/*" below is required to match Internet Explorer requests. + # config.navigational_formats = ["*/*", :html] + + # The default HTTP method used to sign out a resource. Default is :delete. + config.sign_out_via = :delete + + # ==> OmniAuth + # Add a new OmniAuth provider. Check the wiki for more information on setting + # up on your models and hooks. + # config.omniauth :github, 'APP_ID', 'APP_SECRET', :scope => 'user,public_repo' + + # ==> Warden configuration + # If you want to use other strategies, that are not supported by Devise, or + # change the failure app, you can configure them inside the config.warden block. + # + # config.warden do |manager| + # manager.intercept_401 = false + # manager.default_strategies(:scope => :user).unshift :some_external_strategy + # end + + # Please do not change the router_name away from :refinery + # otherwise Refinery may not function properly. Thanks! + config.router_name = :refinery +end diff --git a/spec/dummy/config/initializers/inflections.rb b/spec/dummy/config/initializers/inflections.rb new file mode 100644 index 0000000..5d8d9be --- /dev/null +++ b/spec/dummy/config/initializers/inflections.rb @@ -0,0 +1,15 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format +# (all these examples are active by default): +# ActiveSupport::Inflector.inflections do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end +# +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/spec/dummy/config/initializers/mime_types.rb b/spec/dummy/config/initializers/mime_types.rb new file mode 100644 index 0000000..72aca7e --- /dev/null +++ b/spec/dummy/config/initializers/mime_types.rb @@ -0,0 +1,5 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf +# Mime::Type.register_alias "text/html", :iphone diff --git a/spec/dummy/config/initializers/refinery/core.rb b/spec/dummy/config/initializers/refinery/core.rb new file mode 100644 index 0000000..4116321 --- /dev/null +++ b/spec/dummy/config/initializers/refinery/core.rb @@ -0,0 +1,48 @@ +Refinery::Core.configure do |config| + # When true will rescue all not found errors and display a friendly error page + config.rescue_not_found = Rails.env.production? + + # When true will use Amazon's Simple Storage Service instead of + # the default file system for storing resources and images + config.s3_backend = !(ENV['S3_KEY'].nil? || ENV['S3_SECRET'].nil?) + + # Whenever Refinery caches anything and can set a cache key, it will add + # a prefix to the cache key containing the string you set here. + # config.base_cache_key = :refinery + + # Site name + # config.site_name = "Company Name" + + # This activates Google Analytics tracking within your website. If this + # config is left blank or set to UA-xxxxxx-x then no remote calls to + # Google Analytics are made. + # config.google_analytics_page_code = "UA-xxxxxx-x" + + # Enable/disable authenticity token on frontend + # config.authenticity_token_on_frontend = true + + # Hide/show child pages in menu + # config.menu_hide_children = false + + # CSS class selectors for menu helper + # config.menu_css = {:selected=>"selected", :first=>"first", :last=>"last"} + + # Should set this if concerned about DOS attacks. See + # http://markevans.github.com/dragonfly/file.Configuration.html#Configuration + # config.dragonfly_secret = "1233e9522234bda0c00d18011008f76212c3ba6e89935bb4" + + # Show/hide IE6 upgrade message in the backend + # config.ie6_upgrade_message_enabled = true + + # Show/hide browser update message in the backend + # config.show_internet_explorer_upgrade_message = false + + # Add extra tags to the wymeditor whitelist e.g. = {'tag' => {'attributes' => {'1' => 'href'}}} or just {'tag' => {}} + # config.wymeditor_whitelist_tags = {} + + # Register extra javascript for backend + # config.register_javascript "prototype-rails" + + # Register extra stylesheet for backend (optional options) + # config.register_stylesheet "custom", :media => 'screen' +end diff --git a/spec/dummy/config/initializers/refinery/images.rb b/spec/dummy/config/initializers/refinery/images.rb new file mode 100644 index 0000000..4113370 --- /dev/null +++ b/spec/dummy/config/initializers/refinery/images.rb @@ -0,0 +1,41 @@ +Refinery::Images.configure do |config| + # Configures the maximum allowed upload size (in bytes) for an image + # config.max_image_size = 5242880 + + # Configure how many images per page should be displayed when a dialog is presented that contains images + # config.pages_per_dialog = 18 + + # Configure how many images per page should be displayed when a dialog is presented that + # contains images and image resize options + # config.pages_per_dialog_that_have_size_options = 12 + + # Configure how many images per page should be displayed in the list of images in the admin area + # config.pages_per_admin_index = 20 + + # Configure image sizes + # config.user_image_sizes = {:small=>"110x110>", :medium=>"225x255>", :large=>"450x450>"} + + # Configure image view options + # config.image_views = [:grid, :list] + + # Configure default image view + # config.preferred_image_view = :grid + + # Configure S3 (you can also use ENV for this) + # The s3_backend setting by default defers to the core setting for this but can be set just for images. + # config.s3_backend = Refinery::Core.s3_backend + # config.s3_bucket_name = ENV['S3_BUCKET'] + # config.s3_access_key_id = ENV['S3_KEY'] + # config.s3_secret_access_key = ENV['S3_SECRET'] + # config.s3_region = ENV['S3_REGION] + + # Configure Dragonfly + # This is where in the middleware stack to insert the Dragonfly middleware + # config.dragonfly_insert_before = "ActionDispatch::Callbacks" + # config.dragonfly_secret = "1233e9522234bda0c00d18011008f76212c3ba6e89935bb4" + # If you decide to trust file extensions replace :ext below with :format + # config.dragonfly_url_format = "/system/images/:job/:basename.:ext" + # config.datastore_root_path = nil + # config.trust_file_extensions = false + +end diff --git a/spec/dummy/config/initializers/refinery/pages.rb b/spec/dummy/config/initializers/refinery/pages.rb new file mode 100644 index 0000000..047b5db --- /dev/null +++ b/spec/dummy/config/initializers/refinery/pages.rb @@ -0,0 +1,44 @@ +Refinery::Pages.configure do |config| + # Configure specific page templates + # config.types.register :home do |home| + # home.parts = %w[intro body] + # end + + # Configure global page default parts + # config.default_parts = ["Body", "Side Body"] + + # Configure how many pages per page should be displayed when a dialog is presented that contains a links to pages + # config.pages_per_dialog = 14 + + # Configure how many pages per page should be displayed in the list of pages in the admin area + # config.pages_per_admin_index = 20 + + # Configure whether to strip diacritics from Western characters + # config.approximate_ascii = false + + # Configure whether to strip non-ASCII characters from the friendly_id string + # config.strip_non_ascii = false + + # Set this to true if you want to override slug which automatically gets generated + # when you create a page + # config.use_custom_slugs = false + + # Set this to true if you want backend pages to be cached + # config.cache_pages_backend = false + + # Set this to true to activate full-page-cache + # config.cache_pages_full = false + + # Set this to true to fully expand the page hierarchy in the admin + # config.auto_expand_admin_tree = true + + # config.layout_template_whitelist = ["application"] + + # config.view_template_whitelist = ["home", "show"] + + # config.use_layout_templates = false + + # config.use_view_templates = false + + # config.absolute_page_links = false +end diff --git a/spec/dummy/config/initializers/refinery/resources.rb b/spec/dummy/config/initializers/refinery/resources.rb new file mode 100644 index 0000000..14ba1c7 --- /dev/null +++ b/spec/dummy/config/initializers/refinery/resources.rb @@ -0,0 +1,26 @@ +Refinery::Resources.configure do |config| + # Configures the maximum allowed upload size (in bytes) for a file upload + # config.max_file_size = 52428800 + + # Configure how many resources per page should be displayed when a dialog is presented that contains resources + # config.pages_per_dialog = 12 + + # Configure how many resources per page should be displayed in the list of resources in the admin area + # config.pages_per_admin_index = 20 + + # Configure S3 (you can also use ENV for this) + # The s3_backend setting by default defers to the core setting for this but can be set just for resources. + # config.s3_backend = Refinery::Core.s3_backend + # config.s3_bucket_name = ENV['S3_BUCKET'] + # config.s3_access_key_id = ENV['S3_KEY'] + # config.s3_secret_access_key = ENV['S3_SECRET'] + # config.s3_region = ENV['S3_REGION] + + # Configure Dragonfly + # This is where in the middleware stack to insert the Dragonfly middleware + # config.dragonfly_insert_before = "ActionDispatch::Callbacks" + # config.dragonfly_secret = "1233e9522234bda0c00d18011008f76212c3ba6e89935bb4" + # config.dragonfly_url_format = "/system/resources/:job/:basename.:format" + # config.datastore_root_path = nil + +end diff --git a/spec/dummy/config/initializers/secret_token.rb b/spec/dummy/config/initializers/secret_token.rb new file mode 100644 index 0000000..ec81156 --- /dev/null +++ b/spec/dummy/config/initializers/secret_token.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +Dummy::Application.config.secret_token = '35a3af31a73bd94f9b454e6d343b83634e2fef674e9f537476a625d51a3b13a7025eeffae01c04fc5d41838dbdf28e1a156b9176257f15f284ceaba103a42578' diff --git a/spec/dummy/config/initializers/session_store.rb b/spec/dummy/config/initializers/session_store.rb new file mode 100644 index 0000000..aa2f512 --- /dev/null +++ b/spec/dummy/config/initializers/session_store.rb @@ -0,0 +1,8 @@ +# Be sure to restart your server when you modify this file. + +Dummy::Application.config.session_store :cookie_store, :key => '_dummy_session' + +# Use the database for sessions instead of the cookie-based default, +# which shouldn't be used to store highly confidential information +# (create the session table with "rails generate session_migration") +# Dummy::Application.config.session_store :active_record_store diff --git a/spec/dummy/config/initializers/wrap_parameters.rb b/spec/dummy/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..da4fb07 --- /dev/null +++ b/spec/dummy/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. +# +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters :format => [:json] +end + +# Disable root element in JSON by default. +ActiveSupport.on_load(:active_record) do + self.include_root_in_json = false +end diff --git a/spec/dummy/config/locales/en.yml b/spec/dummy/config/locales/en.yml new file mode 100644 index 0000000..179c14c --- /dev/null +++ b/spec/dummy/config/locales/en.yml @@ -0,0 +1,5 @@ +# Sample localization file for English. Add more files in this directory for other locales. +# See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points. + +en: + hello: "Hello world" diff --git a/spec/dummy/config/routes.rb b/spec/dummy/config/routes.rb new file mode 100644 index 0000000..f43dfc1 --- /dev/null +++ b/spec/dummy/config/routes.rb @@ -0,0 +1,3 @@ +Rails.application.routes.draw do + mount Refinery::Core::Engine, :at => "/" +end diff --git a/spec/dummy/db/seeds.rb b/spec/dummy/db/seeds.rb new file mode 100644 index 0000000..7ca73e2 --- /dev/null +++ b/spec/dummy/db/seeds.rb @@ -0,0 +1,10 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). +# +# Examples: +# +# cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }]) +# Mayor.create(:name => 'Emanuel', :city => cities.first) + +# Added by Refinery CMS Pages extension +Refinery::Pages::Engine.load_seed diff --git a/spec/dummy/lib/assets/.gitkeep b/spec/dummy/lib/assets/.gitkeep new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/spec/dummy/lib/assets/.gitkeep diff --git a/spec/dummy/log/.gitkeep b/spec/dummy/log/.gitkeep new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/spec/dummy/log/.gitkeep diff --git a/spec/dummy/public/404.html b/spec/dummy/public/404.html new file mode 100644 index 0000000..9a48320 --- /dev/null +++ b/spec/dummy/public/404.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<html> +<head> + <title>The page you were looking for doesn't exist (404)</title> + <style type="text/css"> + body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; } + div.dialog { + width: 25em; + padding: 0 4em; + margin: 4em auto 0 auto; + border: 1px solid #ccc; + border-right-color: #999; + border-bottom-color: #999; + } + h1 { font-size: 100%; color: #f00; line-height: 1.5em; } + </style> +</head> + +<body> + <!-- This file lives in public/404.html --> + <div class="dialog"> + <h1>The page you were looking for doesn't exist.</h1> + <p>You may have mistyped the address or the page may have moved.</p> + </div> +</body> +</html> diff --git a/spec/dummy/public/422.html b/spec/dummy/public/422.html new file mode 100644 index 0000000..83660ab --- /dev/null +++ b/spec/dummy/public/422.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<html> +<head> + <title>The change you wanted was rejected (422)</title> + <style type="text/css"> + body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; } + div.dialog { + width: 25em; + padding: 0 4em; + margin: 4em auto 0 auto; + border: 1px solid #ccc; + border-right-color: #999; + border-bottom-color: #999; + } + h1 { font-size: 100%; color: #f00; line-height: 1.5em; } + </style> +</head> + +<body> + <!-- This file lives in public/422.html --> + <div class="dialog"> + <h1>The change you wanted was rejected.</h1> + <p>Maybe you tried to change something you didn't have access to.</p> + </div> +</body> +</html> diff --git a/spec/dummy/public/500.html b/spec/dummy/public/500.html new file mode 100644 index 0000000..f3648a0 --- /dev/null +++ b/spec/dummy/public/500.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<html> +<head> + <title>We're sorry, but something went wrong (500)</title> + <style type="text/css"> + body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; } + div.dialog { + width: 25em; + padding: 0 4em; + margin: 4em auto 0 auto; + border: 1px solid #ccc; + border-right-color: #999; + border-bottom-color: #999; + } + h1 { font-size: 100%; color: #f00; line-height: 1.5em; } + </style> +</head> + +<body> + <!-- This file lives in public/500.html --> + <div class="dialog"> + <h1>We're sorry, but something went wrong.</h1> + </div> +</body> +</html> diff --git a/spec/dummy/public/favicon.ico b/spec/dummy/public/favicon.ico new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/spec/dummy/public/favicon.ico diff --git a/spec/dummy/script/rails b/spec/dummy/script/rails new file mode 100644 index 0000000..81eab02 --- /dev/null +++ b/spec/dummy/script/rails @@ -0,0 +1,6 @@ +#!/usr/bin/env ruby.exe +# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application. + +APP_PATH = File.expand_path('../../config/application', __FILE__) +require File.expand_path('../../config/boot', __FILE__) +require 'rails/commands' diff --git a/spec/models/refinery/banners/banner_spec.rb b/spec/models/refinery/banners/banner_spec.rb new file mode 100644 index 0000000..6e3c3b6 --- /dev/null +++ b/spec/models/refinery/banners/banner_spec.rb @@ -0,0 +1,18 @@ +require 'spec_helper' + +module Refinery + module Banners + describe Banner do + describe "validations" do + subject do + FactoryGirl.create(:banner, + :name => "Refinery CMS") + end + + it { should be_valid } + its(:errors) { should be_empty } + its(:name) { should == "Refinery CMS" } + end + end + end +end diff --git a/spec/requests/refinery/banners/admin/banners_spec.rb b/spec/requests/refinery/banners/admin/banners_spec.rb new file mode 100644 index 0000000..2ffb5bd --- /dev/null +++ b/spec/requests/refinery/banners/admin/banners_spec.rb @@ -0,0 +1,101 @@ +# encoding: utf-8 +require "spec_helper" + +describe Refinery do + describe "Banners" do + describe "Admin" do + describe "banners" do + login_refinery_user + + describe "banners list" do + before(:each) do + FactoryGirl.create(:banner, :name => "UniqueTitleOne") + FactoryGirl.create(:banner, :name => "UniqueTitleTwo") + end + + it "shows two items" do + visit refinery.banners_admin_banners_path + page.should have_content("UniqueTitleOne") + page.should have_content("UniqueTitleTwo") + end + end + + describe "create" do + before(:each) do + visit refinery.banners_admin_banners_path + + click_link "Add New Banner" + end + + context "valid data" do + it "should succeed" do + fill_in "Name", :with => "This is a test of the first string field" + click_button "Save" + + page.should have_content("'This is a test of the first string field' was successfully added.") + Refinery::Banners::Banner.count.should == 1 + end + end + + context "invalid data" do + it "should fail" do + click_button "Save" + + page.should have_content("Name can't be blank") + Refinery::Banners::Banner.count.should == 0 + end + end + + context "duplicate" do + before(:each) { FactoryGirl.create(:banner, :name => "UniqueTitle") } + + it "should fail" do + visit refinery.banners_admin_banners_path + + click_link "Add New Banner" + + fill_in "Name", :with => "UniqueTitle" + click_button "Save" + + page.should have_content("There were problems") + Refinery::Banners::Banner.count.should == 1 + end + end + + end + + describe "edit" do + before(:each) { FactoryGirl.create(:banner, :name => "A name") } + + it "should succeed" do + visit refinery.banners_admin_banners_path + + within ".actions" do + click_link "Edit this banner" + end + + fill_in "Name", :with => "A different name" + click_button "Save" + + page.should have_content("'A different name' was successfully updated.") + page.should have_no_content("A name") + end + end + + describe "destroy" do + before(:each) { FactoryGirl.create(:banner, :name => "UniqueTitleOne") } + + it "should succeed" do + visit refinery.banners_admin_banners_path + + click_link "Remove this banner forever" + + page.should have_content("'UniqueTitleOne' was successfully removed.") + Refinery::Banners::Banner.count.should == 0 + end + end + + end + end + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 0000000..2f4b5d9 --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1,50 @@ +def setup_environment + # Configure Rails Environment + ENV["RAILS_ENV"] ||= 'test' + + require File.expand_path("../dummy/config/environment", __FILE__) + + require 'rspec/rails' + require 'capybara/rspec' + + Rails.backtrace_cleaner.remove_silencers! + + RSpec.configure do |config| + config.mock_with :rspec + config.treat_symbols_as_metadata_keys_with_true_values = true + config.filter_run :focus => true + config.run_all_when_everything_filtered = true + end +end + +def each_run + Rails.cache.clear + ActiveSupport::Dependencies.clear + FactoryGirl.reload + + # Requires supporting files with custom matchers and macros, etc, + # in ./support/ and its subdirectories including factories. + ([Rails.root.to_s] | ::Refinery::Plugins.registered.pathnames).map{|p| + Dir[File.join(p, 'spec', 'support', '**', '*.rb').to_s] + }.flatten.sort.each do |support_file| + require support_file + end +end + +# If spork is available in the Gemfile it'll be used but we don't force it. +unless (begin; require 'spork'; rescue LoadError; nil end).nil? + Spork.prefork do + # Loading more in this block will cause your tests to run faster. However, + # if you change any configuration or code from libraries loaded here, you'll + # need to restart spork for it take effect. + setup_environment + end + + Spork.each_run do + # This code will be run each time you run your specs. + each_run + end +else + setup_environment + each_run +end diff --git a/spec/support/factories/refinery/banners.rb b/spec/support/factories/refinery/banners.rb new file mode 100644 index 0000000..2ac2274 --- /dev/null +++ b/spec/support/factories/refinery/banners.rb @@ -0,0 +1,7 @@ + +FactoryGirl.define do + factory :banner, :class => Refinery::Banners::Banner do + sequence(:name) { |n| "refinery#{n}" } + end +end + diff --git a/tasks/rspec.rake b/tasks/rspec.rake new file mode 100644 index 0000000..c89c0d7 --- /dev/null +++ b/tasks/rspec.rake @@ -0,0 +1,6 @@ +require 'rspec/core/rake_task' + +desc "Run specs" +RSpec::Core::RakeTask.new do |t| + t.pattern = "./spec" +end diff --git a/tasks/testing.rake b/tasks/testing.rake new file mode 100644 index 0000000..5f8b63a --- /dev/null +++ b/tasks/testing.rake @@ -0,0 +1,8 @@ +namespace :refinery do + namespace :testing do + # Put any code in here that you want run when you test this extension against a dummy app. + # For example, the call to require your gem and start your generator. + task :setup_extension do + end + end +end |