working on fixing issues with devise (wip)

This commit is contained in:
did 2011-11-04 16:55:51 +01:00
parent 8979957d43
commit 87d2440f14
50 changed files with 13972 additions and 162 deletions

View File

@ -6,7 +6,9 @@ gem 'rake', '0.9.2'
gem 'rails', '~> 3.1.1' gem 'rails', '~> 3.1.1'
gem 'devise', '~> 1.4.9'
gem 'devise', :path => '../gems/devise' # FIXME: git clone git@github.com:locomotivecms/devise.git; git checkout scoped_mailer
# gem 'devise', '~> 1.4.9'
gem 'cancan', '~> 1.6.7' gem 'cancan', '~> 1.6.7'
gem 'bson', '~> 1.3.1' gem 'bson', '~> 1.3.1'

View File

@ -27,6 +27,14 @@ PATH
carrierwave-mongoid (~> 0.1.3) carrierwave-mongoid (~> 0.1.3)
mongoid (~> 2.3.2) mongoid (~> 2.3.2)
PATH
remote: ../gems/devise
specs:
devise (1.5.0.dev)
bcrypt-ruby (~> 3.0)
orm_adapter (~> 0.0.3)
warden (~> 1.0.3)
GEM GEM
remote: http://rubygems.org/ remote: http://rubygems.org/
specs: specs:
@ -119,10 +127,6 @@ GEM
delayed_job_mongoid (1.0.4) delayed_job_mongoid (1.0.4)
delayed_job (~> 2.1.1) delayed_job (~> 2.1.1)
mongoid (>= 2.0) mongoid (>= 2.0)
devise (1.4.9)
bcrypt-ruby (~> 3.0)
orm_adapter (~> 0.0.3)
warden (~> 1.0.3)
diff-lcs (1.1.3) diff-lcs (1.1.3)
dragonfly (0.9.8) dragonfly (0.9.8)
rack rack
@ -334,7 +338,7 @@ DEPENDENCIES
database_cleaner database_cleaner
delayed_job (~> 2.1.1) delayed_job (~> 2.1.1)
delayed_job_mongoid (~> 1.0.4) delayed_job_mongoid (~> 1.0.4)
devise (~> 1.4.9) devise!
dragonfly (~> 0.9.8) dragonfly (~> 0.9.8)
factory_girl_rails (~> 1.1) factory_girl_rails (~> 1.1)
fog (~> 1.0.0) fog (~> 1.0.0)

View File

@ -7,6 +7,8 @@
#panel { #panel {
.inner { .inner {
padding: 5px 20px 20px 20px;
a { a {
color: #1F82BC; color: #1F82BC;
@include hover-link; @include hover-link;
@ -43,23 +45,12 @@
} // li.question } // li.question
li { li {
div.inline-errors { input {
background: transparent image-url("locomotive/form/error-arrow.png") no-repeat 17px 0; &[type=text] { width: 302px; }
margin: 2px 0 0 0;
padding: 8px 0 0 0;
p { &[type=password] { width: 180px; }
display: inline-block;
width: auto;
margin: 0px;
padding: 3px 12px 4px 30px;
color: #fff !important;
text-shadow: #000 0px 1px;
font-size: 11px;
padding-left: 30px;
background: #cd0f19 image-url("locomotive/form/icons/error.png") no-repeat 10px 6px;
}
} }
} // li } // li
} // ol } // ol
} // fieldset } // fieldset

View File

@ -2,7 +2,6 @@
* This is a manifest file that'll automatically include all the stylesheets available in this directory * This is a manifest file that'll automatically include all the stylesheets available in this directory
* and any sub-directories. You're free to add application-wide styles to this file and they'll appear at * and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
* the top of the compiled file, but it's generally better to create a new file per style scope. * the top of the compiled file, but it's generally better to create a new file per style scope.
*= require ./locomotive/blueprint/screen.css *= require ./blueprint/screen.css
*= require ./locomotive/box.css *= require ./simple.css
*= require ./locomotive/installation.css
*/ */

View File

@ -10,7 +10,7 @@ div.application-message {
font-size: 1.2em; font-size: 1.2em;
font-weight: bold; font-weight: bold;
padding: 8px; padding: 8px;
margin: 10px 20px 0 20px; margin: 10px 0px 0 0px;
text-align: justify; text-align: justify;
} }
@ -36,11 +36,10 @@ div#flash-notice {
} }
#panel { #panel {
width: 356px; width: 346px;
height: 344px; padding: 0px;
padding: 0px 0px 0 0px;
@include box-shadow(rgba(0, 0, 0, 0.2) 0px 0px 10px 3px); @include box-shadow(rgba(0, 0, 0, 0.6) 0px 0px 7px 1px);
h1 { h1 {
height: 41px; height: 41px;
@ -60,7 +59,7 @@ div#flash-notice {
.inner { .inner {
background: #fff; background: #fff;
padding: 5px 20px 20px 20px; padding: 5px 40px 20px 40px;
fieldset { fieldset {
border: 0px; border: 0px;
@ -83,7 +82,6 @@ div#flash-notice {
} // label } // label
input { input {
// background: white url(/assets/locomotive/box/input_bg.png) no-repeat 0 0;
padding: 7px; padding: 7px;
border: 1px solid #b5b7c4; border: 1px solid #b5b7c4;
@ -92,13 +90,7 @@ div#flash-notice {
font-size: 14px; font-size: 14px;
color: #222; color: #222;
&[type=text] { &[type=text], &[type=password] { width: 248px; }
width: 302px;
}
&[type=password] {
width: 180px;
}
&[type=file] { &[type=file] {
background: none; background: none;
@ -107,13 +99,23 @@ div#flash-notice {
} // input } // input
div.inline-errors {
background: transparent image-url("locomotive/form/error-arrow.png") no-repeat 17px 0;
margin: 2px 0 0 0;
padding: 8px 0 0 0;
div.inline-errors p { p {
padding: 3px 5px; display: inline-block;
margin: 5px 0px; width: auto;
background: #FFE5E5; margin: 0px;
color: #CE2525; padding: 3px 12px 4px 30px;
} // inline-errors p color: #fff !important;
text-shadow: #000 0px 1px;
font-size: 11px;
padding-left: 30px;
background: #cd0f19 image-url("locomotive/form/icons/error.png") no-repeat 10px 6px;
}
} // div.inline-errors
} // li } // li
} // ol } // ol
@ -127,7 +129,7 @@ div#flash-notice {
} // p.notice } // p.notice
p.link { p.link {
margin: 15px 0 0 49px; margin: 15px 0 0 0px;
a { a {
color: #1f82bc; color: #1f82bc;
@ -148,7 +150,7 @@ div#flash-notice {
.footer { .footer {
margin: 0px 0px 0 0px; margin: 0px 0px 0 0px;
padding: 22px 0; padding: 15px 0;
background: #8b8d9a; background: #8b8d9a;
@include border-bottom-radius(3px); @include border-bottom-radius(3px);

View File

@ -0,0 +1,116 @@
@mixin clearfix {
&:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
};
}
/* ___ rounded ___ */
@mixin rounded($side, $radius: 10px, $important: false) {
@if $important == true {
$important: !important; }
@else {
$important: ""; }
border-#{$side}-radius: $radius unquote($important);
-moz-border-radius-#{$side}: $radius unquote($important);
-webkit-border-#{$side}-radius: $radius unquote($important);
}
@mixin border-rounded($vert, $horz, $radius, $important: false) {
@if $important == true {
$important: !important; }
@else {
$important: ""; }
border-#{$vert}-#{$horz}-radius: $radius unquote($important);
-moz-border-radius-#{$vert}#{$horz}: $radius unquote($important);
-webkit-border-#{$vert}-#{$horz}-radius: $radius unquote($important);
}
@mixin full-rounded($radius: 10px) {
border-radius: $radius;
-moz-border-radius: $radius;
-webkit-border-radius: $radius;
}
/* ___ box shadow ___ */
@mixin box-shadow($hoffset, $voffset, $depth, $color) {
box-shadow: $hoffset $voffset $depth $color;
-moz-box-shadow: $hoffset $voffset $depth $color;
-webkit-box-shadow: $hoffset $voffset $depth $color;
}
@mixin box-shadow-with-inset($color_top, $color_bottom: $color_top, $important: false) {
$color_bottom: $color_top !default;
@if $important == true {
$important: " !important"; }
@else {
$important: ""; }
box-shadow: inset 0 1px 0 0 $color_top, 0 1px 0 0 $color_bottom unquote($important);
-moz-box-shadow: inset 0 1px 0 0 $color_top, 0 1px 0 0 $color_bottom unquote($important);
-webkit-box-shadow: inset 0 1px 0 0 $color_top, 0 1px 0 0 $color_bottom unquote($important);
}
@mixin no-box-shadow($important: false) {
@if $important == true {
$important: " !important"; }
@else {
$important: ""; }
box-shadow: none $important;
-moz-box-shadow: none $important;
-webkit-box-shadow: none $important;
}
@mixin popup-box {
@include full-rounded(4px);
box-shadow: inset 0 1px 0 0 rgba(255, 255, 255, 0.17), 3px 3px 5px 0 rgba(0, 0, 0, 0.41);
-moz-box-shadow: inset 0 1px 0 0 rgba(255, 255, 255, 0.17), 3px 3px 5px 0 rgba(0, 0, 0, 0.41);
-webkit-box-shadow: inset 0 1px 0 0 rgba(255, 255, 255, 0.17), 3px 3px 5px 0 rgba(0, 0, 0, 0.41);
}
/* ___ others ___ */
@mixin reset {
padding: 0px;
margin: 0px;
list-style: none;
a {
text-decoration: none;
}
}
@mixin absolute-position($vside, $vvalue, $hside, $hvalue, $display: block) {
display: $display;
position: absolute;
#{$vside}: $vvalue;
#{$hside}: $hvalue;
}
@mixin linear-background-gradient($from, $to) {
background: mix($from, $to);
background: -moz-linear-gradient(0% 100% 90deg, $to, $from);
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from($from), to($to));
}
@mixin icon($where, $width, $height, $enabled: false, $top: 0, $left: 0) {
position: relative;
width: $width;
height: $height;
line-height: $height + 1;
@if $enabled == true {
background-position: -#{$width} $where; }
@else {
background-position: 0 $where; }
top: $top;
left: $left;
}

View File

@ -0,0 +1,126 @@
/* ___ AUTOMATICALLY GENERATED: see admin/button.scss for the source file */
@import "helpers";
.button {
display: inline-block;
background: transparent url(/assets/locomotive//buttons/dark-gray-left.png) no-repeat 0 0;
padding: 0px 0px 0px 2px;
font-size: 0.9em;
color: white;
cursor: pointer;
border: none;
height: 31px;
outline: none;
span {
display: inline-block;
background: transparent url(/assets/locomotive//buttons/dark-gray-right.png) no-repeat right top;
position: relative;
top: -1px;
padding: 3px 9px 9px 4px;
line-height: 21px;
text-shadow: 1px 1px 1px #000;
outline: none;
}
&.light {
background-image: url(/assets/locomotive//buttons/light-gray-left.png);
color: #787a89;
span {
background-image: url(/assets/locomotive//buttons/light-gray-right.png);
text-shadow: 1px 1px 1px #fff;
}
}
&.small {
background: #ebedf4;
outline: none;
-moz-border-radius : 10px;
-webkit-border-radius: 10px;
height: 20px;
font-size: 0.7em;
padding: 0px 12px 0px 12px;
color: #8B8D9A !important;
text-decoration: none;
text-shadow: 1px 1px 1px #fff;
}
&.mini.add {
background: transparent;
height: 20px;
@include linear-background-gradient(#ebedf4, #d7dbe7);
@include full-rounded(4px);
@include box-shadow(1px, 1px, 1px, rgba(0, 0, 0, 0.4));
span {
background: none;
line-height: 10px;
padding: 0px 5px 0 0;
}
}
&.remove {
color: #ff092c !important;
font-size: 1.1em;
&:hover { text-decoration: underline; }
}
}
// .button {
// display: inline-block;
// background: transparent url(/assets/locomotive//buttons/dark-gray-left.png) no-repeat 0 0;
// padding: 0px 0px 0px 2px;
// font-size: 0.9em;
// color: white;
// cursor: pointer;
// border: none;
// height: 31px;
// outline: none;
// }
//
// .button span {
// display: inline-block;
// background: transparent url(/assets/locomotive//buttons/dark-gray-right.png) no-repeat right top;
// position: relative;
// top: -1px;
// padding: 3px 9px 9px 4px;
// line-height: 21px;
// text-shadow: 1px 1px 1px #000;
// outline: none;
// }
//
// .button.light {
// background-image: url(/assets/locomotive//buttons/light-gray-left.png);
// color: #787a89;
// }
//
// .button.light span {
// background-image: url(/assets/locomotive//buttons/light-gray-right.png);
// text-shadow: 1px 1px 1px #fff;
// }
//
// .button.small {
// background: #ebedf4;
// outline: none;
// -moz-border-radius : 10px;
// -webkit-border-radius: 10px;
// height: 20px;
// font-size: 0.7em;
// padding: 0px 12px 0px 12px;
// color: #8B8D9A !important;
// text-decoration: none;
// text-shadow: 1px 1px 1px #fff;
// }
//
// .button.small.add {
// }
//
// .button.remove {
// color: #ff092c !important;
// font-size: 1.1em;
// }
//
// .button.remove:hover { text-decoration: underline; }

View File

@ -0,0 +1,455 @@
/* ___ AUTOMATICALLY GENERATED: see admin/menu.scss for the source file */
@import "helpers";
/* ___ submenu: bg ___*/
#submenu {
clear: both;
position: relative;
top: -1px;
z-index: 998;
height: 60px;
margin: 0px;
padding: 0 8px;
background: transparent url(/assets/locomotive//menu/shadow.png) repeat-y 0 0;
/* ___ submenu items ___ */
& > ul {
@include reset;
border-top: 1px solid rgba(255, 255, 255, 0.4);
background: transparent url(/assets/locomotive//menu/submenu/shadow.png) repeat-x 0 0;
@include rounded(top-right, 3px);
height: 60px;
& > li {
margin: 15px 7px 0 8px;
float: left;
&.hoverable > a span {
em {
display: inline-block;
background: transparent url(/assets/locomotive//menu/icons.png) no-repeat 0 -16px;
width: 12px;
height: 7px;
position: relative;
top: 0px;
left: 6px;
}
}
& > a {
display: inline-block;
@include full-rounded(16px);
@include box-shadow-with-inset(rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.1));
border: 1px solid rgba(0, 0, 0, 0.4);
border-top: 1px solid rgba(0, 0, 0, 0.3);
padding: 0px 16px 0px 16px;
height: 26px;
line-height: 22px;
outline: none;
span {
color: #fff;
font-size: 0.8em;
font-weight: normal;
text-shadow: 1px 1px 1px #000;
}
&:hover {
border: 1px solid rgba(0, 0, 0, 0.9);
border-top: 1px solid rgba(0, 0, 0, 0.8);
}
&.on, &:active {
border: 1px solid rgba(0, 0, 0, 0.2);
border-top: 1px solid rgba(0, 0, 0, 0.4);
border-bottom: 1px solid transparent !important;
@include box-shadow-with-inset(rgba(0, 0, 0, 0), rgba(255, 255, 255, 0.2), true);
}
&.hover {
background: #fff !important;
border-color: transparent !important;
border-color-bottom: #fff;
padding-bottom: 0px;
@include border-rounded(bottom, left, 0px, true);
@include border-rounded(bottom, right, 0px, true);
position: relative;
z-index: 998;
span {
color: #8b8d9a;
text-shadow: none;
@include no-box-shadow(true);
}
span em {
background-position: -12px -16px;
}
& > em {
@include absolute-position(bottom, 0px, right, -11px);
width: 13px;
height: 13px;
background: transparent url(/assets/locomotive//menu/popup/bottom-right-corner.png) no-repeat 0 0;
}
}
}
}
}
/* ___ submenu: actions ___ */
& > .action {
@include absolute-position(top, 0px, right, 22px);
height: 60px;
padding-left: 20px;
z-index: 1;
background: transparent url(/assets/locomotive//menu/submenu/action-border.png) repeat-y left 0;
a {
margin-top: 18px;
display: inline-block;
background: rgba(0, 0, 0, 0.4);
@include full-rounded(16px);
padding: 0px 10px 0 15px;
height: 22px;
line-height: 20px;
text-decoration: none;
border: 1px solid transparent;
outline: none;
em {
display: inline-block;
position: relative;
background: transparent url(/assets/locomotive//menu/icons.png) no-repeat 0 0px;
height: 11px;
width: 11px;
top: 1px;
left: -5px;
}
span {
position: relative;
top: -2px;
color: #fff;
font-size: 0.7em;
text-shadow: 1px 1px 1px #000;
}
&:hover {
border-color: rgba(0, 0, 0, 1);
}
}
}
/* ___ submenu: popup ___ */
.popup {
position: absolute;
top: 42px;
min-width: 250px;
background: #fff;
@include box-shadow(0px, 0px, 10px, rgba(0, 0, 0, 0.5));
@include full-rounded(16px);
@include border-rounded(top, left, 0px);
z-index: 997;
a {
color: #1f82bc;
text-decoration: none;
&:hover { text-decoration: underline; }
}
.header {
border-bottom: 1px dotted #bbbbbd;
padding-bottom: 6px;
margin: 0px 16px;
}
.inner { padding: 8px 16px; }
h2 {
font-size: 0.7em;
font-weight: bold;
color: #1e1f26;
margin-bottom: 0px;
}
p {
margin: 0px;
padding: 10px 0 0 0px;
a {
font-size: 0.8em;
background: transparent url(/assets/locomotive//menu/popup/add.png) no-repeat left 4px;
padding-left: 12px;
}
&.edit {
padding-top: 0px;
a {
background: transparent url(/assets/locomotive//menu/popup/bullet.png) no-repeat left 5px;
}
}
}
ul {
list-style-image: url(/assets/locomotive//menu/popup/bullet.png);
margin: 0px 0px 0 15px;
li {
position: relative;
a { font-size: 0.7em; }
span {
@include absolute-position(top, 6px, right, 15px, inline);
color: #8b8d9a;
font-size: 0.7em;
}
}
&.big-links {
list-style: none;
margin: 0px;
li {
margin: 10px 0;
a {
@include full-rounded(16px);
padding: 3px 10px;
background: #ebedf4;
font-weight: bold;
font-size: 0.8em;
}
}
}
}
.footer {
background: #ebedf4;
padding: 8px 16px;
@include rounded("bottom-left", 16px);
@include rounded("bottom-right", 16px);
a {
color: #8b8d9a;
font-weight: bold;
}
}
}
}
@mixin black-submenu {
& > ul {
background: #23242b url(/assets/locomotive//menu/submenu/black-bg.png) repeat-x 0 0;
border-color: rgba(255, 255, 255, 0.2);
& > li > a {
border: 1px solid rgba(0, 0, 0, 0.2);
border-top: 1px solid rgba(0, 0, 0, 0.1);
border-bottom: 1px solid rgba(0, 0, 0, 0.6);
@include box-shadow-with-inset(rgba(255, 255, 255, 0.1));
@include linear-background-gradient(#303138, #1e1e24);
&.on, &:active {
border: 1px solid rgba(0, 0, 0, 0.4);
border-top: 1px solid rgba(0, 0, 0, 0.6);
@include linear-background-gradient(#1e1e24, #212229);
}
}
}
& > .action {
background-image: url(/assets/locomotive//menu/submenu/black-action-border.png) !important;
}
}
@mixin green-submenu {
& > ul {
background-color: #2e9a7d;
& > li > a {
@include linear-background-gradient(#258c70, #13604b);
&.on, &:active {
@include linear-background-gradient(#195e4b, #166d55);
}
}
}
}
@mixin blue-submenu {
& > ul {
background-color: #2579ae;
& > li > a {
@include linear-background-gradient(#1f6ea1, #135179);
&.on, &:active {
@include linear-background-gradient(#13496c, #175b88);
}
}
}
}
@mixin orange-submenu {
& > ul {
background-color: #ed8102;
& > li > a {
@include linear-background-gradient(#e07a02, #a25804);
&.on, &:active {
@include linear-background-gradient(#965201, #9d5603);
}
}
}
}
@mixin red-submenu {
& > ul {
background-color: #d23c45;
& > li > a {
@include linear-background-gradient(#b63e45, #89272d);
&.on, &:active {
@include linear-background-gradient(#7b292e, #972e35);
}
}
}
}
@mixin submenu-color($color) {
@if $color == black { @include black-submenu; }
@if $color == green { @include green-submenu; }
@if $color == blue { @include blue-submenu; }
@if $color == orange { @include orange-submenu; }
@if $color == red { @include red-submenu; }
}
/* ___ menu ___ */
#menu {
@include reset;
margin: 20px 0 0 0px;
li.item {
float: left;
position: relative;
z-index: 994;
& > span, a {
float: left;
display: block;
}
& > span {
background: transparent url(/assets/locomotive//menu/left.png) no-repeat 0 0;
width: 40px;
height: 39px;
background-position: 0 -39px;
}
&.first > span {
width: 18px;
background-position: 0 0;
}
a {
background: transparent url(/assets/locomotive//menu/right.png) no-repeat right 0px;
padding: 0px 52px 0 2px;
height: 39px;
line-height: 26px;
outline: none;
em, span { display: inline-block; position: relative; }
em {
background: transparent url(/assets/locomotive//menu/icons.png) no-repeat 0px 0px;
}
span {
top: 9px;
left: 6px;
color: #787A89;
text-shadow: #C5CFD1 1px 1px 1px;
font-size: 0.8em;
}
}
@for $i from 2 through 5 {
&.item-#{$i} { left: -35px * ($i - 1); z-index: 993 - $i; }
}
}
}
@mixin menu-color($color) {
$color-index: 1;
@if $color == green { $color-index: 1; }
@if $color == black { $color-index: 2; }
@if $color == blue { $color-index: 3; }
@if $color == orange { $color-index: 4; }
@if $color == red { $color-index: 5; }
z-index: 999;
a {
background-position: right -39px * $color-index;
span {
color: #fff;
text-shadow: none;
}
}
& > span { background-position: -40px * $color-index -39px; }
&.first > span { background-position: -18px * $color-index 0px; }
}
@mixin menu-contents-icon($enabled: false) {
@include icon(-64px, 16px, 12px, $enabled, 10px);
}
@mixin menu-assets-icon($enabled: false) {
@include icon(-48px, 20px, 16px, $enabled, 11px);
}
@mixin menu-settings-icon($enabled: false) {
@include icon(-32px, 14px, 13px, $enabled, 11px);
}
/* ___ section/color/icon associations ___ */
#menu li.contents a em { @include menu-contents-icon; }
body.contents {
$color: black;
#menu li.contents {
@include menu-color($color);
em { @include menu-contents-icon(true); }
}
#submenu { @include submenu-color($color); }
}
#menu li.assets a em { @include menu-assets-icon; }
body.assets {
$color: green;
#menu li.assets {
@include menu-color($color);
em { @include menu-assets-icon(true); }
}
#submenu { @include submenu-color($color); }
}
#menu li.settings a em { @include menu-settings-icon; }
body.settings {
$color: blue;
#menu li.settings {
@include menu-color($color);
em { @include menu-settings-icon(true); }
}
#submenu { @include submenu-color($color); }
}

View File

@ -0,0 +1,82 @@
/* ___ AUTOMATICALLY GENERATED: see admin/sites_picker.scss for the source file */
@import "helpers";
#sites-picker {
position: absolute;
top: 97px;
padding: 0px 0 0 0;
@include popup-box;
border: 1px solid #000;
background: rgba(50, 51, 59, 1);
min-width: 160px;
z-index: 999;
font-size: 12px;
p {
margin-bottom: 0px;
padding: 0 8px;
&, a {
color: #fff;
text-shadow: #000 0px 1px;
}
a {
text-decoration: none;
&:hover {
text-decoration: underline;
}
}
&.action {
margin-top: 0px;
padding: 2px 8px 4px 8px;
text-align: right;
font-size: 11px;
}
}
ul {
@include reset;
margin: 1px 0 0 0;
li {
color: #aaa;
text-shadow: #000 0px 1px;
background: transparent url(/assets/locomotive//plugins/sites_picker_entry_bg.png) repeat-x 0 bottom;
padding: 2px 8px 6px 8px;
cursor: pointer;
a {
text-decoration: none;
color: #aaa;
}
&:hover {
&, a { color: #fff; }
}
}
}
&:before {
content: " ";
display: block;
width: 21px;
height: 13px;
position: absolute;
top: -11px;
right: 20px;
background: transparent url(/assets/locomotive//plugins/sites_picker_top_arrow.png) no-repeat 0 0;
}
}

View File

@ -1,9 +1,9 @@
class Locomotive::GlobalActionsCell < ::Locomotive::MenuCell class Locomotive::GlobalActionsCell < ::Locomotive::MenuCell
attr_reader :current_account, :current_site_url attr_reader :current_locomotive_account, :current_site_url
def show(args) def show(args)
@current_account = args[:current_account] @current_locomotive_account = args[:current_locomotive_account]
@current_site_url = args[:current_site_url] @current_site_url = args[:current_site_url]
super super
end end
@ -14,12 +14,12 @@ class Locomotive::GlobalActionsCell < ::Locomotive::MenuCell
add :welcome, :url => edit_my_account_url, :i18n_options => { add :welcome, :url => edit_my_account_url, :i18n_options => {
:key => 'locomotive.shared.header.welcome', :key => 'locomotive.shared.header.welcome',
:arg => :name, :arg => :name,
:value => @current_account.name :value => @current_locomotive_account.name
} }
add :see, :url => current_site_url, :id => 'viewsite', :target => '_blank' add :see, :url => current_site_url, :id => 'viewsite', :target => '_blank'
if Locomotive.config.multi_sites? && current_account.sites.size > 1 if Locomotive.config.multi_sites? && current_locomotive_account.sites.size > 1
add :switch, :url => '#', :id => 'sites-picker-link' add :switch, :url => '#', :id => 'sites-picker-link'
end end

View File

@ -46,16 +46,16 @@ module Locomotive
protected protected
def set_current_thread_variables def set_current_thread_variables
Thread.current[:account] = current_account Thread.current[:account] = current_locomotive_account
Thread.current[:site] = current_site Thread.current[:site] = current_site
end end
def current_ability def current_ability
@current_ability ||= Ability.new(current_account, current_site) @current_ability ||= Ability.new(current_locomotive_account, current_site)
end end
def require_account def require_account
authenticate_account! authenticate_locomotive_account!
end end
def begin_of_association_chain def begin_of_association_chain
@ -79,7 +79,7 @@ module Locomotive
end end
def set_locale def set_locale
I18n.locale = current_account.locale rescue Locomotive.config.default_locale I18n.locale = current_locomotive_account.locale rescue Locomotive.config.default_locale
end end
# ___ site/page urls builder ___ # ___ site/page urls builder ___

View File

@ -1,7 +1,7 @@
module Locomotive module Locomotive
class CrossDomainSessionsController < BaseController class CrossDomainSessionsController < BaseController
layout '/locomotive/layouts/box' layout '/locomotive/layouts/not_logged_in'
skip_before_filter :verify_authenticity_token skip_before_filter :verify_authenticity_token
@ -12,14 +12,14 @@ module Locomotive
skip_load_and_authorize_resource skip_load_and_authorize_resource
def new def new
if site = current_account.sites.detect { |s| s._id.to_s == params[:target_id] } if site = current_locomotive_account.sites.detect { |s| s._id.to_s == params[:target_id] }
if Rails.env == 'development' if Rails.env == 'development'
@target = site.full_subdomain @target = site.full_subdomain
else else
@target = site.domains_without_subdomain.first || site.full_subdomain @target = site.domains_without_subdomain.first || site.full_subdomain
end end
current_account.reset_switch_site_token! current_locomotive_account.reset_switch_site_token!
else else
redirect_to admin_pages_path redirect_to admin_pages_path
end end

View File

@ -1,22 +1,12 @@
module Locomotive module Locomotive
class InstallationController < BaseController class InstallationController < ::ApplicationController
layout '/locomotive/layouts/box' layout '/locomotive/layouts/not_logged_in'
skip_before_filter :require_site
skip_before_filter :require_account
skip_before_filter :verify_authenticity_token
skip_before_filter :validate_site_membership
before_filter :is_step_already_done? before_filter :is_step_already_done?
before_filter :allow_installation? before_filter :allow_installation?
skip_load_and_authorize_resource
def show def show
request.get? ? self.handle_get : self.handle_post request.get? ? self.handle_get : self.handle_post
end end

View File

@ -16,7 +16,7 @@ module Locomotive
protected protected
def resource def resource
@account = current_account @account = current_locomotive_account
end end
def begin_of_association_chain; nil; end # not related directly to current_site def begin_of_association_chain; nil; end # not related directly to current_site

View File

@ -3,11 +3,16 @@ module Locomotive
include Locomotive::Routing::SiteDispatcher include Locomotive::Routing::SiteDispatcher
layout '/locomotive/layouts/box' layout '/locomotive/layouts/not_logged_in'
before_filter :require_site before_filter :require_site
helper 'locomotive/base', 'locomotive/box' helper 'locomotive/base'
def edit
logger.debug 'I am here'
super
end
end end
end end

View File

@ -3,11 +3,11 @@ module Locomotive
include Locomotive::Routing::SiteDispatcher include Locomotive::Routing::SiteDispatcher
layout '/locomotive/layouts/box' layout '/locomotive/layouts/not_logged_in'
before_filter :require_site before_filter :require_site
helper 'locomotive/base', 'locomotive/box' helper 'locomotive/base'
protected protected

View File

@ -7,13 +7,13 @@ module Locomotive
def create def create
@site = Site.new(params[:site]) @site = Site.new(params[:site])
@site.memberships.build :account => @current_account, :role => 'admin' @site.memberships.build :account => @current_locomotive_account, :role => 'admin'
create! { edit_my_account_url } create! { edit_my_account_url }
end end
def destroy def destroy
@site = current_account.sites.find(params[:id]) @site = current_locomotive_account.sites.find(params[:id])
if @site != current_site if @site != current_site
@site.destroy @site.destroy

View File

@ -1,7 +1,7 @@
module Locomotive::AccountsHelper module Locomotive::AccountsHelper
def admin_on?(site = current_site) def admin_on?(site = current_site)
site.memberships.detect { |m| m.admin? && m.account == current_account } site.memberships.detect { |m| m.admin? && m.account == current_locomotive_account }
end end
end end

View File

@ -9,7 +9,7 @@ module Locomotive::BaseHelper
end end
end end
def admin_content_menu_item(name, url, options = {}, &block) def admin_content_menu_item(name, url, options = {}, &block) # TODO: rename method name (remove admin)
default_options = { :i18n => true, :css => name.dasherize.downcase } default_options = { :i18n => true, :css => name.dasherize.downcase }
default_options.merge!(options) default_options.merge!(options)
@ -54,6 +54,19 @@ module Locomotive::BaseHelper
end end
end end
def flash_message
if not flash.empty?
puts "flash = #{flash.inspect}"
first_key = flash.keys.first
content_tag :div, flash[first_key],
:id => "flash-#{first_key}",
:class => 'application-message'
else
puts "empty :-("
''
end
end
def nocoffee_tag def nocoffee_tag
link_to 'noCoffee', 'http://www.nocoffee.fr', :id => 'nocoffee' link_to 'noCoffee', 'http://www.nocoffee.fr', :id => 'nocoffee'
end end

View File

@ -1,21 +0,0 @@
module Locomotive::BoxHelper
def box_flash_message
if not flash.empty?
content_tag :div, flash.values.first,
:id => "flash-#{flash.keys.first}",
:class => 'application-message'
else
''
end
end
# def box_button_tag(label)
# content_tag(:button, content_tag(:span, label), :type => 'submit', :class => 'button')
# end
# def next_installation_step_link(step = 1, label = nil)
# link_to(content_tag(:span, label || t('locomotive.installation.common.next')), installation_step_url(step), :class => 'button')
# end
end

View File

@ -79,7 +79,7 @@ module Locomotive::ContentTypesHelper
registers = { registers = {
:controller => self, :controller => self,
:site => current_site, :site => current_site,
:current_account => current_account :current_locomotive_account => current_locomotive_account
} }
preserve(content._parent.item_template.render(::Liquid::Context.new({}, assigns, registers))) preserve(content._parent.item_template.render(::Liquid::Context.new({}, assigns, registers)))

View File

@ -0,0 +1,8 @@
module Locomotive
class DeviseMailer < ::Devise::Mailer
include ::Locomotive::Engine.routes.url_helpers
end
end

View File

@ -2,7 +2,7 @@
= form_tag cross_domain_sessions_url(:host => @target, :port => request.port), :method => 'post' do = form_tag cross_domain_sessions_url(:host => @target, :port => request.port), :method => 'post' do
= hidden_field_tag 'token', current_account.switch_site_token = hidden_field_tag 'token', current_locomotive_account.switch_site_token
.inner .inner
%p.notice= t('.notice') %p.notice= t('.notice')

View File

@ -0,0 +1,12 @@
%p
!= t('locomotive.mailer.common.hello')
= @resource.email
\!
%p
!= t('.reset_password_instruction')
%p
= link_to t('.change_my_password'), edit_password_url(@resource, :reset_password_token => @resource.reset_password_token)
%p
!= t('.wrong_request_instruction')
%p
!= t('.unchange_password_message')

View File

@ -1,6 +1,9 @@
- content_for :head_title do - content_for :head_title do
= t('locomotive.installation.common.title') = t('locomotive.installation.common.title')
- content_for :head do
= stylesheet_link_tag 'locomotive_installation', :media => 'screen'
- title t('.title') - title t('.title')
- if @step_done.blank? - if @step_done.blank?

View File

@ -1,6 +1,9 @@
- content_for :head_title do - content_for :head_title do
= t('locomotive.installation.common.title') = t('locomotive.installation.common.title')
- content_for :head do
= stylesheet_link_tag 'locomotive/installation', :media => 'screen'
- title t('.title') - title t('.title')
= semantic_form_for(@site, :url => installation_step_url(2), :html => { :multipart => true }) do |f| = semantic_form_for(@site, :url => installation_step_url(2), :html => { :multipart => true }) do |f|

View File

@ -5,13 +5,13 @@
%title= yield(:head_title) || escape_once("#{Locomotive.config.name} &mdash; #{current_site.name}") %title= yield(:head_title) || escape_once("#{Locomotive.config.name} &mdash; #{current_site.name}")
= javascript_include_tag 'locomotive/jquery.js' = javascript_include_tag 'locomotive/jquery.js'
= stylesheet_link_tag 'locomotive_installation', :media => 'screen' = stylesheet_link_tag 'locomotive/not_logged_in', :media => 'screen'
= yield :head
/ [if IE] / [if IE]
= stylesheet_link_tag 'locomotive/blueprint/ie', :media => 'screen' = stylesheet_link_tag 'locomotive/blueprint/ie', :media => 'screen'
= yield :head
%body{ :class => controller.controller_name } %body{ :class => controller.controller_name }
#wrapper #wrapper
#light.container #light.container

View File

@ -1,12 +1,12 @@
%p / %p
!= t('locomotive.mailer.common.hello') / != t('locomotive.mailer.common.hello')
= @resource.email / = @resource.email
\! / \!
%p / %p
!= t('.reset_password_instruction') / != t('.reset_password_instruction')
%p / %p
= link_to t('.change_my_password'), edit_password_url(@resource, :reset_password_token => @resource.reset_password_token) / = link_to t('.change_my_password'), edit_password_url(@resource, :reset_password_token => @resource.reset_password_token)
%p / %p
!= t('.wrong_request_instruction') / != t('.wrong_request_instruction')
%p / %p
!= t('.unchange_password_message') / != t('.unchange_password_message')

View File

@ -5,14 +5,14 @@
= f.hidden_field :reset_password_token = f.hidden_field :reset_password_token
.inner .inner
= box_flash_message = flash_message
= f.inputs do = f.inputs do
= f.input :password, :label => t('.password'), :required => false = f.input :password, :label => t('.password'), :required => false
= f.input :password_confirmation, :label => t('.password_confirmation'), :required => false = f.input :password_confirmation, :label => t('.password_confirmation'), :required => false
%p.link %p.link
= link_to preserve(t('.link')), new_admin_session_path = link_to preserve(t('.link')), new_locomotive_account_session_path
.footer .footer
= box_button_tag t('locomotive.buttons.change_password') = submit_tag t('locomotive.buttons.change_password')

View File

@ -1,17 +1,17 @@
- title t('.title') - title t('.title')
= semantic_form_for(resource, :as => resource_name, :url => password_path(resource_name)) do |f| = semantic_form_for(resource, :as => resource_name, :url => locomotive_account_password_path) do |f|
= f.hidden_field :reset_password_token = f.hidden_field :reset_password_token
.inner .inner
= box_flash_message = flash_message
= f.inputs do = f.inputs do
= f.input :email, :label => t('.email'), :required => false = f.input :email, :label => t('.email'), :required => false
%p.link %p.link
= link_to preserve(t('.link')), new_admin_session_path = link_to preserve(t('.link')), new_locomotive_account_session_path
.footer .footer
= box_button_tag t('locomotive.buttons.send_password') = submit_tag t('locomotive.buttons.send_password')

View File

@ -1,17 +1,17 @@
- title t('.title') - title t('.title')
= semantic_form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| = semantic_form_for(resource, :as => resource_name, :url => locomotive_account_session_path) do |f|
= f.hidden_field :remember_me, :value => 'true' = f.hidden_field :remember_me, :value => 'true'
.inner .inner
= box_flash_message = flash_message
= f.inputs do = f.inputs do
= f.input :email, :label => t('.email'), :required => false = f.input :email, :label => t('.email'), :required => false
= f.input :password, :label => t('.password'), :required => false = f.input :password, :label => t('.password'), :required => false
%p.link %p.link
= link_to t('.link'), new_locomotive_password_path = link_to t('.link'), new_locomotive_account_password_path
.footer .footer
= box_button_tag t('locomotive.buttons.login') = submit_tag t('locomotive.buttons.login')

View File

@ -1,12 +1,12 @@
%h1 %h1
= link_to current_site.name, pages_url, :class => 'single' = link_to current_site.name, pages_url, :class => 'single'
= render_cell 'admin/global_actions', :show, :current_account => current_account, :current_site_url => current_site_url = render_cell 'admin/global_actions', :show, :current_locomotive_account => current_locomotive_account, :current_site_url => current_site_url
- if multi_sites? && current_account.sites.size > 1 - if multi_sites? && current_locomotive_account.sites.size > 1
#sites-picker{ :style => 'display: none' } #sites-picker{ :style => 'display: none' }
%ul %ul
- current_account.sites.each do |site| - current_locomotive_account.sites.each do |site|
- unless current_site._id == site._id - unless current_site._id == site._id
%li %li
= link_to site.name, new_cross_domain_session_url(:target_id => site._id) = link_to site.name, new_cross_domain_session_url(:target_id => site._id)

View File

@ -1,3 +1,14 @@
Devise.mailer[:locomotive_account] = 'Locomotive::DeviseMailer'
# require 'devise'
#
# puts "overidding Devise::Mailer"
#
# # The devise mailer has also to know about the urls built in the engine
# class Devise::Mailer < ::ActionMailer::Base
# include Locomotive::Engine.routes.url_helpers
# end
# require 'locomotive' # require 'locomotive'
# #
# # Use this hook to configure devise mailer, warden hooks and so forth. The first # # Use this hook to configure devise mailer, warden hooks and so forth. The first

View File

@ -7,7 +7,7 @@ en:
devise: devise:
failure: failure:
locomotive: locomotive_account:
unauthenticated: 'You need to sign in or sign up before continuing.' unauthenticated: 'You need to sign in or sign up before continuing.'
unconfirmed: 'You have to confirm your account before continuing.' unconfirmed: 'You have to confirm your account before continuing.'
locked: 'Your account is locked.' locked: 'Your account is locked.'
@ -17,34 +17,34 @@ en:
timeout: 'Your session expired, please sign in again to continue.' timeout: 'Your session expired, please sign in again to continue.'
inactive: 'Your account was not activated yet.' inactive: 'Your account was not activated yet.'
sessions: sessions:
locomotive: locomotive_account:
signed_in: 'Signed in successfully.' signed_in: 'Signed in successfully.'
signed_out: 'Signed out successfully.' signed_out: 'Signed out successfully.'
passwords: passwords:
locomotive: locomotive_account:
send_instructions: 'You will receive an email with instructions about how to reset your password in a few minutes.' send_instructions: 'You will receive an email with instructions about how to reset your password in a few minutes.'
updated: 'Your password was changed successfully. You are now signed in.' updated: 'Your password was changed successfully. You are now signed in.'
confirmations: confirmations:
locomotive: locomotive_account:
send_instructions: 'You will receive an email with instructions about how to confirm your account in a few minutes.' send_instructions: 'You will receive an email with instructions about how to confirm your account in a few minutes.'
confirmed: 'Your account was successfully confirmed. You are now signed in.' confirmed: 'Your account was successfully confirmed. You are now signed in.'
registrations: registrations:
locomotive: locomotive_account:
signed_up: 'You have signed up successfully.' signed_up: 'You have signed up successfully.'
updated: 'You updated your account successfully.' updated: 'You updated your account successfully.'
destroyed: 'Bye! Your account was successfully cancelled. We hope to see you again soon.' destroyed: 'Bye! Your account was successfully cancelled. We hope to see you again soon.'
unlocks: unlocks:
locomotive: locomotive_account:
send_instructions: 'You will receive an email with instructions about how to unlock your account in a few minutes.' send_instructions: 'You will receive an email with instructions about how to unlock your account in a few minutes.'
unlocked: 'Your account was successfully unlocked. You are now signed in.' unlocked: 'Your account was successfully unlocked. You are now signed in.'
mailer: mailer:
locomotive: locomotive_account:
confirmation_instructions: 'Confirmation instructions' confirmation_instructions: 'Confirmation instructions'
reset_password_instructions: 'Reset password instructions' reset_password_instructions: 'Reset password instructions'
unlock_instructions: 'Unlock Instructions' unlock_instructions: 'Unlock Instructions'
locomotive: locomotive_account:
mailer: mailer:
common: common:
hello: Hello hello: Hello

View File

@ -9,12 +9,16 @@ Locomotive::Engine.routes.draw do
# end # end
# locomotive authentication # locomotive authentication
devise_for :account, :class_name => 'Locomotive::Account', :controllers => { :sessions => 'locomotive/sessions', :passwords => 'locomotive/passwords' } do devise_for :locomotive_account,
:mailer => 'Locomotive::DeviseMailer',
:class_name => 'Locomotive::Account',
:path => '',
:path_prefix => nil,
:controllers => { :sessions => 'locomotive/sessions', :passwords => 'locomotive/passwords' } do
match '/' => 'sessions#new' match '/' => 'sessions#new'
match '/sign_in' => 'sessions#new'
end end
# root :to => 'sessions#new' root :to => 'pages#index'
resources :pages do resources :pages do
put :sort, :on => :member put :sort, :on => :member

View File

@ -4,6 +4,7 @@ require 'locomotive/version'
require 'locomotive/core_ext' require 'locomotive/core_ext'
require 'locomotive/configuration' require 'locomotive/configuration'
require 'locomotive/logger' require 'locomotive/logger'
require 'locomotive/devise'
require 'locomotive/dragonfly' require 'locomotive/dragonfly'
require 'locomotive/liquid' require 'locomotive/liquid'
require 'locomotive/mongoid' require 'locomotive/mongoid'

View File

@ -22,7 +22,7 @@ module Locomotive
:metastore => URI.encode("file:#{Rails.root}/tmp/dragonfly/cache/meta"), # URI encoded in case of spaces :metastore => URI.encode("file:#{Rails.root}/tmp/dragonfly/cache/meta"), # URI encoded in case of spaces
:entitystore => URI.encode("file:#{Rails.root}/tmp/dragonfly/cache/body") :entitystore => URI.encode("file:#{Rails.root}/tmp/dragonfly/cache/body")
}, },
:devise_modules => [:database_authenticatable, :recoverable, :rememberable, :trackable, :validatable, :encryptable, { :encryptor => :sha1 }], :devise_modules => [:rememberable, :database_authenticatable, :recoverable, :trackable, :validatable, :encryptable, { :encryptor => :sha1 }],
:context_assign_extensions => { } :context_assign_extensions => { }
} }

32
lib/locomotive/devise.rb Normal file
View File

@ -0,0 +1,32 @@
# require 'devise/mailers/helpers'
# puts Devise.warden_config.inspect
# monkey patch to let Devise know about custom Locomotive mailer views
# module Devise
# module Mailers
# module Helpers
#
# included do
# include Devise::Controllers::ScopedViews
# include Locomotive::Engine.routes.url_helpers
# attr_reader :scope_name, :resource
# end
#
# def template_paths_with_locomotive
# template_path = self.template_paths_without_locomotive
#
# if self.class.scoped_views?
# scoped_path = @devise_mapping.scoped_path
# scoped_path = 'locomotive' if scoped_path =~ /^locomotive_/
# template_path.unshift "#{scoped_path}/mailer"
# end
#
# template_path
# end
#
# alias_method_chain :template_paths, :locomotive
# end
# end
# end

View File

@ -4,9 +4,9 @@ module Liquid
class InlineEditor < ::Liquid::Tag class InlineEditor < ::Liquid::Tag
def render(context) def render(context)
if context.registers[:current_account] if context.registers[:current_locomotive_account]
output = %{ output = %{
<meta name="locale" content="#{context.registers[:current_account].locale}" /> <meta name="locale" content="#{context.registers[:current_locomotive_account].locale}" />
<meta name="page-fullpath" content="/#{context.registers[:page].fullpath}" /> <meta name="page-fullpath" content="/#{context.registers[:page].fullpath}" />
<meta name="edit-page-url" content="#{context.registers[:controller].send(:edit_page_url, context.registers[:page])}" /> <meta name="edit-page-url" content="#{context.registers[:controller].send(:edit_page_url, context.registers[:page])}" />
} }

View File

@ -41,13 +41,13 @@ module Locomotive
end end
if page = current_site.pages.any_in(:fullpath => [*path]).first if page = current_site.pages.any_in(:fullpath => [*path]).first
if not page.published? and current_account.nil? if not page.published? and current_locomotive_account.nil?
page = nil page = nil
else else
if page.templatized? if page.templatized?
@content_instance = page.content_type.contents.where(:_slug => File.basename(path.first)).first @content_instance = page.content_type.contents.where(:_slug => File.basename(path.first)).first
if @content_instance.nil? || (!@content_instance.visible? && current_account.nil?) # content instance not found or not visible if @content_instance.nil? || (!@content_instance.visible? && current_locomotive_account.nil?) # content instance not found or not visible
page = nil page = nil
end end
end end
@ -84,7 +84,7 @@ module Locomotive
:site => current_site, :site => current_site,
:page => @page, :page => @page,
:inline_editor => self.editing_page?, :inline_editor => self.editing_page?,
:current_account => current_account :current_locomotive_account => current_locomotive_account
} }
::Liquid::Context.new({}, assigns, registers) ::Liquid::Context.new({}, assigns, registers)

View File

@ -43,9 +43,9 @@ module Locomotive
end end
def validate_site_membership def validate_site_membership
return true if current_site.present? && current_site.accounts.include?(current_account) return true if current_site.present? && current_site.accounts.include?(current_locomotive_account)
sign_out(current_account) sign_out(current_locomotive_account)
flash[:alert] = I18n.t(:no_membership, :scope => [:devise, :failure, :locomotive]) flash[:alert] = I18n.t(:no_membership, :scope => [:devise, :failure, :locomotive])
redirect_to new_session_url and return false redirect_to new_session_url and return false
end end

View File

@ -28,7 +28,7 @@ module ActionDispatch
[sid, unpack(session.data)] [sid, unpack(session.data)]
end end
def set_session(env, sid, session_data) def set_session(env, sid, session_data, options)
record = env[SESSION_RECORD_KEY] ||= find_session(sid) record = env[SESSION_RECORD_KEY] ||= find_session(sid)
record.data = pack(session_data) record.data = pack(session_data)
# Rack spec dictates that set_session should return true or false # Rack spec dictates that set_session should return true or false

View File

@ -4,7 +4,7 @@ describe Admin::GlobalActionsCell do
render_views render_views
let(:menu) { render_cell('admin/global_actions', :show, :current_account => FactoryGirl.build('admin user'), :current_site_url => 'http://www.yahoo.fr') } let(:menu) { render_cell('admin/global_actions', :show, :current_locomotive_account => FactoryGirl.build('admin user'), :current_site_url => 'http://www.yahoo.fr') }
describe 'show menu' do describe 'show menu' do

View File

@ -0,0 +1,8 @@
class FooController < ApplicationController
def index
render :text => 'Foo'
end
end

View File

@ -6,7 +6,7 @@ Devise.setup do |config|
config.mailer_sender = 'sender@dummyapp.org' config.mailer_sender = 'sender@dummyapp.org'
# Configure the class responsible to send e-mails. # Configure the class responsible to send e-mails.
# config.mailer = "Devise::Mailer" # config.mailer = "Locomotive::DeviseMailer"
# ==> ORM configuration # ==> ORM configuration
# Load and configure the ORM. Supports :active_record (default) and # Load and configure the ORM. Supports :active_record (default) and
@ -155,7 +155,7 @@ Devise.setup do |config|
# Configure the default scope given to Warden. By default it's the first # Configure the default scope given to Warden. By default it's the first
# devise role declared in your routes (usually :user). # devise role declared in your routes (usually :user).
config.default_scope = :account # config.default_scope = :account
# Configure sign_out behavior. # Configure sign_out behavior.
# Sign_out action can be scoped (i.e. /users/sign_out affects only :user scope). # Sign_out action can be scoped (i.e. /users/sign_out affects only :user scope).

View File

@ -1,5 +1,7 @@
Rails.application.routes.draw do Rails.application.routes.draw do
mount Locomotive::Engine => '/foo' mount Locomotive::Engine => '/locomotive'
match '/foo' => 'foo#index', :as => 'foo'
end end

File diff suppressed because it is too large Load Diff

View File

@ -161,7 +161,7 @@ describe 'Locomotive rendering system' do
before(:each) do before(:each) do
@page.published = false @page.published = false
@controller.current_account = nil @controller.current_locomotive_account = nil
end end
it 'should return the 404 page if the page has not been published yet' do it 'should return the 404 page if the page has not been published yet' do
@ -173,7 +173,7 @@ describe 'Locomotive rendering system' do
end end
it 'should not return the 404 page if the page has not been published yet and admin is logged in' do it 'should not return the 404 page if the page has not been published yet and admin is logged in' do
@controller.current_account = true @controller.current_locomotive_account = true
@controller.request.fullpath = '/contact' @controller.request.fullpath = '/contact'
@controller.current_site.pages.expects(:any_in).with({ :fullpath => %w{contact content_type_template} }).returns([@page]) @controller.current_site.pages.expects(:any_in).with({ :fullpath => %w{contact content_type_template} }).returns([@page])
@controller.send(:locomotive_page).should == @page @controller.send(:locomotive_page).should == @page

View File

@ -163,7 +163,7 @@ describe Locomotive::Routing::SiteDispatcher do
@controller.instance_variable_set('@_response', ActionDispatch::Response.new) @controller.instance_variable_set('@_response', ActionDispatch::Response.new)
@controller.stubs(:request).returns(@request) @controller.stubs(:request).returns(@request)
@controller.stubs(:current_account).returns(@account) @controller.stubs(:current_locomotive_account).returns(@account)
@controller.stubs(:sign_out).with(@account) @controller.stubs(:sign_out).with(@account)
@controller.stubs(:new_session_url).returns('/new/admin/session') @controller.stubs(:new_session_url).returns('/new/admin/session')
end end

View File

@ -3,7 +3,7 @@ module Locomotive
include Locomotive::Render include Locomotive::Render
attr_accessor :output, :status, :current_site, :current_account attr_accessor :output, :status, :current_site, :current_locomotive_account
def render(options = {}) def render(options = {})
self.output = options[:text] self.output = options[:text]