1
0
mirror of https://github.com/danbee/danbarberphoto synced 2025-03-04 08:49:07 +00:00

First commit.

This commit is contained in:
Dan Barber 2011-10-10 15:39:52 +01:00
commit 52ceb30cf8
126 changed files with 2477 additions and 0 deletions

6
.gitignore vendored Normal file
View File

@ -0,0 +1,6 @@
.bundle
db/*.sqlite3
log/*.log
tmp/
.sass-cache/
.DS_*

47
.rvmrc Normal file
View File

@ -0,0 +1,47 @@
#!/usr/bin/env bash
# This is an RVM Project .rvmrc file, used to automatically load the ruby
# development environment upon cd'ing into the directory
# First we specify our desired <ruby>[@<gemset>], the @gemset name is optional.
environment_id="ruby-1.9.2-p290@template"
#
# Uncomment following line if you want options to be set only for given project.
#
# PROJECT_JRUBY_OPTS=( --1.9 )
#
# First we attempt to load the desired environment directly from the environment
# file. This is very fast and efficient compared to running through the entire
# CLI and selector. If you want feedback on which environment was used then
# insert the word 'use' after --create as this triggers verbose mode.
#
if [[ -d "${rvm_path:-$HOME/.rvm}/environments" \
&& -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
then
\. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
if [[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]]
then
. "${rvm_path:-$HOME/.rvm}/hooks/after_use"
fi
else
# If the environment file has not yet been created, use the RVM CLI to select.
if ! rvm --create use "$environment_id"
then
echo "Failed to create RVM environment '${environment_id}'."
exit 1
fi
fi
#
# If you use an RVM gemset file to install a list of gems (*.gems), you can have
# it be automatically loaded. Uncomment the following and adjust the filename if
# necessary.
#
# filename=".gems"
# if [[ -s "$filename" ]] ; then
# rvm gemset import "$filename" | grep -v already | grep -v listed | grep -v complete | sed '/^$/d'
# fi

50
Gemfile Normal file
View File

@ -0,0 +1,50 @@
source 'http://rubygems.org'
gem 'rails', '3.1.0'
# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'
gem 'sqlite3'
# Gems used only for assets and not required
# in production environments by default.
group :assets do
gem 'sass-rails', " ~> 3.1.0"
gem 'coffee-rails', "~> 3.1.0"
gem 'uglifier'
end
gem 'jquery-rails'
# Use unicorn as the web server
# gem 'unicorn'
# Deploy with Capistrano
# gem 'capistrano'
# To use debugger
# gem 'ruby-debug19', :require => 'ruby-debug'
group :development do
gem 'ruby_parser'
gem 'hpricot'
gem 'powder'
end
group :test do
# Pretty printed test output
gem 'turn', :require => false
end
gem 'sass-rails', "~> 3.1.0"
gem 'nested_set'
gem 'devise'
gem 'acts_as_markup'
#gem 'meta_where'
gem 'haml'
gem 'yaml_db'
gem 'rdiscount'
gem 'formtastic', "~> 2.0.0"
gem 'rubypants'

160
Gemfile.lock Normal file
View File

@ -0,0 +1,160 @@
GEM
remote: http://rubygems.org/
specs:
RedCloth (4.2.8)
actionmailer (3.1.0)
actionpack (= 3.1.0)
mail (~> 2.3.0)
actionpack (3.1.0)
activemodel (= 3.1.0)
activesupport (= 3.1.0)
builder (~> 3.0.0)
erubis (~> 2.7.0)
i18n (~> 0.6)
rack (~> 1.3.2)
rack-cache (~> 1.0.3)
rack-mount (~> 0.8.2)
rack-test (~> 0.6.1)
sprockets (~> 2.0.0)
activemodel (3.1.0)
activesupport (= 3.1.0)
bcrypt-ruby (~> 3.0.0)
builder (~> 3.0.0)
i18n (~> 0.6)
activerecord (3.1.0)
activemodel (= 3.1.0)
activesupport (= 3.1.0)
arel (~> 2.2.1)
tzinfo (~> 0.3.29)
activeresource (3.1.0)
activemodel (= 3.1.0)
activesupport (= 3.1.0)
activesupport (3.1.0)
multi_json (~> 1.0)
acts_as_markup (1.3.4)
RedCloth (~> 4.2)
activerecord (>= 2.3.2)
activesupport (>= 2.3.2)
rdiscount (~> 1.3)
wikitext (~> 2.0)
ansi (1.3.0)
arel (2.2.1)
bcrypt-ruby (3.0.1)
builder (3.0.0)
coffee-rails (3.1.1)
coffee-script (>= 2.2.0)
railties (~> 3.1.0)
coffee-script (2.2.0)
coffee-script-source
execjs
coffee-script-source (1.1.2)
devise (1.4.8)
bcrypt-ruby (~> 3.0)
orm_adapter (~> 0.0.3)
warden (~> 1.0.3)
erubis (2.7.0)
execjs (1.2.9)
multi_json (~> 1.0)
formtastic (2.0.2)
rails (~> 3.0)
haml (3.1.3)
hike (1.2.1)
hpricot (0.8.4)
i18n (0.6.0)
jquery-rails (1.0.14)
railties (~> 3.0)
thor (~> 0.14)
mail (2.3.0)
i18n (>= 0.4.0)
mime-types (~> 1.16)
treetop (~> 1.4.8)
mime-types (1.16)
multi_json (1.0.3)
nested_set (1.6.8)
activerecord (>= 3.0.0)
railties (>= 3.0.0)
orm_adapter (0.0.5)
polyglot (0.3.2)
powder (0.1.6)
thor (>= 0.11.5)
rack (1.3.4)
rack-cache (1.0.3)
rack (>= 0.4)
rack-mount (0.8.3)
rack (>= 1.0.0)
rack-ssl (1.3.2)
rack
rack-test (0.6.1)
rack (>= 1.0)
rails (3.1.0)
actionmailer (= 3.1.0)
actionpack (= 3.1.0)
activerecord (= 3.1.0)
activeresource (= 3.1.0)
activesupport (= 3.1.0)
bundler (~> 1.0)
railties (= 3.1.0)
railties (3.1.0)
actionpack (= 3.1.0)
activesupport (= 3.1.0)
rack-ssl (~> 1.3.2)
rake (>= 0.8.7)
rdoc (~> 3.4)
thor (~> 0.14.6)
rake (0.9.2)
rdiscount (1.6.8)
rdoc (3.9.4)
ruby_parser (2.3.1)
sexp_processor (~> 3.0)
rubypants (0.2.0)
sass (3.1.10)
sass-rails (3.1.4)
actionpack (~> 3.1.0)
railties (~> 3.1.0)
sass (>= 3.1.4)
sprockets (~> 2.0.0)
tilt (~> 1.3.2)
sexp_processor (3.0.7)
sprockets (2.0.2)
hike (~> 1.2)
rack (~> 1.0)
tilt (~> 1.1, != 1.3.0)
sqlite3 (1.3.4)
thor (0.14.6)
tilt (1.3.3)
treetop (1.4.10)
polyglot
polyglot (>= 0.3.1)
turn (0.8.2)
ansi (>= 1.2.2)
tzinfo (0.3.30)
uglifier (1.0.3)
execjs (>= 0.3.0)
multi_json (>= 1.0.2)
warden (1.0.6)
rack (>= 1.0)
wikitext (2.1.1)
yaml_db (0.2.1)
PLATFORMS
ruby
DEPENDENCIES
acts_as_markup
coffee-rails (~> 3.1.0)
devise
formtastic (~> 2.0.0)
haml
hpricot
jquery-rails
nested_set
powder
rails (= 3.1.0)
rdiscount
ruby_parser
rubypants
sass-rails (~> 3.1.0)
sqlite3
turn
uglifier
yaml_db

261
README Normal file
View File

@ -0,0 +1,261 @@
== Welcome to Rails
Rails is a web-application framework that includes everything needed to create
database-backed web applications according to the Model-View-Control pattern.
This pattern splits the view (also called the presentation) into "dumb"
templates that are primarily responsible for inserting pre-built data in between
HTML tags. The model contains the "smart" domain objects (such as Account,
Product, Person, Post) that holds all the business logic and knows how to
persist themselves to a database. The controller handles the incoming requests
(such as Save New Account, Update Product, Show Post) by manipulating the model
and directing data to the view.
In Rails, the model is handled by what's called an object-relational mapping
layer entitled Active Record. This layer allows you to present the data from
database rows as objects and embellish these data objects with business logic
methods. You can read more about Active Record in
link:files/vendor/rails/activerecord/README.html.
The controller and view are handled by the Action Pack, which handles both
layers by its two parts: Action View and Action Controller. These two layers
are bundled in a single package due to their heavy interdependence. This is
unlike the relationship between the Active Record and Action Pack that is much
more separate. Each of these packages can be used independently outside of
Rails. You can read more about Action Pack in
link:files/vendor/rails/actionpack/README.html.
== Getting Started
1. At the command prompt, create a new Rails application:
<tt>rails new myapp</tt> (where <tt>myapp</tt> is the application name)
2. Change directory to <tt>myapp</tt> and start the web server:
<tt>cd myapp; rails server</tt> (run with --help for options)
3. Go to http://localhost:3000/ and you'll see:
"Welcome aboard: You're riding Ruby on Rails!"
4. Follow the guidelines to start developing your application. You can find
the following resources handy:
* The Getting Started Guide: http://guides.rubyonrails.org/getting_started.html
* Ruby on Rails Tutorial Book: http://www.railstutorial.org/
== Debugging Rails
Sometimes your application goes wrong. Fortunately there are a lot of tools that
will help you debug it and get it back on the rails.
First area to check is the application log files. Have "tail -f" commands
running on the server.log and development.log. Rails will automatically display
debugging and runtime information to these files. Debugging info will also be
shown in the browser on requests from 127.0.0.1.
You can also log your own messages directly into the log file from your code
using the Ruby logger class from inside your controllers. Example:
class WeblogController < ActionController::Base
def destroy
@weblog = Weblog.find(params[:id])
@weblog.destroy
logger.info("#{Time.now} Destroyed Weblog ID ##{@weblog.id}!")
end
end
The result will be a message in your log file along the lines of:
Mon Oct 08 14:22:29 +1000 2007 Destroyed Weblog ID #1!
More information on how to use the logger is at http://www.ruby-doc.org/core/
Also, Ruby documentation can be found at http://www.ruby-lang.org/. There are
several books available online as well:
* Programming Ruby: http://www.ruby-doc.org/docs/ProgrammingRuby/ (Pickaxe)
* Learn to Program: http://pine.fm/LearnToProgram/ (a beginners guide)
These two books will bring you up to speed on the Ruby language and also on
programming in general.
== Debugger
Debugger support is available through the debugger command when you start your
Mongrel or WEBrick server with --debugger. This means that you can break out of
execution at any point in the code, investigate and change the model, and then,
resume execution! You need to install ruby-debug to run the server in debugging
mode. With gems, use <tt>sudo gem install ruby-debug</tt>. Example:
class WeblogController < ActionController::Base
def index
@posts = Post.all
debugger
end
end
So the controller will accept the action, run the first line, then present you
with a IRB prompt in the server window. Here you can do things like:
>> @posts.inspect
=> "[#<Post:0x14a6be8
@attributes={"title"=>nil, "body"=>nil, "id"=>"1"}>,
#<Post:0x14a6620
@attributes={"title"=>"Rails", "body"=>"Only ten..", "id"=>"2"}>]"
>> @posts.first.title = "hello from a debugger"
=> "hello from a debugger"
...and even better, you can examine how your runtime objects actually work:
>> f = @posts.first
=> #<Post:0x13630c4 @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}>
>> f.
Display all 152 possibilities? (y or n)
Finally, when you're ready to resume execution, you can enter "cont".
== Console
The console is a Ruby shell, which allows you to interact with your
application's domain model. Here you'll have all parts of the application
configured, just like it is when the application is running. You can inspect
domain models, change values, and save to the database. Starting the script
without arguments will launch it in the development environment.
To start the console, run <tt>rails console</tt> from the application
directory.
Options:
* Passing the <tt>-s, --sandbox</tt> argument will rollback any modifications
made to the database.
* Passing an environment name as an argument will load the corresponding
environment. Example: <tt>rails console production</tt>.
To reload your controllers and models after launching the console run
<tt>reload!</tt>
More information about irb can be found at:
link:http://www.rubycentral.org/pickaxe/irb.html
== dbconsole
You can go to the command line of your database directly through <tt>rails
dbconsole</tt>. You would be connected to the database with the credentials
defined in database.yml. Starting the script without arguments will connect you
to the development database. Passing an argument will connect you to a different
database, like <tt>rails dbconsole production</tt>. Currently works for MySQL,
PostgreSQL and SQLite 3.
== Description of Contents
The default directory structure of a generated Ruby on Rails application:
|-- app
| |-- assets
| |-- images
| |-- javascripts
| `-- stylesheets
| |-- controllers
| |-- helpers
| |-- mailers
| |-- models
| `-- views
| `-- layouts
|-- config
| |-- environments
| |-- initializers
| `-- locales
|-- db
|-- doc
|-- lib
| `-- tasks
|-- log
|-- public
|-- script
|-- test
| |-- fixtures
| |-- functional
| |-- integration
| |-- performance
| `-- unit
|-- tmp
| |-- cache
| |-- pids
| |-- sessions
| `-- sockets
`-- vendor
|-- assets
`-- stylesheets
`-- plugins
app
Holds all the code that's specific to this particular application.
app/assets
Contains subdirectories for images, stylesheets, and JavaScript files.
app/controllers
Holds controllers that should be named like weblogs_controller.rb for
automated URL mapping. All controllers should descend from
ApplicationController which itself descends from ActionController::Base.
app/models
Holds models that should be named like post.rb. Models descend from
ActiveRecord::Base by default.
app/views
Holds the template files for the view that should be named like
weblogs/index.html.erb for the WeblogsController#index action. All views use
eRuby syntax by default.
app/views/layouts
Holds the template files for layouts to be used with views. This models the
common header/footer method of wrapping views. In your views, define a layout
using the <tt>layout :default</tt> and create a file named default.html.erb.
Inside default.html.erb, call <% yield %> to render the view using this
layout.
app/helpers
Holds view helpers that should be named like weblogs_helper.rb. These are
generated for you automatically when using generators for controllers.
Helpers can be used to wrap functionality for your views into methods.
config
Configuration files for the Rails environment, the routing map, the database,
and other dependencies.
db
Contains the database schema in schema.rb. db/migrate contains all the
sequence of Migrations for your schema.
doc
This directory is where your application documentation will be stored when
generated using <tt>rake doc:app</tt>
lib
Application specific libraries. Basically, any kind of custom code that
doesn't belong under controllers, models, or helpers. This directory is in
the load path.
public
The directory available for the web server. Also contains the dispatchers and the
default HTML files. This should be set as the DOCUMENT_ROOT of your web
server.
script
Helper scripts for automation and generation.
test
Unit and functional tests along with fixtures. When using the rails generate
command, template test files will be generated for you and placed in this
directory.
vendor
External libraries that the application depends on. Also includes the plugins
subdirectory. If the app has frozen rails, those gems also go here, under
vendor/rails/. This directory is in the load path.

7
Rakefile Normal file
View File

@ -0,0 +1,7 @@
#!/usr/bin/env rake
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
require File.expand_path('../config/application', __FILE__)
Abidownloads::Application.load_tasks

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

BIN
app/assets/images/rails.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

View File

@ -0,0 +1,9 @@
// This is a manifest file that'll be compiled into including all the files listed below.
// Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
// be included in the compiled file accessible from http://example.com/assets/application.js
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// the compiled file.
//
//= require jquery
//= require jquery_ujs
//= require_directory ./admin

View File

@ -0,0 +1,3 @@
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/

View File

@ -0,0 +1,3 @@
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/

View File

@ -0,0 +1,3 @@
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/

View File

@ -0,0 +1,3 @@
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/

View File

@ -0,0 +1,9 @@
// This is a manifest file that'll be compiled into including all the files listed below.
// Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
// be included in the compiled file accessible from http://example.com/assets/application.js
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// the compiled file.
//
//= require jquery
//= require jquery_ujs
//= require_tree .

View File

@ -0,0 +1,3 @@
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/

View File

@ -0,0 +1,8 @@
/*
* 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
* the top of the compiled file, but it's generally better to create a new file per style scope.
*= require_self
*= require formtastic
*= require_directory ./admin
*/

View File

@ -0,0 +1,137 @@
// Place all the styles related to the admin/admin controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
@import "../includes/v_linear_grad"
@import "../includes/round_corners"
@import "../includes/transition"
@import "../includes/box_shadow"
body
background-color: #999
color: #333
font-family: "Helvetica Neue", "Arial", sans-serif
font-size: 14px
line-height: 18px
margin: 0
padding: 0
#page, #login
background: #fafafa
padding: 1em 2em 3em
border-bottom: 1px solid #666
@include box-shadow("0 1px 4px rgba(0, 0, 0, 0.3)")
#login
width: 40em
margin: 5em auto 0
header
background: #333
margin: -2.5em -2em 0
#user
position: absolute
top: 1em
right: 2em
color: #ccc
a
color: #999
h1
font-size: 2em
margin-bottom: 0em
a
width: 263px
height: 24px
display: inline-block
padding: 1em 1em
text-indent: -1000em
background: url(/assets/admin/logo.png) 1em 0.75em no-repeat
&:hover
background-color: inherit
#login
h1
margin-bottom: 0.5em
h2
margin-top: 1.2em
p, ol, ul, td
font-family: "Helvetica Neue", "Arial", sans-serif
font-size: 13px
line-height: 18px
pre
background-color: #eee
padding: 10px
font-size: 11px
a
color: #000
&:hover
color: #fff
background-color: #000
div
&.field, &.actions
margin-bottom: 10px
#notice
color: green
.field_with_errors
padding: 2px
background-color: red
display: table
table
border: 1px solid #bbb
border-spacing: 0
@include box-shadow("0 2px 2px rgba(0, 0, 0, 0.2)")
@include round-corners(5px)
td, th
border-bottom: 1px solid #bbb
tr:nth-child(even) td
background: #f0f0f0
tr:nth-child(odd) td
background: #fff
thead
background: #ddd
color: #333
td, th
text-align: left
padding: 0.5em 0.7em
tfoot td
background: #ddd !important
border-bottom: 0
#error_explanation
width: 450px
border: 2px solid red
padding: 7px
padding-bottom: 0
margin-bottom: 20px
background-color: #f0f0f0
h2
text-align: left
font-weight: bold
padding: 5px 5px 5px 15px
font-size: 12px
margin: -7px
margin-bottom: 0px
background-color: #c00
color: #fff
ul li
font-size: 12px
list-style: square
form ul.taxonomies
border: 1px solid #ccc
@include round-corners(3px)
@include box-shadow("inset 2px 2px 4px rgba(0, 0, 0, 0.1)")
margin-top: 1em
padding: 1em
width: 25%
float: right
> li
font-weight: bold

View File

@ -0,0 +1,3 @@
// Place all the styles related to the admin/dashboard controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/

View File

@ -0,0 +1,3 @@
// Place all the styles related to the admin/downloads controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/

View File

@ -0,0 +1,14 @@
.alert, .notice
border-style: solid
border-width: 2px 0 2px
padding: 0.7em 1.4em
.alert
border-color: #993300
background: #ffddcc
color: #662200
.notice
border-color: #339900
background: #ddffcc
color: #226600

View File

@ -0,0 +1,103 @@
@import "../includes/v_linear_grad"
@import "../includes/round_corners"
@import "../includes/transition"
@import "../includes/box_shadow"
@import "../includes/button"
form.formtastic
background: white
border: 1px solid #ccc
margin: 0 0 1em
padding: 0 1em
@include box-shadow("0 2px 2px rgba(0, 0, 0, 0.05)")
label
text-align: right
margin-right: 1em
.required
label
font-weight: bold
@include round-corners(5px)
ol, ul
margin-bottom: 0.5em
.input
margin-bottom: 0em
margin-top: 0em
overflow: hidden
padding: 0.5em 0
.label
width: 13em
textarea
height: 10em
input, textarea
font-family: "Helvetica Neue", "Arial", sans-serif
font-size: 1em
margin-right: 5px
border-width: 1px
border-style: solid
border-color: #999 #DDD #DDD #999
padding: 0.3em
@include round-corners(2px)
@include box-shadow("inset 1px 1px 4px rgba(0, 0, 0, 0.1)")
&:focus
border-color: #67A #9AF #9AF #67A
@include box-shadow("0 0 4px rgba(0, 128, 255, 0.5), inset 1px 1px 4px rgba(0, 0, 0, 0.1)")
&[type=text], &[type=email]
width: 15em
&[type=number]
width: 3.5em
text-align: right
&:-webkit-inner-spin-button, &:-webkit-outer-spin-button
-webkit-appearance: none
margin: 0
input[type=submit], a.button
@include button
&[name=commit]
background-color: #9C7
border-color: #370
color: white
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.5)
@include box-shadow("0 1px 0 rgba(0, 0, 0, 0.25), inset -1px -1px 0 rgba(255, 255, 255, 0.2), inset 1px 1px 0 rgba(255, 255, 255, 0.3), inset 0 0 6px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.3)")
&:hover, &:focus
background-color: #8B6
.error input
border-width: 1px
border-style: solid
border-color: #933 #FBB #FBB #933
background: #FFEFEF
padding: 3px
box-shadow: inset 1px 1px 4px rgba(0, 0, 0, 0.1)
.inline-errors
display: inline
margin-left: 1em
color: #933
fieldset.inputs
padding: 1em 0
border-bottom: 1px solid #ccc
fieldset.buttons
padding: 1.5em 0 1em
.stringish, .text
input, textarea
width: 40%
.help
margin-left: 14em
margin-top: -0.5em
p
font-size: 0.8em
color: #999
a.button
@include button
a.button.new
background-color: #7AC
border-color: #047
color: white
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.5)
@include box-shadow("0 1px 0 rgba(0, 0, 0, 0.25), inset -1px -1px 0 rgba(255, 255, 255, 0.2), inset 1px 1px 0 rgba(255, 255, 255, 0.3), inset 0 0 6px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.3)")
&:hover, &:focus
background-color: #69B

View File

@ -0,0 +1,47 @@
@import "../includes/v_linear_grad"
@import "../includes/round_corners"
@import "../includes/transition"
@import "../includes/box_shadow"
header
nav
ul
@include v-linear-grad(rgba(0,0,0,0), rgba(0,0,0,0.2))
@include box-shadow("0 1px 0 rgba(0, 0, 0, 0.1), inset 0 -1px 0 rgba(255, 255, 255, 0.5)")
background-color: #DDD
border-style: solid
border-width: 0 0 1px 0
border-color: #999
color: white
margin: 0
padding: 0 1em
list-style: none
height: 2.5em
li a
@include v-linear-grad(rgba(0,0,0,0), rgba(0,0,0,0.2))
@include box-shadow("0 1px 0 rgba(0, 0, 0, 0.1), inset 0 -1px 0 rgba(255, 255, 255, 0.5)")
background-color: #DDD
color: #444
text-decoration: none
display: block
height: 1.5em
float: left
padding: 0.6em 1em 0.4em
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5)
@include transition(all 0.15s 0s ease)
&:hover, &:focus
@include v-linear-grad(rgba(0,0,0,0), rgba(0,0,0,0.2))
@include box-shadow("0 1px 0 rgba(0, 0, 0, 0.1), inset 0 -1px 0 rgba(255, 255, 255, 0.5)")
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5)
color: #444
background-color: white
&:active
background-color: #ccc
&.selected
@include v-linear-grad(rgba(0,0,0,0.4), rgba(0,0,0,0))
@include box-shadow("0 1px 0 rgba(0, 0, 0, 0.1), inset 0 -1px 0 rgba(255, 255, 255, 0.2), inset 0 0 6px rgba(0, 0, 0, 0.4)")
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5)
background-color: #999
color: white
&:hover
background-color: #aaa

View File

@ -0,0 +1,3 @@
// Place all the styles related to the admin/unlocks controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/

View File

@ -0,0 +1,7 @@
/*
* 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
* the top of the compiled file, but it's generally better to create a new file per style scope.
*= require_self
*= require_directory ./application
*/

View File

@ -0,0 +1,3 @@
// Place all the styles related to the home controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/

View File

@ -0,0 +1,3 @@
// Place all the styles related to the home controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/

View File

@ -0,0 +1,4 @@
@mixin box-shadow($value)
-webkit-box-shadow: unquote($value)
-moz-box-shadow: unquote($value)
box-shadow: unquote($value)

View File

@ -0,0 +1,24 @@
@mixin button
display: inline-block
position: relative
font-family: "Helvetica Neue", "Arial", sans-serif
font-size: 1em
text-decoration: none
padding: 0.3em 1em
@include v-linear-grad(rgba(0,0,0,0), rgba(0,0,0,0.2))
@include box-shadow("0 1px 0 rgba(0, 0, 0, 0.25), inset -1px -1px 0 rgba(255, 255, 255, 0.5), inset 1px 1px 0 rgba(255, 255, 255, 0.6), inset 0 0 6px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.3)")
border-width: 1px
border-style: solid
border-color: #888
background-color: white
color: #555
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5)
font-weight: bold
cursor: pointer
@include transition(all 0.15s 0s ease)
@include round-corners(3px)
&:hover, &:focus
background-color: #eee
color: #555
&:active
top: 1px

View File

@ -0,0 +1,5 @@
@mixin round-corners($radius)
border-radius: $radius
-moz-border-radius: $radius
-webkit-border-radius: $radius
-o-border-radius: $radius

View File

@ -0,0 +1,5 @@
@mixin transition($value)
-moz-transition: $value
-webkit-transition: $value
-o-transition: $value
transition: $value

View File

@ -0,0 +1,7 @@
@mixin v-linear-grad($from, $to)
background-image: -moz-linear-gradient(top, $from 0%, $to 100%)
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, $from), color-stop(100%, $to))
background-image: -webkit-linear-gradient(top, $from 0%, $to 100%)
background-image: -o-linear-gradient(top, $from 0%, $to 100%)
background-image: -ms-linear-gradient(top, $from 0%, $to 100%)
background-image: linear-gradient(top, $from 0%, $to 100%)

View File

@ -0,0 +1,4 @@
class Admin::AdminController < ApplicationController
layout 'admin/layouts/admin'
before_filter :authenticate_admin_user!
end

View File

@ -0,0 +1,69 @@
class Admin::AdminUsersController < Admin::AdminController
def index
@admin_users = AdminUser.all
end
def new
@admin_user = AdminUser.new
end
def edit
@admin_user = AdminUser.find(params[:id])
end
def update
@admin_user = AdminUser.find(params[:id])
respond_to do |format|
if @admin_user.update_attributes(params[:admin_user])
format.html { redirect_to(admin_admin_users_path, :notice => 'Admin User was successfully updated.') }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @admin_user.errors, :status => :unprocessable_entity }
end
end
end
def create
@admin_user = AdminUser.new(params[:admin_user])
respond_to do |format|
if @admin_user.save
format.html { redirect_to(admin_admin_users_path, :notice => 'Admin User was successfully added.') }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @admin_user.errors, :status => :unprocessable_entity }
end
end
end
def destroy
@admin_user = AdminUser.find(params[:id])
@admin_user.destroy
respond_to do |format|
format.html { redirect_to(admin_admin_users_path, :notice => 'Admin User was deleted.') }
format.xml { head :ok }
end
end
# Allow the current logged in user to change their password
def edit_password
@admin_user = current_admin_user
end
def update_password
@admin_user = current_admin_user
if @admin_user.update_with_password(params[:admin_user])
sign_in(@admin_user, :bypass => true)
redirect_to admin_enterprises_path, :notice => "Password updated!"
else
render :edit_password
end
end
end

View File

@ -0,0 +1,60 @@
class Admin::ConfirmationsController < ::Devise::PasswordsController
layout "admin/layouts/login"
skip_before_filter(:authenticate_user!)
# PUT /resource/confirmation
def update
with_unconfirmed_confirmable do
if @confirmable.has_no_password?
@confirmable.attempt_set_password(params[:admin_user])
if @confirmable.valid?
do_confirm
else
do_show
@confirmable.errors.clear #so that we wont render :new
end
else
self.class.add_error_on(self, :email, :password_allready_set)
end
end
if !@confirmable.errors.empty?
render_with_scope :new
end
end
# GET /resource/confirmation?confirmation_token=abcdef
def show
with_unconfirmed_confirmable do
if @confirmable.has_no_password?
do_show
else
do_confirm
end
end
if !@confirmable.errors.empty?
render_with_scope :new
end
end
protected
def with_unconfirmed_confirmable
@confirmable = AdminUser.find_or_initialize_with_error_by(:confirmation_token, params[:confirmation_token])
if !@confirmable.new_record?
@confirmable.only_if_unconfirmed {yield}
end
end
def do_show
@confirmation_token = params[:confirmation_token]
@requires_password = true
self.resource = @confirmable
render_with_scope :show
end
def do_confirm
@confirmable.confirm!
set_flash_message :notice, :confirmed
sign_in_and_redirect(resource_name, @confirmable)
end
end

View File

@ -0,0 +1,2 @@
class Admin::DashboardController < Admin::AdminController
end

View File

@ -0,0 +1,3 @@
class Admin::PasswordsController < ::Devise::PasswordsController
layout "admin/layouts/login"
end

View File

@ -0,0 +1,3 @@
class Admin::RegistrationsController < ::Devise::RegistrationsController
layout "admin/layouts/login"
end

View File

@ -0,0 +1,3 @@
class Admin::SessionsController < ::Devise::SessionsController
layout "admin/layouts/login"
end

View File

@ -0,0 +1,3 @@
class Admin::UnlocksController < ::Devise::UnlocksController
layout "admin/layouts/login"
end

View File

@ -0,0 +1,12 @@
class ApplicationController < ActionController::Base
protect_from_forgery
def after_sign_in_path_for(resource_or_scope)
admin_dashboard_path
end
def after_sign_out_path_for(resource_or_scope)
new_admin_user_session_path
end
end

View File

@ -0,0 +1,4 @@
class HomeController < ApplicationController
def index
end
end

View File

@ -0,0 +1,2 @@
module Admin::AdminHelper
end

View File

@ -0,0 +1,2 @@
module Admin::DashboardHelper
end

View File

@ -0,0 +1,2 @@
module Admin::DownloadsHelper
end

View File

@ -0,0 +1,2 @@
module Admin::UnlocksHelper
end

View File

@ -0,0 +1,2 @@
module ApplicationHelper
end

View File

@ -0,0 +1,2 @@
module HomeHelper
end

0
app/mailers/.gitkeep Normal file
View File

0
app/models/.gitkeep Normal file
View File

36
app/models/admin_user.rb Normal file
View File

@ -0,0 +1,36 @@
class AdminUser < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :confirmable,
:recoverable, :rememberable, :trackable, :validatable, :lockable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me
# new function to set the password without knowing the current password used in our confirmation controller.
def attempt_set_password(params)
p = {}
p[:password] = params[:password]
p[:password_confirmation] = params[:password_confirmation]
update_attributes(p)
end
# new function to return whether a password has been set
def has_no_password?
self.encrypted_password.blank?
end
# new function to provide access to protected method unless_confirmed
def only_if_unconfirmed
unless_confirmed {yield}
end
def password_required?
# Password is required if it is being set, but not for new records
if !persisted?
false
else
!password.nil? || !password_confirmation.nil?
end
end
end

View File

@ -0,0 +1,7 @@
%tr
%td= admin_user.email
%td= admin_user.last_sign_in_at
%td= admin_user.last_sign_in_ip
%td{ :class => :actions }
- unless admin_user == current_admin_user
= link_to "Delete", admin_admin_user_path(admin_user), :method => :delete, :confirm => "Are you sure you wish to delete this Admin User?"

View File

@ -0,0 +1,3 @@
= semantic_form_for [:admin, admin_user] do |f|
= f.inputs :email
= f.buttons

View File

@ -0,0 +1,2 @@
%h2 Edit Admin User
= render :partial => "form", :locals => { :admin_user => @admin_user }

View File

@ -0,0 +1,11 @@
%h3 Change your password
= semantic_form_for(@admin_user, :url => update_password_admin_admin_user_path, :html => { :method => :put }) do |f|
= f.inputs do
= f.input :current_password
= f.inputs do
= f.input :password, :label => "New Password"
= f.input :password_confirmation, :label => "Confirm Password"
= f.buttons do
= f.submit "Change my password"

View File

@ -0,0 +1,16 @@
%h2 Admin Users
%table
%thead
%tr
%th Email
%th Last Signed In?
%th IP Address
%th
%tbody
= render :partial => "admin_user", :collection => @admin_users
%tfoot
%tr
%td{:colspan => 4}
%br/
= link_to 'New Admin User', new_admin_admin_user_path, :class => [:button, :new]

View File

@ -0,0 +1,2 @@
%h2 New Admin User
= render :partial => "form", :locals => { :admin_user => @admin_user }

View File

@ -0,0 +1,11 @@
%h3 Resend confirmation instructions
= semantic_form_for(resource, :as => resource_name, :url => confirmation_path(resource_name), :html => { :method => :post }) do |f|
= f.inputs do
= f.input :email
= f.buttons do
= f.submit "Resend confirmation instructions"
= render :partial => "devise/shared/links"

View File

@ -0,0 +1,11 @@
= semantic_form_for resource, :as => resource_name, :url => update_user_confirmation_path, :html => {:method => 'put'}, :id => 'activation-form' do |f|
= devise_error_messages!
= field_set_tag "", :class => "inputs" do
%h3= "Account Activation for #{resource.email}"
%ol
- if @requires_password
= f.input :password, :label => 'Choose a Password'
= f.input :password_confirmation, :label => 'Confirm Password'
= hidden_field_tag :confirmation_token,@confirmation_token
= f.buttons do
= f.submit "Activate"

View File

@ -0,0 +1 @@
%p This is the admin dashboard.

View File

@ -0,0 +1,14 @@
!!!
%html
%head
%title Pixelhum Admin
= stylesheet_link_tag "admin"
= javascript_include_tag "admin"
= csrf_meta_tag
%body
#page
%header{ :role => "banner" }= render :partial => "admin/shared/header"
= render :partial => "shared/flash_messages"
= yield
%footer{ :role => "footer" }= render :partial => "admin/shared/footer"

View File

@ -0,0 +1,13 @@
!!!
%html
%head
%title Pixelhum Admin
= stylesheet_link_tag "admin"
= javascript_include_tag "admin"
= csrf_meta_tag
%body
#login
%header{ :role => "banner" }= render :partial => "admin/shared/login_header"
= render :partial => "shared/flash_messages"
= yield

View File

@ -0,0 +1,14 @@
%h3 Change your password
= semantic_form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :put }) do |f|
= devise_error_messages!
= f.hidden_field :reset_password_token
= f.inputs do
= f.input :password, :label => "New Password"
= f.input :password_confirmation, :label => "Confirm Password"
= f.buttons do
= f.submit "Change my password"
= render :partial => "devise/shared/links"

View File

@ -0,0 +1,11 @@
%h3 Forgot your password?
= semantic_form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :post }) do |f|
= f.inputs do
= f.input :email
= f.buttons do
= f.submit "Reset Password"
= render :partial => "devise/shared/links"

View File

@ -0,0 +1,14 @@
%h3 Sign in
= semantic_form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f|
= f.inputs do
= f.input :email
= f.input :password
- if devise_mapping.rememberable?
= f.input :remember_me, :as => :boolean
= f.buttons do
= f.submit "Sign In"
= render :partial => "devise/shared/links"

View File

View File

@ -0,0 +1,3 @@
%h1= link_to "Abiquo Downloads", admin_dashboard_path
= render :partial => "admin/shared/user"
= render :partial => "admin/shared/menu"

View File

@ -0,0 +1 @@
%h1= link_to "Abiquo Downloads", admin_dashboard_path

View File

@ -0,0 +1,4 @@
%nav
%ul
%li= link_to "Dashboard", admin_dashboard_path, :class => (params[:controller] == "admin/dashboard" ? "selected" : nil)
%li= link_to "Admin Users", admin_admin_users_path, :class => (params[:controller] == "admin/admin_users" ? "selected" : nil)

View File

@ -0,0 +1,6 @@
#user
%strong= current_admin_user.email
//|
//= link_to "Change Password", edit_password_admin_admin_user_path
|
= link_to "Logout", destroy_admin_user_session_path, :method => :delete

View File

@ -0,0 +1,11 @@
%h3 Resend unlock instructions
= semantic_form_for(resource, :as => resource_name, :url => unlock_path(resource_name), :html => { :method => :post }) do |f|
= f.inputs do
= f.input :email
= f.buttons do
= f.submit "Resend unlock instructions"
= render :partial => "devise/shared/links"

View File

@ -0,0 +1 @@
%h1 Template App

View File

@ -0,0 +1,14 @@
<!DOCTYPE html>
<html>
<head>
<title>Abidownloads</title>
<%= stylesheet_link_tag "application" %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
</head>
<body>
<%= yield %>
</body>
</html>

View File

@ -0,0 +1,2 @@
%header{:role => :banner}
%h1 Abiquo Downloads

View File

@ -0,0 +1,5 @@
- if !flash[:notice].blank?
%p.notice= flash[:notice]
- if !flash[:alert].blank?
%p.alert= flash[:alert]

4
config.ru Normal file
View File

@ -0,0 +1,4 @@
# This file is used by Rack-based servers to start the application.
require ::File.expand_path('../config/environment', __FILE__)
run Abidownloads::Application

48
config/application.rb Normal file
View File

@ -0,0 +1,48 @@
require File.expand_path('../boot', __FILE__)
require 'rails/all'
if defined?(Bundler)
# If you precompile assets before deploying to production, use this line
Bundler.require *Rails.groups(:assets => %w(development test))
# If you want your assets lazily compiled in production, use this line
# Bundler.require(:default, :assets, Rails.env)
end
module Abidownloads
class Application < Rails::Application
# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded.
# Custom directories with classes and modules you want to be autoloadable.
# config.autoload_paths += %W(#{config.root}/extras)
# Only load the plugins named here, in the order given (default is alphabetical).
# :all can be used as a placeholder for all plugins not explicitly named.
# config.plugins = [ :exception_notification, :ssl_requirement, :all ]
# Activate observers that should always be running.
# config.active_record.observers = :cacher, :garbage_collector, :forum_observer
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
# config.time_zone = 'Central Time (US & Canada)'
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
# config.i18n.default_locale = :de
# Configure the default encoding used in templates for Ruby 1.9.
config.encoding = "utf-8"
# Configure sensitive parameters which will be filtered from the log file.
config.filter_parameters += [:password]
# Enable the asset pipeline
config.assets.enabled = true
# Version of your assets, change this if you want to expire all your assets
config.assets.version = '1.0'
end
end

6
config/boot.rb Normal file
View File

@ -0,0 +1,6 @@
require 'rubygems'
# Set up gems listed in the Gemfile.
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])

5
config/environment.rb Normal file
View File

@ -0,0 +1,5 @@
# Load the rails application
require File.expand_path('../application', __FILE__)
# Initialize the rails application
Abidownloads::Application.initialize!

View File

@ -0,0 +1,44 @@
Abidownloads::Application.configure do
# Settings specified here will take precedence over those in config/application.rb
# In the development environment your application's code is reloaded on
# every request. This slows down response time but is perfect for development
# since you don't have to restart the web server when you make code changes.
config.cache_classes = false
# Log error messages when you accidentally call methods on nil.
config.whiny_nils = true
# Show full error reports and disable caching
config.consider_all_requests_local = true
config.action_controller.perform_caching = false
# Don't care if the mailer can't send
config.action_mailer.raise_delivery_errors = false
# Print deprecation notices to the Rails logger
config.active_support.deprecation = :log
# Only use best-standards-support built into browsers
config.action_dispatch.best_standards_support = :builtin
# Do not compress assets
config.assets.compress = false
# Expands the lines which load the assets
config.assets.debug = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => 'example.com',
:user_name => 'webapps@example.com',
:password => 'password',
:authentication => 'plain',
:enable_starttls_auto => true
}
config.action_mailer.default_url_options = { :host => "abidownloads.dev" }
end

View File

@ -0,0 +1,74 @@
Abidownloads::Application.configure do
# Settings specified here will take precedence over those in config/application.rb
# Code is not reloaded between requests
config.cache_classes = true
# Full error reports are disabled and caching is turned on
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
# Disable Rails's static asset server (Apache or nginx will already do this)
config.serve_static_assets = false
# Compress JavaScripts and CSS
config.assets.compress = true
# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = false
# Generate digests for assets URLs
config.assets.digest = true
# Defaults to Rails.root.join("public/assets")
# config.assets.manifest = YOUR_PATH
# Specifies the header that your server uses for sending files
# config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
# config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
# config.force_ssl = true
# See everything in the log (default is :info)
# config.log_level = :debug
# Use a different logger for distributed setups
# config.logger = SyslogLogger.new
# Use a different cache store in production
# config.cache_store = :mem_cache_store
# Enable serving of images, stylesheets, and JavaScripts from an asset server
# config.action_controller.asset_host = "http://assets.example.com"
# Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added)
# config.assets.precompile += %w( search.js )
# Disable delivery errors, bad email addresses will be ignored
# config.action_mailer.raise_delivery_errors = false
# Enable threaded mode
# config.threadsafe!
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
# the I18n.default_locale when a translation can not be found)
config.i18n.fallbacks = true
# Send deprecation notices to registered listeners
config.active_support.deprecation = :notify
# Settings for Sendgrid Free on Heroku
ActionMailer::Base.smtp_settings = {
:address => 'smtp.sendgrid.net',
:port => '587',
:authentication => :plain,
:user_name => ENV['SENDGRID_USERNAME'],
:password => ENV['SENDGRID_PASSWORD'],
:domain => 'heroku.com'
}
ActionMailer::Base.delivery_method = :smtp
config.action_mailer.default_url_options = { :host => "abidownloads.herokuapp.com" }
end

View File

@ -0,0 +1,42 @@
Abidownloads::Application.configure do
# Settings specified here will take precedence over those in config/application.rb
# The test environment is used exclusively to run your application's
# test suite. You never need to work with it otherwise. Remember that
# your test database is "scratch space" for the test suite and is wiped
# and recreated between test runs. Don't rely on the data there!
config.cache_classes = true
# Configure static asset server for tests with Cache-Control for performance
config.serve_static_assets = true
config.static_cache_control = "public, max-age=3600"
# Log error messages when you accidentally call methods on nil
config.whiny_nils = true
# Show full error reports and disable caching
config.consider_all_requests_local = true
config.action_controller.perform_caching = false
# Raise exceptions instead of rendering exception templates
config.action_dispatch.show_exceptions = false
# Disable request forgery protection in test environment
config.action_controller.allow_forgery_protection = false
# Tell Action Mailer not to deliver emails to the real world.
# The :test delivery method accumulates sent emails in the
# ActionMailer::Base.deliveries array.
config.action_mailer.delivery_method = :test
# Use SQL instead of Active Record's schema dumper when creating the test database.
# This is necessary if your schema can't be completely dumped by the schema dumper,
# like if you have constraints or database-specific column types
# config.active_record.schema_format = :sql
# Print deprecation notices to the stderr
config.active_support.deprecation = :stderr
# Allow pass debug_assets=true as a query parameter to load pages with unpackaged assets
config.assets.allow_debugging = true
end

View File

@ -0,0 +1,7 @@
# Be sure to restart your server when you modify this file.
# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
# Rails.backtrace_cleaner.remove_silencers!

View File

@ -0,0 +1,210 @@
# Use this hook to configure devise mailer, warden hooks and so forth. The first
# four configuration values can also be set straight in your models.
Devise.setup do |config|
# ==> Mailer Configuration
# Configure the e-mail address which will be shown in Devise::Mailer,
# note that it will be overwritten if you use your own mailer class with default "from" parameter.
config.mailer_sender = "please-change-me-at-config-initializers-devise@example.com"
# Configure the class responsible to send e-mails.
# config.mailer = "Devise::Mailer"
# ==> ORM configuration
# Load and configure the ORM. Supports :active_record (default) and
# :mongoid (bson_ext recommended) by default. Other ORMs may be
# available as additional gems.
require 'devise/orm/active_record'
# ==> Configuration for any authentication mechanism
# Configure which keys are used when authenticating a user. The default is
# just :email. You can configure it to use [:username, :subdomain], so for
# authenticating a user, both parameters are required. Remember that those
# parameters are used only when authenticating and not when retrieving from
# session. If you need permissions, you should implement that in a before filter.
# You can also supply a hash where the value is a boolean determining whether
# or not authentication should be aborted when the value is not present.
# config.authentication_keys = [ :email ]
# Configure parameters from the request object used for authentication. Each entry
# given should be a request method and it will automatically be passed to the
# find_for_authentication method and considered in your model lookup. For instance,
# if you set :request_keys to [:subdomain], :subdomain will be used on authentication.
# The same considerations mentioned for authentication_keys also apply to request_keys.
# config.request_keys = []
# Configure which authentication keys should be case-insensitive.
# These keys will be downcased upon creating or modifying a user and when used
# to authenticate or find a user. Default is :email.
config.case_insensitive_keys = [ :email ]
# Configure which authentication keys should have whitespace stripped.
# These keys will have whitespace before and after removed upon creating or
# modifying a user and when used to authenticate or find a user. Default is :email.
config.strip_whitespace_keys = [ :email ]
# Tell if authentication through request.params is enabled. True by default.
# config.params_authenticatable = true
# Tell if authentication through HTTP Basic Auth is enabled. False by default.
# config.http_authenticatable = false
# If http headers should be returned for AJAX requests. True by default.
# config.http_authenticatable_on_xhr = true
# The realm used in Http Basic Authentication. "Application" by default.
# config.http_authentication_realm = "Application"
# It will change confirmation, password recovery and other workflows
# to behave the same regardless if the e-mail provided was right or wrong.
# Does not affect registerable.
# config.paranoid = true
# ==> Configuration for :database_authenticatable
# For bcrypt, this is the cost for hashing the password and defaults to 10. If
# using other encryptors, it sets how many times you want the password re-encrypted.
#
# Limiting the stretches to just one in testing will increase the performance of
# your test suite dramatically. However, it is STRONGLY RECOMMENDED to not use
# a value less than 10 in other environments.
config.stretches = Rails.env.test? ? 1 : 10
# Setup a pepper to generate the encrypted password.
# config.pepper = "09f42a4393b21d179831660ef0102527e36691cfe7d0d72f2b23c0b712275223dbca9eced7e781dcb6cbb14f129aed2086c91ab8bb38c519321a61fb1a93c170"
# ==> Configuration for :confirmable
# A period that the user is allowed to access the website even without
# confirming his account. For instance, if set to 2.days, the user will be
# able to access the website for two days without confirming his account,
# access will be blocked just in the third day. Default is 0.days, meaning
# the user cannot access the website without confirming his account.
# config.confirm_within = 2.days
# Defines which key will be used when confirming an account
# config.confirmation_keys = [ :email ]
# ==> Configuration for :rememberable
# The time the user will be remembered without asking for credentials again.
# config.remember_for = 2.weeks
# If true, a valid remember token can be re-used between multiple browsers.
# config.remember_across_browsers = true
# If true, extends the user's remember period when remembered via cookie.
# config.extend_remember_period = false
# If true, uses the password salt as remember token. This should be turned
# to false if you are not using database authenticatable.
config.use_salt_as_remember_token = true
# Options to be passed to the created cookie. For instance, you can set
# :secure => true in order to force SSL only cookies.
# config.cookie_options = {}
# ==> Configuration for :validatable
# Range for password length. Default is 6..128.
# config.password_length = 6..128
# Email regex used to validate email formats. It simply asserts that
# an one (and only one) @ exists in the given string. This is mainly
# to give user feedback and not to assert the e-mail validity.
# config.email_regexp = /\A[^@]+@[^@]+\z/
# ==> Configuration for :timeoutable
# The time you want to timeout the user session without activity. After this
# time the user will be asked for credentials again. Default is 30 minutes.
# config.timeout_in = 30.minutes
# ==> Configuration for :lockable
# Defines which strategy will be used to lock an account.
# :failed_attempts = Locks an account after a number of failed attempts to sign in.
# :none = No lock strategy. You should handle locking by yourself.
config.lock_strategy = :failed_attempts
# Defines which key will be used when locking and unlocking an account
# config.unlock_keys = [ :email ]
# Defines which strategy will be used to unlock an account.
# :email = Sends an unlock link to the user email
# :time = Re-enables login after a certain amount of time (see :unlock_in below)
# :both = Enables both strategies
# :none = No unlock strategy. You should handle unlocking by yourself.
# config.unlock_strategy = :both
# Number of authentication tries before locking an account if lock_strategy
# is failed attempts.
config.maximum_attempts = 5
# Time interval to unlock the account if :time is enabled as unlock_strategy.
# config.unlock_in = 1.hour
# ==> Configuration for :recoverable
#
# Defines which key will be used when recovering the password for an account
# config.reset_password_keys = [ :email ]
# Time interval you can reset your password with a reset password key.
# Don't put a too small interval or your users won't have the time to
# change their passwords.
config.reset_password_within = 2.hours
# ==> Configuration for :encryptable
# Allow you to use another encryption algorithm besides bcrypt (default). You can use
# :sha1, :sha512 or encryptors from others authentication tools as :clearance_sha1,
# :authlogic_sha512 (then you should set stretches above to 20 for default behavior)
# and :restful_authentication_sha1 (then you should set stretches to 10, and copy
# REST_AUTH_SITE_KEY to pepper)
# config.encryptor = :sha512
# ==> Configuration for :token_authenticatable
# Defines name of the authentication token params key
# config.token_authentication_key = :auth_token
# If true, authentication through token does not store user in session and needs
# to be supplied on each request. Useful if you are using the token as API token.
# config.stateless_token = false
# ==> Scopes configuration
# Turn scoped views on. Before rendering "sessions/new", it will first check for
# "users/sessions/new". It's turned off by default because it's slower if you
# are using only default views.
# config.scoped_views = false
# Configure the default scope given to Warden. By default it's the first
# devise role declared in your routes (usually :user).
# config.default_scope = :user
# Configure sign_out behavior.
# Sign_out action can be scoped (i.e. /users/sign_out affects only :user scope).
# The default is true, which means any logout action will sign out all active scopes.
# config.sign_out_all_scopes = true
# ==> Navigation configuration
# Lists the formats that should be treated as navigational. Formats like
# :html, should redirect to the sign in page when the user does not have
# access, but formats like :xml or :json, should return 401.
#
# If you have any extra navigational formats, like :iphone or :mobile, you
# should add them to the navigational formats lists.
#
# The :"*/*" and "*/*" formats below is required to match Internet
# Explorer requests.
# config.navigational_formats = [:"*/*", "*/*", :html]
# The default HTTP method used to sign out a resource. Default is :delete.
config.sign_out_via = :delete
# ==> OmniAuth
# Add a new OmniAuth provider. Check the wiki for more information on setting
# up on your models and hooks.
# config.omniauth :github, 'APP_ID', 'APP_SECRET', :scope => 'user,public_repo'
# ==> Warden configuration
# If you want to use other strategies, that are not supported by Devise, or
# change the failure app, you can configure them inside the config.warden block.
#
# config.warden do |manager|
# manager.failure_app = AnotherApp
# manager.intercept_401 = false
# manager.default_strategies(:scope => :user).unshift :some_external_strategy
# end
end

View File

@ -0,0 +1,10 @@
# Be sure to restart your server when you modify this file.
# Add new inflection rules using the following format
# (all these examples are active by default):
# ActiveSupport::Inflector.inflections do |inflect|
# inflect.plural /^(ox)$/i, '\1en'
# inflect.singular /^(ox)en/i, '\1'
# inflect.irregular 'person', 'people'
# inflect.uncountable %w( fish sheep )
# end

View File

@ -0,0 +1,5 @@
# Be sure to restart your server when you modify this file.
# Add new mime types for use in respond_to blocks:
# Mime::Type.register "text/richtext", :rtf
# Mime::Type.register_alias "text/html", :iphone

View File

@ -0,0 +1,7 @@
# Be sure to restart your server when you modify this file.
# Your secret key for verifying the integrity of signed cookies.
# If you change this key, all old signed cookies will become invalid!
# Make sure the secret is at least 30 characters and all random,
# no regular words or you'll be exposed to dictionary attacks.
Abidownloads::Application.config.secret_token = '0c32dab080a056a39d8f387a5ebef9f286b0d4c02f9d07bd3b59b4ab9ee09447538116ea3f4c66d66d4ef20229379ef3962a76ee8a878caa85af09c25a5239a0'

View File

@ -0,0 +1,8 @@
# Be sure to restart your server when you modify this file.
Abidownloads::Application.config.session_store :cookie_store, key: '_abidownloads_session'
# Use the database for sessions instead of the cookie-based default,
# which shouldn't be used to store highly confidential information
# (create the session table with "rails generate session_migration")
# Abidownloads::Application.config.session_store :active_record_store

View File

@ -0,0 +1,14 @@
# Be sure to restart your server when you modify this file.
#
# This file contains settings for ActionController::ParamsWrapper which
# is enabled by default.
# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
ActiveSupport.on_load(:action_controller) do
wrap_parameters format: [:json]
end
# Disable root element in JSON by default.
ActiveSupport.on_load(:active_record) do
self.include_root_in_json = false
end

View File

@ -0,0 +1,58 @@
# Additional translations at http://github.com/plataformatec/devise/wiki/I18n
en:
errors:
messages:
expired: "has expired, please request a new one"
not_found: "not found"
already_confirmed: "was already confirmed, please try signing in"
not_locked: "was not locked"
not_saved:
one: "1 error prohibited this %{resource} from being saved:"
other: "%{count} errors prohibited this %{resource} from being saved:"
devise:
failure:
already_authenticated: 'You are already signed in.'
unauthenticated: 'You need to sign in or sign up before continuing.'
unconfirmed: 'You have to confirm your account before continuing.'
locked: 'Your account is locked.'
invalid: 'Invalid email or password.'
invalid_token: 'Invalid authentication token.'
timeout: 'Your session expired, please sign in again to continue.'
inactive: 'Your account was not activated yet.'
sessions:
signed_in: 'Signed in successfully.'
signed_out: 'Signed out successfully.'
passwords:
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_not_active: 'Your password was changed successfully.'
send_paranoid_instructions: "If your e-mail exists on our database, you will receive a password recovery link on your e-mail"
confirmations:
send_instructions: 'You will receive an email with instructions about how to confirm your account in a few minutes.'
send_paranoid_instructions: 'If your e-mail exists on our database, 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.'
registrations:
signed_up: 'Welcome! You have signed up successfully.'
inactive_signed_up: 'You have signed up successfully. However, we could not sign you in because your account is %{reason}.'
updated: 'You updated your account successfully.'
destroyed: 'Bye! Your account was successfully cancelled. We hope to see you again soon.'
reasons:
inactive: 'inactive'
unconfirmed: 'unconfirmed'
locked: 'locked'
unlocks:
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.'
send_paranoid_instructions: 'If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.'
omniauth_callbacks:
success: 'Successfully authorized from %{kind} account.'
failure: 'Could not authorize you from %{kind} because "%{reason}".'
mailer:
confirmation_instructions:
subject: 'Confirmation instructions'
reset_password_instructions:
subject: 'Reset password instructions'
unlock_instructions:
subject: 'Unlock Instructions'

5
config/locales/en.yml Normal file
View File

@ -0,0 +1,5 @@
# Sample localization file for English. Add more files in this directory for other locales.
# See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
en:
hello: "Hello world"

76
config/routes.rb Normal file
View File

@ -0,0 +1,76 @@
Abidownloads::Application.routes.draw do
as :admin_user do
match '/admin_users/confirmation' => 'admin/confirmations#update', :via => :put, :as => :update_user_confirmation
end
devise_for :admin_users, :controllers => {
:sessions => "admin/sessions",
:passwords => "admin/passwords",
#:registrations => "admin/registrations",
:confirmations => "admin/confirmations",
:unlocks => "admin/unlocks"
}
namespace :admin do
root :to => "dashboard#index", :as => :dashboard
resources :admin_users
end
# The priority is based upon order of creation:
# first created -> highest priority.
# Sample of regular route:
# match 'products/:id' => 'catalog#view'
# Keep in mind you can assign values other than :controller and :action
# Sample of named route:
# match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase
# This route can be invoked with purchase_url(:id => product.id)
# Sample resource route (maps HTTP verbs to controller actions automatically):
# resources :products
# Sample resource route with options:
# resources :products do
# member do
# get 'short'
# post 'toggle'
# end
#
# collection do
# get 'sold'
# end
# end
# Sample resource route with sub-resources:
# resources :products do
# resources :comments, :sales
# resource :seller
# end
# Sample resource route with more complex sub-resources
# resources :products do
# resources :comments
# resources :sales do
# get 'recent', :on => :collection
# end
# end
# Sample resource route within a namespace:
# namespace :admin do
# # Directs /admin/products/* to Admin::ProductsController
# # (app/controllers/admin/products_controller.rb)
# resources :products
# end
# You can have the root of your site routed with "root"
# just remember to delete public/index.html.
# root :to => 'welcome#index'
root :to => 'home#index'
# See how all your routes lay out with "rake routes"
# This is a legacy wild controller route that's not recommended for RESTful applications.
# Note: This route will make all actions in every controller accessible via GET requests.
# match ':controller(/:action(/:id(.:format)))'
end

View File

@ -0,0 +1,28 @@
class DeviseCreateAdminUsers < ActiveRecord::Migration
def self.up
create_table(:admin_users) do |t|
t.database_authenticatable :null => false
t.recoverable
t.rememberable
t.trackable
# t.encryptable
t.confirmable
t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both
# t.token_authenticatable
t.timestamps
end
add_index :admin_users, :email, :unique => true
add_index :admin_users, :reset_password_token, :unique => true
add_index :admin_users, :confirmation_token, :unique => true
add_index :admin_users, :unlock_token, :unique => true
# add_index :admin_users, :authentication_token, :unique => true
end
def self.down
drop_table :admin_users
end
end

61
db/schema.rb Normal file
View File

@ -0,0 +1,61 @@
# encoding: UTF-8
# This file is auto-generated from the current state of the database. Instead
# of editing this file, please use the migrations feature of Active Record to
# incrementally modify your database, and then regenerate this schema definition.
#
# Note that this schema.rb definition is the authoritative source for your
# database schema. If you need to create the application database on another
# system, you should be using db:schema:load, not running all the migrations
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
# you'll amass, the slower it'll run and the greater likelihood for issues).
#
# It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20111007155450) do
create_table "admin_users", :force => true do |t|
t.string "email", :default => "", :null => false
t.string "encrypted_password", :limit => 128, :default => "", :null => false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", :default => 0
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
t.string "confirmation_token"
t.datetime "confirmed_at"
t.datetime "confirmation_sent_at"
t.integer "failed_attempts", :default => 0
t.string "unlock_token"
t.datetime "locked_at"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "admin_users", ["confirmation_token"], :name => "index_admin_users_on_confirmation_token", :unique => true
add_index "admin_users", ["email"], :name => "index_admin_users_on_email", :unique => true
add_index "admin_users", ["reset_password_token"], :name => "index_admin_users_on_reset_password_token", :unique => true
add_index "admin_users", ["unlock_token"], :name => "index_admin_users_on_unlock_token", :unique => true
create_table "downloads", :force => true do |t|
t.string "name"
t.text "description"
t.integer "size"
t.string "mime_type"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "folders", :force => true do |t|
t.string "name"
t.text "description"
t.integer "parent_id"
t.integer "lft"
t.integer "rgt"
t.datetime "created_at"
t.datetime "updated_at"
end
end

7
db/seeds.rb Normal file
View File

@ -0,0 +1,7 @@
# This file should contain all the record creation needed to seed the database with its default values.
# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
#
# Examples:
#
# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])
# Mayor.create(name: 'Emanuel', city: cities.first)

2
doc/README_FOR_APP Normal file
View File

@ -0,0 +1,2 @@
Use this README file to introduce your application and point to useful places in the API for learning more.
Run "rake doc:app" to generate API documentation for your models, controllers, helpers, and libraries.

0
lib/assets/.gitkeep Normal file
View File

0
lib/tasks/.gitkeep Normal file
View File

0
log/.gitkeep Normal file
View File

BIN
logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

26
public/404.html Normal file
View File

@ -0,0 +1,26 @@
<!DOCTYPE html>
<html>
<head>
<title>The page you were looking for doesn't exist (404)</title>
<style type="text/css">
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
div.dialog {
width: 25em;
padding: 0 4em;
margin: 4em auto 0 auto;
border: 1px solid #ccc;
border-right-color: #999;
border-bottom-color: #999;
}
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
</style>
</head>
<body>
<!-- This file lives in public/404.html -->
<div class="dialog">
<h1>The page you were looking for doesn't exist.</h1>
<p>You may have mistyped the address or the page may have moved.</p>
</div>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More