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.
Files changed (100) hide show
  1. data/CHANGELOG.textile +3 -0
  2. data/LICENSE +1 -1
  3. data/README.textile +23 -0
  4. data/Rakefile +69 -19
  5. data/TODO.textile +5 -0
  6. data/VERSION.yml +1 -1
  7. data/app/controllers/eventable/categories_controller.rb +58 -0
  8. data/app/controllers/eventable/categorylists_controller.rb +29 -0
  9. data/app/controllers/eventable/eventable_controller.rb +45 -0
  10. data/app/controllers/eventable/events_controller.rb +54 -0
  11. data/app/controllers/eventable/opening_periodlists_controller.rb +40 -0
  12. data/app/controllers/eventable/opening_periods_controller.rb +78 -0
  13. data/app/controllers/eventable/opening_timelists_controller.rb +45 -0
  14. data/app/controllers/eventable/opening_times_controller.rb +81 -0
  15. data/app/controllers/eventable/pricelists_controller.rb +40 -0
  16. data/app/controllers/eventable/prices_controller.rb +76 -0
  17. data/app/models/eventable/categorization.rb +9 -0
  18. data/app/models/eventable/category.rb +10 -0
  19. data/app/models/eventable/categorylist.rb +49 -0
  20. data/app/models/eventable/opening_period.rb +21 -0
  21. data/app/models/eventable/opening_periodlist.rb +30 -0
  22. data/app/models/eventable/opening_time.rb +42 -0
  23. data/app/models/eventable/opening_timelist.rb +30 -0
  24. data/app/models/eventable/price.rb +15 -0
  25. data/app/models/eventable/pricelist.rb +30 -0
  26. data/app/models/eventable/program_item.rb +11 -0
  27. data/app/models/eventable/review.rb +7 -0
  28. data/app/views/eventable/categories/_form.html.erb +14 -0
  29. data/app/views/eventable/categories/edit.html.erb +13 -0
  30. data/app/views/eventable/categories/index.html.erb +22 -0
  31. data/app/views/eventable/categories/new.html.erb +12 -0
  32. data/app/views/eventable/categories/show.html.erb +17 -0
  33. data/app/views/eventable/categorylists/edit.html.erb +20 -0
  34. data/app/views/eventable/categorylists/show.html.erb +18 -0
  35. data/app/views/eventable/events/edit.html.erb +12 -0
  36. data/app/views/eventable/events/index.html.erb +20 -0
  37. data/app/views/eventable/events/new.html.erb +11 -0
  38. data/app/views/eventable/events/show.html.erb +12 -0
  39. data/app/views/eventable/opening_periodlists/edit.html.erb +16 -0
  40. data/app/views/eventable/opening_periodlists/show.html.erb +28 -0
  41. data/app/views/eventable/opening_periods/_form.html.erb +9 -0
  42. data/app/views/eventable/opening_periods/edit.html.erb +13 -0
  43. data/app/views/eventable/opening_periods/index.html.erb +22 -0
  44. data/app/views/eventable/opening_periods/new.html.erb +12 -0
  45. data/app/views/eventable/opening_periods/show.html.erb +13 -0
  46. data/app/views/eventable/opening_timelists/edit.html.erb +16 -0
  47. data/app/views/eventable/opening_timelists/show.html.erb +30 -0
  48. data/app/views/eventable/opening_times/_form.html.erb +14 -0
  49. data/app/views/eventable/opening_times/edit.html.erb +13 -0
  50. data/app/views/eventable/opening_times/index.html.erb +24 -0
  51. data/app/views/eventable/opening_times/new.html.erb +12 -0
  52. data/app/views/eventable/opening_times/show.html.erb +18 -0
  53. data/app/views/eventable/pricelists/edit.html.erb +16 -0
  54. data/app/views/eventable/pricelists/show.html.erb +28 -0
  55. data/app/views/eventable/prices/_form.html.erb +9 -0
  56. data/app/views/eventable/prices/edit.html.erb +13 -0
  57. data/app/views/eventable/prices/index.html.erb +22 -0
  58. data/app/views/eventable/prices/new.html.erb +12 -0
  59. data/app/views/eventable/prices/show.html.erb +13 -0
  60. data/config/routes.rb +25 -0
  61. data/generators/eventable/USAGE +1 -0
  62. data/generators/eventable/eventable_generator.rb +26 -0
  63. data/generators/eventable/templates/README +1 -0
  64. data/generators/eventable/templates/factories.rb +12 -0
  65. data/generators/eventable/templates/migrations/eventable.rb +134 -0
  66. data/lib/eventable.rb +27 -0
  67. data/lib/eventable/acts_as_event.rb +10 -0
  68. data/lib/eventable/model.rb +58 -0
  69. data/rails/init.rb +1 -0
  70. data/shoulda_macros/eventable.rb +16 -0
  71. data/test/rails_root/app/controllers/application_controller.rb +10 -0
  72. data/test/rails_root/app/controllers/events_controller.rb +85 -0
  73. data/test/rails_root/app/helpers/application_helper.rb +3 -0
  74. data/test/rails_root/app/helpers/events_helper.rb +2 -0
  75. data/test/rails_root/app/models/event.rb +3 -0
  76. data/test/rails_root/app/models/user.rb +2 -0
  77. data/test/rails_root/config/boot.rb +110 -0
  78. data/test/rails_root/config/environment.rb +41 -0
  79. data/test/rails_root/config/environments/development.rb +17 -0
  80. data/test/rails_root/config/environments/production.rb +28 -0
  81. data/test/rails_root/config/environments/test.rb +28 -0
  82. data/test/rails_root/config/initializers/backtrace_silencers.rb +7 -0
  83. data/test/rails_root/config/initializers/inflections.rb +10 -0
  84. data/test/rails_root/config/initializers/mime_types.rb +5 -0
  85. data/test/rails_root/config/initializers/new_rails_defaults.rb +19 -0
  86. data/test/rails_root/config/initializers/session_store.rb +15 -0
  87. data/test/rails_root/config/locales/en.rb +19 -0
  88. data/test/rails_root/config/locales/nl.rb +30 -0
  89. data/test/rails_root/config/routes.rb +3 -0
  90. data/test/rails_root/db/migrate/20090504165857_create_events.rb +13 -0
  91. data/test/rails_root/db/migrate/20090512075657_setup_eventable_0_0_0.rb +60 -0
  92. data/test/rails_root/db/schema.rb +71 -0
  93. data/test/rails_root/test/factories/eventable.rb +12 -0
  94. data/test/rails_root/test/functional/events_controller_test.rb +4 -0
  95. data/test/rails_root/test/unit/event_test.rb +8 -0
  96. data/test/rails_root/test/unit/helpers/events_helper_test.rb +4 -0
  97. data/test/test_helper.rb +23 -6
  98. metadata +134 -10
  99. data/README.rdoc +0 -7
  100. data/test/eventable_test.rb +0 -7
@@ -0,0 +1,45 @@
1
+ class Eventable::OpeningTimelistsController < Eventable::EventableController
2
+
3
+ before_filter :get_opening_period
4
+ before_filter :get_event
5
+ before_filter :get_opening_timelist
6
+
7
+ def show
8
+ @new_opening_time = @opening_period.opening_times.build
9
+ try_after_callback
10
+ end
11
+
12
+ def edit
13
+ # you can add a blank/new item like this:
14
+ # @opening_timelist.add_blank
15
+ try_after_callback
16
+ end
17
+
18
+ def update
19
+ if @opening_timelist.update_attributes(params[:eventable_opening_timelist])
20
+ try_after_callback do
21
+ flash[:notice] = 'Opening times were successfully updated.'
22
+ redirect_to(eventable_opening_period_opening_timelist_path(@opening_period))
23
+ end
24
+ else
25
+ try_after_callback :fail do
26
+ render :action => "edit"
27
+ end
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ def get_opening_period
34
+ @opening_period = Eventable::OpeningPeriod.find(params[:opening_period_id])
35
+ end
36
+
37
+ def get_event
38
+ @event = @opening_period.event
39
+ end
40
+
41
+ def get_opening_timelist
42
+ @opening_timelist = @opening_period.opening_timelist
43
+ end
44
+
45
+ end
@@ -0,0 +1,81 @@
1
+ class Eventable::OpeningTimesController < Eventable::EventableController
2
+
3
+ before_filter :get_opening_period
4
+ before_filter :get_event
5
+
6
+ before_filter :get_opening_times, :only => [:index]
7
+ before_filter :get_opening_time, :only => [:show, :edit, :update, :destroy]
8
+ before_filter :new_opening_time, :only => [:new, :create]
9
+
10
+ def create
11
+ if @opening_time.update_attributes(params[:eventable_opening_time])
12
+ try_after_callback do
13
+ flash[:notice] = 'Opening time was successfully added.'
14
+ redirect_to (if params[:list]
15
+ eventable_opening_period_opening_timelist_path @opening_period
16
+ else
17
+ eventable_opening_period_opening_time_path @opening_period, @opening_time
18
+ end)
19
+ end
20
+ else
21
+ try_after_callback :fail do
22
+ render :action => "new"
23
+ end
24
+ end
25
+ end
26
+
27
+ def update
28
+ if @opening_time.update_attributes(params[:eventable_opening_time])
29
+ try_after_callback do
30
+ flash[:notice] = 'Opening time was successfully updated.'
31
+ redirect_to (if params[:list]
32
+ eventable_opening_period_opening_timelist_path @opening_period
33
+ else
34
+ eventable_opening_period_opening_time_path @opening_period, @opening_time
35
+ end)
36
+ end
37
+ else
38
+ try_after_callback :fail do
39
+ render :action => "edit"
40
+ end
41
+ end
42
+ end
43
+
44
+ def destroy
45
+ @opening_time.destroy
46
+ try_after_callback do
47
+ redirect_to (if params[:list]
48
+ eventable_opening_period_opening_timelist_path @opening_period
49
+ else
50
+ eventable_opening_period_opening_times_path @opening_period
51
+ end)
52
+ end
53
+ end
54
+
55
+ private
56
+
57
+ def model
58
+ @opening_period.opening_times
59
+ end
60
+
61
+ def get_opening_times
62
+ @opening_times = model.all
63
+ end
64
+
65
+ def get_opening_time
66
+ @opening_time = model.find(params[:id])
67
+ end
68
+
69
+ def new_opening_time
70
+ @opening_time = model.build
71
+ end
72
+
73
+ def get_opening_period
74
+ @opening_period = Eventable::OpeningPeriod.find(params[:opening_period_id])
75
+ end
76
+
77
+ def get_event
78
+ @event = @opening_period.event
79
+ end
80
+
81
+ end
@@ -0,0 +1,40 @@
1
+ class Eventable::PricelistsController < Eventable::EventableController
2
+
3
+ before_filter :get_event
4
+ before_filter :get_pricelist
5
+
6
+ def show
7
+ @new_price = @event.prices.build
8
+ try_after_callback
9
+ end
10
+
11
+ def edit
12
+ # you can add a blank/new item like this:
13
+ @pricelist.add_blank
14
+ try_after_callback
15
+ end
16
+
17
+ def update
18
+ if @pricelist.update_attributes(params[:eventable_pricelist])
19
+ try_after_callback do
20
+ flash[:notice] = 'Prices were successfully updated.'
21
+ redirect_to(eventable_event_pricelist_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_pricelist
37
+ @pricelist = @event.pricelist
38
+ end
39
+
40
+ end
@@ -0,0 +1,76 @@
1
+ class Eventable::PricesController < Eventable::EventableController
2
+
3
+ before_filter :get_event
4
+
5
+ before_filter :get_prices, :only => [:index]
6
+ before_filter :get_price, :only => [:show, :edit, :update, :destroy]
7
+ before_filter :new_price, :only => [:new, :create]
8
+
9
+ def create
10
+ if @price.update_attributes(params[:eventable_price])
11
+ try_after_callback do
12
+ flash[:notice] = 'Price was successfully added.'
13
+ redirect_to (if params[:list]
14
+ eventable_event_pricelist_path @event
15
+ else
16
+ eventable_event_price_path @event, @price
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 @price.update_attributes(params[:eventable_price])
28
+ try_after_callback do
29
+ flash[:notice] = 'Price was successfully updated.'
30
+ redirect_to (if params[:list]
31
+ eventable_event_pricelist_path @event
32
+ else
33
+ eventable_event_price_path @event, @price
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
+ @price.destroy
45
+ try_after_callback do
46
+ redirect_to (if params[:list]
47
+ eventable_event_pricelist_path @event
48
+ else
49
+ eventable_event_prices_path @event
50
+ end)
51
+ end
52
+ end
53
+
54
+ private
55
+
56
+ def model
57
+ @event.prices
58
+ end
59
+
60
+ def get_prices
61
+ @prices = model.all
62
+ end
63
+
64
+ def get_price
65
+ @price = model.find(params[:id])
66
+ end
67
+
68
+ def new_price
69
+ @price = @event ? model.build : model.new
70
+ end
71
+
72
+ def get_event
73
+ @event = event_model.find(params[:event_id])
74
+ end
75
+
76
+ end
@@ -0,0 +1,9 @@
1
+ class Eventable::Categorization < ActiveRecord::Base
2
+ set_table_name 'eventable_categories_events'
3
+
4
+ unloadable
5
+
6
+ belongs_to :event, :class_name => 'Event'
7
+ belongs_to :category, :class_name => 'Eventable::Category'
8
+
9
+ end
@@ -0,0 +1,10 @@
1
+ class Eventable::Category < ActiveRecord::Base
2
+ unloadable
3
+
4
+ set_table_name 'eventable_categories'
5
+ attr_accessible :name, :description, :group, :avatar
6
+
7
+ has_many :categorizations, :class_name => 'Eventable::Categorization', :dependent => :destroy
8
+ has_many :events, :through => :categorizations
9
+
10
+ end
@@ -0,0 +1,49 @@
1
+ class Eventable::Categorylist
2
+
3
+ attr_reader :event, :items
4
+ delegate :id, :to => :event
5
+
6
+ class CategoryItem
7
+ attr_reader :id, :event, :name, :group
8
+ attr_accessor :active
9
+
10
+ def initialize(event, category)
11
+ @event = event
12
+ @name = category.name
13
+ @group = category.group
14
+ @id = category.id
15
+ @active = event.category_ids.include? @id
16
+ end
17
+
18
+ def new_record?
19
+ true
20
+ end
21
+ end
22
+
23
+ def initialize(event)
24
+ @event = event
25
+ @items = Eventable::Category.all.map { |c| CategoryItem.new(event, c)}
26
+ end
27
+
28
+ def errors
29
+ ActiveRecord::Errors.new(self)
30
+ end
31
+
32
+ def items_attributes=(attr)
33
+ attr.values.each do |a|
34
+ @items.detect { |i| i.id == a[:id].to_i }.active = (a[:active] == '1')
35
+ end
36
+ end
37
+
38
+ def update_attributes(attrs)
39
+ attrs.each do |k,v|
40
+ send "#{k}=", v
41
+ end
42
+ save
43
+ end
44
+
45
+ def save
46
+ @event.category_ids = @items.select(&:active).map(&:id)
47
+ end
48
+
49
+ end
@@ -0,0 +1,21 @@
1
+ class Eventable::OpeningPeriod < ActiveRecord::Base
2
+ set_table_name 'eventable_opening_periods'
3
+
4
+ unloadable
5
+
6
+ belongs_to :event, :class_name => 'Event', :foreign_key => :event_id
7
+ has_many :opening_times,
8
+ :class_name => 'Eventable::OpeningTime',
9
+ :foreign_key => 'period_id',
10
+ :dependent => :destroy
11
+
12
+ accepts_nested_attributes_for :opening_times, :allow_destroy => true,
13
+ :reject_if => proc { |attrs| attrs.all? { |k, v| v.blank? } }
14
+
15
+ attr_accessible :start_at, :end_at
16
+
17
+ def opening_timelist
18
+ Eventable::OpeningTimelist.new(self)
19
+ end
20
+
21
+ end
@@ -0,0 +1,30 @@
1
+ class Eventable::OpeningPeriodlist
2
+
3
+ attr_reader :event, :items
4
+ delegate :id, :save, :to => :event
5
+
6
+ def initialize(event)
7
+ @event = event
8
+ @items = event.opening_periods.all
9
+ end
10
+
11
+ def errors
12
+ ActiveRecord::Errors.new(self)
13
+ end
14
+
15
+ def add_blank
16
+ @items << @event.opening_periods.build
17
+ end
18
+
19
+ def items_attributes=(attr)
20
+ @event.opening_periods_attributes=(attr)
21
+ end
22
+
23
+ def update_attributes(attrs)
24
+ attrs.each do |k,v|
25
+ send "#{k}=", v
26
+ end
27
+ save
28
+ end
29
+
30
+ end
@@ -0,0 +1,42 @@
1
+ class Eventable::OpeningTime < ActiveRecord::Base
2
+ set_table_name 'eventable_opening_times'
3
+
4
+ belongs_to :opening_period, :class_name => 'Eventable::OpeningPeriod', :foreign_key => 'period_id'
5
+ attr_accessible :day_of_week, :minutes_start, :minutes_end
6
+
7
+ validates_inclusion_of :day_of_week, :in => 0..6
8
+ validates_inclusion_of :minutes_start, :minutes_end, :in => 0..1440
9
+
10
+ def self.day_selector
11
+ (0..6).to_a.map {|n| [I18n.translate(:'date.day_names')[n],n]}
12
+ end
13
+
14
+ def self.time_selector
15
+ (0..48).to_a.map do |n|
16
+ [to_time_string(n*30), n*30]
17
+ end
18
+ end
19
+
20
+ def after_initialize
21
+ self.minutes_start ||= 540
22
+ self.minutes_end ||= 1080
23
+ end
24
+
25
+ def open_at
26
+ to_time_string(minutes_start)
27
+ end
28
+
29
+ def closed_at
30
+ to_time_string(minutes_end)
31
+ end
32
+
33
+ private
34
+
35
+ def self.to_time_string(m)
36
+ return nil if m.blank?
37
+ (Time.now.beginning_of_day + m.minutes).strftime "%H:%M"
38
+ end
39
+
40
+ delegate :to_time_string, :to => 'self.class'
41
+
42
+ end
@@ -0,0 +1,30 @@
1
+ class Eventable::OpeningTimelist
2
+
3
+ attr_reader :opening_period, :items
4
+ delegate :id, :save, :to => :opening_period
5
+
6
+ def initialize(opening_period)
7
+ @opening_period = opening_period
8
+ @items = opening_period.opening_times.all
9
+ end
10
+
11
+ def errors
12
+ ActiveRecord::Errors.new(self)
13
+ end
14
+
15
+ def add_blank
16
+ @items << @opening_period.opening_times.build
17
+ end
18
+
19
+ def items_attributes=(attr)
20
+ @opening_period.opening_times_attributes=(attr)
21
+ end
22
+
23
+ def update_attributes(attrs)
24
+ attrs.each do |k,v|
25
+ send "#{k}=", v
26
+ end
27
+ save
28
+ end
29
+
30
+ end