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
@@ -0,0 +1,13 @@
|
|
1
|
+
<h1>Editing opening time</h1>
|
2
|
+
|
3
|
+
<% form_for(@opening_time, :url => eventable_opening_period_opening_time_path(@opening_period, @opening_time)) do |f| %>
|
4
|
+
<%= f.error_messages %>
|
5
|
+
|
6
|
+
<%= render :partial => 'eventable/opening_times/form', :object => f %>
|
7
|
+
<p>
|
8
|
+
<%= f.submit 'Update' %>
|
9
|
+
</p>
|
10
|
+
<% end %>
|
11
|
+
|
12
|
+
<%= link_to 'Show', eventable_opening_period_opening_time_path(@opening_period, @opening_time) %>
|
13
|
+
<%= link_to 'Back', eventable_opening_period_opening_times_path(@opening_period) %>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<h1>Listing opening times</h1>
|
2
|
+
|
3
|
+
<table>
|
4
|
+
<tr>
|
5
|
+
<th>Day of week</th>
|
6
|
+
<th>Open</th>
|
7
|
+
<th>Closed</th>
|
8
|
+
</tr>
|
9
|
+
|
10
|
+
<% @opening_times.each do |opening_time| %>
|
11
|
+
<tr>
|
12
|
+
<td><%= t('date.day_names')[opening_time.day_of_week] %></td>
|
13
|
+
<td><%= opening_time.open_at %></td>
|
14
|
+
<td><%= opening_time.closed_at %></td>
|
15
|
+
<td><%= link_to 'Show', eventable_opening_period_opening_time_path(@opening_period, opening_time) %></td>
|
16
|
+
<td><%= link_to 'Edit', edit_eventable_opening_period_opening_time_path(@opening_period, opening_time) %></td>
|
17
|
+
<td><%= button_to 'Destroy', eventable_opening_period_opening_time_path(@opening_period, opening_time), :confirm => 'Are you sure?', :method => :delete %></td>
|
18
|
+
</tr>
|
19
|
+
<% end %>
|
20
|
+
</table>
|
21
|
+
|
22
|
+
<br />
|
23
|
+
|
24
|
+
<%= link_to 'New opening time', new_eventable_opening_period_opening_time_path(@opening_period) %>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<h1>New opening time</h1>
|
2
|
+
|
3
|
+
<% form_for(@opening_time, :url => eventable_opening_period_opening_times_path(@opening_period)) do |f| %>
|
4
|
+
<%= f.error_messages %>
|
5
|
+
|
6
|
+
<%= render :partial => 'eventable/opening_times/form', :object => f %>
|
7
|
+
<p>
|
8
|
+
<%= f.submit 'Create' %>
|
9
|
+
</p>
|
10
|
+
<% end %>
|
11
|
+
|
12
|
+
<%= link_to 'Back', eventable_opening_period_opening_times_path(@opening_period) %>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<p>
|
2
|
+
<b>Day of week:</b>
|
3
|
+
<%= t('date.day_names')[@opening_time.day_of_week] %>
|
4
|
+
</p>
|
5
|
+
|
6
|
+
<p>
|
7
|
+
<b>Open:</b>
|
8
|
+
<%= @opening_time.open_at %>
|
9
|
+
</p>
|
10
|
+
|
11
|
+
<p>
|
12
|
+
<b>Closed:</b>
|
13
|
+
<%= @opening_time.closed_at %>
|
14
|
+
</p>
|
15
|
+
|
16
|
+
<%= link_to 'Edit', edit_eventable_opening_period_opening_time_path(@opening_period, @opening_time) %> |
|
17
|
+
<%= link_to 'Back', eventable_opening_period_opening_times_path(@opening_period) %>
|
18
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<h1>Edit Pricelist</h1>
|
2
|
+
|
3
|
+
<% form_for(@pricelist, :url => eventable_event_pricelist_path(@event)) do |f| %>
|
4
|
+
<%= f.error_messages %>
|
5
|
+
<% f.fields_for :items do |pf| %>
|
6
|
+
<%= render :partial => 'eventable/prices/form', :object => pf %>
|
7
|
+
<% unless pf.object.new_record? %>
|
8
|
+
<%= pf.label :_delete, 'remove' %>
|
9
|
+
<%= pf.check_box :_delete %>
|
10
|
+
<% end %>
|
11
|
+
<% end %>
|
12
|
+
<p>
|
13
|
+
<%= f.submit 'Update' %>
|
14
|
+
</p>
|
15
|
+
<% end %>
|
16
|
+
<%= link_to 'Back', eventable_event_pricelist_path(@event) %>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<h1>Pricelist</h1>
|
2
|
+
<h3><%= link_to 'Edit', edit_eventable_event_pricelist_path(@event) %></h3>
|
3
|
+
|
4
|
+
<table>
|
5
|
+
<tr>
|
6
|
+
<th>Text</th>
|
7
|
+
<th>Price</th>
|
8
|
+
</tr>
|
9
|
+
|
10
|
+
<% @pricelist.items.each do |price| %>
|
11
|
+
<tr>
|
12
|
+
<td><%=h price.text %></td>
|
13
|
+
<td><%= number_to_currency(price.price) %></td>
|
14
|
+
<td><%= button_to 'Remove', eventable_event_price_path(@event, price, :list => true), :confirm => 'Are you sure?', :method => :delete %></td>
|
15
|
+
</tr>
|
16
|
+
<% end %>
|
17
|
+
</table>
|
18
|
+
|
19
|
+
<br/>
|
20
|
+
<strong>Add a new price:</strong>
|
21
|
+
<% form_for(@new_price, :url => eventable_event_prices_path(@event, :list => true)) do |f| %>
|
22
|
+
<%= f.error_messages %>
|
23
|
+
|
24
|
+
<%= render :partial => 'eventable/prices/form', :object => f %>
|
25
|
+
<p>
|
26
|
+
<%= f.submit 'Create' %>
|
27
|
+
</p>
|
28
|
+
<% end %>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<h1>Editing event</h1>
|
2
|
+
|
3
|
+
<% form_for(@price, :url => eventable_event_price_path(@event, @price)) do |f| %>
|
4
|
+
<%= f.error_messages %>
|
5
|
+
|
6
|
+
<%= render :partial => 'eventable/prices/form', :object => f %>
|
7
|
+
<p>
|
8
|
+
<%= f.submit 'Update' %>
|
9
|
+
</p>
|
10
|
+
<% end %>
|
11
|
+
|
12
|
+
<%= link_to 'Show', eventable_event_price_path(@event, @price) %>
|
13
|
+
<%= link_to 'Back', eventable_event_prices_path(@event) %>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<h1>Listing prices</h1>
|
2
|
+
|
3
|
+
<table>
|
4
|
+
<tr>
|
5
|
+
<th>Text</th>
|
6
|
+
<th>Price</th>
|
7
|
+
</tr>
|
8
|
+
|
9
|
+
<% @prices.each do |price| %>
|
10
|
+
<tr>
|
11
|
+
<td><%=h price.text %></td>
|
12
|
+
<td><%= number_to_currency(price.price) %></td>
|
13
|
+
<td><%= link_to 'Show', eventable_event_price_path(@event, price) %></td>
|
14
|
+
<td><%= link_to 'Edit', edit_eventable_event_price_path(@event, price) %></td>
|
15
|
+
<td><%= button_to 'Destroy', eventable_event_price_path(@event, price), :confirm => 'Are you sure?', :method => :delete %></td>
|
16
|
+
</tr>
|
17
|
+
<% end %>
|
18
|
+
</table>
|
19
|
+
|
20
|
+
<br />
|
21
|
+
|
22
|
+
<%= link_to 'New price', new_eventable_event_price_path(@event) %>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<h1>New price</h1>
|
2
|
+
|
3
|
+
<% form_for(@price, :url => eventable_event_prices_path(@event)) do |f| %>
|
4
|
+
<%= f.error_messages %>
|
5
|
+
|
6
|
+
<%= render :partial => 'eventable/prices/form', :object => f %>
|
7
|
+
<p>
|
8
|
+
<%= f.submit 'Create' %>
|
9
|
+
</p>
|
10
|
+
<% end %>
|
11
|
+
|
12
|
+
<%= link_to 'Back', eventable_event_prices_path(@event) %>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<p>
|
2
|
+
<b>Text:</b>
|
3
|
+
<%=h @price.text %>
|
4
|
+
</p>
|
5
|
+
|
6
|
+
<p>
|
7
|
+
<b>Price:</b>
|
8
|
+
<%= number_to_currency(@price.price) %>
|
9
|
+
</p>
|
10
|
+
|
11
|
+
<%= link_to 'Edit', edit_eventable_event_price_path(@event, @price) %> |
|
12
|
+
<%= link_to 'Back', eventable_event_prices_path(@event) %>
|
13
|
+
|
data/config/routes.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
ActionController::Routing::Routes.draw do |map|
|
2
|
+
# namespace everything to not disturb normal site routes
|
3
|
+
map.namespace :eventable do |e|
|
4
|
+
|
5
|
+
e.resources :events do |event|
|
6
|
+
# route for editing/removing prices one by one (or ajax-y)
|
7
|
+
event.resources :prices
|
8
|
+
|
9
|
+
# the 'prices' resource of an event (the page that
|
10
|
+
# adds/edits/removes all prices)
|
11
|
+
event.resource :pricelist, :only => [:show, :edit, :update]
|
12
|
+
|
13
|
+
event.resources :opening_periods
|
14
|
+
event.resource :opening_periodlist, :only => [:show, :edit, :update]
|
15
|
+
|
16
|
+
event.resource :categorylist, :only => [:show, :edit, :update]
|
17
|
+
end
|
18
|
+
|
19
|
+
e.resources :opening_periods do |op|
|
20
|
+
op.resources :opening_times
|
21
|
+
op.resource :opening_timelist, :only => [:show, :edit, :update]
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
script/generate eventable
|
@@ -0,0 +1,26 @@
|
|
1
|
+
EVENTABLE_ROOT = File.join(File.dirname(__FILE__), '..', '..')
|
2
|
+
class EventableGenerator < Rails::Generator::Base
|
3
|
+
|
4
|
+
def manifest
|
5
|
+
record do |m|
|
6
|
+
|
7
|
+
m.directory File.join("test", "factories")
|
8
|
+
m.file "factories.rb", "test/factories/eventable.rb"
|
9
|
+
|
10
|
+
m.migration_template "migrations/eventable.rb",
|
11
|
+
'db/migrate',
|
12
|
+
:migration_file_name => "setup_eventable_#{version.gsub('.', '_')}"
|
13
|
+
|
14
|
+
m.readme "README"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def version
|
21
|
+
config = YAML.load(File.read(File.join(EVENTABLE_ROOT, 'VERSION.yml')))
|
22
|
+
"#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
Please check the migration before running it!
|
@@ -0,0 +1,12 @@
|
|
1
|
+
Factory.sequence :name do |n|
|
2
|
+
"Event #{n}"
|
3
|
+
end
|
4
|
+
|
5
|
+
Factory.define :event do |event|
|
6
|
+
event.name { Factory.next :name }
|
7
|
+
event.description { "Just some testing event" }
|
8
|
+
end
|
9
|
+
|
10
|
+
Factory.define :special_event, :parent => :event do |event|
|
11
|
+
event.name { "special" }
|
12
|
+
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
<%
|
2
|
+
def version
|
3
|
+
config = YAML.load(File.read(File.join(EVENTABLE_ROOT, 'VERSION.yml')))
|
4
|
+
"#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
|
5
|
+
end
|
6
|
+
-%>
|
7
|
+
class <%= "SetupEventable#{version.gsub('.','')}" -%> < ActiveRecord::Migration
|
8
|
+
<%
|
9
|
+
tables = {
|
10
|
+
:eventable_program_items => [
|
11
|
+
[:event_id, 't.belongs_to :event'],
|
12
|
+
[:user_id, 't.belongs_to :user'],
|
13
|
+
[:start_at, 't.datetime :start_at'],
|
14
|
+
[:end_at, 't.datetime :end_at']
|
15
|
+
],
|
16
|
+
:eventable_reviews => [
|
17
|
+
[:program_item_id, 't.belongs_to :program_item'],
|
18
|
+
[:review, 't.float :review'],
|
19
|
+
[:text, 't.text :text']
|
20
|
+
],
|
21
|
+
:eventable_prices => [
|
22
|
+
[:event_id, 't.belongs_to :event'],
|
23
|
+
[:text, 't.text :text'],
|
24
|
+
[:price, 't.decimal :price, :scale => 2, :precision => 6']
|
25
|
+
],
|
26
|
+
:eventable_opening_periods => [
|
27
|
+
[:event_id, 't.belongs_to :event'],
|
28
|
+
[:start_at, 't.datetime :start_at'],
|
29
|
+
[:end_at, 't.datetime :end_at']
|
30
|
+
],
|
31
|
+
:eventable_opening_times => [
|
32
|
+
[:period_id, 't.belongs_to :period'],
|
33
|
+
[:day_of_week, 't.integer :day_of_week'],
|
34
|
+
[:minutes_start, 't.integer :minutes_start'],
|
35
|
+
[:minutes_end, 't.integer :minutes_end'],
|
36
|
+
],
|
37
|
+
:eventable_categories => [
|
38
|
+
[:name, 't.string :name'],
|
39
|
+
[:description, 't.text :description'],
|
40
|
+
[:group, 't.string :group'],
|
41
|
+
[:avatar_file_name, 't.string :avatar_file_name'],
|
42
|
+
[:avatar_file_size, 't.integer :avatar_file_size'],
|
43
|
+
[:avatar_content_type, 't.string :avatar_content_type']
|
44
|
+
],
|
45
|
+
:eventable_categories_events => [
|
46
|
+
[:event_id, 't.belongs_to :event'],
|
47
|
+
[:category_id, 't.belongs_to :category']
|
48
|
+
]
|
49
|
+
}
|
50
|
+
indexes = {
|
51
|
+
:eventable_program_items => [
|
52
|
+
:event_id,
|
53
|
+
:user_id
|
54
|
+
],
|
55
|
+
:eventable_reviews => [
|
56
|
+
:program_item_id
|
57
|
+
],
|
58
|
+
:eventable_prices => [
|
59
|
+
:event_id
|
60
|
+
],
|
61
|
+
:eventable_opening_periods => [
|
62
|
+
:event_id,
|
63
|
+
[:start_at, :end_at]
|
64
|
+
],
|
65
|
+
:eventable_opening_times => [
|
66
|
+
{ :index => [:period_id, :day_of_week, :minutes_start, :minutes_end], :name => 'full_index' }
|
67
|
+
],
|
68
|
+
:eventable_categories_events => [
|
69
|
+
:event_id,
|
70
|
+
:category_id
|
71
|
+
],
|
72
|
+
}
|
73
|
+
-%>
|
74
|
+
def self.up
|
75
|
+
<% tables.keys.each do |table| -%>
|
76
|
+
<% cols = tables[table] -%>
|
77
|
+
<% if ActiveRecord::Base.connection.table_exists?(table) -%>
|
78
|
+
change_table(:<%= table -%>) do |t|
|
79
|
+
<% existing_columns = ActiveRecord::Base.connection.columns(table).map(&:name) -%>
|
80
|
+
<% cols.reject! { |c| existing_columns.include?(c.first.to_s) } -%>
|
81
|
+
<% else -%>
|
82
|
+
create_table(:<%= table -%>) do |t|
|
83
|
+
<% end -%>
|
84
|
+
<% cols.each do |c| -%>
|
85
|
+
<%= c.last %>
|
86
|
+
<% end -%>
|
87
|
+
end
|
88
|
+
|
89
|
+
<% end -%>
|
90
|
+
<% indexes.keys.each do |table| -%>
|
91
|
+
<% idxs = indexes[table] -%>
|
92
|
+
<% if ActiveRecord::Base.connection.table_exists?(table) -%>
|
93
|
+
<% existing_indexes = ActiveRecord::Base.connection.indexes(table).map{|c| c.columns.sort} -%>
|
94
|
+
<% idxs.reject! { |c| existing_indexes.include?([*c].map(&:to_s).sort) } -%>
|
95
|
+
<% end -%>
|
96
|
+
<% idxs.each do |i| -%>
|
97
|
+
<% if Hash === i -%>
|
98
|
+
add_index :<%= table %>, <%= i[:index].inspect %>, :name => <%= i[:name].inspect -%>
|
99
|
+
<% else -%>
|
100
|
+
add_index :<%= table %>, <%= i.inspect %>
|
101
|
+
<% end -%>
|
102
|
+
<% end -%>
|
103
|
+
|
104
|
+
<% end -%>
|
105
|
+
end
|
106
|
+
|
107
|
+
def self.down
|
108
|
+
<% indexes.keys.each do |table| -%>
|
109
|
+
<% idxs = indexes[table] -%>
|
110
|
+
<% idxs.each do |i| -%>
|
111
|
+
<% if Hash === i -%>
|
112
|
+
remove_index :<%= table %>, <%= i[:index].inspect %>, :name => <%= i[:name].inspect -%>
|
113
|
+
<% else -%>
|
114
|
+
remove_index :<%= table %>, <%= i.inspect %>
|
115
|
+
<% end -%>
|
116
|
+
<% end -%>
|
117
|
+
|
118
|
+
<% end -%>
|
119
|
+
<% tables.keys.each do |table| -%>
|
120
|
+
<% cols = tables[table] -%>
|
121
|
+
<% if ActiveRecord::Base.connection.table_exists?(table) -%>
|
122
|
+
change_table(:<%= table -%>) do |t|
|
123
|
+
<% cols.each do |c| -%>
|
124
|
+
t.remove :<%= c.first %>
|
125
|
+
<% end -%>
|
126
|
+
end
|
127
|
+
<% else -%>
|
128
|
+
drop_table :<%= table -%>
|
129
|
+
<% end -%>
|
130
|
+
|
131
|
+
<% end -%>
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|
data/lib/eventable.rb
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
# this version of eventable is meant to add event-like features to 1
|
2
|
+
# model, so we store it in one place
|
3
|
+
module Eventable
|
4
|
+
|
5
|
+
class << self
|
6
|
+
attr_accessor :model_name
|
7
|
+
end
|
8
|
+
|
9
|
+
#the model that's been made eventable by acts_as_event
|
10
|
+
def self.model
|
11
|
+
(
|
12
|
+
model_name ||
|
13
|
+
(detect_model_name if Rails.env.development?)
|
14
|
+
).constantize
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def self.detect_model_name
|
20
|
+
File.basename(
|
21
|
+
Dir.glob(File.join(Rails.root, 'app', 'models', '**', '*.rb')).
|
22
|
+
detect {|f| File.read(f).any? {|l| l[/acts_as_event/]}},
|
23
|
+
'.rb').classify rescue nil
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
require 'eventable/acts_as_event'
|
@@ -0,0 +1,10 @@
|
|
1
|
+
ActiveRecord::Base.instance_eval do
|
2
|
+
# The main method to declare a model to become event-like
|
3
|
+
# the following options are recognized:
|
4
|
+
#
|
5
|
+
# [user_class_name] class name for the User model as string - defaults to 'User'
|
6
|
+
def acts_as_event(*args)
|
7
|
+
include Eventable::Model
|
8
|
+
configure_eventable(*args)
|
9
|
+
end
|
10
|
+
end
|