@@ -55,4 +55,6 @@ Icon |
||
| 55 | 55 |
.AppleDesktop |
| 56 | 56 |
Network Trash Folder |
| 57 | 57 |
Temporary Items |
| 58 |
-.apdisk |
|
| 58 |
+.apdisk |
|
| 59 |
+# Ignore application configuration |
|
| 60 |
+/config/application.yml |
@@ -41,6 +41,10 @@ gem 'devise' |
||
| 41 | 41 |
gem "letter_opener", :group => :development |
| 42 | 42 |
gem 'redcarpet' |
| 43 | 43 |
gem 'summernote-rails' |
| 44 |
+gem 'figaro' |
|
| 45 |
+gem "mini_magick" |
|
| 46 |
+gem 'fog' |
|
| 47 |
+gem "carrierwave" |
|
| 44 | 48 |
|
| 45 | 49 |
# Use ActiveModel has_secure_password |
| 46 | 50 |
# gem 'bcrypt', '~> 3.1.7' |
@@ -31,6 +31,11 @@ GEM |
||
| 31 | 31 |
bootstrap-timepicker-rails (0.1.3) |
| 32 | 32 |
railties (>= 3.0) |
| 33 | 33 |
builder (3.1.4) |
| 34 |
+ carrierwave (0.10.0) |
|
| 35 |
+ activemodel (>= 3.2.0) |
|
| 36 |
+ activesupport (>= 3.2.0) |
|
| 37 |
+ json (>= 1.7) |
|
| 38 |
+ mime-types (>= 1.16) |
|
| 34 | 39 |
coffee-rails (4.0.1) |
| 35 | 40 |
coffee-script (>= 2.2.0) |
| 36 | 41 |
railties (>= 4.0.0, < 5.0) |
@@ -46,15 +51,44 @@ GEM |
||
| 46 | 51 |
thread_safe (~> 0.1) |
| 47 | 52 |
warden (~> 1.2.3) |
| 48 | 53 |
erubis (2.7.0) |
| 54 |
+ excon (0.39.5) |
|
| 49 | 55 |
execjs (2.2.1) |
| 56 |
+ figaro (1.0.0) |
|
| 57 |
+ thor (~> 0.14) |
|
| 50 | 58 |
flatstrap-rails (0.3.0.2) |
| 51 | 59 |
twitter-bootstrap-rails (~> 2.2.6) |
| 60 |
+ fog (1.23.0) |
|
| 61 |
+ fog-brightbox |
|
| 62 |
+ fog-core (~> 1.23) |
|
| 63 |
+ fog-json |
|
| 64 |
+ fog-softlayer |
|
| 65 |
+ ipaddress (~> 0.5) |
|
| 66 |
+ nokogiri (~> 1.5, >= 1.5.11) |
|
| 67 |
+ fog-brightbox (0.5.1) |
|
| 68 |
+ fog-core (~> 1.22) |
|
| 69 |
+ fog-json |
|
| 70 |
+ inflecto |
|
| 71 |
+ fog-core (1.24.0) |
|
| 72 |
+ builder |
|
| 73 |
+ excon (~> 0.38) |
|
| 74 |
+ formatador (~> 0.2) |
|
| 75 |
+ mime-types |
|
| 76 |
+ net-scp (~> 1.1) |
|
| 77 |
+ net-ssh (>= 2.1.3) |
|
| 78 |
+ fog-json (1.0.0) |
|
| 79 |
+ multi_json (~> 1.0) |
|
| 80 |
+ fog-softlayer (0.3.17) |
|
| 81 |
+ fog-core |
|
| 82 |
+ fog-json |
|
| 52 | 83 |
font-awesome-rails (4.2.0.0) |
| 53 | 84 |
railties (>= 3.2, < 5.0) |
| 85 |
+ formatador (0.2.5) |
|
| 54 | 86 |
friendly_id (5.0.4) |
| 55 | 87 |
activerecord (>= 4.0.0) |
| 56 | 88 |
hike (1.2.3) |
| 57 | 89 |
i18n (0.6.11) |
| 90 |
+ inflecto (0.0.2) |
|
| 91 |
+ ipaddress (0.8.0) |
|
| 58 | 92 |
jbuilder (1.5.3) |
| 59 | 93 |
activesupport (>= 3.0.0) |
| 60 | 94 |
multi_json (>= 1.2.0) |
@@ -76,8 +110,16 @@ GEM |
||
| 76 | 110 |
mime-types (~> 1.16) |
| 77 | 111 |
treetop (~> 1.4.8) |
| 78 | 112 |
mime-types (1.25.1) |
| 113 |
+ mini_magick (3.8.1) |
|
| 114 |
+ subexec (~> 0.2.1) |
|
| 115 |
+ mini_portile (0.6.0) |
|
| 79 | 116 |
minitest (4.7.5) |
| 80 | 117 |
multi_json (1.10.1) |
| 118 |
+ net-scp (1.2.1) |
|
| 119 |
+ net-ssh (>= 2.6.5) |
|
| 120 |
+ net-ssh (2.9.1) |
|
| 121 |
+ nokogiri (1.6.3.1) |
|
| 122 |
+ mini_portile (= 0.6.0) |
|
| 81 | 123 |
orm_adapter (0.5.0) |
| 82 | 124 |
pg (0.17.1) |
| 83 | 125 |
polyglot (0.3.5) |
@@ -117,6 +159,7 @@ GEM |
||
| 117 | 159 |
actionpack (>= 3.0) |
| 118 | 160 |
activesupport (>= 3.0) |
| 119 | 161 |
sprockets (~> 2.8) |
| 162 |
+ subexec (0.2.3) |
|
| 120 | 163 |
summernote-rails (0.4.0) |
| 121 | 164 |
railties (>= 3.1) |
| 122 | 165 |
therubyracer (0.12.1) |
@@ -147,15 +190,19 @@ PLATFORMS |
||
| 147 | 190 |
|
| 148 | 191 |
DEPENDENCIES |
| 149 | 192 |
bootstrap-timepicker-rails |
| 193 |
+ carrierwave |
|
| 150 | 194 |
coffee-rails (~> 4.0.0) |
| 151 | 195 |
devise |
| 196 |
+ figaro |
|
| 152 | 197 |
flatstrap-rails |
| 198 |
+ fog |
|
| 153 | 199 |
font-awesome-rails |
| 154 | 200 |
friendly_id (~> 5.0.0) |
| 155 | 201 |
jbuilder (~> 1.2) |
| 156 | 202 |
jquery-rails |
| 157 | 203 |
less-rails |
| 158 | 204 |
letter_opener |
| 205 |
+ mini_magick |
|
| 159 | 206 |
pg |
| 160 | 207 |
rails (= 4.0.4) |
| 161 | 208 |
redcarpet |
@@ -6,7 +6,7 @@ class ApplicationController < ActionController::Base |
||
| 6 | 6 |
before_filter :configure_permitted_parameters, if: :devise_controller? |
| 7 | 7 |
|
| 8 | 8 |
def configure_permitted_parameters |
| 9 |
- devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:first_name, :last_name, :email, :current_password) }
|
|
| 9 |
+ devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:first_name, :last_name, :email, :current_password, :avatar) }
|
|
| 10 | 10 |
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :email, :password) }
|
| 11 | 11 |
end |
| 12 | 12 |
|
@@ -8,6 +8,8 @@ class User < ActiveRecord::Base |
||
| 8 | 8 |
validates :password, length: {minimum: 5, maximum: 120}, on: :update, allow_blank: true
|
| 9 | 9 |
|
| 10 | 10 |
has_many :posts |
| 11 |
+ |
|
| 12 |
+ mount_uploader :avatar, AvatarUploader |
|
| 11 | 13 |
|
| 12 | 14 |
def full_name |
| 13 | 15 |
name = self.first_name.to_s + ' ' + self.last_name.to_s |
@@ -0,0 +1,71 @@ |
||
| 1 |
+# encoding: utf-8 |
|
| 2 |
+ |
|
| 3 |
+class AvatarUploader < CarrierWave::Uploader::Base |
|
| 4 |
+ |
|
| 5 |
+ # Include RMagick or MiniMagick support: |
|
| 6 |
+ # include CarrierWave::RMagick |
|
| 7 |
+ include CarrierWave::MiniMagick |
|
| 8 |
+ include CarrierWave::MimeTypes |
|
| 9 |
+ |
|
| 10 |
+ # Choose what kind of storage to use for this uploader: |
|
| 11 |
+ |
|
| 12 |
+ if Rails.env.test? or Rails.env.cucumber? |
|
| 13 |
+ storage :file |
|
| 14 |
+ end |
|
| 15 |
+ |
|
| 16 |
+ if Rails.env.development? |
|
| 17 |
+ storage :file |
|
| 18 |
+ end |
|
| 19 |
+ |
|
| 20 |
+ if Rails.env.production? |
|
| 21 |
+ # Include the Sprockets helpers for Rails 3.1+ asset pipeline compatibility if using fog: |
|
| 22 |
+ include Sprockets::Helpers::RailsHelper |
|
| 23 |
+ include Sprockets::Helpers::IsolatedHelper |
|
| 24 |
+ storage :fog |
|
| 25 |
+ end |
|
| 26 |
+ |
|
| 27 |
+ process :set_content_type |
|
| 28 |
+ |
|
| 29 |
+ # Override the directory where uploaded files will be stored. |
|
| 30 |
+ # This is a sensible default for uploaders that are meant to be mounted: |
|
| 31 |
+ def store_dir |
|
| 32 |
+ "uploads/#{mounted_as}/#{model.id}"
|
|
| 33 |
+ end |
|
| 34 |
+ |
|
| 35 |
+ def cache_dir |
|
| 36 |
+ " ./tmp/uploads/#{mounted_as}/#{model.id}"
|
|
| 37 |
+ end |
|
| 38 |
+ |
|
| 39 |
+ # Provide a default URL as a default if there hasn't been a file uploaded: |
|
| 40 |
+ # def default_url |
|
| 41 |
+ # # For Rails 3.1+ asset pipeline compatibility: |
|
| 42 |
+ # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
|
|
| 43 |
+ # |
|
| 44 |
+ # "/images/fallback/" + [version_name, "default.png"].compact.join('_')
|
|
| 45 |
+ # end |
|
| 46 |
+ |
|
| 47 |
+ # Process files as they are uploaded: |
|
| 48 |
+ # process :scale => [200, 300] |
|
| 49 |
+ # |
|
| 50 |
+ # def scale(width, height) |
|
| 51 |
+ # # do something |
|
| 52 |
+ # end |
|
| 53 |
+ |
|
| 54 |
+ # Create different versions of your uploaded files: |
|
| 55 |
+ version :thumb do |
|
| 56 |
+ process :resize_to_fit => [50, 50] |
|
| 57 |
+ end |
|
| 58 |
+ |
|
| 59 |
+ # Add a white list of extensions which are allowed to be uploaded. |
|
| 60 |
+ # For images you might use something like this: |
|
| 61 |
+ # def extension_white_list |
|
| 62 |
+ # %w(jpg jpeg gif png) |
|
| 63 |
+ # end |
|
| 64 |
+ |
|
| 65 |
+ # Override the filename of the uploaded files: |
|
| 66 |
+ # Avoid using model.id or version_name here, see uploader/store.rb for details. |
|
| 67 |
+ # def filename |
|
| 68 |
+ # "something.jpg" if original_filename |
|
| 69 |
+ # end |
|
| 70 |
+ |
|
| 71 |
+end |
@@ -7,6 +7,7 @@ |
||
| 7 | 7 |
<table class="table table-bordered"> |
| 8 | 8 |
<thead> |
| 9 | 9 |
<tr> |
| 10 |
+ <th>Image</th> |
|
| 10 | 11 |
<th>Name</th> |
| 11 | 12 |
<th>Email</th> |
| 12 | 13 |
</tr> |
@@ -15,6 +16,7 @@ |
||
| 15 | 16 |
<tbody> |
| 16 | 17 |
<% @users.each do |user| %> |
| 17 | 18 |
<tr> |
| 19 |
+ <th><%= image_tag user.avatar.thumb.to_s if user.avatar != nil %></th> |
|
| 18 | 20 |
<td><%= user.full_name %></td> |
| 19 | 21 |
<td><%= user.email %></td> |
| 20 | 22 |
</tr> |
@@ -7,6 +7,7 @@ |
||
| 7 | 7 |
<%= f.input :first_name, required: true, autofocus: true %> |
| 8 | 8 |
<%= f.input :last_name, required: true %> |
| 9 | 9 |
<%= f.input :email, required: true %> |
| 10 |
+ <%= f.file_field :avatar %> |
|
| 10 | 11 |
|
| 11 | 12 |
<% if devise_mapping.confirmable? && resource.pending_reconfirmation? %> |
| 12 | 13 |
<p>Currently waiting confirmation for: <%= resource.unconfirmed_email %></p> |
@@ -0,0 +1,9 @@ |
||
| 1 |
+CarrierWave.configure do |config| |
|
| 2 |
+ config.fog_credentials = {
|
|
| 3 |
+ provider:"AWS", |
|
| 4 |
+ aws_access_key_id: ENV["AWS_ACCESS_KEY_ID"], |
|
| 5 |
+ aws_secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"], |
|
| 6 |
+ region: 'sa-east-1' |
|
| 7 |
+ } |
|
| 8 |
+ config.fog_directory = ENV["AWS_S3_BUCKET"] |
|
| 9 |
+end |
@@ -0,0 +1,5 @@ |
||
| 1 |
+class AddAvatarToUsers < ActiveRecord::Migration |
|
| 2 |
+ def change |
|
| 3 |
+ add_column :users, :avatar, :string |
|
| 4 |
+ end |
|
| 5 |
+end |
@@ -11,7 +11,7 @@ |
||
| 11 | 11 |
# |
| 12 | 12 |
# It's strongly recommended that you check this file into your version control system. |
| 13 | 13 |
|
| 14 |
-ActiveRecord::Schema.define(version: 20140918040715) do |
|
| 14 |
+ActiveRecord::Schema.define(version: 20140922054459) do |
|
| 15 | 15 |
|
| 16 | 16 |
# These are extensions that must be enabled in order to support this database |
| 17 | 17 |
enable_extension "plpgsql" |
@@ -59,6 +59,7 @@ ActiveRecord::Schema.define(version: 20140918040715) do |
||
| 59 | 59 |
t.datetime "created_at" |
| 60 | 60 |
t.datetime "updated_at" |
| 61 | 61 |
t.boolean "admin" |
| 62 |
+ t.string "avatar" |
|
| 62 | 63 |
end |
| 63 | 64 |
|
| 64 | 65 |
add_index "users", ["email"], name: "index_users_on_email", unique: true, using: :btree |