governor 0.3.1 → 0.4.0
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/Gemfile +0 -1
- data/Gemfile.lock +1 -3
- data/README.rdoc +2 -3
- data/VERSION +1 -1
- data/app/controllers/governor/articles_controller.rb +8 -4
- data/app/helpers/governor_helper.rb +2 -10
- data/app/views/governor/articles/index.html.erb +1 -1
- data/config/locales/en.yml +5 -5
- data/governor.gemspec +3 -6
- data/lib/generators/governor/{install_generator.rb → configure_generator.rb} +1 -1
- data/lib/generators/governor/templates/governor.rb +15 -7
- data/lib/governor.rb +38 -1
- data/lib/governor/article.rb +10 -1
- data/spec/controllers/governor/articles_controller_spec.rb +3 -0
- data/spec/rails_app/Gemfile +0 -2
- data/spec/rails_app/Gemfile.lock +1 -3
- data/spec/rails_app/app/models/article.rb +0 -2
- data/spec/rails_app/config/locales/en.yml +2 -0
- metadata +12 -28
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ./
|
3
3
|
specs:
|
4
|
-
governor (0.3.
|
4
|
+
governor (0.3.1)
|
5
5
|
rails (~> 3.0.5)
|
6
6
|
|
7
7
|
GEM
|
@@ -103,7 +103,6 @@ GEM
|
|
103
103
|
tzinfo (0.3.24)
|
104
104
|
warden (1.0.3)
|
105
105
|
rack (>= 1.0.0)
|
106
|
-
will_paginate (3.0.pre2)
|
107
106
|
|
108
107
|
PLATFORMS
|
109
108
|
ruby
|
@@ -120,4 +119,3 @@ DEPENDENCIES
|
|
120
119
|
rails (~> 3.0.5)
|
121
120
|
rspec-rails
|
122
121
|
sqlite3
|
123
|
-
will_paginate (~> 3.0.beta)
|
data/README.rdoc
CHANGED
@@ -11,10 +11,9 @@ try the specs, they're fresh!
|
|
11
11
|
== Dependencies
|
12
12
|
|
13
13
|
* ActiveRecord
|
14
|
-
* will_paginate[https://github.com/mislav/will_paginate]
|
15
14
|
|
16
|
-
|
17
|
-
|
15
|
+
By 1.0, I'd like to make it possible to use Governor with other ORMs, but I'm
|
16
|
+
not sure when that'll be.
|
18
17
|
|
19
18
|
== Setting Up
|
20
19
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
@@ -15,7 +15,11 @@ class Governor::ArticlesController < ApplicationController
|
|
15
15
|
# GET /articles
|
16
16
|
# GET /articles.xml
|
17
17
|
def index
|
18
|
-
set_resources model_class.paginate
|
18
|
+
set_resources(if model_class.respond_to?(:paginate)
|
19
|
+
model_class.paginate :page => params[:page], :order => 'created_at DESC'
|
20
|
+
else
|
21
|
+
model_class.all :order => 'created_at DESC'
|
22
|
+
end)
|
19
23
|
respond_with resources
|
20
24
|
end
|
21
25
|
|
@@ -43,7 +47,7 @@ class Governor::ArticlesController < ApplicationController
|
|
43
47
|
set_resource model_class.new(params[mapping.singular])
|
44
48
|
resource.author = the_governor
|
45
49
|
if resource.save
|
46
|
-
flash[:notice] =
|
50
|
+
flash[:notice] = t('governor.article_created', :resource_type => mapping.humanize)
|
47
51
|
end
|
48
52
|
respond_with resource
|
49
53
|
end
|
@@ -52,7 +56,7 @@ class Governor::ArticlesController < ApplicationController
|
|
52
56
|
# PUT /articles/1.xml
|
53
57
|
def update
|
54
58
|
if resource.update_attributes(params[mapping.singular])
|
55
|
-
flash[:notice] =
|
59
|
+
flash[:notice] = t('governor.article_updated', :resource_type => mapping.humanize)
|
56
60
|
end
|
57
61
|
respond_with resource
|
58
62
|
end
|
@@ -61,7 +65,7 @@ class Governor::ArticlesController < ApplicationController
|
|
61
65
|
# DELETE /articles/1.xml
|
62
66
|
def destroy
|
63
67
|
resource.destroy
|
64
|
-
flash[:notice] =
|
68
|
+
flash[:notice] = t('governor.article_destroyed', :resource_type => mapping.humanize)
|
65
69
|
respond_with resource
|
66
70
|
end
|
67
71
|
|
@@ -1,6 +1,4 @@
|
|
1
1
|
module GovernorHelper
|
2
|
-
@@months = %w(January February March April May June July August September October November December)
|
3
|
-
|
4
2
|
Governor::PluginManager.plugins.map{|p| p.helpers }.flatten.each do |mod|
|
5
3
|
include mod.constantize # FIXME this feels pretty dirty, there has to be a better way
|
6
4
|
end
|
@@ -14,14 +12,8 @@ module GovernorHelper
|
|
14
12
|
return output.html_safe
|
15
13
|
end
|
16
14
|
|
17
|
-
def get_date_label
|
18
|
-
|
19
|
-
"#{@@months[params[:month].to_i - 1]} #{params[:day]}, #{params[:year]}"
|
20
|
-
elsif not params[:month].nil?
|
21
|
-
"#{@@months[params[:month].to_i - 1]} #{params[:year]}"
|
22
|
-
else
|
23
|
-
params[:year]
|
24
|
-
end
|
15
|
+
def get_date_label(year, month=nil, day=nil)
|
16
|
+
l Date.new(*[year, month, day].compact), :format => "#{'%B ' if month}#{'%d, ' if day}%Y"
|
25
17
|
end
|
26
18
|
|
27
19
|
def show_time_ago(date)
|
data/config/locales/en.yml
CHANGED
@@ -1,6 +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
1
|
en:
|
5
|
-
|
6
|
-
|
2
|
+
governor:
|
3
|
+
article_created: "%{resource_type} was successfully created."
|
4
|
+
article_updated: "%{resource_type} was successfully updated."
|
5
|
+
article_destroyed: "%{resource_type} was successfully deleted."
|
6
|
+
unauthorized_edit: "You're not allowed to edit this %{resource_type}."
|
data/governor.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{governor}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Liam Morley"]
|
12
|
-
s.date = %q{2011-04-
|
12
|
+
s.date = %q{2011-04-28}
|
13
13
|
s.description = %q{Because Blogojevich would be too tough to remember. It's a pluggable blogging system for Rails 3.}
|
14
14
|
s.email = %q{liam@carpeliam.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -37,8 +37,8 @@ Gem::Specification.new do |s|
|
|
37
37
|
"config/locales/en.yml",
|
38
38
|
"governor.gemspec",
|
39
39
|
"lib/generators/USAGE",
|
40
|
+
"lib/generators/governor/configure_generator.rb",
|
40
41
|
"lib/generators/governor/create_articles_generator.rb",
|
41
|
-
"lib/generators/governor/install_generator.rb",
|
42
42
|
"lib/generators/governor/migrate_generator.rb",
|
43
43
|
"lib/generators/governor/templates/governor.rb",
|
44
44
|
"lib/generators/governor/templates/migrations/create_articles.rb",
|
@@ -171,7 +171,6 @@ Gem::Specification.new do |s|
|
|
171
171
|
s.add_development_dependency(%q<factory_girl>, ["~> 2.0.0.beta"])
|
172
172
|
s.add_development_dependency(%q<factory_girl_rails>, ["~> 1.1.beta"])
|
173
173
|
s.add_development_dependency(%q<activerecord-nulldb-adapter>, [">= 0"])
|
174
|
-
s.add_development_dependency(%q<will_paginate>, ["~> 3.0.beta"])
|
175
174
|
s.add_development_dependency(%q<devise>, [">= 0"])
|
176
175
|
s.add_development_dependency(%q<governor>, [">= 0"])
|
177
176
|
s.add_development_dependency(%q<dynamic_form>, [">= 0"])
|
@@ -184,7 +183,6 @@ Gem::Specification.new do |s|
|
|
184
183
|
s.add_dependency(%q<factory_girl>, ["~> 2.0.0.beta"])
|
185
184
|
s.add_dependency(%q<factory_girl_rails>, ["~> 1.1.beta"])
|
186
185
|
s.add_dependency(%q<activerecord-nulldb-adapter>, [">= 0"])
|
187
|
-
s.add_dependency(%q<will_paginate>, ["~> 3.0.beta"])
|
188
186
|
s.add_dependency(%q<devise>, [">= 0"])
|
189
187
|
s.add_dependency(%q<governor>, [">= 0"])
|
190
188
|
s.add_dependency(%q<dynamic_form>, [">= 0"])
|
@@ -198,7 +196,6 @@ Gem::Specification.new do |s|
|
|
198
196
|
s.add_dependency(%q<factory_girl>, ["~> 2.0.0.beta"])
|
199
197
|
s.add_dependency(%q<factory_girl_rails>, ["~> 1.1.beta"])
|
200
198
|
s.add_dependency(%q<activerecord-nulldb-adapter>, [">= 0"])
|
201
|
-
s.add_dependency(%q<will_paginate>, ["~> 3.0.beta"])
|
202
199
|
s.add_dependency(%q<devise>, [">= 0"])
|
203
200
|
s.add_dependency(%q<governor>, [">= 0"])
|
204
201
|
s.add_dependency(%q<dynamic_form>, [">= 0"])
|
@@ -2,10 +2,12 @@
|
|
2
2
|
|
3
3
|
# How to reference the author of an article
|
4
4
|
Governor.author = Proc.new do
|
5
|
-
if
|
5
|
+
if defined?(Devise)
|
6
|
+
send("current_#{Devise.default_scope}")
|
7
|
+
elsif respond_to?(:current_user)
|
6
8
|
current_user
|
7
9
|
else
|
8
|
-
raise "
|
10
|
+
raise "Please define Governor.author. Run `rails generator governor:configure` to install an initializer."
|
9
11
|
end
|
10
12
|
end
|
11
13
|
|
@@ -13,10 +15,14 @@ end
|
|
13
15
|
Governor.authorize_if do |action, article|
|
14
16
|
case action.to_sym
|
15
17
|
when :new, :create
|
16
|
-
if respond_to?(
|
17
|
-
|
18
|
+
if defined?(Devise) && respond_to?("#{Devise.default_scope}_signed_in?")
|
19
|
+
send("#{Devise.default_scope}_signed_in?")
|
20
|
+
elsif respond_to?(:signed_in?)
|
21
|
+
signed_in?
|
22
|
+
elsif respond_to?(:current_user)
|
23
|
+
current_user.present?
|
18
24
|
else
|
19
|
-
raise "
|
25
|
+
raise "Please define Governor.authorize_if. Run `rails generator governor:configure` to install an initializer."
|
20
26
|
end
|
21
27
|
when :edit, :update, :destroy
|
22
28
|
article.author == instance_eval(&Governor.author)
|
@@ -28,9 +34,11 @@ end
|
|
28
34
|
# What should Governor do if someone tries to do something they weren't
|
29
35
|
# authorized to do?
|
30
36
|
Governor.if_not_allowed do
|
31
|
-
if
|
37
|
+
if defined?(Devise)
|
32
38
|
send("authenticate_#{Devise.default_scope}!")
|
39
|
+
elsif respond_to?(:deny_access)
|
40
|
+
deny_access
|
33
41
|
else
|
34
|
-
|
42
|
+
redirect_to :root
|
35
43
|
end
|
36
44
|
end
|
data/lib/governor.rb
CHANGED
@@ -16,7 +16,8 @@ module Governor
|
|
16
16
|
|
17
17
|
# Specifies the action that should occur if an unpermitted action is
|
18
18
|
# attempted. Usually specified within the initializer, though evaluated in
|
19
|
-
# the scope of a Rails session.
|
19
|
+
# the scope of a Rails session. If not defined, the default is to redirect
|
20
|
+
# to the root path.
|
20
21
|
#
|
21
22
|
# Example:
|
22
23
|
#
|
@@ -29,6 +30,15 @@ module Governor
|
|
29
30
|
# end
|
30
31
|
#
|
31
32
|
mattr_accessor :if_not_allowed
|
33
|
+
Governor.if_not_allowed do
|
34
|
+
if defined?(Devise)
|
35
|
+
send("authenticate_#{Devise.default_scope}!")
|
36
|
+
elsif respond_to?(:deny_access)
|
37
|
+
deny_access
|
38
|
+
else
|
39
|
+
redirect_to :root
|
40
|
+
end
|
41
|
+
end
|
32
42
|
|
33
43
|
# Specifies how to reference the author of an article. Usually specified
|
34
44
|
# within the initializer, though evaluated in the scope of a Rails session.
|
@@ -44,6 +54,15 @@ module Governor
|
|
44
54
|
# end
|
45
55
|
#
|
46
56
|
mattr_accessor :author
|
57
|
+
Governor.author = Proc.new do
|
58
|
+
if defined?(Devise)
|
59
|
+
send("current_#{Devise.default_scope}")
|
60
|
+
elsif respond_to?(:current_user)
|
61
|
+
current_user
|
62
|
+
else
|
63
|
+
raise "Please define Governor.author. Run `rails generator governor:configure` to install an initializer."
|
64
|
+
end
|
65
|
+
end
|
47
66
|
|
48
67
|
# Maps a given resource name with a pair of options, to be supplied as
|
49
68
|
# arguments to the routes. Usually called from within +governate+.
|
@@ -75,4 +94,22 @@ module Governor
|
|
75
94
|
def self.authorize_if(&blk)
|
76
95
|
@@authorization_rules = blk
|
77
96
|
end
|
97
|
+
Governor.authorize_if do |action, article|
|
98
|
+
case action.to_sym
|
99
|
+
when :new, :create
|
100
|
+
if defined?(Devise) && respond_to?("#{Devise.default_scope}_signed_in?")
|
101
|
+
send("#{Devise.default_scope}_signed_in?")
|
102
|
+
elsif respond_to?(:signed_in?)
|
103
|
+
signed_in?
|
104
|
+
elsif respond_to?(:current_user)
|
105
|
+
current_user.present?
|
106
|
+
else
|
107
|
+
raise "Please define Governor.authorize_if. Run `rails generator governor:configure` to install an initializer."
|
108
|
+
end
|
109
|
+
when :edit, :update, :destroy
|
110
|
+
article.author == instance_eval(&Governor.author)
|
111
|
+
else
|
112
|
+
raise ArgumentError.new('action must be new, create, edit, update, or destroy')
|
113
|
+
end
|
114
|
+
end
|
78
115
|
end
|
data/lib/governor/article.rb
CHANGED
@@ -6,6 +6,11 @@ module Governor
|
|
6
6
|
base.belongs_to :author, :polymorphic => true
|
7
7
|
base.validates_presence_of :author, :title, :post
|
8
8
|
|
9
|
+
if defined?(WillPaginate)
|
10
|
+
base.cattr_reader :per_page
|
11
|
+
base.class_eval "@@per_page = 10"
|
12
|
+
end
|
13
|
+
|
9
14
|
Governor::PluginManager.plugins.each do |plugin|
|
10
15
|
plugin.include_in_model(base)
|
11
16
|
end
|
@@ -17,7 +22,11 @@ module Governor
|
|
17
22
|
def base.find_all_by_date(year, month = nil, day = nil, page = 1)
|
18
23
|
from, to = self.time_delta(year, month, day)
|
19
24
|
conditions = ['created_at BETWEEN ? AND ?', from, to]
|
20
|
-
|
25
|
+
if model_class.respond_to?(:paginate)
|
26
|
+
paginate :page => page, :conditions => conditions, :order => 'created_at DESC'
|
27
|
+
else
|
28
|
+
all :conditions => conditions, :order => 'created_at DESC'
|
29
|
+
end
|
21
30
|
end
|
22
31
|
|
23
32
|
private
|
@@ -109,6 +109,7 @@ module Governor
|
|
109
109
|
assigns[:article].should_not be_a_new_record
|
110
110
|
assigns[:article].author.should == @user
|
111
111
|
response.should redirect_to(assigns[:article])
|
112
|
+
flash[:notice].should == 'Article was successfully created.'
|
112
113
|
end
|
113
114
|
end
|
114
115
|
end
|
@@ -126,6 +127,7 @@ module Governor
|
|
126
127
|
it "updates the article" do
|
127
128
|
put :update, :governor_mapping => :articles, :id => @article.id, :article => {:title => 'I am awesome, you are awesome'}
|
128
129
|
assigns[:article].title.should == 'I am awesome, you are awesome'
|
130
|
+
flash[:notice].should == 'Article was successfully updated.'
|
129
131
|
end
|
130
132
|
end
|
131
133
|
end
|
@@ -146,6 +148,7 @@ module Governor
|
|
146
148
|
assigns[:article].should be_destroyed
|
147
149
|
::Article.count.should == 0
|
148
150
|
response.should redirect_to(articles_path)
|
151
|
+
flash[:notice].should == 'Article was successfully deleted, and this is a custom localized message.'
|
149
152
|
end
|
150
153
|
end
|
151
154
|
end
|
data/spec/rails_app/Gemfile
CHANGED
data/spec/rails_app/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ../..
|
3
3
|
specs:
|
4
|
-
governor (0.3.
|
4
|
+
governor (0.3.1)
|
5
5
|
rails (~> 3.0.5)
|
6
6
|
|
7
7
|
GEM
|
@@ -77,7 +77,6 @@ GEM
|
|
77
77
|
tzinfo (0.3.25)
|
78
78
|
warden (1.0.3)
|
79
79
|
rack (>= 1.0.0)
|
80
|
-
will_paginate (3.0.pre2)
|
81
80
|
|
82
81
|
PLATFORMS
|
83
82
|
ruby
|
@@ -88,4 +87,3 @@ DEPENDENCIES
|
|
88
87
|
governor!
|
89
88
|
rails (= 3.0.5)
|
90
89
|
sqlite3
|
91
|
-
will_paginate (~> 3.0.beta)
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: governor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 4
|
9
|
+
- 0
|
10
|
+
version: 0.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Liam Morley
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-04-
|
18
|
+
date: 2011-04-28 00:00:00 -04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -139,27 +139,11 @@ dependencies:
|
|
139
139
|
- 0
|
140
140
|
version: "0"
|
141
141
|
requirement: *id008
|
142
|
-
- !ruby/object:Gem::Dependency
|
143
|
-
type: :development
|
144
|
-
prerelease: false
|
145
|
-
name: will_paginate
|
146
|
-
version_requirements: &id009 !ruby/object:Gem::Requirement
|
147
|
-
none: false
|
148
|
-
requirements:
|
149
|
-
- - ~>
|
150
|
-
- !ruby/object:Gem::Version
|
151
|
-
hash: 31098121
|
152
|
-
segments:
|
153
|
-
- 3
|
154
|
-
- 0
|
155
|
-
- beta
|
156
|
-
version: 3.0.beta
|
157
|
-
requirement: *id009
|
158
142
|
- !ruby/object:Gem::Dependency
|
159
143
|
type: :development
|
160
144
|
prerelease: false
|
161
145
|
name: devise
|
162
|
-
version_requirements: &
|
146
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
163
147
|
none: false
|
164
148
|
requirements:
|
165
149
|
- - ">="
|
@@ -168,12 +152,12 @@ dependencies:
|
|
168
152
|
segments:
|
169
153
|
- 0
|
170
154
|
version: "0"
|
171
|
-
requirement: *
|
155
|
+
requirement: *id009
|
172
156
|
- !ruby/object:Gem::Dependency
|
173
157
|
type: :development
|
174
158
|
prerelease: false
|
175
159
|
name: governor
|
176
|
-
version_requirements: &
|
160
|
+
version_requirements: &id010 !ruby/object:Gem::Requirement
|
177
161
|
none: false
|
178
162
|
requirements:
|
179
163
|
- - ">="
|
@@ -182,12 +166,12 @@ dependencies:
|
|
182
166
|
segments:
|
183
167
|
- 0
|
184
168
|
version: "0"
|
185
|
-
requirement: *
|
169
|
+
requirement: *id010
|
186
170
|
- !ruby/object:Gem::Dependency
|
187
171
|
type: :development
|
188
172
|
prerelease: false
|
189
173
|
name: dynamic_form
|
190
|
-
version_requirements: &
|
174
|
+
version_requirements: &id011 !ruby/object:Gem::Requirement
|
191
175
|
none: false
|
192
176
|
requirements:
|
193
177
|
- - ">="
|
@@ -196,7 +180,7 @@ dependencies:
|
|
196
180
|
segments:
|
197
181
|
- 0
|
198
182
|
version: "0"
|
199
|
-
requirement: *
|
183
|
+
requirement: *id011
|
200
184
|
description: Because Blogojevich would be too tough to remember. It's a pluggable blogging system for Rails 3.
|
201
185
|
email: liam@carpeliam.com
|
202
186
|
executables: []
|
@@ -227,8 +211,8 @@ files:
|
|
227
211
|
- config/locales/en.yml
|
228
212
|
- governor.gemspec
|
229
213
|
- lib/generators/USAGE
|
214
|
+
- lib/generators/governor/configure_generator.rb
|
230
215
|
- lib/generators/governor/create_articles_generator.rb
|
231
|
-
- lib/generators/governor/install_generator.rb
|
232
216
|
- lib/generators/governor/migrate_generator.rb
|
233
217
|
- lib/generators/governor/templates/governor.rb
|
234
218
|
- lib/generators/governor/templates/migrations/create_articles.rb
|