diff --git a/README.md b/README.md index fee8f0b..e4e7865 100644 --- a/README.md +++ b/README.md @@ -47,3 +47,7 @@ You should be ready to go. Start the app by running: $ powder up + +Stop powder: + + $ powder down diff --git a/app/controllers/admin/sponsors_controller.rb b/app/controllers/admin/sponsors_controller.rb new file mode 100644 index 0000000..7a88a4d --- /dev/null +++ b/app/controllers/admin/sponsors_controller.rb @@ -0,0 +1,51 @@ +class Admin::SponsorsController < AdminController + + before_action :find_sponsor, only: [:show, :edit, :update] + + def index + @sponsors = Sponsor.all + end + + def show + end + + def new + @sponsor = Sponsor.new + end + + def create + @sponsor = Sponsor.new(sponsor_params) + if @sponsor.save + flash[:success] = "Patrocinador registrado con éxito." + redirect_to admin_sponsors_path + else + flash[:error] = "No se pudo registrar patrocinador: #{@sponsor.humanized_errors}" + render :new + end + end + + def edit + end + + def update + respond_to do |format| + if @sponsor.update(sponsor_params) + format.html { redirect_to admin_sponsors_path, notice: 'Patrocinador actualizado con éxito.' } + format.json { render :index, status: :ok, location: @sponsor } + else + format.html { render :edit, error: "No se pudo actualizar patrocinador: #{@sponsor.humanized_errors}" } + format.json { render json: @sponsor.errors, status: :unprocessable_entity } + end + end + end + + private + + def sponsor_params + params.require(:sponsor).permit :name, :website, :twitter, :image, :active + end + + def find_sponsor + @sponsor = Sponsor.find(params[:id]) + end +end diff --git a/app/controllers/app/home_controller.rb b/app/controllers/app/home_controller.rb index 4500c21..78996bb 100644 --- a/app/controllers/app/home_controller.rb +++ b/app/controllers/app/home_controller.rb @@ -3,6 +3,7 @@ class App::HomeController < AppController def show @event = Event.includes({ talks: :speaker }, :venue).current @talks = @event.talks.accepted + @sponsors = Sponsor.active_sponsors end end diff --git a/app/models/sponsor.rb b/app/models/sponsor.rb index 2d4de15..097e18d 100644 --- a/app/models/sponsor.rb +++ b/app/models/sponsor.rb @@ -1,68 +1,3 @@ -class Sponsor - - def self.all - [ - #{ - #name: 'Cocoworking', - #website: 'https://www.facebook.com/CoCoWorkingMx', - #twitter: 'elcocoworking', - #image: 'sponsors/cocoworking.jpg' - #}, - #{ - #name: 'Don chambitas', - #website: 'http://www.donchambitas.com', - #twitter: 'DonChambitas', - #image: 'sponsors/chambitas.jpg' - #}, - { - name: 'densitylabs', - website:'https://twitter.com/densitylabs', - twitter: 'densitylabs', - image: 'sponsors/densitylabs.jpg' - }, - # { - # name: 'easybroker', - # website: "https://www.easybroker.com", - # twitter: 'EasyBroker', - # image: 'sponsors/eb.jpg' - # }, - #{ - #name: 'vauxoo', - #website: "https://www.vauxoo.com", - #twitter: 'vauxoo', - #image: 'sponsors/vauxoo.png' - #}, - { - name: 'magmalabs', - website: "http://www.magmalabs.io", - twitter: 'weareMagmaLabs', - image: 'sponsors/magmalabs.png' - }, - { - name: 'micheladaio', - website: 'http://michelada.io', - twitter: 'micheladaio', - image: 'sponsors/micheladaio.png' - }, - #{ - #name: 'netmask', - #website: "http://devmask.net/", - #twitter: 'netmask', - #image: 'sponsors/netmask.jpg' - #}, - { - name: 'Tango.io', - website: 'http://tango.io', - twitter: 'tangosource', - image: 'sponsors/tangoio.svg' - } - # { - # name: 'The Office', - # website: "http://theofficecowork.com/", - # twitter: 'TheOfficeCowork', - # image: 'sponsors/theoffice.jpg' - # } - ] - end - +class Sponsor < ActiveRecord::Base + scope :active_sponsors, -> { where(active: true).shuffle } end diff --git a/app/views/admin/sponsors/_form.html.slim b/app/views/admin/sponsors/_form.html.slim new file mode 100644 index 0000000..1242bc5 --- /dev/null +++ b/app/views/admin/sponsors/_form.html.slim @@ -0,0 +1,25 @@ += form_for [:admin, sponsor], html: { class: "form-horizontal" } do |f| + + .form-group + = f.label :name, "Nombre", class: "col-md-2" + .col-md-8 + = f.text_field :name, class: "form-control" + + .form-group + = f.label :website, "Website", class: "col-md-2" + .col-md-8 + = f.text_field :website, class: "form-control" + + .form-group + = f.label :twitter, "Twitter", class: "col-md-2" + .col-md-8 + = f.text_field :twitter, class: "form-control" + + .form-group + = f.label :image, "Image", class: "col-md-2" + .col-md-8 + = f.text_field :image, class: "form-control" + + .form-group + .col-md-offset-2.col-md-2 + = f.submit "#{sponsor.new_record? ? "Crear" : "Guardar"} patrocinador", class: "btn btn-primary" diff --git a/app/views/admin/sponsors/_sponsor.html.slim b/app/views/admin/sponsors/_sponsor.html.slim new file mode 100644 index 0000000..17b262e --- /dev/null +++ b/app/views/admin/sponsors/_sponsor.html.slim @@ -0,0 +1,14 @@ +tr + td= sponsor.name + td= sponsor.website + td= sponsor.twitter + td + - if sponsor.active + = link_to admin_sponsor_path(sponsor, sponsor: { active: false} ), method: :patch do + i.glyphicon.glyphicon-remove + - else + = link_to admin_sponsor_path(sponsor, sponsor: { active: true} ), method: :patch do + i.glyphicon.glyphicon-ok + td + = link_to edit_admin_sponsor_path(sponsor) do + i.glyphicon.glyphicon-edit diff --git a/app/views/admin/sponsors/edit.html.slim b/app/views/admin/sponsors/edit.html.slim new file mode 100644 index 0000000..cebe5be --- /dev/null +++ b/app/views/admin/sponsors/edit.html.slim @@ -0,0 +1,5 @@ +.row + .col-md-6 + h2 Editar patrocinador + + = render partial: 'form', locals: { sponsor: @sponsor } diff --git a/app/views/admin/sponsors/index.html.slim b/app/views/admin/sponsors/index.html.slim new file mode 100644 index 0000000..997179b --- /dev/null +++ b/app/views/admin/sponsors/index.html.slim @@ -0,0 +1,14 @@ +h2 Ponentes + +table.table.table-hover.table-stripped + thead + tr + th Nombre + th Website + th Twitter + th Active + + tbody + = render @sponsors + += link_to 'Nuevo patrocinador', new_admin_sponsor_path, class: 'btn btn-default' diff --git a/app/views/admin/sponsors/new.html.slim b/app/views/admin/sponsors/new.html.slim new file mode 100644 index 0000000..1437dbd --- /dev/null +++ b/app/views/admin/sponsors/new.html.slim @@ -0,0 +1,5 @@ +.row + .col-md-6 + h2 Nuevo patrocinador + + = render partial: 'form', locals: { sponsor: @sponsor } diff --git a/app/views/admin/sponsors/show.html.slim b/app/views/admin/sponsors/show.html.slim new file mode 100644 index 0000000..0447e5c --- /dev/null +++ b/app/views/admin/sponsors/show.html.slim @@ -0,0 +1,14 @@ +h2= @sponsor.name + +.row + .col-sm-3.col-md-3 + .thumbnail + img src=@sponsor.image + + .col-sm-4.col-md-4 + h3= link_to "https://twitter.com/#{@sponsor.twitter}" do + i.fa.fa-twitter + = " #{@sponsor.twitter}" + h4= link_to "mailto:#{@sponsor.website}" do + i.fa.fa-envelope-o + = " #{@sponsor.website}" diff --git a/app/views/app/home/_sponsors.html.slim b/app/views/app/home/_sponsors.html.slim index 4cd3f3e..8a4aec9 100644 --- a/app/views/app/home/_sponsors.html.slim +++ b/app/views/app/home/_sponsors.html.slim @@ -5,7 +5,7 @@ h2 Patrocinadores div ul.small-block-grid-1.medium-block-grid-2.large-block-grid-4 - - Sponsor.all.shuffle.each do |sponsor| + - sponsors.each do |sponsor| li = link_to sponsor[:website], target: '_blank' do = image_tag sponsor[:image], height: 85, width: 200 diff --git a/app/views/app/home/show.html.slim b/app/views/app/home/show.html.slim index 193eefa..b9ad165 100644 --- a/app/views/app/home/show.html.slim +++ b/app/views/app/home/show.html.slim @@ -27,7 +27,7 @@ = render partial: 'speakers', locals: { event: @event, talks: @talks } = render partial: 'venue', locals: { venue: @event.venue } -= render 'sponsors' += render partial: 'sponsors', locals: { sponsors: @sponsors } = render 'about' /= render 'schedule' diff --git a/app/views/layouts/admin.html.slim b/app/views/layouts/admin.html.slim index 1405fc8..9df986a 100644 --- a/app/views/layouts/admin.html.slim +++ b/app/views/layouts/admin.html.slim @@ -31,6 +31,7 @@ html lang='es' li= link_to 'Lugares', admin_venues_path li= link_to 'Ponentes', admin_speakers_path li= link_to 'Ubicaciones', admin_locations_path + li= link_to 'Patrocinadores', admin_sponsors_path ul.nav.navbar-nav.pull-right li.dropdown diff --git a/config/routes.rb b/config/routes.rb index 5b07fa9..7166f92 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -20,7 +20,7 @@ resources :speakers resources :talks resources :venues - + resources :sponsors end scope module: :app do diff --git a/db/migrate/20160727065507_create_sponsors.rb b/db/migrate/20160727065507_create_sponsors.rb new file mode 100644 index 0000000..bfbb008 --- /dev/null +++ b/db/migrate/20160727065507_create_sponsors.rb @@ -0,0 +1,12 @@ +class CreateSponsors < ActiveRecord::Migration + def change + create_table :sponsors do |t| + t.string :name + t.string :website + t.string :twitter + t.string :image + + t.timestamps null: false + end + end +end diff --git a/db/migrate/20160727065713_add_active_to_sponsors.rb b/db/migrate/20160727065713_add_active_to_sponsors.rb new file mode 100644 index 0000000..5e6c8d2 --- /dev/null +++ b/db/migrate/20160727065713_add_active_to_sponsors.rb @@ -0,0 +1,5 @@ +class AddActiveToSponsors < ActiveRecord::Migration + def change + add_column :sponsors, :active, :boolean + end +end diff --git a/db/migrate/20160727072144_add_not_null_to_active.rb b/db/migrate/20160727072144_add_not_null_to_active.rb new file mode 100644 index 0000000..0cc6c12 --- /dev/null +++ b/db/migrate/20160727072144_add_not_null_to_active.rb @@ -0,0 +1,6 @@ +class AddNotNullToActive < ActiveRecord::Migration + def change + Sponsor.update_all(active: false) + change_column :sponsors, :active, :boolean, null: false, default: false + end +end diff --git a/db/schema.rb b/db/schema.rb index 722ceb9..2125406 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20160426171806) do +ActiveRecord::Schema.define(version: 20160727072144) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -56,6 +56,16 @@ t.datetime "updated_at" end + create_table "sponsors", force: :cascade do |t| + t.string "name" + t.string "website" + t.string "twitter" + t.string "image" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.boolean "active", default: false, null: false + end + create_table "talks", force: :cascade do |t| t.string "title" t.string "description" diff --git a/spec/controllers/admin/sponsors_controller_spec.rb b/spec/controllers/admin/sponsors_controller_spec.rb new file mode 100644 index 0000000..0fd665a --- /dev/null +++ b/spec/controllers/admin/sponsors_controller_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +describe Admin::SponsorsController do + pending +end diff --git a/spec/fabricators/sponsor_fabricator.rb b/spec/fabricators/sponsor_fabricator.rb new file mode 100644 index 0000000..c3f18e8 --- /dev/null +++ b/spec/fabricators/sponsor_fabricator.rb @@ -0,0 +1,6 @@ +Fabricator(:sponsor) do + name "MyString" + website "MyString" + twitter "MyString" + image "MyString" +end diff --git a/spec/models/sponsor_spec.rb b/spec/models/sponsor_spec.rb index 7970c90..d74555f 100644 --- a/spec/models/sponsor_spec.rb +++ b/spec/models/sponsor_spec.rb @@ -1,5 +1,5 @@ require 'rails_helper' -describe Sponsor do - pending +RSpec.describe Sponsor, type: :model do + pending "add some examples to (or delete) #{__FILE__}" end