outpost-cms 0.0.3
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/MIT-LICENSE +20 -0
- data/README.md +295 -0
- data/Rakefile +26 -0
- data/app/assets/images/glyphicons-halflings-red.png +0 -0
- data/app/assets/javascripts/outpost/application.js +1 -0
- data/app/assets/javascripts/outpost/auto_slug_field.js.coffee +53 -0
- data/app/assets/javascripts/outpost/base.js.coffee +1 -0
- data/app/assets/javascripts/outpost/date_time_input.js.coffee +108 -0
- data/app/assets/javascripts/outpost/field_counter.js.coffee +93 -0
- data/app/assets/javascripts/outpost/field_manager.js.coffee +37 -0
- data/app/assets/javascripts/outpost/global_plugins.js.coffee +87 -0
- data/app/assets/javascripts/outpost/index_manager.js.coffee +88 -0
- data/app/assets/javascripts/outpost/notification.js.coffee +46 -0
- data/app/assets/javascripts/outpost/preview.js.coffee +60 -0
- data/app/assets/javascripts/outpost/templates/date_field.jst.eco +3 -0
- data/app/assets/javascripts/outpost/templates/loading.jst.eco +11 -0
- data/app/assets/javascripts/outpost/templates/slug_generate_button.jst.eco +1 -0
- data/app/assets/javascripts/outpost/templates/time_field.jst.eco +3 -0
- data/app/assets/javascripts/outpost/templates.js +1 -0
- data/app/assets/javascripts/outpost.js +32 -0
- data/app/assets/stylesheets/outpost/_base.css.scss +127 -0
- data/app/assets/stylesheets/outpost/_edit.css.scss +13 -0
- data/app/assets/stylesheets/outpost/_forms.css.scss +116 -0
- data/app/assets/stylesheets/outpost/_index.css.scss +68 -0
- data/app/assets/stylesheets/outpost/_utility.css.scss +16 -0
- data/app/assets/stylesheets/outpost/application.css.scss +1 -0
- data/app/assets/stylesheets/outpost/bootstrap/bootstrap.css.scss +49 -0
- data/app/assets/stylesheets/outpost/bootstrap/datepicker.css.scss +301 -0
- data/app/assets/stylesheets/outpost.css.scss +14 -0
- data/app/controllers/outpost/application_controller.rb +40 -0
- data/app/controllers/outpost/base_controller.rb +3 -0
- data/app/controllers/outpost/errors_controller.rb +9 -0
- data/app/controllers/outpost/home_controller.rb +2 -0
- data/app/controllers/outpost/resource_controller.rb +12 -0
- data/app/controllers/outpost/sessions_controller.rb +36 -0
- data/app/helpers/authorization_helper.rb +44 -0
- data/app/helpers/list_helper.rb +243 -0
- data/app/helpers/outpost_helper.rb +49 -0
- data/app/helpers/render_helper.rb +41 -0
- data/app/helpers/utility_helper.rb +136 -0
- data/app/inputs/date_time_input.rb +12 -0
- data/app/models/permission.rb +18 -0
- data/app/models/user_permission.rb +4 -0
- data/app/views/kaminari/bootstrap/_first_page.html.erb +3 -0
- data/app/views/kaminari/bootstrap/_gap.html.erb +3 -0
- data/app/views/kaminari/bootstrap/_last_page.html.erb +3 -0
- data/app/views/kaminari/bootstrap/_next_page.html.erb +3 -0
- data/app/views/kaminari/bootstrap/_page.html.erb +3 -0
- data/app/views/kaminari/bootstrap/_paginator.html.erb +17 -0
- data/app/views/kaminari/bootstrap/_prev_page.html.erb +3 -0
- data/app/views/layouts/outpost/application.html.erb +101 -0
- data/app/views/layouts/outpost/minimal.html.erb +26 -0
- data/app/views/outpost/errors/error_404.html.erb +1 -0
- data/app/views/outpost/errors/error_500.html.erb +8 -0
- data/app/views/outpost/home/dashboard.html.erb +1 -0
- data/app/views/outpost/resource/_errors.html.erb +11 -0
- data/app/views/outpost/resource/_extra_fields.html.erb +1 -0
- data/app/views/outpost/resource/_form_fields.html.erb +9 -0
- data/app/views/outpost/resource/edit.html.erb +44 -0
- data/app/views/outpost/resource/index.html.erb +22 -0
- data/app/views/outpost/resource/new.html.erb +21 -0
- data/app/views/outpost/resource/search.html.erb +1 -0
- data/app/views/outpost/resource/show.html.erb +1 -0
- data/app/views/outpost/sessions/new.html.erb +16 -0
- data/app/views/outpost/shared/_add_link.html.erb +1 -0
- data/app/views/outpost/shared/_breadcrumbs.html.erb +15 -0
- data/app/views/outpost/shared/_cancel_link.html.erb +1 -0
- data/app/views/outpost/shared/_columns.html.erb +5 -0
- data/app/views/outpost/shared/_filters.html.erb +16 -0
- data/app/views/outpost/shared/_flash_messages.html.erb +6 -0
- data/app/views/outpost/shared/_form_block.html.erb +18 -0
- data/app/views/outpost/shared/_form_nav.html.erb +12 -0
- data/app/views/outpost/shared/_headers.html.erb +16 -0
- data/app/views/outpost/shared/_index_header.html.erb +4 -0
- data/app/views/outpost/shared/_list_table.html.erb +7 -0
- data/app/views/outpost/shared/_modal.html.erb +16 -0
- data/app/views/outpost/shared/_navigation.html.erb +31 -0
- data/app/views/outpost/shared/_notice.html.erb +1 -0
- data/app/views/outpost/shared/_pagination.html.erb +2 -0
- data/app/views/outpost/shared/_preview_errors.html.erb +9 -0
- data/app/views/outpost/shared/_submit_row.html.erb +50 -0
- data/config/routes.rb +4 -0
- data/lib/action_view/helpers/form_builder.rb +71 -0
- data/lib/outpost/breadcrumbs.rb +73 -0
- data/lib/outpost/config.rb +63 -0
- data/lib/outpost/controller/actions.rb +72 -0
- data/lib/outpost/controller/authentication.rb +34 -0
- data/lib/outpost/controller/authorization.rb +28 -0
- data/lib/outpost/controller/callbacks.rb +14 -0
- data/lib/outpost/controller/custom_errors.rb +41 -0
- data/lib/outpost/controller/filtering.rb +22 -0
- data/lib/outpost/controller/helpers.rb +52 -0
- data/lib/outpost/controller/ordering.rb +46 -0
- data/lib/outpost/controller/preferences.rb +71 -0
- data/lib/outpost/controller.rb +123 -0
- data/lib/outpost/engine.rb +10 -0
- data/lib/outpost/helpers/naming.rb +22 -0
- data/lib/outpost/helpers.rb +6 -0
- data/lib/outpost/hook.rb +35 -0
- data/lib/outpost/list/base.rb +78 -0
- data/lib/outpost/list/column.rb +24 -0
- data/lib/outpost/list/filter.rb +37 -0
- data/lib/outpost/list.rb +15 -0
- data/lib/outpost/model/authentication.rb +34 -0
- data/lib/outpost/model/authorization.rb +32 -0
- data/lib/outpost/model/identifier.rb +39 -0
- data/lib/outpost/model/methods.rb +23 -0
- data/lib/outpost/model/naming.rb +63 -0
- data/lib/outpost/model/routing.rb +138 -0
- data/lib/outpost/model/serializer.rb +27 -0
- data/lib/outpost/model.rb +22 -0
- data/lib/outpost/test.rb +21 -0
- data/lib/outpost/version.rb +3 -0
- data/lib/outpost-cms.rb +2 -0
- data/lib/outpost.rb +80 -0
- data/lib/tasks/outpost_tasks.rake +7 -0
- data/spec/controllers/authentication_spec.rb +62 -0
- data/spec/controllers/sessions_controller_spec.rb +99 -0
- data/spec/factories.rb +31 -0
- data/spec/helpers/authorization_helper_spec.rb +47 -0
- data/spec/helpers/list_helper_spec.rb +74 -0
- data/spec/helpers/outpost_helper_spec.rb +5 -0
- data/spec/helpers/render_helper_spec.rb +19 -0
- data/spec/helpers/utility_helper_spec.rb +53 -0
- data/spec/internal/app/controllers/application_controller.rb +3 -0
- data/spec/internal/app/controllers/outpost/people_controller.rb +23 -0
- data/spec/internal/app/controllers/outpost/pidgeons_controller.rb +5 -0
- data/spec/internal/app/controllers/people_controller.rb +9 -0
- data/spec/internal/app/controllers/pidgeons_controller.rb +3 -0
- data/spec/internal/app/models/person.rb +10 -0
- data/spec/internal/app/models/pidgeon.rb +3 -0
- data/spec/internal/app/models/post.rb +4 -0
- data/spec/internal/app/models/user.rb +4 -0
- data/spec/internal/app/views/people/index.html.erb +7 -0
- data/spec/internal/app/views/people/show.html.erb +1 -0
- data/spec/internal/config/database.yml +3 -0
- data/spec/internal/config/initializers/configuration.rb +3 -0
- data/spec/internal/config/initializers/outpost.rb +6 -0
- data/spec/internal/config/routes.rb +16 -0
- data/spec/internal/db/combustion_test.sqlite +0 -0
- data/spec/internal/db/schema.rb +44 -0
- data/spec/internal/db/seeds.rb +14 -0
- data/spec/internal/log/test.log +59277 -0
- data/spec/internal/public/favicon.ico +0 -0
- data/spec/lib/breadcrumbs_spec.rb +54 -0
- data/spec/lib/config_spec.rb +76 -0
- data/spec/lib/controller/actions_spec.rb +5 -0
- data/spec/lib/controller/authorization_spec.rb +4 -0
- data/spec/lib/controller/callbacks_spec.rb +31 -0
- data/spec/lib/controller/helpers_spec.rb +33 -0
- data/spec/lib/controller_spec.rb +25 -0
- data/spec/lib/helpers/naming_spec.rb +10 -0
- data/spec/lib/hook_spec.rb +13 -0
- data/spec/lib/list/base_spec.rb +96 -0
- data/spec/lib/list/column_spec.rb +46 -0
- data/spec/lib/list/filter_spec.rb +44 -0
- data/spec/lib/model/authentication_spec.rb +29 -0
- data/spec/lib/model/authorization_spec.rb +66 -0
- data/spec/lib/model/identifier_spec.rb +51 -0
- data/spec/lib/model/methods_spec.rb +8 -0
- data/spec/lib/model/naming_spec.rb +55 -0
- data/spec/lib/model/routing_spec.rb +166 -0
- data/spec/lib/model/serializer_spec.rb +13 -0
- data/spec/lib/outpost_spec.rb +34 -0
- data/spec/models/permission_spec.rb +10 -0
- data/spec/models/user_permission_spec.rb +4 -0
- data/spec/spec_helper.rb +22 -0
- metadata +411 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Outpost::SessionsController do
|
|
4
|
+
# -------------------------
|
|
5
|
+
|
|
6
|
+
describe "GET /new" do
|
|
7
|
+
it "returns success and renders new template if current_user false" do
|
|
8
|
+
controller.stub(:current_user) { nil }
|
|
9
|
+
get :new
|
|
10
|
+
response.should be_success
|
|
11
|
+
response.should render_template "new"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "redirects to home page if current_user if set" do
|
|
15
|
+
controller.stub(:current_user) { create :user }
|
|
16
|
+
get :new
|
|
17
|
+
response.should redirect_to outpost_root_path
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# -------------------------
|
|
22
|
+
|
|
23
|
+
describe "POST /create" do
|
|
24
|
+
describe "authentication fails" do
|
|
25
|
+
before :each do
|
|
26
|
+
post :create # no params, login info is nil, authentication will fail
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "renders the login form" do
|
|
30
|
+
controller.response.should render_template 'new'
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "sets the flash.now" do
|
|
34
|
+
controller.flash.now[:alert].should be_present
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
describe "authentication passes" do
|
|
39
|
+
let(:user) { create :user, email: "bricker@kpcc.org" }
|
|
40
|
+
|
|
41
|
+
before :each do
|
|
42
|
+
post :create, password: "secret", email: user.email
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "sets the session" do
|
|
46
|
+
controller.session[:user_id].should eq user.id
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "redirects to admin root" do
|
|
50
|
+
controller.response.should redirect_to outpost_root_path
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "sets the flash" do
|
|
54
|
+
controller.flash[:notice].should be_present
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
describe "alternate login attributes" do
|
|
59
|
+
let(:user) { create :user }
|
|
60
|
+
|
|
61
|
+
it "logs in properly" do
|
|
62
|
+
User.should_receive(:find_by_username).with("bricker").and_return(user)
|
|
63
|
+
|
|
64
|
+
Outpost.config.authentication_attribute = :username
|
|
65
|
+
post :create, password: "secret", username: "bricker"
|
|
66
|
+
controller.session[:user_id].should eq user.id
|
|
67
|
+
Outpost.config.authentication_attribute = nil
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# -------------------------
|
|
73
|
+
|
|
74
|
+
describe "DELETE /destroy" do
|
|
75
|
+
let(:user) { create :user }
|
|
76
|
+
|
|
77
|
+
it "unsets @current_user" do
|
|
78
|
+
controller.instance_variable_set(:@current_user, user)
|
|
79
|
+
get :destroy
|
|
80
|
+
controller.instance_variable_get(:@current_user).should eq nil
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it "unsets session" do
|
|
84
|
+
controller.session[:user_id] = user.id
|
|
85
|
+
get :destroy
|
|
86
|
+
controller.session[:user_id].should eq nil
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it "redirects to login page" do
|
|
90
|
+
get :destroy
|
|
91
|
+
controller.response.should redirect_to outpost_login_path
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it "sets the flash" do
|
|
95
|
+
get :destroy
|
|
96
|
+
controller.flash[:notice].should be_present
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
data/spec/factories.rb
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
FactoryGirl.define do
|
|
2
|
+
factory :post do
|
|
3
|
+
sequence(:title) { |n| "Post #{n}" }
|
|
4
|
+
body "Lorem, etc."
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
factory :person do
|
|
8
|
+
name "Marty McFly"
|
|
9
|
+
email "backin@time.com"
|
|
10
|
+
location "Hill Valley, California"
|
|
11
|
+
age 17
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
factory :pidgeon do
|
|
15
|
+
name "Doc Brown"
|
|
16
|
+
location "Everywhere"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
factory :user do
|
|
20
|
+
name "Jackie Brown"
|
|
21
|
+
sequence(:email) { |n| "jbrown#{n}@qt.com" }
|
|
22
|
+
can_login true
|
|
23
|
+
is_superuser false
|
|
24
|
+
password "secret"
|
|
25
|
+
password_confirmation "secret"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
factory :permission do
|
|
29
|
+
resource "Post"
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe AuthorizationHelper do
|
|
4
|
+
describe "#guard" do
|
|
5
|
+
let(:current_user) { create :user, is_superuser: false }
|
|
6
|
+
let(:permission) { create :permission, resource: "Post" }
|
|
7
|
+
|
|
8
|
+
before :each do
|
|
9
|
+
helper.stub(:current_user) { current_user }
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "returns the block if user has permission to manage the resource" do
|
|
13
|
+
current_user.permissions.push permission
|
|
14
|
+
helper.guard(Post) { "hello" }.should eq "hello"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "returns nil if permission not granted and no message specified" do
|
|
18
|
+
helper.guard(Post) { "hello" }.should eq ""
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "returns message if permission not granted and message specified" do
|
|
22
|
+
helper.guard(Post, "Not Allowed") { "hello" }.should eq "Not Allowed"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
#-----------------
|
|
27
|
+
|
|
28
|
+
describe "#guarded_link_to" do
|
|
29
|
+
let(:current_user) { create :user, is_superuser: false }
|
|
30
|
+
let(:permission) { create :permission, resource: "Post" }
|
|
31
|
+
|
|
32
|
+
before :each do
|
|
33
|
+
helper.stub(:current_user) { current_user }
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "sends to link_to if the user has permission" do
|
|
37
|
+
current_user.permissions.push permission
|
|
38
|
+
link = helper.guarded_link_to Post, "Title", "/some/path"
|
|
39
|
+
link.should eq helper.link_to("Title", "/some/path")
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "shows only the title if permission is not granted" do
|
|
43
|
+
link = helper.guarded_link_to Post, "Title", "/some/path"
|
|
44
|
+
link.should eq "Title"
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe ListHelper do
|
|
4
|
+
let(:list) { Outpost::List::Base.new(Person) }
|
|
5
|
+
let(:person) { create :person, name: "Marty McFly", age: 17 }
|
|
6
|
+
|
|
7
|
+
describe '#render_attribute' do
|
|
8
|
+
it "evals the proc if the helper is a proc" do
|
|
9
|
+
column = list.column(:name, display: ->(r) { "Mr. #{r.name}" })
|
|
10
|
+
helper.render_attribute(column, person).should eq "Mr. Marty McFly"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "uses _display_helper if it's present" do
|
|
14
|
+
column = list.column(:name, display: :some_display)
|
|
15
|
+
column._display_helper = :other_display
|
|
16
|
+
helper.stub(:other_display) { "Cool Name Bro" }
|
|
17
|
+
helper.render_attribute(column, person).should eq "Cool Name Bro"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "sends the symbol if it's a symbol" do
|
|
21
|
+
column = list.column(:name, display: :some_display)
|
|
22
|
+
helper.stub(:some_display) { "Doc Brown" }
|
|
23
|
+
helper.render_attribute(column, person).should eq "Doc Brown"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "uses a generic attribute-based method if no display specified" do
|
|
27
|
+
helper.class_eval do
|
|
28
|
+
def display_name(name)
|
|
29
|
+
"Mr. #{name}"
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
column = list.column(:name)
|
|
34
|
+
helper.render_attribute(column, person).should eq "Mr. Marty McFly"
|
|
35
|
+
|
|
36
|
+
# Get rid of the method we just added, just to be safe
|
|
37
|
+
helper.singleton_class.send :remove_method, :display_name
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "displays the association to_title if it is one" do
|
|
41
|
+
list = Outpost::List::Base.new(Post)
|
|
42
|
+
post = create :post, person: person
|
|
43
|
+
column = list.column(:person)
|
|
44
|
+
|
|
45
|
+
person.stub(:to_title) { "Biff" }
|
|
46
|
+
helper.render_attribute(column, post).should eq "Biff"
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "tries an even more generic column type method" do
|
|
50
|
+
helper.class_eval do
|
|
51
|
+
def display_integer(int)
|
|
52
|
+
int + 10
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
column = list.column(:age)
|
|
57
|
+
helper.render_attribute(column, person).should eq 27
|
|
58
|
+
|
|
59
|
+
helper.singleton_class.send :remove_method, :display_integer
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "just renders the attribute as a string as a last resort" do
|
|
63
|
+
column = list.column(:age)
|
|
64
|
+
helper.render_attribute(column, person).should eq "17"
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "sets _display_helper on the column to help for the next columns" do
|
|
68
|
+
column = list.column(:age)
|
|
69
|
+
column._display_helper.should eq nil
|
|
70
|
+
helper.render_attribute(column, person)
|
|
71
|
+
column._display_helper.should eq :display_string
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe RenderHelper do
|
|
4
|
+
describe "#form_block" do
|
|
5
|
+
context "no title" do
|
|
6
|
+
it "renders the form_block partial" do
|
|
7
|
+
helper.form_block { "hello" }.should match /hello/
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
context "with title" do
|
|
12
|
+
it "renders the form_block partial" do
|
|
13
|
+
formblock = helper.form_block("some title") { "blah blah" }
|
|
14
|
+
formblock.should match /blah blah/
|
|
15
|
+
formblock.should match /some title/
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe UtilityHelper do
|
|
4
|
+
describe "#any_to_list?" do
|
|
5
|
+
it "returns the block if there are records" do
|
|
6
|
+
helper.any_to_list?(1..5) { "Records list" }.should match "Records list"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "returns a default message if there are no records and no message is specified" do
|
|
10
|
+
helper.any_to_list?([]) { "Records list" }.should match "There is nothing here to list."
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "returns a specified message if there are no records" do
|
|
14
|
+
helper.any_to_list?([], message: "None!") { "Records list" }.should match "None!"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "returns a special message if: no records, no message, title is specified" do
|
|
18
|
+
helper.any_to_list?([], title: "Events") { "Records list" }.should match "Events"
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# -----------------------
|
|
23
|
+
|
|
24
|
+
describe "#format_date" do
|
|
25
|
+
before :each do
|
|
26
|
+
@date = Time.at(0).utc # 1970-01-01 00:00:00 UTC
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "returns a `iso` format" do
|
|
30
|
+
helper.format_date(@date, format: :iso).should match "1970-01-01"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "returns a `full-date` format" do
|
|
34
|
+
helper.format_date(@date, format: :full_date).should match "January 1st, 1970"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "returns a 'event' format" do
|
|
38
|
+
helper.format_date(@date, format: :event).should match "Thursday, January 1"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "accepts a custom format" do
|
|
42
|
+
helper.format_date(@date, with: "%D").should match "01/01/70"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "prefers the custom format if a premade format is also specified" do
|
|
46
|
+
helper.format_date(@date, with: "%D", format: :event).should match "01/01/70"
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "includes the time if specified" do
|
|
50
|
+
helper.format_date(@date, format: :event, time: true).should match "12:00am"
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Outpost
|
|
2
|
+
class PeopleController < Outpost::ResourceController
|
|
3
|
+
outpost_controller model: Person
|
|
4
|
+
|
|
5
|
+
define_list do |l|
|
|
6
|
+
l.default_order = "name"
|
|
7
|
+
l.default_sort_mode = "desc"
|
|
8
|
+
l.per_page = 25
|
|
9
|
+
|
|
10
|
+
l.column :name
|
|
11
|
+
l.column :email
|
|
12
|
+
l.column :location
|
|
13
|
+
l.column :age
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
def form_params
|
|
19
|
+
params.require(model.singular_route_key)
|
|
20
|
+
.permit(:name, :email, :location, :age)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<h2><%= @person.name %></h2>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
Rails.application.routes.draw do
|
|
2
|
+
get '/people' => 'people#index', as: :people
|
|
3
|
+
get '/people/:id' => 'people#show', as: :person
|
|
4
|
+
|
|
5
|
+
namespace :outpost do
|
|
6
|
+
resources :people
|
|
7
|
+
|
|
8
|
+
root to: 'home#dashboard'
|
|
9
|
+
|
|
10
|
+
resources :sessions, only: [:create, :destroy]
|
|
11
|
+
get 'login' => "sessions#new", as: :login
|
|
12
|
+
get 'logout' => "sessions#destroy", as: :logout
|
|
13
|
+
|
|
14
|
+
get "*path" => 'errors#not_found'
|
|
15
|
+
end
|
|
16
|
+
end
|
|
Binary file
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
ActiveRecord::Schema.define do
|
|
2
|
+
create_table :people, force: true do |t|
|
|
3
|
+
t.string :name
|
|
4
|
+
t.string :location
|
|
5
|
+
t.string :email
|
|
6
|
+
t.integer :age
|
|
7
|
+
t.timestamps
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
create_table :posts, force: true do |t|
|
|
11
|
+
t.string :title
|
|
12
|
+
t.text :body
|
|
13
|
+
t.integer :person_id
|
|
14
|
+
t.timestamps
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
create_table :pidgeons, force: true do |t|
|
|
18
|
+
t.string :name
|
|
19
|
+
t.string :location
|
|
20
|
+
t.timestamps
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
create_table :users, force: true do |t|
|
|
24
|
+
t.string :name
|
|
25
|
+
t.string :username
|
|
26
|
+
t.string :email
|
|
27
|
+
t.string :password_digest
|
|
28
|
+
t.boolean :is_superuser
|
|
29
|
+
t.boolean :can_login
|
|
30
|
+
t.datetime :last_login
|
|
31
|
+
t.timestamps
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
create_table :permissions, force: true do |t|
|
|
35
|
+
t.string :resource
|
|
36
|
+
t.timestamps
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
create_table :user_permissions, force: true do |t|
|
|
40
|
+
t.integer :permission_id
|
|
41
|
+
t.integer :user_id
|
|
42
|
+
t.timestamps
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
User.create(name: "Bryan Ricker", username: "bricker", email: "bricker@kpcc.org", password: "secret", is_superuser: true, can_login: true)
|
|
2
|
+
|
|
3
|
+
Outpost.config.registered_models.each do |model|
|
|
4
|
+
Outpost::Permission.create(resource: model)
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
10.times do |n|
|
|
8
|
+
Person.create(
|
|
9
|
+
:name => "Test Person #{n}",
|
|
10
|
+
:email => "test#{n}@gmail.com",
|
|
11
|
+
:location => "Los Angeles",
|
|
12
|
+
:age => "#{n + 20}"
|
|
13
|
+
)
|
|
14
|
+
end
|