dcs-eventable 0.0.0 → 0.0.8
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/CHANGELOG.textile +3 -0
- data/LICENSE +1 -1
- data/README.textile +23 -0
- data/Rakefile +69 -19
- data/TODO.textile +5 -0
- data/VERSION.yml +1 -1
- data/app/controllers/eventable/categories_controller.rb +58 -0
- data/app/controllers/eventable/categorylists_controller.rb +29 -0
- data/app/controllers/eventable/eventable_controller.rb +45 -0
- data/app/controllers/eventable/events_controller.rb +54 -0
- data/app/controllers/eventable/opening_periodlists_controller.rb +40 -0
- data/app/controllers/eventable/opening_periods_controller.rb +78 -0
- data/app/controllers/eventable/opening_timelists_controller.rb +45 -0
- data/app/controllers/eventable/opening_times_controller.rb +81 -0
- data/app/controllers/eventable/pricelists_controller.rb +40 -0
- data/app/controllers/eventable/prices_controller.rb +76 -0
- data/app/models/eventable/categorization.rb +9 -0
- data/app/models/eventable/category.rb +10 -0
- data/app/models/eventable/categorylist.rb +49 -0
- data/app/models/eventable/opening_period.rb +21 -0
- data/app/models/eventable/opening_periodlist.rb +30 -0
- data/app/models/eventable/opening_time.rb +42 -0
- data/app/models/eventable/opening_timelist.rb +30 -0
- data/app/models/eventable/price.rb +15 -0
- data/app/models/eventable/pricelist.rb +30 -0
- data/app/models/eventable/program_item.rb +11 -0
- data/app/models/eventable/review.rb +7 -0
- data/app/views/eventable/categories/_form.html.erb +14 -0
- data/app/views/eventable/categories/edit.html.erb +13 -0
- data/app/views/eventable/categories/index.html.erb +22 -0
- data/app/views/eventable/categories/new.html.erb +12 -0
- data/app/views/eventable/categories/show.html.erb +17 -0
- data/app/views/eventable/categorylists/edit.html.erb +20 -0
- data/app/views/eventable/categorylists/show.html.erb +18 -0
- data/app/views/eventable/events/edit.html.erb +12 -0
- data/app/views/eventable/events/index.html.erb +20 -0
- data/app/views/eventable/events/new.html.erb +11 -0
- data/app/views/eventable/events/show.html.erb +12 -0
- data/app/views/eventable/opening_periodlists/edit.html.erb +16 -0
- data/app/views/eventable/opening_periodlists/show.html.erb +28 -0
- data/app/views/eventable/opening_periods/_form.html.erb +9 -0
- data/app/views/eventable/opening_periods/edit.html.erb +13 -0
- data/app/views/eventable/opening_periods/index.html.erb +22 -0
- data/app/views/eventable/opening_periods/new.html.erb +12 -0
- data/app/views/eventable/opening_periods/show.html.erb +13 -0
- data/app/views/eventable/opening_timelists/edit.html.erb +16 -0
- data/app/views/eventable/opening_timelists/show.html.erb +30 -0
- data/app/views/eventable/opening_times/_form.html.erb +14 -0
- data/app/views/eventable/opening_times/edit.html.erb +13 -0
- data/app/views/eventable/opening_times/index.html.erb +24 -0
- data/app/views/eventable/opening_times/new.html.erb +12 -0
- data/app/views/eventable/opening_times/show.html.erb +18 -0
- data/app/views/eventable/pricelists/edit.html.erb +16 -0
- data/app/views/eventable/pricelists/show.html.erb +28 -0
- data/app/views/eventable/prices/_form.html.erb +9 -0
- data/app/views/eventable/prices/edit.html.erb +13 -0
- data/app/views/eventable/prices/index.html.erb +22 -0
- data/app/views/eventable/prices/new.html.erb +12 -0
- data/app/views/eventable/prices/show.html.erb +13 -0
- data/config/routes.rb +25 -0
- data/generators/eventable/USAGE +1 -0
- data/generators/eventable/eventable_generator.rb +26 -0
- data/generators/eventable/templates/README +1 -0
- data/generators/eventable/templates/factories.rb +12 -0
- data/generators/eventable/templates/migrations/eventable.rb +134 -0
- data/lib/eventable.rb +27 -0
- data/lib/eventable/acts_as_event.rb +10 -0
- data/lib/eventable/model.rb +58 -0
- data/rails/init.rb +1 -0
- data/shoulda_macros/eventable.rb +16 -0
- data/test/rails_root/app/controllers/application_controller.rb +10 -0
- data/test/rails_root/app/controllers/events_controller.rb +85 -0
- data/test/rails_root/app/helpers/application_helper.rb +3 -0
- data/test/rails_root/app/helpers/events_helper.rb +2 -0
- data/test/rails_root/app/models/event.rb +3 -0
- data/test/rails_root/app/models/user.rb +2 -0
- data/test/rails_root/config/boot.rb +110 -0
- data/test/rails_root/config/environment.rb +41 -0
- data/test/rails_root/config/environments/development.rb +17 -0
- data/test/rails_root/config/environments/production.rb +28 -0
- data/test/rails_root/config/environments/test.rb +28 -0
- data/test/rails_root/config/initializers/backtrace_silencers.rb +7 -0
- data/test/rails_root/config/initializers/inflections.rb +10 -0
- data/test/rails_root/config/initializers/mime_types.rb +5 -0
- data/test/rails_root/config/initializers/new_rails_defaults.rb +19 -0
- data/test/rails_root/config/initializers/session_store.rb +15 -0
- data/test/rails_root/config/locales/en.rb +19 -0
- data/test/rails_root/config/locales/nl.rb +30 -0
- data/test/rails_root/config/routes.rb +3 -0
- data/test/rails_root/db/migrate/20090504165857_create_events.rb +13 -0
- data/test/rails_root/db/migrate/20090512075657_setup_eventable_0_0_0.rb +60 -0
- data/test/rails_root/db/schema.rb +71 -0
- data/test/rails_root/test/factories/eventable.rb +12 -0
- data/test/rails_root/test/functional/events_controller_test.rb +4 -0
- data/test/rails_root/test/unit/event_test.rb +8 -0
- data/test/rails_root/test/unit/helpers/events_helper_test.rb +4 -0
- data/test/test_helper.rb +23 -6
- metadata +134 -10
- data/README.rdoc +0 -7
- data/test/eventable_test.rb +0 -7
data/CHANGELOG.textile
ADDED
data/LICENSE
CHANGED
data/README.textile
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
h1. Eventable
|
2
|
+
|
3
|
+
Description goes here.
|
4
|
+
|
5
|
+
h2. Getting started
|
6
|
+
|
7
|
+
* ./script/generate eventable will generate a migration.
|
8
|
+
* check/adjust this migration and migrate.
|
9
|
+
* add acts_as_event (see rdoc) to your site's main event model.
|
10
|
+
* general settings like authentication/permissions can be configured
|
11
|
+
by creating your own version of EventableController (see rdoc)
|
12
|
+
* you can override model behaviour by subclassing the models
|
13
|
+
* you can override controller actions by overriding methods from
|
14
|
+
Eventable::EventableController in ApplicationController (or a
|
15
|
+
mixin). define custom (before|after)_action_controller(_fail)? callbacks
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
h2. Copyright
|
21
|
+
|
22
|
+
Copyright (c) 2009 Dutch Coast Software. See LICENSE for details.
|
23
|
+
|
data/Rakefile
CHANGED
@@ -1,28 +1,50 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'rake'
|
3
3
|
|
4
|
+
def version
|
5
|
+
if File.exist?('VERSION.yml')
|
6
|
+
config = YAML.load(File.read('VERSION.yml'))
|
7
|
+
"#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
|
8
|
+
else
|
9
|
+
""
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
# gem builder
|
4
14
|
begin
|
5
15
|
require 'jeweler'
|
6
16
|
Jeweler::Tasks.new do |gem|
|
7
17
|
gem.name = "eventable"
|
8
18
|
gem.summary = %Q{TODO}
|
19
|
+
gem.description = %Q{TODO}
|
9
20
|
gem.email = "info@dutchcoastsoftware.com"
|
10
21
|
gem.homepage = "http://github.com/dcs/eventable"
|
11
22
|
gem.authors = ["Mathijs Kwik"]
|
12
|
-
|
13
|
-
|
23
|
+
gem.add_development_dependency('redgreen')
|
24
|
+
gem.files = FileList["[A-Z]*", "{app,config,generators,lib,shoulda_macros,rails}/**/*"]
|
25
|
+
gem.rdoc_options << '--main' << 'README.textile' << '--title' << "Eventable #{version}"
|
26
|
+
gem.extra_rdoc_files = ["*.textile", "LICENSE", "app/**/*.rb"]
|
14
27
|
end
|
15
28
|
rescue LoadError
|
16
29
|
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
17
30
|
end
|
18
31
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
32
|
+
|
33
|
+
|
34
|
+
# rdoc generation
|
35
|
+
require 'rake/rdoctask'
|
36
|
+
Rake::RDocTask.new do |rdoc|
|
37
|
+
rdoc.rdoc_dir = 'rdoc'
|
38
|
+
rdoc.title = "Eventable #{version}"
|
39
|
+
rdoc.rdoc_files.include('*.textile')
|
40
|
+
rdoc.rdoc_files.include('LICENSE')
|
41
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
42
|
+
rdoc.rdoc_files.include('app/**/*.rb')
|
43
|
+
rdoc.main = "README.textile"
|
24
44
|
end
|
25
45
|
|
46
|
+
|
47
|
+
# rcov test coverage
|
26
48
|
begin
|
27
49
|
require 'rcov/rcovtask'
|
28
50
|
Rcov::RcovTask.new do |test|
|
@@ -37,20 +59,48 @@ rescue LoadError
|
|
37
59
|
end
|
38
60
|
|
39
61
|
|
40
|
-
|
62
|
+
# testing with a full empty rails app
|
63
|
+
require 'rake/testtask'
|
64
|
+
namespace :test do
|
65
|
+
Rake::TestTask.new(:all => ['generator:cleanup',
|
66
|
+
'generator:generate']) do |task|
|
67
|
+
task.libs << 'lib'
|
68
|
+
task.libs << "test"
|
69
|
+
task.pattern = 'test/**/*_test.rb'
|
70
|
+
task.verbose = false
|
71
|
+
end
|
72
|
+
end
|
41
73
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
74
|
+
|
75
|
+
generators = %w(eventable)
|
76
|
+
|
77
|
+
namespace :generator do
|
78
|
+
desc "Cleans up the test app before running the generator"
|
79
|
+
task :cleanup do
|
80
|
+
generators.each do |generator|
|
81
|
+
FileList["generators/#{generator}/templates/**/*.*"].each do |each|
|
82
|
+
file = "test/rails_root/#{each.gsub("generators/#{generator}/templates/",'')}"
|
83
|
+
File.delete(file) if File.exists?(file)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
FileList["test/rails_root/db/migrate/*_setup_eventable_#{version.gsub('.', '_')}.rb"].each do |each|
|
88
|
+
FileUtils.rm_rf(each)
|
89
|
+
end
|
90
|
+
|
91
|
+
FileUtils.rm_rf("test/rails_root/vendor/plugins/eventable")
|
92
|
+
FileUtils.mkdir_p("test/rails_root/vendor/plugins")
|
93
|
+
eventable_root = File.expand_path(File.dirname(__FILE__))
|
94
|
+
system("ln -fns #{eventable_root} test/rails_root/vendor/plugins/eventable")
|
49
95
|
end
|
50
96
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
97
|
+
desc "Run the generator on the tests"
|
98
|
+
task :generate do
|
99
|
+
generators.each do |generator|
|
100
|
+
system "cd test/rails_root && ./script/generate #{generator} && rake db:migrate db:test:prepare"
|
101
|
+
end
|
102
|
+
end
|
55
103
|
end
|
56
104
|
|
105
|
+
desc "Run the test suite"
|
106
|
+
task :default => 'test:all'
|
data/TODO.textile
ADDED
data/VERSION.yml
CHANGED
@@ -0,0 +1,58 @@
|
|
1
|
+
class Eventable::CategoriesController < Eventable::EventableController
|
2
|
+
|
3
|
+
before_filter :get_categories, :only => [:index]
|
4
|
+
before_filter :get_category, :only => [:show, :edit, :update, :destroy]
|
5
|
+
before_filter :new_category, :only => [:new, :create]
|
6
|
+
|
7
|
+
def create
|
8
|
+
if @category.update_attributes(params[:eventable_category])
|
9
|
+
try_after_callback do
|
10
|
+
flash[:notice] = 'Category was successfully created.'
|
11
|
+
redirect_to(eventable_category_path(@category))
|
12
|
+
end
|
13
|
+
else
|
14
|
+
try_after_callback :fail do
|
15
|
+
render :action => "new"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def update
|
21
|
+
if @category.update_attributes(params[:eventable_category])
|
22
|
+
try_after_callback do
|
23
|
+
flash[:notice] = 'Category was successfully updated.'
|
24
|
+
redirect_to(eventable_category_path(@category))
|
25
|
+
end
|
26
|
+
else
|
27
|
+
try_after_callback :fail do
|
28
|
+
render :action => "edit"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def destroy
|
34
|
+
@category.destroy
|
35
|
+
try_after_callback do
|
36
|
+
redirect_to(eventable_categories_path)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def model
|
43
|
+
Eventable::Category
|
44
|
+
end
|
45
|
+
|
46
|
+
def get_categories
|
47
|
+
@categories = model.all
|
48
|
+
end
|
49
|
+
|
50
|
+
def get_category
|
51
|
+
@category = model.find(params[:id])
|
52
|
+
end
|
53
|
+
|
54
|
+
def new_category
|
55
|
+
@category = model.new
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
class Eventable::CategorylistsController < Eventable::EventableController
|
2
|
+
|
3
|
+
before_filter :get_event
|
4
|
+
before_filter :get_categorylist
|
5
|
+
|
6
|
+
def update
|
7
|
+
if @categorylist.update_attributes(params[:eventable_categorylist])
|
8
|
+
try_after_callback do
|
9
|
+
flash[:notice] = 'Categories were successfully updated.'
|
10
|
+
redirect_to(eventable_event_categorylist_path(@event))
|
11
|
+
end
|
12
|
+
else
|
13
|
+
try_after_callback :fail do
|
14
|
+
render :action => "edit"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def get_event
|
22
|
+
@event = event_model.find(params[:event_id])
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_categorylist
|
26
|
+
@categorylist = @event.categorylist
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
class Eventable::EventableController < ApplicationController
|
2
|
+
|
3
|
+
before_filter :try_before_callback
|
4
|
+
|
5
|
+
# make default actions that do nothing but just execute the callback
|
6
|
+
%w(index show new create edit update destroy).each do |action|
|
7
|
+
define_method action do
|
8
|
+
try_after_callback
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
# auto detected from the model that uses acts_as_event
|
15
|
+
def event_model
|
16
|
+
Eventable.model
|
17
|
+
end
|
18
|
+
|
19
|
+
# events themselves should be handled by the application
|
20
|
+
# override to true to use the (debugging) eventscontroller from this
|
21
|
+
# gem
|
22
|
+
def enable_events_controller
|
23
|
+
false
|
24
|
+
end
|
25
|
+
|
26
|
+
def try_before_callback
|
27
|
+
m = "before_#{action_name}_#{controller_name}"
|
28
|
+
send(m) if respond_to?(m)
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
# influence eventable controller actions below here
|
33
|
+
# the naming scheme is (before|after)_action / after_action_fail
|
34
|
+
|
35
|
+
def try_after_callback(failing = false)
|
36
|
+
m = "after_#{action_name}_#{controller_name}"
|
37
|
+
m << "_fail" if failing
|
38
|
+
if respond_to? m
|
39
|
+
send(m)
|
40
|
+
else
|
41
|
+
yield if block_given?
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
class Eventable::EventsController < Eventable::EventableController
|
2
|
+
|
3
|
+
before_filter :service_not_available, :unless => :enable_events_controller
|
4
|
+
|
5
|
+
before_filter :get_events, :only => [:index]
|
6
|
+
before_filter :get_event, :only => [:show, :edit, :update, :destroy]
|
7
|
+
before_filter :new_event, :only => [:new, :create]
|
8
|
+
|
9
|
+
def create
|
10
|
+
if @event.update_attributes(params[:eventable_event])
|
11
|
+
flash[:notice] = 'Event was successfully created.'
|
12
|
+
redirect_to(eventable_event_path(@event))
|
13
|
+
else
|
14
|
+
render :action => "new"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def update
|
19
|
+
if @event.update_attributes(params[:eventable_event])
|
20
|
+
flash[:notice] = 'Event was successfully updated.'
|
21
|
+
redirect_to(eventable_event_path(@event))
|
22
|
+
else
|
23
|
+
render :action => "edit"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def destroy
|
28
|
+
@event.destroy
|
29
|
+
redirect_to(eventable_events_path)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def model
|
35
|
+
event_model
|
36
|
+
end
|
37
|
+
|
38
|
+
def get_events
|
39
|
+
@events = model.all
|
40
|
+
end
|
41
|
+
|
42
|
+
def get_event
|
43
|
+
@event = model.find(params[:id])
|
44
|
+
end
|
45
|
+
|
46
|
+
def new_event
|
47
|
+
@event = model.new
|
48
|
+
end
|
49
|
+
|
50
|
+
def service_not_available
|
51
|
+
raise "the events controller from the eventable gem should not be used except for debugging"
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
class Eventable::OpeningPeriodlistsController < Eventable::EventableController
|
2
|
+
|
3
|
+
before_filter :get_event
|
4
|
+
before_filter :get_opening_periodlist
|
5
|
+
|
6
|
+
def show
|
7
|
+
@new_opening_period = @event.opening_periods.build
|
8
|
+
try_after_callback
|
9
|
+
end
|
10
|
+
|
11
|
+
def edit
|
12
|
+
# you can add a blank/new item like this:
|
13
|
+
# @opening_periodlist.add_blank
|
14
|
+
try_after_callback
|
15
|
+
end
|
16
|
+
|
17
|
+
def update
|
18
|
+
if @opening_periodlist.update_attributes(params[:eventable_opening_periodlist])
|
19
|
+
try_after_callback do
|
20
|
+
flash[:notice] = 'Opening periods were successfully updated.'
|
21
|
+
redirect_to(eventable_event_opening_periodlist_path(@event))
|
22
|
+
end
|
23
|
+
else
|
24
|
+
try_after_callback :fail do
|
25
|
+
render :action => "edit"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def get_event
|
33
|
+
@event = event_model.find(params[:event_id])
|
34
|
+
end
|
35
|
+
|
36
|
+
def get_opening_periodlist
|
37
|
+
@opening_periodlist = @event.opening_periodlist
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
class Eventable::OpeningPeriodsController < Eventable::EventableController
|
2
|
+
|
3
|
+
before_filter :get_event
|
4
|
+
|
5
|
+
before_filter :get_opening_periods, :only => [:index]
|
6
|
+
before_filter :get_opening_period, :only => [:show, :edit, :update, :destroy]
|
7
|
+
before_filter :new_opening_period, :only => [:new, :create]
|
8
|
+
|
9
|
+
def create
|
10
|
+
if @opening_period.update_attributes(params[:eventable_opening_period])
|
11
|
+
try_after_callback do
|
12
|
+
flash[:notice] = 'Opening Period was successfully added.'
|
13
|
+
redirect_to (if params[:list]
|
14
|
+
eventable_event_opening_periodlist_path @event
|
15
|
+
else
|
16
|
+
eventable_event_opening_period_path @event, @opening_period
|
17
|
+
end)
|
18
|
+
end
|
19
|
+
else
|
20
|
+
try_after_callback :fail do
|
21
|
+
render :action => "new"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def update
|
27
|
+
if @opening_period.update_attributes(params[:eventable_opening_period])
|
28
|
+
try_after_callback do
|
29
|
+
flash[:notice] = 'Opening period was successfully updated.'
|
30
|
+
redirect_to (if params[:list]
|
31
|
+
eventable_event_opening_periodlist_path @event
|
32
|
+
else
|
33
|
+
eventable_event_opening_period_path @event, @opening_period
|
34
|
+
end)
|
35
|
+
end
|
36
|
+
else
|
37
|
+
try_after_callback :fail do
|
38
|
+
render :action => "edit"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def destroy
|
44
|
+
@opening_period.destroy
|
45
|
+
try_after_callback do
|
46
|
+
redirect_to (if params[:list]
|
47
|
+
eventable_event_opening_periodlist_path @event
|
48
|
+
else
|
49
|
+
eventable_event_opening_periods_path @event
|
50
|
+
end)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def model
|
57
|
+
@event ? @event.opening_periods : Eventable::OpeningPeriod
|
58
|
+
end
|
59
|
+
|
60
|
+
def get_opening_periods
|
61
|
+
@opening_periods = model.all
|
62
|
+
end
|
63
|
+
|
64
|
+
def get_opening_period
|
65
|
+
@opening_period = model.find(params[:id])
|
66
|
+
@event ||= @opening_period.event #fix @event in case we aren't
|
67
|
+
#below /events
|
68
|
+
end
|
69
|
+
|
70
|
+
def new_opening_period
|
71
|
+
@opening_period = @event ? model.build : model.new
|
72
|
+
end
|
73
|
+
|
74
|
+
def get_event
|
75
|
+
@event = event_model.find(params[:event_id]) if params[:event_id]
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|