governor 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.rspec +1 -0
- data/Gemfile +24 -0
- data/Gemfile.lock +123 -0
- data/LICENSE.txt +20 -0
- data/README.markdown +28 -0
- data/Rakefile +50 -0
- data/VERSION +1 -0
- data/app/controllers/governor/articles_controller.rb +94 -0
- data/app/helpers/governor_helper.rb +26 -0
- data/app/views/governor/articles/_article.html.erb +11 -0
- data/app/views/governor/articles/_form.html.erb +28 -0
- data/app/views/governor/articles/edit.html.erb +6 -0
- data/app/views/governor/articles/index.html.erb +4 -0
- data/app/views/governor/articles/new.html.erb +5 -0
- data/app/views/governor/articles/show.html.erb +10 -0
- data/config/locales/en.yml +6 -0
- data/governor.gemspec +198 -0
- data/lib/generators/USAGE +8 -0
- data/lib/generators/governor/create_articles_generator.rb +40 -0
- data/lib/generators/governor/install_generator.rb +9 -0
- data/lib/generators/governor/migrate_generator.rb +25 -0
- data/lib/generators/governor/templates/governor.rb +22 -0
- data/lib/generators/governor/templates/migrations/create_articles.rb +15 -0
- data/lib/generators/governor/templates/models/article.rb +3 -0
- data/lib/governor.rb +32 -0
- data/lib/governor/article.rb +26 -0
- data/lib/governor/controllers/helpers.rb +58 -0
- data/lib/governor/formatters.rb +43 -0
- data/lib/governor/mapping.rb +32 -0
- data/lib/governor/plugin.rb +13 -0
- data/lib/governor/plugin_manager.rb +20 -0
- data/lib/governor/rails.rb +7 -0
- data/lib/governor/rails/routes.rb +12 -0
- data/lib/tasks/.gitkeep +0 -0
- data/script/rails +6 -0
- data/spec/controllers/governor/articles_controller_spec.rb +64 -0
- data/spec/governor/article_spec.rb +28 -0
- data/spec/governor/plugin_manager_spec.rb +11 -0
- data/spec/governor_spec.rb +40 -0
- data/spec/rails_app/.gitignore +4 -0
- data/spec/rails_app/Gemfile +38 -0
- data/spec/rails_app/Gemfile.lock +91 -0
- data/spec/rails_app/README +256 -0
- data/spec/rails_app/Rakefile +7 -0
- data/spec/rails_app/app/controllers/application_controller.rb +3 -0
- data/spec/rails_app/app/controllers/home_controller.rb +2 -0
- data/spec/rails_app/app/helpers/application_helper.rb +2 -0
- data/spec/rails_app/app/helpers/home_helper.rb +2 -0
- data/spec/rails_app/app/models/article.rb +5 -0
- data/spec/rails_app/app/models/user.rb +9 -0
- data/spec/rails_app/app/views/home/index.html.erb +0 -0
- data/spec/rails_app/app/views/layouts/application.html.erb +14 -0
- data/spec/rails_app/config.ru +4 -0
- data/spec/rails_app/config/application.rb +42 -0
- data/spec/rails_app/config/boot.rb +14 -0
- data/spec/rails_app/config/database.yml +19 -0
- data/spec/rails_app/config/environment.rb +5 -0
- data/spec/rails_app/config/environments/development.rb +26 -0
- data/spec/rails_app/config/environments/production.rb +49 -0
- data/spec/rails_app/config/environments/test.rb +35 -0
- data/spec/rails_app/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/rails_app/config/initializers/devise.rb +142 -0
- data/spec/rails_app/config/initializers/governor.rb +1 -0
- data/spec/rails_app/config/initializers/inflections.rb +10 -0
- data/spec/rails_app/config/initializers/mime_types.rb +5 -0
- data/spec/rails_app/config/initializers/secret_token.rb +7 -0
- data/spec/rails_app/config/initializers/session_store.rb +8 -0
- data/spec/rails_app/config/locales/devise.en.yml +39 -0
- data/spec/rails_app/config/locales/en.yml +5 -0
- data/spec/rails_app/config/routes.rb +64 -0
- data/spec/rails_app/db/migrate/20110329032256_devise_create_users.rb +26 -0
- data/spec/rails_app/db/migrate/20110330020108_governor_create_articles.rb +15 -0
- data/spec/rails_app/db/schema.rb +45 -0
- data/spec/rails_app/db/seeds.rb +7 -0
- data/spec/rails_app/lib/tasks/.gitkeep +0 -0
- data/spec/rails_app/public/404.html +26 -0
- data/spec/rails_app/public/422.html +26 -0
- data/spec/rails_app/public/500.html +26 -0
- data/spec/rails_app/public/favicon.ico +0 -0
- data/spec/rails_app/public/images/rails.png +0 -0
- data/spec/rails_app/public/javascripts/application.js +2 -0
- data/spec/rails_app/public/javascripts/controls.js +965 -0
- data/spec/rails_app/public/javascripts/dragdrop.js +974 -0
- data/spec/rails_app/public/javascripts/effects.js +1123 -0
- data/spec/rails_app/public/javascripts/prototype.js +6001 -0
- data/spec/rails_app/public/javascripts/rails.js +191 -0
- data/spec/rails_app/public/robots.txt +5 -0
- data/spec/rails_app/public/stylesheets/.gitkeep +0 -0
- data/spec/rails_app/script/rails +6 -0
- data/spec/rails_app/spec/factories.rb +11 -0
- data/spec/rails_app/vendor/plugins/.gitkeep +0 -0
- data/spec/spec_helper.rb +21 -0
- metadata +367 -0
@@ -0,0 +1,10 @@
|
|
1
|
+
<div id="blog">
|
2
|
+
<div class="articles">
|
3
|
+
<%= render resource %>
|
4
|
+
</div>
|
5
|
+
<%= render_plugin_partial('after_article_on_article_page', :locals => {:article => resource}) %>
|
6
|
+
</div>
|
7
|
+
<%= link_to 'Back', resources_url %>
|
8
|
+
<% if governor_authorized?(:edit, resource) %>
|
9
|
+
| <%= link_to 'Edit', edit_resource_url(resource) %>
|
10
|
+
<% end %>
|
@@ -0,0 +1,6 @@
|
|
1
|
+
# Sample localization file for English. Add more files in this directory for other locales.
|
2
|
+
# See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
|
3
|
+
|
4
|
+
en:
|
5
|
+
hello: "Hello world"
|
6
|
+
unauthorized_edit: "You're not allowed to edit this %{resource_type}."
|
data/governor.gemspec
ADDED
@@ -0,0 +1,198 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{governor}
|
8
|
+
s.version = "0.1.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Liam Morley"]
|
12
|
+
s.date = %q{2011-04-02}
|
13
|
+
s.description = %q{Because Blogojevich would be too tough to remember. It's a pluggable blogging system for Rails 3.}
|
14
|
+
s.email = %q{liam@carpeliam.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE.txt",
|
17
|
+
"README.markdown"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".rspec",
|
22
|
+
"Gemfile",
|
23
|
+
"Gemfile.lock",
|
24
|
+
"LICENSE.txt",
|
25
|
+
"README.markdown",
|
26
|
+
"Rakefile",
|
27
|
+
"VERSION",
|
28
|
+
"app/controllers/governor/articles_controller.rb",
|
29
|
+
"app/helpers/governor_helper.rb",
|
30
|
+
"app/views/governor/articles/_article.html.erb",
|
31
|
+
"app/views/governor/articles/_form.html.erb",
|
32
|
+
"app/views/governor/articles/edit.html.erb",
|
33
|
+
"app/views/governor/articles/index.html.erb",
|
34
|
+
"app/views/governor/articles/new.html.erb",
|
35
|
+
"app/views/governor/articles/show.html.erb",
|
36
|
+
"config/locales/en.yml",
|
37
|
+
"governor.gemspec",
|
38
|
+
"lib/generators/USAGE",
|
39
|
+
"lib/generators/governor/create_articles_generator.rb",
|
40
|
+
"lib/generators/governor/install_generator.rb",
|
41
|
+
"lib/generators/governor/migrate_generator.rb",
|
42
|
+
"lib/generators/governor/templates/governor.rb",
|
43
|
+
"lib/generators/governor/templates/migrations/create_articles.rb",
|
44
|
+
"lib/generators/governor/templates/models/article.rb",
|
45
|
+
"lib/governor.rb",
|
46
|
+
"lib/governor/article.rb",
|
47
|
+
"lib/governor/controllers/helpers.rb",
|
48
|
+
"lib/governor/formatters.rb",
|
49
|
+
"lib/governor/mapping.rb",
|
50
|
+
"lib/governor/plugin.rb",
|
51
|
+
"lib/governor/plugin_manager.rb",
|
52
|
+
"lib/governor/rails.rb",
|
53
|
+
"lib/governor/rails/routes.rb",
|
54
|
+
"lib/tasks/.gitkeep",
|
55
|
+
"script/rails",
|
56
|
+
"spec/controllers/governor/articles_controller_spec.rb",
|
57
|
+
"spec/governor/article_spec.rb",
|
58
|
+
"spec/governor/plugin_manager_spec.rb",
|
59
|
+
"spec/governor_spec.rb",
|
60
|
+
"spec/rails_app/.gitignore",
|
61
|
+
"spec/rails_app/Gemfile",
|
62
|
+
"spec/rails_app/Gemfile.lock",
|
63
|
+
"spec/rails_app/README",
|
64
|
+
"spec/rails_app/Rakefile",
|
65
|
+
"spec/rails_app/app/controllers/application_controller.rb",
|
66
|
+
"spec/rails_app/app/controllers/home_controller.rb",
|
67
|
+
"spec/rails_app/app/helpers/application_helper.rb",
|
68
|
+
"spec/rails_app/app/helpers/home_helper.rb",
|
69
|
+
"spec/rails_app/app/models/article.rb",
|
70
|
+
"spec/rails_app/app/models/user.rb",
|
71
|
+
"spec/rails_app/app/views/home/index.html.erb",
|
72
|
+
"spec/rails_app/app/views/layouts/application.html.erb",
|
73
|
+
"spec/rails_app/config.ru",
|
74
|
+
"spec/rails_app/config/application.rb",
|
75
|
+
"spec/rails_app/config/boot.rb",
|
76
|
+
"spec/rails_app/config/database.yml",
|
77
|
+
"spec/rails_app/config/environment.rb",
|
78
|
+
"spec/rails_app/config/environments/development.rb",
|
79
|
+
"spec/rails_app/config/environments/production.rb",
|
80
|
+
"spec/rails_app/config/environments/test.rb",
|
81
|
+
"spec/rails_app/config/initializers/backtrace_silencers.rb",
|
82
|
+
"spec/rails_app/config/initializers/devise.rb",
|
83
|
+
"spec/rails_app/config/initializers/governor.rb",
|
84
|
+
"spec/rails_app/config/initializers/inflections.rb",
|
85
|
+
"spec/rails_app/config/initializers/mime_types.rb",
|
86
|
+
"spec/rails_app/config/initializers/secret_token.rb",
|
87
|
+
"spec/rails_app/config/initializers/session_store.rb",
|
88
|
+
"spec/rails_app/config/locales/devise.en.yml",
|
89
|
+
"spec/rails_app/config/locales/en.yml",
|
90
|
+
"spec/rails_app/config/routes.rb",
|
91
|
+
"spec/rails_app/db/migrate/20110329032256_devise_create_users.rb",
|
92
|
+
"spec/rails_app/db/migrate/20110330020108_governor_create_articles.rb",
|
93
|
+
"spec/rails_app/db/schema.rb",
|
94
|
+
"spec/rails_app/db/seeds.rb",
|
95
|
+
"spec/rails_app/lib/tasks/.gitkeep",
|
96
|
+
"spec/rails_app/public/404.html",
|
97
|
+
"spec/rails_app/public/422.html",
|
98
|
+
"spec/rails_app/public/500.html",
|
99
|
+
"spec/rails_app/public/favicon.ico",
|
100
|
+
"spec/rails_app/public/images/rails.png",
|
101
|
+
"spec/rails_app/public/javascripts/application.js",
|
102
|
+
"spec/rails_app/public/javascripts/controls.js",
|
103
|
+
"spec/rails_app/public/javascripts/dragdrop.js",
|
104
|
+
"spec/rails_app/public/javascripts/effects.js",
|
105
|
+
"spec/rails_app/public/javascripts/prototype.js",
|
106
|
+
"spec/rails_app/public/javascripts/rails.js",
|
107
|
+
"spec/rails_app/public/robots.txt",
|
108
|
+
"spec/rails_app/public/stylesheets/.gitkeep",
|
109
|
+
"spec/rails_app/script/rails",
|
110
|
+
"spec/rails_app/spec/factories.rb",
|
111
|
+
"spec/rails_app/vendor/plugins/.gitkeep",
|
112
|
+
"spec/spec_helper.rb"
|
113
|
+
]
|
114
|
+
s.homepage = %q{http://github.com/carpeliam/governor}
|
115
|
+
s.licenses = ["MIT"]
|
116
|
+
s.require_paths = ["lib"]
|
117
|
+
s.rubygems_version = %q{1.3.7}
|
118
|
+
s.summary = %q{A pluggable blogging system for Rails 3.}
|
119
|
+
s.test_files = [
|
120
|
+
"spec/controllers/governor/articles_controller_spec.rb",
|
121
|
+
"spec/governor/article_spec.rb",
|
122
|
+
"spec/governor/plugin_manager_spec.rb",
|
123
|
+
"spec/governor_spec.rb",
|
124
|
+
"spec/rails_app/app/controllers/application_controller.rb",
|
125
|
+
"spec/rails_app/app/controllers/home_controller.rb",
|
126
|
+
"spec/rails_app/app/helpers/application_helper.rb",
|
127
|
+
"spec/rails_app/app/helpers/home_helper.rb",
|
128
|
+
"spec/rails_app/app/models/article.rb",
|
129
|
+
"spec/rails_app/app/models/user.rb",
|
130
|
+
"spec/rails_app/config/application.rb",
|
131
|
+
"spec/rails_app/config/boot.rb",
|
132
|
+
"spec/rails_app/config/environment.rb",
|
133
|
+
"spec/rails_app/config/environments/development.rb",
|
134
|
+
"spec/rails_app/config/environments/production.rb",
|
135
|
+
"spec/rails_app/config/environments/test.rb",
|
136
|
+
"spec/rails_app/config/initializers/backtrace_silencers.rb",
|
137
|
+
"spec/rails_app/config/initializers/devise.rb",
|
138
|
+
"spec/rails_app/config/initializers/governor.rb",
|
139
|
+
"spec/rails_app/config/initializers/inflections.rb",
|
140
|
+
"spec/rails_app/config/initializers/mime_types.rb",
|
141
|
+
"spec/rails_app/config/initializers/secret_token.rb",
|
142
|
+
"spec/rails_app/config/initializers/session_store.rb",
|
143
|
+
"spec/rails_app/config/routes.rb",
|
144
|
+
"spec/rails_app/db/migrate/20110329032256_devise_create_users.rb",
|
145
|
+
"spec/rails_app/db/migrate/20110330020108_governor_create_articles.rb",
|
146
|
+
"spec/rails_app/db/schema.rb",
|
147
|
+
"spec/rails_app/db/seeds.rb",
|
148
|
+
"spec/rails_app/spec/factories.rb",
|
149
|
+
"spec/spec_helper.rb"
|
150
|
+
]
|
151
|
+
|
152
|
+
if s.respond_to? :specification_version then
|
153
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
154
|
+
s.specification_version = 3
|
155
|
+
|
156
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
157
|
+
s.add_runtime_dependency(%q<rails>, ["~> 3.0.5"])
|
158
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
159
|
+
s.add_development_dependency(%q<sqlite3>, [">= 0"])
|
160
|
+
s.add_development_dependency(%q<rspec-rails>, [">= 0"])
|
161
|
+
s.add_development_dependency(%q<mocha>, [">= 0"])
|
162
|
+
s.add_development_dependency(%q<factory_girl>, ["~> 2.0.0.beta"])
|
163
|
+
s.add_development_dependency(%q<factory_girl_rails>, ["~> 1.1.beta"])
|
164
|
+
s.add_development_dependency(%q<activerecord-nulldb-adapter>, [">= 0"])
|
165
|
+
s.add_development_dependency(%q<will_paginate>, ["~> 3.0.beta"])
|
166
|
+
s.add_development_dependency(%q<devise>, [">= 0"])
|
167
|
+
s.add_development_dependency(%q<governor>, [">= 0"])
|
168
|
+
s.add_development_dependency(%q<dynamic_form>, [">= 0"])
|
169
|
+
else
|
170
|
+
s.add_dependency(%q<rails>, ["~> 3.0.5"])
|
171
|
+
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
172
|
+
s.add_dependency(%q<sqlite3>, [">= 0"])
|
173
|
+
s.add_dependency(%q<rspec-rails>, [">= 0"])
|
174
|
+
s.add_dependency(%q<mocha>, [">= 0"])
|
175
|
+
s.add_dependency(%q<factory_girl>, ["~> 2.0.0.beta"])
|
176
|
+
s.add_dependency(%q<factory_girl_rails>, ["~> 1.1.beta"])
|
177
|
+
s.add_dependency(%q<activerecord-nulldb-adapter>, [">= 0"])
|
178
|
+
s.add_dependency(%q<will_paginate>, ["~> 3.0.beta"])
|
179
|
+
s.add_dependency(%q<devise>, [">= 0"])
|
180
|
+
s.add_dependency(%q<governor>, [">= 0"])
|
181
|
+
s.add_dependency(%q<dynamic_form>, [">= 0"])
|
182
|
+
end
|
183
|
+
else
|
184
|
+
s.add_dependency(%q<rails>, ["~> 3.0.5"])
|
185
|
+
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
186
|
+
s.add_dependency(%q<sqlite3>, [">= 0"])
|
187
|
+
s.add_dependency(%q<rspec-rails>, [">= 0"])
|
188
|
+
s.add_dependency(%q<mocha>, [">= 0"])
|
189
|
+
s.add_dependency(%q<factory_girl>, ["~> 2.0.0.beta"])
|
190
|
+
s.add_dependency(%q<factory_girl_rails>, ["~> 1.1.beta"])
|
191
|
+
s.add_dependency(%q<activerecord-nulldb-adapter>, [">= 0"])
|
192
|
+
s.add_dependency(%q<will_paginate>, ["~> 3.0.beta"])
|
193
|
+
s.add_dependency(%q<devise>, [">= 0"])
|
194
|
+
s.add_dependency(%q<governor>, [">= 0"])
|
195
|
+
s.add_dependency(%q<dynamic_form>, [">= 0"])
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'rails/generators/migration'
|
3
|
+
module Governor
|
4
|
+
class CreateArticlesGenerator < Rails::Generators::Base
|
5
|
+
include Rails::Generators::Migration
|
6
|
+
source_root File.expand_path('../templates', __FILE__)
|
7
|
+
argument :class_name, :type => :string, :default => 'Article'
|
8
|
+
|
9
|
+
def self.next_migration_number(dirname)
|
10
|
+
if ActiveRecord::Base.timestamped_migrations
|
11
|
+
Time.new.utc.strftime("%Y%m%d%H%M%S")
|
12
|
+
else
|
13
|
+
"%.3d" % (current_migration_number(dirname) + 1)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def create_model
|
18
|
+
template 'models/article.rb', "app/models/#{table_name.singularize}.rb"
|
19
|
+
end
|
20
|
+
|
21
|
+
def create_migration_file
|
22
|
+
migration_template 'migrations/create_articles.rb', "db/migrate/governor_create_#{table_name}.rb", :skip => true
|
23
|
+
end
|
24
|
+
|
25
|
+
def add_route
|
26
|
+
# route "resources :#{table_name}, :controller => 'governor/articles'"
|
27
|
+
route "governate :#{table_name}"
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
def table_name
|
32
|
+
@table_name ||= class_name.tableize
|
33
|
+
end
|
34
|
+
|
35
|
+
def model_name
|
36
|
+
@model_name ||= class_name.camelize
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'rails/generators/migration'
|
3
|
+
module Governor
|
4
|
+
class MigrateGenerator < Rails::Generators::Base
|
5
|
+
include Rails::Generators::Migration
|
6
|
+
source_root File.expand_path('../templates', __FILE__)
|
7
|
+
|
8
|
+
def self.next_migration_number(dirname)
|
9
|
+
if ActiveRecord::Base.timestamped_migrations
|
10
|
+
Time.new.utc.strftime("%Y%m%d%H%M%S")
|
11
|
+
else
|
12
|
+
"%.3d" % (current_migration_number(dirname) + 1)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def create_migration_file
|
17
|
+
PluginManager.plugins.each do |plugin|
|
18
|
+
plugin.migrations.each do |migration|
|
19
|
+
sleep 1 # advance the file name
|
20
|
+
migration_template File.expand_path(migration), "db/migrate/#{File.basename(migration)}", :skip => true
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
GOVERNOR_AUTHOR = Proc.new do |actor|
|
2
|
+
if actor.respond_to?(:current_user)
|
3
|
+
actor.current_user
|
4
|
+
else
|
5
|
+
raise "Set up GOVERNOR_AUTHOR in #{File.expand_path(__FILE__)}"
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
Governor.authorize_if do |actor, action, article|
|
10
|
+
case action.to_sym
|
11
|
+
when :new, :create
|
12
|
+
# if respond_to?(:user_signed_in?)
|
13
|
+
actor.user_signed_in?
|
14
|
+
# else
|
15
|
+
# raise "Set up Governor.authorize_if in #{File.expand_path(__FILE__)}"
|
16
|
+
# end
|
17
|
+
when :edit, :update, :destroy
|
18
|
+
article.author == GOVERNOR_AUTHOR.call(actor)
|
19
|
+
else
|
20
|
+
raise ArgumentError.new('action must be new, create, edit, update, or destroy')
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class GovernorCreate<%= model_name.pluralize %> < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :<%= table_name %> do |t|
|
4
|
+
t.string :title, :description
|
5
|
+
t.string :format, :default => 'default'
|
6
|
+
t.text :post
|
7
|
+
t.references :author, :polymorphic => true
|
8
|
+
t.timestamps
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.down
|
13
|
+
drop_table :<%= table_name %>
|
14
|
+
end
|
15
|
+
end
|
data/lib/governor.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'governor/plugin'
|
2
|
+
require 'governor/plugin_manager'
|
3
|
+
require 'governor/article'
|
4
|
+
require 'governor/formatters'
|
5
|
+
require 'governor/mapping'
|
6
|
+
|
7
|
+
require 'governor/controllers/helpers'
|
8
|
+
|
9
|
+
require 'rails'
|
10
|
+
require 'governor/rails'
|
11
|
+
|
12
|
+
|
13
|
+
module Governor
|
14
|
+
|
15
|
+
mattr_accessor :resources
|
16
|
+
@@resources = {}
|
17
|
+
def self.map(resource, options = {})
|
18
|
+
self.resources[resource] = Governor::Mapping.new(resource, options)
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.setup
|
22
|
+
yield self
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.authorize_if(&blk)
|
26
|
+
@@authz_rules = blk
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.authorized?(actor, action, article=nil)
|
30
|
+
@@authz_rules.call(actor, action, article)
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Governor
|
2
|
+
module Article
|
3
|
+
def self.included(base)
|
4
|
+
base.belongs_to :author, :polymorphic => true
|
5
|
+
|
6
|
+
def base.find_all_by_date(year, month = nil, day = nil, page = 1)
|
7
|
+
from, to = self.time_delta(year, month, day)
|
8
|
+
conditions = ['created_at BETWEEN ? AND ?', from, to]
|
9
|
+
paginate :page => page, :conditions => conditions, :order => 'created_at DESC'
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
def base.time_delta(year, month = nil, day = nil)
|
14
|
+
from = Time.mktime(year, month || 1, day || 1)
|
15
|
+
to = if day.present?
|
16
|
+
from.end_of_day
|
17
|
+
elsif month.present?
|
18
|
+
from.end_of_month
|
19
|
+
else
|
20
|
+
from.end_of_year
|
21
|
+
end
|
22
|
+
[from, to]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Governor
|
2
|
+
module Controllers
|
3
|
+
module Helpers
|
4
|
+
def resources_url
|
5
|
+
url_for :controller => mapping.controller, :governor_mapping => params[:governor_mapping], :action => 'index'
|
6
|
+
end
|
7
|
+
|
8
|
+
def edit_resource_url(resource)
|
9
|
+
url_for :controller => mapping.controller, :governor_mapping => params[:governor_mapping], :action => 'edit', :id => resource.id
|
10
|
+
end
|
11
|
+
|
12
|
+
def resource
|
13
|
+
instance_variable_get("@#{mapping.singular}")
|
14
|
+
end
|
15
|
+
|
16
|
+
def resource_sym
|
17
|
+
mapping.singular
|
18
|
+
end
|
19
|
+
|
20
|
+
def resources
|
21
|
+
instance_variable_get("@#{mapping.plural}")
|
22
|
+
end
|
23
|
+
|
24
|
+
def model_class
|
25
|
+
@model_class ||= mapping.to
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
def set_resources(resources)
|
30
|
+
instance_variable_set("@#{mapping.plural}", resources)
|
31
|
+
end
|
32
|
+
|
33
|
+
def set_resource(resource)
|
34
|
+
instance_variable_set("@#{mapping.singular}", resource)
|
35
|
+
end
|
36
|
+
|
37
|
+
def mapping
|
38
|
+
Governor.resources[params[:governor_mapping]]
|
39
|
+
end
|
40
|
+
|
41
|
+
def init_resource
|
42
|
+
set_resource model_class.find(params[:id])
|
43
|
+
end
|
44
|
+
|
45
|
+
def authorize_governor!
|
46
|
+
if defined?(resource)
|
47
|
+
redirect_to root_path unless governor_authorized?(action_name, resource)
|
48
|
+
else
|
49
|
+
send("authenticate_#{Devise.default_scope}!") unless governor_authorized?(action_name)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def governor_authorized?(action, article=nil)
|
54
|
+
Governor.authorized?(self, action, article)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|