radiant-cache_buster-extension 0.0.1

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.
@@ -0,0 +1,17 @@
1
+ # Cache Buster
2
+
3
+ Simply adds a tag which applies to a cache buster to any asset.
4
+
5
+ ## Usage
6
+
7
+ <h1> Homepage </h1>
8
+ <img src="http://example.com/some/external/image.jpg<r:cache_buster/>">
9
+
10
+ ## Configuration
11
+
12
+ # file: :radiant_root/config/initializers/radiant_config.rb
13
+ Radiant.config do |config|
14
+ config['cache_buster.timeout'] = 1.day
15
+ end
16
+
17
+
@@ -0,0 +1,134 @@
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
+ unless defined? RAILS_ROOT
15
+ case
16
+ when File.dirname(__FILE__) =~ %r{vendor/radiant/vendor/extensions}
17
+ RAILS_ROOT = "#{File.expand_path(File.dirname(__FILE__) + "/../../../../../")}"
18
+ else
19
+ RAILS_ROOT = "#{File.expand_path(File.dirname(__FILE__) + "/../../../")}"
20
+ end
21
+ end
22
+
23
+ require 'rake'
24
+ require 'rake/rdoctask'
25
+ require 'rake/testtask'
26
+
27
+ rspec_base = File.expand_path(RADIANT_ROOT + '/vendor/plugins/rspec/lib')
28
+ $LOAD_PATH.unshift(rspec_base) if File.exist?(rspec_base)
29
+ require 'spec/rake/spectask'
30
+ require 'cucumber'
31
+ require 'cucumber/rake/task'
32
+
33
+ # Cleanup the RADIANT_ROOT constant so specs will load the environment
34
+ Object.send(:remove_const, :RADIANT_ROOT)
35
+
36
+ extension_root = File.expand_path(File.dirname(__FILE__))
37
+
38
+ #task :default => [:spec, :cucumber]
39
+ task :default => [:spec]
40
+ task :stats => "spec:statsetup"
41
+
42
+ desc "Run all specs in spec directory"
43
+ Spec::Rake::SpecTask.new(:spec) do |t|
44
+ t.spec_opts = ['--options', "\"#{extension_root}/spec/spec.opts\""]
45
+ t.spec_files = FileList['spec/**/*_spec.rb']
46
+ end
47
+
48
+ namespace :spec do
49
+ desc "Run all specs in spec directory with RCov"
50
+ Spec::Rake::SpecTask.new(:rcov) do |t|
51
+ t.spec_opts = ['--options', "\"#{extension_root}/spec/spec.opts\""]
52
+ t.spec_files = FileList['spec/**/*_spec.rb']
53
+ t.rcov = true
54
+ t.rcov_opts = ['--exclude', 'spec', '--rails']
55
+ end
56
+
57
+ desc "Print Specdoc for all specs"
58
+ Spec::Rake::SpecTask.new(:doc) do |t|
59
+ t.spec_opts = ["--format", "specdoc", "--dry-run"]
60
+ t.spec_files = FileList['spec/**/*_spec.rb']
61
+ end
62
+
63
+ [:models, :controllers, :views, :helpers].each do |sub|
64
+ desc "Run the specs under spec/#{sub}"
65
+ Spec::Rake::SpecTask.new(sub) do |t|
66
+ t.spec_opts = ['--options', "\"#{extension_root}/spec/spec.opts\""]
67
+ t.spec_files = FileList["spec/#{sub}/**/*_spec.rb"]
68
+ end
69
+ end
70
+
71
+ desc "Run the Cucumber features"
72
+ task :integration => 'cucumber:ok'
73
+
74
+ # Setup specs for stats
75
+ task :statsetup do
76
+ require 'code_statistics'
77
+ ::STATS_DIRECTORIES << %w(Model\ specs spec/models)
78
+ ::STATS_DIRECTORIES << %w(View\ specs spec/views)
79
+ ::STATS_DIRECTORIES << %w(Controller\ specs spec/controllers)
80
+ ::STATS_DIRECTORIES << %w(Helper\ specs spec/views)
81
+ ::CodeStatistics::TEST_TYPES << "Model specs"
82
+ ::CodeStatistics::TEST_TYPES << "View specs"
83
+ ::CodeStatistics::TEST_TYPES << "Controller specs"
84
+ ::CodeStatistics::TEST_TYPES << "Helper specs"
85
+ ::STATS_DIRECTORIES.delete_if {|a| a[0] =~ /test/}
86
+ end
87
+
88
+ namespace :db do
89
+ namespace :fixtures do
90
+ desc "Load fixtures (from spec/fixtures) into the current environment's database. Load specific fixtures using FIXTURES=x,y"
91
+ task :load => :environment do
92
+ require 'active_record/fixtures'
93
+ ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym)
94
+ (ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/) : Dir.glob(File.join(RAILS_ROOT, 'spec', 'fixtures', '*.{yml,csv}'))).each do |fixture_file|
95
+ Fixtures.create_fixtures('spec/fixtures', File.basename(fixture_file, '.*'))
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
101
+
102
+ namespace :cucumber do
103
+ Cucumber::Rake::Task.new(:ok, 'Run features that should pass') do |t|
104
+ t.fork = true # You may get faster startup if you set this to false
105
+ t.profile = 'default'
106
+ end
107
+
108
+ Cucumber::Rake::Task.new(:wip, 'Run features that are being worked on') do |t|
109
+ t.fork = true # You may get faster startup if you set this to false
110
+ t.profile = 'wip'
111
+ end
112
+
113
+ desc 'Run all features'
114
+ task :all => [:ok, :wip]
115
+ end
116
+
117
+ desc 'Alias for cucumber:ok'
118
+ task :cucumber => 'cucumber:ok'
119
+
120
+ task :features => :cucumber do
121
+ STDERR.puts "*** The 'features' task is deprecated. See rake -T cucumber ***"
122
+ end
123
+
124
+ desc 'Generate documentation for the sheets extension.'
125
+ Rake::RDocTask.new(:rdoc) do |rdoc|
126
+ rdoc.rdoc_dir = 'rdoc'
127
+ rdoc.title = 'SheetsExtension'
128
+ rdoc.options << '--line-numbers' << '--inline-source'
129
+ rdoc.rdoc_files.include('README')
130
+ rdoc.rdoc_files.include('lib/**/*.rb')
131
+ end
132
+
133
+ # Load any custom rakefiles for extension
134
+ Dir[File.dirname(__FILE__) + '/tasks/*.rake'].sort.each { |f| require f }
@@ -0,0 +1,14 @@
1
+ class Admin::BusterController < Admin::ResourceController
2
+ model_class CacheBuster
3
+
4
+ def index
5
+ if request.post?
6
+ if CacheBuster.bust_buster
7
+ flash[:notice] = "Cache Buster Reset - Succeeded!"
8
+ else
9
+ flash[:notice] = "Cache Buster Reset - FAILED!"
10
+ end
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,47 @@
1
+ class CacheBuster < ActiveRecord::Base
2
+
3
+ DEFAULT_TIMEOUT = 1.day
4
+
5
+ before_save :ensure_updated_at
6
+
7
+ def self.buster
8
+ self.there_can_be_only_one
9
+
10
+ if self.first.updated_at.to_i < Time.now.to_i-self.timeout
11
+ buster = self.bust_buster
12
+ else
13
+ buster = self.last
14
+ end
15
+
16
+ "?#{buster.updated_at.to_i}"
17
+ end
18
+
19
+ def self.bust_buster
20
+ if self.first.nil?
21
+ self.new.save
22
+ else
23
+ self.first.save
24
+ end
25
+ self.first
26
+ end
27
+
28
+ def self.timeout
29
+ (Radiant::Config['cache_buster.timeout'] ? Radiant::Config['cache_buster.timeout'].to_i : DEFAULT_TIMEOUT).to_i
30
+ end
31
+
32
+ private
33
+ def self.there_can_be_only_one
34
+ return self.new(:updated_at => Time.now).save if self.first.nil?
35
+
36
+ unless self.first == self.last
37
+ the_one = self.last
38
+ self.destroy_all
39
+ self.new(:updated_at => the_one.updated_at).save
40
+ end
41
+ end
42
+
43
+ def ensure_updated_at
44
+ self.updated_at = Time.now
45
+ end
46
+
47
+ end
@@ -0,0 +1,5 @@
1
+ %h3="Current Cache Buster: <tt>'#{CacheBuster.buster}'</tt>"
2
+ - form_for :buster, :url => "/admin/buster", :method => :post do |f|
3
+ = f.submit('Reset Cache Buster')
4
+
5
+
@@ -0,0 +1,21 @@
1
+ # Uncomment this if you reference any of your controllers in activate
2
+ require_dependency 'application_controller'
3
+ require 'compass'
4
+ require 'radiant-cache_buster-extension'
5
+
6
+ class CacheBusterExtension < Radiant::Extension
7
+ version RadiantCacheBusterExtension::VERSION
8
+ description RadiantCacheBusterExtension::DESCRIPTION
9
+ url RadiantCacheBusterExtension::URL
10
+
11
+ def activate
12
+ tab 'Settings' do
13
+ add_item "Cache Buster", "/admin/buster"
14
+ end
15
+
16
+ Page.class_eval do
17
+ include CacheBusterTags
18
+ end
19
+ end
20
+ end
21
+
@@ -0,0 +1,10 @@
1
+ ActionController::Routing::Routes.draw do |map|
2
+ map.namespace :admin do |admin|
3
+ admin.resources :buster
4
+ end
5
+ end
6
+ #ActionController::Routing::Routes.draw do |map|
7
+ #map.connect '/admin/buster', :controller => :buster, :action => :index, :conditions => { :method => [ :get, :post ] }
8
+ #end
9
+
10
+
@@ -0,0 +1,12 @@
1
+ class CreateCacheBuster < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :cache_busters, :force => false do |t|
4
+ t.datetime :updated_at, :null => false
5
+ end
6
+
7
+ end
8
+
9
+ def self.down
10
+ drop_table :cache_busters
11
+ end
12
+ end
@@ -0,0 +1,10 @@
1
+ class CreateInitalCacheBuster < ActiveRecord::Migration
2
+ def self.up
3
+ CacheBuster.new.save!
4
+ end
5
+
6
+ def self.down
7
+ CacheBuster.destroy_all
8
+ end
9
+ end
10
+
@@ -0,0 +1,18 @@
1
+ module CacheBusterTags
2
+ include Radiant::Taggable
3
+ class TagError < StandardError; end
4
+ desc %{
5
+ Renders a cache buster.
6
+
7
+ *Usage:*
8
+
9
+ <pre><code><img src="http://example.com/some/external/image.png<r:cache_buster /></code>"></pre>
10
+
11
+ The above example will produce the following:
12
+
13
+ <pre><code><img src="http://example.com/some/external/image.png?123456789</code>"></pre>
14
+ }
15
+ tag 'cache_buster' do |tag|
16
+ CacheBuster.buster
17
+ end
18
+ end
@@ -0,0 +1,8 @@
1
+ module RadiantCacheBusterExtension
2
+ VERSION = '0.0.1'
3
+ SUMMARY = %q{Cache Buster tag for Radiant CMS}
4
+ DESCRIPTION = SUMMARY
5
+ URL = "http://github.com/jmervine/radiant-cache_buster-extension"
6
+ AUTHORS = ["Josh Mervine"]
7
+ EMAIL = ["joshua@mervine.net"]
8
+ end
@@ -0,0 +1,17 @@
1
+ namespace :radiant do
2
+ namespace :extensions do
3
+ namespace :cache_buster do
4
+ desc "Runs the migration of the CacheBuster extension"
5
+ task :migrate => :environment do
6
+ require 'radiant/extension_migrator'
7
+ if ENV["VERSION"]
8
+ CacheBusterExtension.migrator.migrate(ENV["VERSION"].to_i)
9
+ Rake::Task['db:schema:dump'].invoke
10
+ else
11
+ CacheBusterExtension.migrator.migrate
12
+ Rake::Task['db:schema:dump'].invoke
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "radiant-cache_buster-extension"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "radiant-cache_buster-extension"
7
+ s.platform = Gem::Platform::RUBY
8
+
9
+ s.version = RadiantCacheBusterExtension::VERSION
10
+ s.authors = RadiantCacheBusterExtension::AUTHORS
11
+ s.email = RadiantCacheBusterExtension::EMAIL
12
+ s.homepage = RadiantCacheBusterExtension::URL
13
+ s.summary = RadiantCacheBusterExtension::SUMMARY
14
+ s.description = RadiantCacheBusterExtension::DESCRIPTION
15
+
16
+ ignores = if File.exist?('.gitignore')
17
+ File.read('.gitignore').split("\n").inject([]) {|a,p| a + Dir[p] }
18
+ else
19
+ []
20
+ end
21
+ s.files = Dir['**/*'] - ignores
22
+ s.test_files = Dir['spec/**/*'] - ignores
23
+ s.require_paths = ["lib"]
24
+ end
25
+
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # all 'test's before 'ue' or will exit when test fails
4
+
5
+ test "$WITH_RVM" || WITH_RVM="true"
6
+ test "$RADIANT_VERSION" || RADIANT_VERSION="1.1.0"
7
+ test "$DB" || DB="sqlite"
8
+ test -e ~/radiant && rm -rf ~/radiant
9
+
10
+
11
+ set -xue
12
+
13
+ start_path="$( pwd )"
14
+
15
+ cd ~
16
+ git clone git://github.com/radiant/radiant.git
17
+ cd ~/radiant
18
+
19
+ if [[ $RADIANT_VERSION != "master" ]]
20
+ then
21
+ git checkout -b $RADIANT_VERSION $RADIANT_VERSION
22
+ fi
23
+
24
+ cp -r $start_path vendor/extensions/cache_buster
25
+ gem install bundler --no-ri --no-rdoc
26
+
27
+ echo 'gem "radiant-cache_buster-extension", :path => "vendor/extensions/cache_buster"' >> Gemfile
28
+ echo 'gemspec' >> Gemfile
29
+
30
+ # I really dislike using rvm gemset, but while testing this
31
+ # script I got sick having to install the same gems over and
32
+ # over again.
33
+ if [[ $WITH_RVM == "true" ]]; then
34
+ rvm gemset create radiant_development
35
+ rvm gemset use radiant_development
36
+ bundle install
37
+ else
38
+ bundle install --path ./vendor/bundle
39
+ fi
40
+
41
+ case $DB in
42
+ "mysql" )
43
+ mysql -e 'create database radiant_test;'
44
+ cp spec/ci/database.mysql.yml config/database.yml;;
45
+ "postgres" )
46
+ psql -c 'create database radiant_test;' -U postgres
47
+ cp spec/ci/database.postgresql.yml config/database.yml;;
48
+ "sqlite" )
49
+ cp spec/ci/database.sqlite.yml config/database.yml;;
50
+ esac
51
+
52
+ RAILS_ENV=test bundle exec rake db:migrate --trace
53
+ RAILS_ENV=test bundle exec rake db:migrate:extensions --trace
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # all 'test's before 'ue' or will exit when test fails
4
+ test "$WITH_RVM" || WITH_RVM="true"
5
+
6
+ set -xue
7
+
8
+ start_path="$( pwd )"
9
+
10
+ # I really dislike using rvm gemset, but while testing this
11
+ # script I got sick having to install the same gems over and
12
+ # over again.
13
+ if [[ $WITH_RVM == "true" ]]; then
14
+ rvm gemset create radiant_development
15
+ rvm gemset use radiant_development
16
+ fi
17
+
18
+ cd ~/radiant
19
+
20
+ # ensure fresh cache_buster code
21
+ rm -rf vendor/extensions/cache_buster
22
+ cp -r $start_path vendor/extensions/cache_buster
23
+ bundle update radiant-cache_buster-extension
24
+
25
+ RAILS_ENV=test bundle exec rake spec:extensions EXT=cache_buster --trace
@@ -0,0 +1,42 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe Admin::BusterController do
4
+ dataset :users
5
+
6
+ before :each do
7
+ ActionController::Routing::Routes.reload
8
+ login_as :designer
9
+ end
10
+
11
+ it "should be a ResourceController" do
12
+ controller.should be_kind_of(Admin::ResourceController)
13
+ end
14
+
15
+ it "should handle CacheBuster" do
16
+ controller.class.model_class.should == CacheBuster
17
+ end
18
+
19
+ describe "index" do
20
+ describe "display Buster" do
21
+ before do
22
+ get :index
23
+ end
24
+
25
+ it "should render the index view" do
26
+ response.should be_success
27
+ response.should render_template('index')
28
+ end
29
+ end
30
+
31
+ describe "update Buster" do
32
+ before do
33
+ post :index
34
+ end
35
+
36
+ it "should render the index view" do
37
+ response.should be_success
38
+ response.should render_template('index')
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,20 @@
1
+ # require 'spec_helper'
2
+ require File.expand_path("../../spec_helper", __FILE__)
3
+
4
+ #class Time
5
+ #def self.now
6
+ #Time.at 1212483780 # July 3 2008 9:03AM PST
7
+ #end
8
+ #end
9
+
10
+ describe "Cache Buster Tags" do
11
+ dataset :pages, :users
12
+
13
+ let(:page){ pages(:home) }
14
+
15
+ describe "<r:cache_buster />" do
16
+ subject { page }
17
+ it { should render(%{<r:cache_buster />}).as(/\?[0-9]+$/) }
18
+ end
19
+
20
+ end
@@ -0,0 +1,47 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe CacheBuster do
4
+
5
+ before(:all) do
6
+ # ensure default after previous tests
7
+ Radiant::Config['cache_buster.timeout'] = CacheBuster::DEFAULT_TIMEOUT
8
+ end
9
+
10
+ describe '.buster' do
11
+ it 'should return cache buster' do
12
+ CacheBuster.buster.should be
13
+ end
14
+ it 'should be a string' do
15
+ CacheBuster.buster.should be_a_kind_of String
16
+ CacheBuster.buster.should match /^\?[0-9]+$/
17
+ end
18
+ end
19
+
20
+ describe '.timeout' do
21
+ describe 'without timeout config' do
22
+ it 'should be an int' do
23
+ CacheBuster.timeout.should be_a_kind_of Fixnum
24
+ end
25
+ end
26
+ describe 'with timeout config' do
27
+ before do
28
+ Radiant::Config['cache_buster.timeout'] = 1
29
+ end
30
+ it 'should be an int' do
31
+ CacheBuster.timeout.should be_a_kind_of Fixnum
32
+ CacheBuster.timeout.should == 1
33
+ end
34
+
35
+ it 'should update after timeout passes' do
36
+
37
+ buster1 = CacheBuster.buster
38
+ sleep 2
39
+ buster2 = CacheBuster.buster
40
+
41
+ buster1.should_not == buster2
42
+ #buster1.gsub("?", "").to_i.should be_less_then buster2.gsub("?", "").to_i
43
+ end
44
+ end
45
+ end
46
+ end
47
+
@@ -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,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: radiant-cache_buster-extension
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Josh Mervine
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-10-12 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Cache Buster tag for Radiant CMS
15
+ email:
16
+ - joshua@mervine.net
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - config/routes.rb
22
+ - app/models/cache_buster.rb
23
+ - app/controllers/admin/buster_controller.rb
24
+ - app/views/admin/buster/index.html.haml
25
+ - README.md
26
+ - db/migrate/002_create_inital_cache_buster.rb
27
+ - db/migrate/001_create_cache_buster.rb
28
+ - radiant-cache_buster-extension.gemspec
29
+ - spec/models/cache_buster_spec.rb
30
+ - spec/controllers/admin/buster_controller_spec.rb
31
+ - spec/ci/script
32
+ - spec/ci/before_script
33
+ - spec/spec.opts
34
+ - spec/spec_helper.rb
35
+ - spec/lib/cache_buster_tags_spec.rb
36
+ - lib/radiant-cache_buster-extension.rb
37
+ - lib/tasks/cache_buster_extension_tasks.rake
38
+ - lib/cache_buster_tags.rb
39
+ - cache_buster_extension.rb
40
+ - Rakefile
41
+ homepage: http://github.com/jmervine/radiant-cache_buster-extension
42
+ licenses: []
43
+ post_install_message:
44
+ rdoc_options: []
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ none: false
49
+ requirements:
50
+ - - ! '>='
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ! '>='
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ requirements: []
60
+ rubyforge_project:
61
+ rubygems_version: 1.8.24
62
+ signing_key:
63
+ specification_version: 3
64
+ summary: Cache Buster tag for Radiant CMS
65
+ test_files:
66
+ - spec/models/cache_buster_spec.rb
67
+ - spec/controllers/admin/buster_controller_spec.rb
68
+ - spec/ci/script
69
+ - spec/ci/before_script
70
+ - spec/spec.opts
71
+ - spec/spec_helper.rb
72
+ - spec/lib/cache_buster_tags_spec.rb