radiant-featured_pages-extension 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ .svn
2
+ *.gem
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ # A sample Gemfile
2
+ source "http://rubygems.org"
3
+
4
+ gemspec
data/HELP.md ADDED
@@ -0,0 +1,10 @@
1
+ # Featured Pages
2
+
3
+ When setting pages as featured, you specify a 'Featured Date' when editing your page.
4
+ This date will be used to sort or display the pages when used in your templates.
5
+
6
+ If you no longer want a page to be featured you may:
7
+
8
+ * clear the Featured Date and save the page
9
+ * set the Featured Date to a date outside the range you will display
10
+ * set the page status to Hidden
data/HELP_designer.md ADDED
@@ -0,0 +1,36 @@
1
+ # Featured Pages
2
+
3
+ When listing your featured pages, you have flexible options.
4
+
5
+ ## Code Samples
6
+
7
+ Basic list:
8
+
9
+ <r:featured_pages:each>
10
+ <r:title />
11
+ </r:featured_pages:each>
12
+
13
+ Set a limit:
14
+
15
+ <r:featured_pages:each>
16
+ <r:title />
17
+ </r:featured_pages:each>
18
+
19
+ Today's features:
20
+
21
+ <r:featured_pages:each date="today">
22
+ <r:title />
23
+ </r:featured_pages:each>
24
+
25
+ Features from one month ago:
26
+
27
+ <r:featured_pages:each date="today" offset="-1 month">
28
+ <r:title />
29
+ </r:featured_pages:each>
30
+
31
+ Features from one week ago till one month forward:
32
+
33
+ <r:featured_pages:each date="today" offset="-1 week" window="+1 month">
34
+ <r:title />
35
+ </r:featured_pages:each>
36
+
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ == MIT License
2
+
3
+ Copyright (c) 2008-2010, Jim Gay, Saturn Flyer LLC.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README ADDED
@@ -0,0 +1,8 @@
1
+ = Featured Pages
2
+
3
+ Installing Featured Pages allows you to select pages to display for
4
+ pages that have the featured_date field set.
5
+
6
+ See HELP.md and HELP_designer.md for more details.
7
+
8
+ Built by Saturn Flyer http://www.saturnflyer.com
data/Rakefile ADDED
@@ -0,0 +1,117 @@
1
+ # Determine where the RSpec plugin is by loading the boot
2
+ unless defined? RADIANT_ROOT
3
+ ENV["RAILS_ENV"] = "test"
4
+ case
5
+ when ENV["RADIANT_ENV_FILE"]
6
+ require File.dirname(ENV["RADIANT_ENV_FILE"]) + "/boot"
7
+ when File.dirname(__FILE__) =~ %r{vendor/radiant/vendor/extensions}
8
+ require "#{File.expand_path(File.dirname(__FILE__) + "/../../../../../")}/config/boot"
9
+ else
10
+ require "#{File.expand_path(File.dirname(__FILE__) + "/../../../")}/config/boot"
11
+ end
12
+ end
13
+
14
+ require 'rake'
15
+ require 'rake/rdoctask'
16
+ require 'rake/testtask'
17
+
18
+ rspec_base = File.expand_path(RADIANT_ROOT + '/vendor/plugins/rspec/lib')
19
+ $LOAD_PATH.unshift(rspec_base) if File.exist?(rspec_base)
20
+ require 'spec/rake/spectask'
21
+ require 'cucumber'
22
+ require 'cucumber/rake/task'
23
+
24
+ # Cleanup the RADIANT_ROOT constant so specs will load the environment
25
+ Object.send(:remove_const, :RADIANT_ROOT)
26
+
27
+ extension_root = File.expand_path(File.dirname(__FILE__))
28
+
29
+ task :default => :spec
30
+ task :stats => "spec:statsetup"
31
+
32
+ desc "Run all specs in spec directory"
33
+ Spec::Rake::SpecTask.new(:spec) do |t|
34
+ t.spec_opts = ['--options', "\"#{extension_root}/spec/spec.opts\""]
35
+ t.spec_files = FileList['spec/**/*_spec.rb']
36
+ end
37
+
38
+ task :features => 'spec:integration'
39
+
40
+ namespace :spec do
41
+ desc "Run all specs in spec directory with RCov"
42
+ Spec::Rake::SpecTask.new(:rcov) do |t|
43
+ t.spec_opts = ['--options', "\"#{extension_root}/spec/spec.opts\""]
44
+ t.spec_files = FileList['spec/**/*_spec.rb']
45
+ t.rcov = true
46
+ t.rcov_opts = ['--exclude', 'spec', '--rails']
47
+ end
48
+
49
+ desc "Print Specdoc for all specs"
50
+ Spec::Rake::SpecTask.new(:doc) do |t|
51
+ t.spec_opts = ["--format", "specdoc", "--dry-run"]
52
+ t.spec_files = FileList['spec/**/*_spec.rb']
53
+ end
54
+
55
+ [:models, :controllers, :views, :helpers].each do |sub|
56
+ desc "Run the specs under spec/#{sub}"
57
+ Spec::Rake::SpecTask.new(sub) do |t|
58
+ t.spec_opts = ['--options', "\"#{extension_root}/spec/spec.opts\""]
59
+ t.spec_files = FileList["spec/#{sub}/**/*_spec.rb"]
60
+ end
61
+ end
62
+
63
+ desc "Run the Cucumber features"
64
+ Cucumber::Rake::Task.new(:integration) do |t|
65
+ t.fork = true
66
+ t.cucumber_opts = ['--format', (ENV['CUCUMBER_FORMAT'] || 'pretty')]
67
+ # t.feature_pattern = "#{extension_root}/features/**/*.feature"
68
+ t.profile = "default"
69
+ end
70
+
71
+ # Setup specs for stats
72
+ task :statsetup do
73
+ require 'code_statistics'
74
+ ::STATS_DIRECTORIES << %w(Model\ specs spec/models)
75
+ ::STATS_DIRECTORIES << %w(View\ specs spec/views)
76
+ ::STATS_DIRECTORIES << %w(Controller\ specs spec/controllers)
77
+ ::STATS_DIRECTORIES << %w(Helper\ specs spec/views)
78
+ ::CodeStatistics::TEST_TYPES << "Model specs"
79
+ ::CodeStatistics::TEST_TYPES << "View specs"
80
+ ::CodeStatistics::TEST_TYPES << "Controller specs"
81
+ ::CodeStatistics::TEST_TYPES << "Helper specs"
82
+ ::STATS_DIRECTORIES.delete_if {|a| a[0] =~ /test/}
83
+ end
84
+
85
+ namespace :db do
86
+ namespace :fixtures do
87
+ desc "Load fixtures (from spec/fixtures) into the current environment's database. Load specific fixtures using FIXTURES=x,y"
88
+ task :load => :environment do
89
+ require 'active_record/fixtures'
90
+ ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym)
91
+ (ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/) : Dir.glob(File.join(RAILS_ROOT, 'spec', 'fixtures', '*.{yml,csv}'))).each do |fixture_file|
92
+ Fixtures.create_fixtures('spec/fixtures', File.basename(fixture_file, '.*'))
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
98
+
99
+ desc 'Generate documentation for the featured_pages extension.'
100
+ Rake::RDocTask.new(:rdoc) do |rdoc|
101
+ rdoc.rdoc_dir = 'rdoc'
102
+ rdoc.title = 'FeaturedPagesExtension'
103
+ rdoc.options << '--line-numbers' << '--inline-source'
104
+ rdoc.rdoc_files.include('README')
105
+ rdoc.rdoc_files.include('lib/**/*.rb')
106
+ end
107
+
108
+ # For extensions that are in transition
109
+ desc 'Test the featured_pages extension.'
110
+ Rake::TestTask.new(:test) do |t|
111
+ t.libs << 'lib'
112
+ t.pattern = 'test/**/*_test.rb'
113
+ t.verbose = true
114
+ end
115
+
116
+ # Load any custom rakefiles for extension
117
+ Dir[File.dirname(__FILE__) + '/tasks/*.rake'].sort.each { |f| require f }
data/TODO ADDED
@@ -0,0 +1,2 @@
1
+ # allow scoping in <r:featured_pages:each> by a page 'path'
2
+ # allow scoping in <r:featured_pages:each> by values in a page field (keywords, tags, category?)
@@ -0,0 +1,17 @@
1
+ - @featured_pages = Page.featured.all(:order => 'featured_date DESC')
2
+ .unit.size1of2
3
+ #featured_pages.dashboard_module
4
+ %h2 Featured Pages
5
+ - unless @featured_pages.blank?
6
+ %ul
7
+ - @featured_pages.each do |page|
8
+ %li
9
+ %span
10
+ - link_to page.url do
11
+ = %{#{page.title} #{page.featured_date.to_date.to_formatted_s(:long)}}
12
+ = "Updated by #{updater_name_for(page)} #{time_ago_in_words page.updated_at.to_time} ago."
13
+ .modifications
14
+ = link_to "Edit", edit_admin_page_path(page), :class => 'update'
15
+ = link_to "Remove", remove_admin_page_path(page), :class => 'delete'
16
+ - else
17
+ %p There are currently no Featured Pages.
@@ -0,0 +1,9 @@
1
+ %p
2
+ = f.label :featured_date, 'Featured Date'
3
+ = f.text_field :featured_date, :class => "date", :value => (@page.featured_date? ? I18n.localize(@page.featured_date.to_date, :format =>:long) : nil)
4
+ - content_for :page_css do
5
+ -# this is how all div.row should be, but we'll be conservative and just set this one
6
+ :sass
7
+ #featured
8
+ clear: left
9
+ overflow: hidden
@@ -0,0 +1,3 @@
1
+ ---
2
+ en:
3
+ featured pages: Featured Pages
data/config/routes.rb ADDED
@@ -0,0 +1,5 @@
1
+ ActionController::Routing::Routes.draw do |map|
2
+ # map.namespace :admin, :member => { :remove => :get } do |admin|
3
+ # admin.resources :featured_pages
4
+ # end
5
+ end
data/cucumber.yml ADDED
@@ -0,0 +1 @@
1
+ default: --format progress features --tags ~@proposed,~@in_progress
@@ -0,0 +1,11 @@
1
+ class CreateFeaturedPages < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :pages, :featured_page, :boolean, :default => false
4
+ Page.reset_column_information
5
+ Page.update_all(['featured_page = ?',false])
6
+ end
7
+
8
+ def self.down
9
+ remove_column :pages, :featured_page
10
+ end
11
+ end
@@ -0,0 +1,21 @@
1
+ class AddFeaturedDateToPages < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :pages, :featured_date, :datetime
4
+ Page.reset_column_information
5
+ Page.find_in_batches(:conditions => {:featured_page => true}) do |group|
6
+ group.each do |page|
7
+ page.update_attribute(:featured_date, (page.published_at || page.created_at))
8
+ end
9
+ end
10
+ remove_column :pages, :featured_page
11
+ end
12
+
13
+ def self.down
14
+ add_column :pages, :featured_page, :boolean, :default => false
15
+ Page.reset_column_information
16
+ Page.find_in_batches(:conditions => ["featured_date is NOT NULL or featured_date != ''"]) do |group|
17
+ page.update_attribute(:featured_page, true)
18
+ end
19
+ remove_column :pages, :featured_date
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ require 'radiant-featured_pages-extension'
2
+ class FeaturedPagesExtension < Radiant::Extension
3
+ version RadiantFeaturedPagesExtension::VERSION
4
+ description "Adds featured_date field to all pages to allow listing of pages marked regardless of their nesting within parent pages."
5
+ url "http://www.saturnflyer.com/"
6
+
7
+ def activate
8
+ Page.class_eval {
9
+ include FeaturedPagesTags
10
+ include RadiantFeaturedPagesExtension::PageExtensions
11
+ }
12
+ admin.page.edit.add :layout, "featured_page_meta"
13
+ if admin.respond_to?(:dashboard)
14
+ admin.dashboard.index.add :extensions, 'featured_pages'
15
+ end
16
+ end
17
+
18
+ def deactivate
19
+ end
20
+
21
+ end
@@ -0,0 +1,16 @@
1
+ # Sets up the Rails environment for Cucumber
2
+ ENV["RAILS_ENV"] = "test"
3
+ # Extension root
4
+ extension_env = File.expand_path(File.dirname(__FILE__) + '/../../../../../config/environment')
5
+ require extension_env+'.rb'
6
+
7
+ Dir.glob(File.join(RADIANT_ROOT, "features", "**", "*.rb")).each {|step| require step}
8
+
9
+ Cucumber::Rails::World.class_eval do
10
+ include Dataset
11
+ datasets_directory "#{RADIANT_ROOT}/spec/datasets"
12
+ Dataset::Resolver.default = Dataset::DirectoryResolver.new("#{RADIANT_ROOT}/spec/datasets", File.dirname(__FILE__) + '/../../spec/datasets', File.dirname(__FILE__) + '/../datasets')
13
+ self.datasets_database_dump_path = "#{Rails.root}/tmp/dataset"
14
+
15
+ # dataset :featured_pages
16
+ end
@@ -0,0 +1,14 @@
1
+ def path_to(page_name)
2
+ case page_name
3
+
4
+ when /the homepage/i
5
+ root_path
6
+
7
+ when /login/i
8
+ login_path
9
+ # Add more page name => path mappings here
10
+
11
+ else
12
+ raise "Can't find mapping from \"#{page_name}\" to a path."
13
+ end
14
+ end
@@ -0,0 +1,119 @@
1
+ module FeaturedPagesTags
2
+ include Radiant::Taggable
3
+
4
+ desc %{
5
+ Sets the scope for featured pages.
6
+
7
+ *Usage:*
8
+ <pre><code><r:featured_pages>...</r:featured_pages></code></pre>
9
+ }
10
+ tag 'featured_pages' do |tag|
11
+ tag.expand
12
+ end
13
+
14
+ desc %{
15
+ Loops over individual pages from the featured_pages scope.
16
+ Accepts these parameters:
17
+
18
+ * order - 'featured_date ASC' default
19
+ * limit - '10' defaults to no limit
20
+ * date - no default
21
+ * format - used only with the date parameters to specify the format of the date you are using
22
+ * window - '+3 days' no default, allows you to add(+n) or subtract(-n) days, weeks, months, years
23
+ * offset - '-1 month' no default, allows you to offset the actual date from the date given
24
+
25
+ *Usage:*
26
+ <pre><code><r:featured_pages:each [limit="1" order="published_at ASC"]>...</r:featured_pages:each></code></pre>
27
+ }
28
+ tag 'featured_pages:each' do |tag|
29
+ find_options = {:conditions => ["virtual = ?",false]}
30
+
31
+ order = tag.attr["order"] || 'featured_date DESC'
32
+ find_options.merge!(:order => order) if order
33
+
34
+ limit = tag.attr["limit"] || nil
35
+ find_options.merge!(:limit => limit) if limit
36
+
37
+ date = tag.attr["date"] || nil
38
+ @i18n_date_formats ||= (I18n.config.backend.send(:translations)[I18n.locale][:date][:formats] rescue {})
39
+ format = tag.attr['format']
40
+ if format
41
+ format = @i18n_date_formats.keys.include?(format.to_sym) ? format.to_sym : format
42
+ else
43
+ format = "%m/%d/%Y"
44
+ end
45
+
46
+ offset_pair = change_pairs(tag.attr['offset'])
47
+ window_pair = change_pairs(tag.attr['window'])
48
+
49
+ if date
50
+ date_finder = case date
51
+ when /today/
52
+ Rails.env.test? ? Time.zone.now - 1.second : Time.zone.now
53
+ else
54
+ I18n.l(date, :format => format).in_time_zone
55
+ end
56
+ date_with_offset = date_finder.in_time_zone + offset_pair.first.send(offset_pair.last)
57
+
58
+ if window_pair.first >= 0
59
+ find_options[:conditions].first << ' and featured_date >= ?'
60
+ else
61
+ find_options[:conditions].first << ' and featured_date <= ?'
62
+ end
63
+ find_options[:conditions] << date_with_offset
64
+
65
+ date_with_window = date_with_offset + window_pair.first.send(window_pair.last)
66
+
67
+ if window_pair.first == 0
68
+ find_options[:conditions].first << ' and featured_date < ?'
69
+ find_options[:conditions] << date_with_window.end_of_day
70
+ else
71
+ if window_pair.first > 0
72
+ find_options[:conditions].first << ' and featured_date < ?'
73
+ elsif window_pair.first < 0
74
+ find_options[:conditions].first << ' and featured_date > ?'
75
+ end
76
+ find_options[:conditions] << date_with_window
77
+ end
78
+ end
79
+
80
+ tag.locals.featured_pages = Page.featured.all(find_options)
81
+
82
+ result = []
83
+ tag.locals.featured_pages.each do |p|
84
+ tag.locals.page = p
85
+ result << tag.expand
86
+ end
87
+ result
88
+ end
89
+
90
+ desc %{
91
+ Displays it's contents for the first page from the featured_pages scope
92
+
93
+ *Usage:*
94
+ <pre><code><r:featured_pages:each><r:if_first>...</r:if_first></r:featured_pages:each></code></pre>
95
+ }
96
+ tag 'featured_pages:each:if_first' do |tag|
97
+ tag.expand if tag.locals.page == tag.locals.featured_pages.first
98
+ end
99
+
100
+ desc %{
101
+ Displays it's contents for all pages that are not the first page in the featured_pages scope.
102
+
103
+ *Usage:*
104
+ <pre><code><r:featured_pages:each><r:unless_first>...</r:unless_first></r:featured_pages:each></code></pre>
105
+ }
106
+ tag 'featured_pages:each:unless_first' do |tag|
107
+ tag.expand unless tag.locals.page == tag.locals.featured_pages.first
108
+ end
109
+
110
+ private
111
+
112
+ def change_pairs(text='')
113
+ text ||= ''
114
+ change_parts = text.split(' ')
115
+ num = change_parts.first.to_i
116
+ unit = change_parts.last =~ /^(second|minute|hour|day|week|month|year)s?$/ ? change_parts.last : 'days'
117
+ [num, unit]
118
+ end
119
+ end
@@ -0,0 +1,2 @@
1
+ require 'radiant-featured_pages-extension/version'
2
+ require 'radiant-featured_pages-extension/page_extensions'
@@ -0,0 +1,9 @@
1
+ module RadiantFeaturedPagesExtension
2
+ module PageExtensions
3
+ def self.included(base)
4
+ base.class_eval {
5
+ named_scope :featured, {:conditions => ["featured_date is NOT NULL"]}
6
+ }
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module RadiantFeaturedPagesExtension
2
+ VERSION = '2.0.0'
3
+ end
@@ -0,0 +1,55 @@
1
+ namespace :radiant do
2
+ namespace :extensions do
3
+ namespace :featured_pages do
4
+
5
+ desc "Runs the migration of the Featured Pages extension"
6
+ task :migrate => :environment do
7
+ require 'radiant/extension_migrator'
8
+ if ENV["VERSION"]
9
+ FeaturedPagesExtension.migrator.migrate(ENV["VERSION"].to_i)
10
+ Rake::Task['db:schema:dump'].invoke
11
+ else
12
+ FeaturedPagesExtension.migrator.migrate
13
+ Rake::Task['db:schema:dump'].invoke
14
+ end
15
+ end
16
+
17
+ desc "Copies public assets of the Featured Pages to the instance public/ directory."
18
+ task :update => :environment do
19
+ is_svn_or_dir = proc {|path| path =~ /\.svn/ || File.directory?(path) }
20
+ puts "Copying assets from FeaturedPagesExtension"
21
+ Dir[FeaturedPagesExtension.root + "/public/**/*"].reject(&is_svn_or_dir).each do |file|
22
+ path = file.sub(FeaturedPagesExtension.root, '')
23
+ directory = File.dirname(path)
24
+ mkdir_p RAILS_ROOT + directory, :verbose => false
25
+ cp file, RAILS_ROOT + path, :verbose => false
26
+ end
27
+ unless FeaturedPagesExtension.root.starts_with? RAILS_ROOT # don't need to copy vendored tasks
28
+ puts "Copying rake tasks from FeaturedPagesExtension"
29
+ local_tasks_path = File.join(RAILS_ROOT, %w(lib tasks))
30
+ mkdir_p local_tasks_path, :verbose => false
31
+ Dir[File.join FeaturedPagesExtension.root, %w(lib tasks *.rake)].each do |file|
32
+ cp file, local_tasks_path, :verbose => false
33
+ end
34
+ end
35
+ end
36
+
37
+ desc "Syncs all available translations for this ext to the English ext master"
38
+ task :sync => :environment do
39
+ # The main translation root, basically where English is kept
40
+ language_root = FeaturedPagesExtension.root + "/config/locales"
41
+ words = TranslationSupport.get_translation_keys(language_root)
42
+
43
+ Dir["#{language_root}/*.yml"].each do |filename|
44
+ next if filename.match('_available_tags')
45
+ basename = File.basename(filename, '.yml')
46
+ puts "Syncing #{basename}"
47
+ (comments, other) = TranslationSupport.read_file(filename, basename)
48
+ words.each { |k,v| other[k] ||= words[k] } # Initializing hash variable as empty if it does not exist
49
+ other.delete_if { |k,v| !words[k] } # Remove if not defined in en.yml
50
+ TranslationSupport.write_file(filename, basename, comments, other)
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "radiant-featured_pages-extension/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "radiant-featured_pages-extension"
7
+ s.version = RadiantFeaturedPagesExtension::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Jim Gay"]
10
+ s.email = ["jim@saturnflyer.com"]
11
+ s.homepage = "http://github.com/saturnflyer/radiant-featured_pages-extension"
12
+ s.summary = %q{Featured Pages Extension for Radiant CMS}
13
+ s.description = %q{Allows you to provide a featured_date for any page and list it with <r:featured_pages>}
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ["lib"]
19
+
20
+ s.post_install_message = %{
21
+ Add this to your radiant project with:
22
+ config.gem 'radiant-featured_pages-extension', :version => '#{RadiantFeaturedPagesExtension::VERSION}'
23
+ }
24
+ end
@@ -0,0 +1,87 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe Page do
4
+ let(:page){
5
+ Page.new(:featured_date => Time.zone.now, :slug => 'page', :breadcrumb => 'page', :title => 'page')}
6
+ let(:minus_1_week){
7
+ Page.new(:featured_date => (Time.zone.now - 1.week), :slug => 'minus_1_week', :breadcrumb => 'minus_1_week', :title => 'minus_1_week')}
8
+ let(:plus_1_day){
9
+ Page.new(:featured_date => (Time.zone.now + 1.day), :slug => 'plus_1_day', :breadcrumb => 'plus_1_day', :title => 'plus_1_day')}
10
+ let(:plus_2_days){
11
+ Page.new(:featured_date => (Time.zone.now + 2.days), :slug => 'plus_2_days', :breadcrumb => 'plus_2_days', :title => 'plus_2_days', :virtual => true)}
12
+ let(:plus_2_weeks){
13
+ Page.new(:featured_date => (Time.zone.now + 2.weeks), :slug => 'plus_2_weeks', :breadcrumb => 'plus_2_weeks', :title => 'plus_2_weeks')}
14
+ let(:plus_2_months){
15
+ Page.new(:featured_date => (Time.zone.now + 2.months), :slug => 'plus_2_months', :breadcrumb => 'plus_2_months', :title => 'plus_2_months')}
16
+ let(:plus_2_years){
17
+ Page.new(:featured_date => (Time.zone.now + 2.years), :slug => 'plus_2_years', :breadcrumb => 'plus_2_years', :title => 'plus_2_years')}
18
+
19
+ def save_pages
20
+ # saving with false so it still saves when other extensions are present
21
+ page.save(false) and
22
+ minus_1_week.save(false) and
23
+ plus_1_day.save(false) and
24
+ plus_2_days.save(false) and
25
+ plus_2_weeks.save(false) and
26
+ plus_2_months.save(false) and
27
+ plus_2_years.save(false)
28
+ end
29
+
30
+ describe "<r:featured_pages>" do
31
+ it "should truncate the contents to the given length" do
32
+ page.should render('<r:featured_pages>Featured!</r:featured_pages>').as('Featured!')
33
+ end
34
+ end
35
+
36
+ describe "<r:featured_pages:each>" do
37
+ before do
38
+ save_pages
39
+ end
40
+ it "should output the contents for each featured page" do
41
+ page.should render('<r:featured_pages:each><r:title /> </r:featured_pages:each>').as('plus_2_years plus_2_months plus_2_weeks plus_1_day page minus_1_week ')
42
+ end
43
+ it "should not find virtual pages" do
44
+ page.should render('<r:featured_pages:each><r:title /> </r:featured_pages:each>').as('plus_2_years plus_2_months plus_2_weeks plus_1_day page minus_1_week ')
45
+ end
46
+ it "should limit the pages by the 'limit' attribute" do
47
+ page.should render('<r:featured_pages:each limit="1"><r:title /> </r:featured_pages:each>').as('plus_2_years ')
48
+ end
49
+ it "should order the pages by the 'order' attribute" do
50
+ page.should render('<r:featured_pages:each order="featured_date DESC"><r:title /> </r:featured_pages:each>').as('plus_2_years plus_2_months plus_2_weeks plus_1_day page minus_1_week ')
51
+ end
52
+ it "should find pages featured on a given 'date'" do
53
+ page.should render('<r:featured_pages:each date="today"><r:title /> </r:featured_pages:each>').as('page ')
54
+ end
55
+ it "should find pages featured today when the given 'date' is 'today'" do
56
+ page.should render('<r:featured_pages:each date="today"><r:title /> </r:featured_pages:each>').as('page ')
57
+ end
58
+
59
+ it "should find pages featured between the given 'date' and and that date plus the 'window'" do
60
+ page.should render('<r:featured_pages:each date="today" window="1 month"><r:title /> </r:featured_pages:each>').as('plus_2_weeks plus_1_day page ')
61
+ end
62
+ it "should find pages featured between the given 'date' plus the 'offset'" do
63
+ page.should render('<r:featured_pages:each date="today" offset="-7 days"><r:title /> </r:featured_pages:each>').as('minus_1_week ')
64
+ end
65
+ it "should find pages featured limited in number by the given 'limit'" do
66
+ page.should render('<r:featured_pages:each date="today" limit="2" window="2 years"><r:title /> </r:featured_pages:each>').as('plus_2_months plus_2_weeks ')
67
+ end
68
+ end
69
+
70
+ describe "<r:featured_pages:each:if_first>" do
71
+ before do
72
+ save_pages
73
+ end
74
+ it "should expand contents if the page is the first in the collection" do
75
+ page.should render('<r:featured_pages:each><r:if_first><r:title /> </r:if_first></r:featured_pages:each>').as('plus_2_years ')
76
+ end
77
+ end
78
+
79
+ describe "<r:featured_pages:each:unless_first>" do
80
+ before do
81
+ save_pages
82
+ end
83
+ it "should expand contents if the page is not the first in the collection" do
84
+ page.should render('<r:featured_pages:each><r:unless_first><r:title /> </r:unless_first></r:featured_pages:each>').as('plus_2_months plus_2_weeks plus_1_day page minus_1_week ')
85
+ end
86
+ end
87
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1,6 @@
1
+ --colour
2
+ --format
3
+ progress
4
+ --loadby
5
+ mtime
6
+ --reverse
@@ -0,0 +1,36 @@
1
+ unless defined? RADIANT_ROOT
2
+ ENV["RAILS_ENV"] = "test"
3
+ case
4
+ when ENV["RADIANT_ENV_FILE"]
5
+ require ENV["RADIANT_ENV_FILE"]
6
+ when File.dirname(__FILE__) =~ %r{vendor/radiant/vendor/extensions}
7
+ require "#{File.expand_path(File.dirname(__FILE__) + "/../../../../../../")}/config/environment"
8
+ else
9
+ require "#{File.expand_path(File.dirname(__FILE__) + "/../../../../")}/config/environment"
10
+ end
11
+ end
12
+ require "#{RADIANT_ROOT}/spec/spec_helper"
13
+
14
+ Dataset::Resolver.default << (File.dirname(__FILE__) + "/datasets")
15
+
16
+ if File.directory?(File.dirname(__FILE__) + "/matchers")
17
+ Dir[File.dirname(__FILE__) + "/matchers/*.rb"].each {|file| require file }
18
+ end
19
+
20
+ Spec::Runner.configure do |config|
21
+ # config.use_transactional_fixtures = true
22
+ # config.use_instantiated_fixtures = false
23
+ # config.fixture_path = RAILS_ROOT + '/spec/fixtures'
24
+
25
+ # You can declare fixtures for each behaviour like this:
26
+ # describe "...." do
27
+ # fixtures :table_a, :table_b
28
+ #
29
+ # Alternatively, if you prefer to declare them only once, you can
30
+ # do so here, like so ...
31
+ #
32
+ # config.global_fixtures = :table_a, :table_b
33
+ #
34
+ # If you declare global fixtures, be aware that they will be declared
35
+ # for all of your examples, even those that don't use them.
36
+ end
metadata ADDED
@@ -0,0 +1,98 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: radiant-featured_pages-extension
3
+ version: !ruby/object:Gem::Version
4
+ hash: 15
5
+ prerelease: false
6
+ segments:
7
+ - 2
8
+ - 0
9
+ - 0
10
+ version: 2.0.0
11
+ platform: ruby
12
+ authors:
13
+ - Jim Gay
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-11-08 00:00:00 -05:00
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description: Allows you to provide a featured_date for any page and list it with <r:featured_pages>
23
+ email:
24
+ - jim@saturnflyer.com
25
+ executables: []
26
+
27
+ extensions: []
28
+
29
+ extra_rdoc_files: []
30
+
31
+ files:
32
+ - .gitignore
33
+ - Gemfile
34
+ - HELP.md
35
+ - HELP_designer.md
36
+ - LICENSE
37
+ - README
38
+ - Rakefile
39
+ - TODO
40
+ - app/views/admin/dashboard/_featured_pages.html.haml
41
+ - app/views/admin/pages/_featured_page_meta.html.haml
42
+ - config/locales/en.yml
43
+ - config/routes.rb
44
+ - cucumber.yml
45
+ - db/migrate/001_create_featured_pages.rb
46
+ - db/migrate/20101103202832_add_featured_date_to_pages.rb
47
+ - featured_pages_extension.rb
48
+ - features/support/env.rb
49
+ - features/support/paths.rb
50
+ - lib/featured_pages_tags.rb
51
+ - lib/radiant-featured_pages-extension.rb
52
+ - lib/radiant-featured_pages-extension/page_extensions.rb
53
+ - lib/radiant-featured_pages-extension/version.rb
54
+ - lib/tasks/featured_pages_extension_tasks.rake
55
+ - radiant-featured_pages-extension.gemspec
56
+ - spec/lib/featured_pages_tags_spec.rb
57
+ - spec/spec.opts
58
+ - spec/spec_helper.rb
59
+ has_rdoc: true
60
+ homepage: http://github.com/saturnflyer/radiant-featured_pages-extension
61
+ licenses: []
62
+
63
+ post_install_message: "\n Add this to your radiant project with:\n config.gem 'radiant-featured_pages-extension', :version => '2.0.0'\n "
64
+ rdoc_options: []
65
+
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ hash: 3
74
+ segments:
75
+ - 0
76
+ version: "0"
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ none: false
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ hash: 3
83
+ segments:
84
+ - 0
85
+ version: "0"
86
+ requirements: []
87
+
88
+ rubyforge_project:
89
+ rubygems_version: 1.3.7
90
+ signing_key:
91
+ specification_version: 3
92
+ summary: Featured Pages Extension for Radiant CMS
93
+ test_files:
94
+ - features/support/env.rb
95
+ - features/support/paths.rb
96
+ - spec/lib/featured_pages_tags_spec.rb
97
+ - spec/spec.opts
98
+ - spec/spec_helper.rb