From 42d7e9cbda4c92d61963b14b1b621c0b09daa0f9 Mon Sep 17 00:00:00 2001 From: YOUR NAME Date: Mon, 6 Nov 2017 14:48:47 +1100 Subject: [PATCH] carrierwave is working --- Gemfile | 5 ++ Gemfile.lock | 25 +++++++++ app/assets/stylesheets/listings.scss | 7 ++- app/controllers/home_controller.rb | 4 +- app/controllers/listings_controller.rb | 2 +- app/models/listing.rb | 2 + app/uploaders/photos_for_listings_uploader.rb | 49 ++++++++++++++++++ app/views/home/index.html.erb | 4 +- app/views/layouts/application.html.erb | 23 ++++++++ app/views/listings/_form.html.erb | 44 ++++++++++++++++ app/views/listings/_listing.json.jbuilder | 2 +- app/views/listings/index.html.erb | 16 ++++++ app/views/listings/show.html.erb | 40 ++++++++++++++ config/application.rb | 1 + config/cloudinary.yml | 19 +++++++ config/routes.rb | 1 + db/migrate/20171103052641_create_listings.rb | 8 --- db/migrate/20171103081805_create_listings.rb | 16 ++++++ db/schema.rb | 15 +++++- public/apple-touch-icon-precomposed.png | 0 public/apple-touch-icon.png | 0 .../listing/photo/4/Banana-1024x679.jpg | Bin 0 -> 46802 bytes spec/views/listings/edit.html.erb_spec.rb | 27 +++++++++- spec/views/listings/index.html.erb_spec.rb | 30 ++++++++++- spec/views/listings/new.html.erb_spec.rb | 27 +++++++++- spec/views/listings/show.html.erb_spec.rb | 19 ++++++- 26 files changed, 364 insertions(+), 22 deletions(-) create mode 100644 app/uploaders/photos_for_listings_uploader.rb create mode 100644 config/cloudinary.yml delete mode 100644 db/migrate/20171103052641_create_listings.rb create mode 100644 db/migrate/20171103081805_create_listings.rb delete mode 100644 public/apple-touch-icon-precomposed.png delete mode 100644 public/apple-touch-icon.png create mode 100644 public/uploads/listing/photo/4/Banana-1024x679.jpg diff --git a/Gemfile b/Gemfile index 23c7bb1..01857cc 100644 --- a/Gemfile +++ b/Gemfile @@ -5,6 +5,11 @@ git_source(:github) do |repo_name| "https://github.com/#{repo_name}.git" end +#File uploads rails gem +gem 'carrierwave', '~> 1.0' +#Cloud storage for file uploads, created an account on cloudinary +gem 'cloudinary' + #For different Roles management gem 'rolify' #Authorization gem cancancan for controlling rolify diff --git a/Gemfile.lock b/Gemfile.lock index a480736..210057b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -41,6 +41,7 @@ GEM addressable (2.5.2) public_suffix (>= 2.0.2, < 4.0) arel (8.0.0) + aws_cf_signer (0.1.3) bcrypt (3.1.11) bindex (0.5.0) builder (3.2.3) @@ -53,8 +54,15 @@ GEM rack (>= 1.0.0) rack-test (>= 0.5.4) xpath (~> 2.0) + carrierwave (1.2.1) + activemodel (>= 4.0.0) + activesupport (>= 4.0.0) + mime-types (>= 1.16) childprocess (0.8.0) ffi (~> 1.0, >= 1.0.11) + cloudinary (1.8.1) + aws_cf_signer + rest-client coffee-rails (4.2.2) coffee-script (>= 2.2.0) railties (>= 4.0.0) @@ -71,11 +79,15 @@ GEM responders warden (~> 1.2.3) diff-lcs (1.3) + domain_name (0.5.20170404) + unf (>= 0.0.5, < 1.0.0) erubi (1.7.0) execjs (2.7.0) ffi (1.9.18) globalid (0.4.1) activesupport (>= 4.2.0) + http-cookie (1.0.3) + domain_name (~> 0.5) i18n (0.9.1) concurrent-ruby (~> 1.0) jbuilder (2.7.0) @@ -91,10 +103,14 @@ GEM mail (2.7.0) mini_mime (>= 0.1.1) method_source (0.9.0) + mime-types (3.1) + mime-types-data (~> 3.2015) + mime-types-data (3.2016.0521) mini_mime (0.1.4) mini_portile2 (2.3.0) minitest (5.10.3) multi_json (1.12.2) + netrc (0.11.0) nio4r (2.1.0) nokogiri (1.8.1) mini_portile2 (~> 2.3.0) @@ -135,6 +151,10 @@ GEM responders (2.4.0) actionpack (>= 4.2.0, < 5.3) railties (>= 4.2.0, < 5.3) + rest-client (2.0.2) + http-cookie (>= 1.0.2, < 2.0) + mime-types (>= 1.16, < 4.0) + netrc (~> 0.8) rolify (5.1.0) rspec-core (3.7.0) rspec-support (~> 3.7.0) @@ -191,6 +211,9 @@ GEM thread_safe (~> 0.1) uglifier (3.2.0) execjs (>= 0.3.0, < 3) + unf (0.1.4) + unf_ext + unf_ext (0.0.7.4) warden (1.2.7) rack (>= 1.0) web-console (3.5.1) @@ -211,6 +234,8 @@ DEPENDENCIES byebug cancancan (~> 2.0) capybara (~> 2.13) + carrierwave (~> 1.0) + cloudinary coffee-rails (~> 4.2) devise jbuilder (~> 2.5) diff --git a/app/assets/stylesheets/listings.scss b/app/assets/stylesheets/listings.scss index 26576b1..0773f5e 100644 --- a/app/assets/stylesheets/listings.scss +++ b/app/assets/stylesheets/listings.scss @@ -1,3 +1,8 @@ -// Place all the styles related to the Listings controller here. +// Place all the styles related to the listings controller here. // They will automatically be included in application.css. // You can use Sass (SCSS) here: http://sass-lang.com/ + +listing.photo { + width: 10px; + length: 10px; +} diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index 154922a..7eb2c71 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -1,6 +1,6 @@ class HomeController < ApplicationController - before_action :authenticate_user! + before_action :authenticate_user! def index - + end end diff --git a/app/controllers/listings_controller.rb b/app/controllers/listings_controller.rb index a1bd4b4..b655959 100644 --- a/app/controllers/listings_controller.rb +++ b/app/controllers/listings_controller.rb @@ -69,6 +69,6 @@ class ListingsController < ApplicationController # Never trust parameters from the scary internet, only allow the white list through. def listing_params - params.fetch(:listing, {}) + params.require(:listing).permit(:photo, :address, :property_type, :number_of_bedrooms, :number_of_bathrooms, :max_price_per_week, :available_date, :roles) end end diff --git a/app/models/listing.rb b/app/models/listing.rb index c6f31a8..b06447d 100644 --- a/app/models/listing.rb +++ b/app/models/listing.rb @@ -1,2 +1,4 @@ class Listing < ApplicationRecord + mount_uploader :photo, PhotosForListingsUploader + # params.require(:Listing).permit({Photo: []}) end diff --git a/app/uploaders/photos_for_listings_uploader.rb b/app/uploaders/photos_for_listings_uploader.rb new file mode 100644 index 0000000..b261578 --- /dev/null +++ b/app/uploaders/photos_for_listings_uploader.rb @@ -0,0 +1,49 @@ +class PhotosForListingsUploader < CarrierWave::Uploader::Base +# include Cloudinary::CarrierWave + # Include RMagick or MiniMagick support: + # include CarrierWave::RMagick + # include CarrierWave::MiniMagick + + # Choose what kind of storage to use for this uploader: + storage :file + # storage :fog + + # Override the directory where uploaded files will be stored. + # This is a sensible default for uploaders that are meant to be mounted: + def store_dir + "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" + end + + # Provide a default URL as a default if there hasn't been a file uploaded: + # def default_url(*args) + # # For Rails 3.1+ asset pipeline compatibility: + # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) + # + # "/images/fallback/" + [version_name, "default.png"].compact.join('_') + # end + + # Process files as they are uploaded: + # process scale: [200, 300] + # + # def scale(width, height) + # # do something + # end + + # Create different versions of your uploaded files: + # version :thumb do + # process resize_to_fit: [50, 50] + # end + + # Add a white list of extensions which are allowed to be uploaded. + # For images you might use something like this: + # def extension_whitelist + # %w(jpg jpeg gif png) + # end + + # Override the filename of the uploaded files: + # Avoid using model.id or version_name here, see uploader/store.rb for details. + # def filename + # "something.jpg" if original_filename + # end + +end diff --git a/app/views/home/index.html.erb b/app/views/home/index.html.erb index c83a623..691adb5 100644 --- a/app/views/home/index.html.erb +++ b/app/views/home/index.html.erb @@ -1,6 +1,4 @@

Home#index

Find me in app/views/home/index.html.erb

Rently front page

- +<%= link_to 'Listings', listings_path %> diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index bce5d7d..99d812d 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -12,6 +12,29 @@

<%= notice %>

<%= alert %>

+ + <% if user_signed_in? %> +
  • + <%= link_to('Logout', destroy_user_session_path, method: :delete) %> +
  • + <% else %> +
  • + <%= link_to('Login', new_user_session_path) %> +
  • + <% end %> + + + + <% if user_signed_in? %> +
  • + <%= link_to('Edit registration', edit_user_registration_path) %> +
  • + <% else %> +
  • + <%= link_to('Register', new_user_registration_path) %> +
  • + <% end %> + <%= yield %> diff --git a/app/views/listings/_form.html.erb b/app/views/listings/_form.html.erb index 63612bf..4d75d16 100644 --- a/app/views/listings/_form.html.erb +++ b/app/views/listings/_form.html.erb @@ -10,6 +10,50 @@ <% end %> +
    + <%= form.label :avatar %> + +
    + +
    + <%= form.label :photo %> + <%= form.file_field :photo %> +
    + +
    + <%= form.label :address %> + <%= form.text_field :address, id: :listing_Address %> +
    + +
    + <%= form.label :property_type %> + <%= form.text_field :property_type, id: :listing_property_type %> +
    + +
    + <%= form.label :number_of_bedrooms %> + <%= form.number_field :number_of_bedrooms, id: :listing_number_of_bedrooms %> +
    + +
    + <%= form.label :number_of_bathrooms %> + <%= form.number_field :number_of_bathrooms, id: :listing_number_of_bathrooms %> +
    + +
    + <%= form.label :max_price_per_week %> + <%= form.number_field :max_price_per_week, id: :listing_max_price_per_week %> +
    + +
    + <%= form.label :available_date %> + <%= form.number_field :available_date, id: :listing_available_date %> +
    + +
    + <%= form.label :roles %> + <%= form.number_field :roles, id: :listing_Roles %> +
    <%= form.submit %> diff --git a/app/views/listings/_listing.json.jbuilder b/app/views/listings/_listing.json.jbuilder index c3128ba..4bcbf1f 100644 --- a/app/views/listings/_listing.json.jbuilder +++ b/app/views/listings/_listing.json.jbuilder @@ -1,2 +1,2 @@ -json.extract! listing, :id, :created_at, :updated_at +json.extract! listing, :id, :Photo, :Address, :property_type, :number_of_bedrooms, :number_of_bathrooms, :max_price_per_week, :available_date, :Roles, :created_at, :updated_at json.url listing_url(listing, format: :json) diff --git a/app/views/listings/index.html.erb b/app/views/listings/index.html.erb index 50f0202..c921e3b 100644 --- a/app/views/listings/index.html.erb +++ b/app/views/listings/index.html.erb @@ -5,6 +5,14 @@ + + + + + + + + @@ -12,6 +20,14 @@ <% @listings.each do |listing| %> + + + + + + + + diff --git a/app/views/listings/show.html.erb b/app/views/listings/show.html.erb index ca12898..2c2c6f8 100644 --- a/app/views/listings/show.html.erb +++ b/app/views/listings/show.html.erb @@ -1,4 +1,44 @@

    <%= notice %>

    +

    + Photo: + <%= @listing.photo %> +

    + +

    + Address: + <%= @listing.address %> +

    + +

    + Property type: + <%= @listing.property_type %> +

    + +

    + Number of bedrooms: + <%= @listing.number_of_bedrooms %> +

    + +

    + Number of bathrooms: + <%= @listing.number_of_bathrooms %> +

    + +

    + Max price per week: + <%= @listing.max_price_per_week %> +

    + +

    + Available date: + <%= @listing.available_date %> +

    + +

    + Roles: + <%= @listing.roles %> +

    + <%= link_to 'Edit', edit_listing_path(@listing) %> | <%= link_to 'Back', listings_path %> diff --git a/config/application.rb b/config/application.rb index c8f96c3..5a23822 100644 --- a/config/application.rb +++ b/config/application.rb @@ -15,4 +15,5 @@ module Rently # Application configuration should go into files in config/initializers # -- all .rb files in that directory are automatically loaded. end + require 'carrierwave/orm/activerecord' end diff --git a/config/cloudinary.yml b/config/cloudinary.yml new file mode 100644 index 0000000..9b0eea4 --- /dev/null +++ b/config/cloudinary.yml @@ -0,0 +1,19 @@ +--- +development: + cloud_name: curlyhappiness + api_key: '363646175522825' + api_secret: fGga3bKgIksDm7_vn9uYVFhj2T0 + enhance_image_tag: true + static_image_support: false +production: + cloud_name: curlyhappiness + api_key: '363646175522825' + api_secret: fGga3bKgIksDm7_vn9uYVFhj2T0 + enhance_image_tag: true + static_image_support: true +test: + cloud_name: curlyhappiness + api_key: '363646175522825' + api_secret: fGga3bKgIksDm7_vn9uYVFhj2T0 + enhance_image_tag: true + static_image_support: false diff --git a/config/routes.rb b/config/routes.rb index 4ab179e..ba0e842 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,6 +4,7 @@ Rails.application.routes.draw do devise_for :users get 'home/index' + root to: "home#index" # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html end diff --git a/db/migrate/20171103052641_create_listings.rb b/db/migrate/20171103052641_create_listings.rb deleted file mode 100644 index 47cfdb9..0000000 --- a/db/migrate/20171103052641_create_listings.rb +++ /dev/null @@ -1,8 +0,0 @@ -class CreateListings < ActiveRecord::Migration[5.1] - def change - create_table :listings do |t| - - t.timestamps - end - end -end diff --git a/db/migrate/20171103081805_create_listings.rb b/db/migrate/20171103081805_create_listings.rb new file mode 100644 index 0000000..bcdd9ec --- /dev/null +++ b/db/migrate/20171103081805_create_listings.rb @@ -0,0 +1,16 @@ +class CreateListings < ActiveRecord::Migration[5.1] + def change + create_table :listings do |t| + t.text :photo + t.string :address + t.string :property_type + t.integer :number_of_bedrooms + t.integer :number_of_bathrooms + t.integer :max_price_per_week + t.integer :available_date + t.integer :roles + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index b532cff..82c0e7d 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,11 +10,24 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20171103035249) do +ActiveRecord::Schema.define(version: 20171103081805) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" + create_table "listings", force: :cascade do |t| + t.text "photo" + t.string "address" + t.string "property_type" + t.integer "number_of_bedrooms" + t.integer "number_of_bathrooms" + t.integer "max_price_per_week" + t.integer "available_date" + t.integer "roles" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + create_table "roles", force: :cascade do |t| t.string "name" t.string "resource_type" diff --git a/public/apple-touch-icon-precomposed.png b/public/apple-touch-icon-precomposed.png deleted file mode 100644 index e69de29..0000000 diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png deleted file mode 100644 index e69de29..0000000 diff --git a/public/uploads/listing/photo/4/Banana-1024x679.jpg b/public/uploads/listing/photo/4/Banana-1024x679.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cd2c761d6ae8f51e3504b8e3c27f8a4e4819b6fc GIT binary patch literal 46802 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 "MyString", + :Address => "MyString", + :property_type => "MyString", + :number_of_bedrooms => 1, + :number_of_bathrooms => 1, + :max_price_per_week => 1, + :available_date => 1, + :Roles => 1 + )) end it "renders the edit listing form" do render assert_select "form[action=?][method=?]", listing_path(@listing), "post" do + + assert_select "input[name=?]", "listing[Photo]" + + assert_select "input[name=?]", "listing[Address]" + + assert_select "input[name=?]", "listing[property_type]" + + assert_select "input[name=?]", "listing[number_of_bedrooms]" + + assert_select "input[name=?]", "listing[number_of_bathrooms]" + + assert_select "input[name=?]", "listing[max_price_per_week]" + + assert_select "input[name=?]", "listing[available_date]" + + assert_select "input[name=?]", "listing[Roles]" end end end diff --git a/spec/views/listings/index.html.erb_spec.rb b/spec/views/listings/index.html.erb_spec.rb index d3612b2..01090df 100644 --- a/spec/views/listings/index.html.erb_spec.rb +++ b/spec/views/listings/index.html.erb_spec.rb @@ -3,12 +3,38 @@ require 'rails_helper' RSpec.describe "listings/index", type: :view do before(:each) do assign(:listings, [ - Listing.create!(), - Listing.create!() + Listing.create!( + :Photo => "Photo", + :Address => "Address", + :property_type => "Property Type", + :number_of_bedrooms => 2, + :number_of_bathrooms => 3, + :max_price_per_week => 4, + :available_date => 5, + :Roles => 6 + ), + Listing.create!( + :Photo => "Photo", + :Address => "Address", + :property_type => "Property Type", + :number_of_bedrooms => 2, + :number_of_bathrooms => 3, + :max_price_per_week => 4, + :available_date => 5, + :Roles => 6 + ) ]) end it "renders a list of listings" do render + assert_select "tr>td", :text => "Photo".to_s, :count => 2 + assert_select "tr>td", :text => "Address".to_s, :count => 2 + assert_select "tr>td", :text => "Property Type".to_s, :count => 2 + assert_select "tr>td", :text => 2.to_s, :count => 2 + assert_select "tr>td", :text => 3.to_s, :count => 2 + assert_select "tr>td", :text => 4.to_s, :count => 2 + assert_select "tr>td", :text => 5.to_s, :count => 2 + assert_select "tr>td", :text => 6.to_s, :count => 2 end end diff --git a/spec/views/listings/new.html.erb_spec.rb b/spec/views/listings/new.html.erb_spec.rb index a3be8b5..dc7f18d 100644 --- a/spec/views/listings/new.html.erb_spec.rb +++ b/spec/views/listings/new.html.erb_spec.rb @@ -2,13 +2,38 @@ require 'rails_helper' RSpec.describe "listings/new", type: :view do before(:each) do - assign(:listing, Listing.new()) + assign(:listing, Listing.new( + :Photo => "MyString", + :Address => "MyString", + :property_type => "MyString", + :number_of_bedrooms => 1, + :number_of_bathrooms => 1, + :max_price_per_week => 1, + :available_date => 1, + :Roles => 1 + )) end it "renders new listing form" do render assert_select "form[action=?][method=?]", listings_path, "post" do + + assert_select "input[name=?]", "listing[Photo]" + + assert_select "input[name=?]", "listing[Address]" + + assert_select "input[name=?]", "listing[property_type]" + + assert_select "input[name=?]", "listing[number_of_bedrooms]" + + assert_select "input[name=?]", "listing[number_of_bathrooms]" + + assert_select "input[name=?]", "listing[max_price_per_week]" + + assert_select "input[name=?]", "listing[available_date]" + + assert_select "input[name=?]", "listing[Roles]" end end end diff --git a/spec/views/listings/show.html.erb_spec.rb b/spec/views/listings/show.html.erb_spec.rb index 0a487e6..1549462 100644 --- a/spec/views/listings/show.html.erb_spec.rb +++ b/spec/views/listings/show.html.erb_spec.rb @@ -2,10 +2,27 @@ require 'rails_helper' RSpec.describe "listings/show", type: :view do before(:each) do - @listing = assign(:listing, Listing.create!()) + @listing = assign(:listing, Listing.create!( + :Photo => "Photo", + :Address => "Address", + :property_type => "Property Type", + :number_of_bedrooms => 2, + :number_of_bathrooms => 3, + :max_price_per_week => 4, + :available_date => 5, + :Roles => 6 + )) end it "renders attributes in

    " do render + expect(rendered).to match(/Photo/) + expect(rendered).to match(/Address/) + expect(rendered).to match(/Property Type/) + expect(rendered).to match(/2/) + expect(rendered).to match(/3/) + expect(rendered).to match(/4/) + expect(rendered).to match(/5/) + expect(rendered).to match(/6/) end end

    PhotoAddressProperty typeNumber of bedroomsNumber of bathroomsMax price per weekAvailable dateRoles
    <%= image_tag listing.photo_url %><%= listing.address %><%= listing.property_type %><%= listing.number_of_bedrooms %><%= listing.number_of_bathrooms %><%= listing.max_price_per_week %><%= listing.available_date %><%= listing.roles %> <%= link_to 'Show', listing %> <%= link_to 'Edit', edit_listing_path(listing) %> <%= link_to 'Destroy', listing, method: :delete, data: { confirm: 'Are you sure?' } %>