Social media component

This commit is contained in:
Gopesh Tulsyan 2014-06-02 17:44:43 +05:30
parent 069cc0eb4c
commit 59d1e2c723
21 changed files with 87 additions and 11 deletions

View file

@ -1,6 +1,6 @@
source 'https://rubygems.org' source 'https://rubygems.org'
# Use rails as framework # Use rails as framework
gem 'rails', '~> 4.1' gem 'rails', '~> 4.1'
# Use mysql as the database for Active Record # Use mysql as the database for Active Record
@ -82,13 +82,13 @@ group :development, :test do
gem 'shoulda' gem 'shoulda'
end end
# FIXME: We should use http://weblog.rubyonrails.org/2012/3/21/strong-parameters/ # FIXME: We should use http://weblog.rubyonrails.org/2012/3/21/strong-parameters/
gem 'protected_attributes' gem 'protected_attributes'
# We use this bootstrap/html5 rdoc generator # We use this bootstrap/html5 rdoc generator
gem 'rdoc-generator-fivefish' gem 'rdoc-generator-fivefish'
# We use factory_girl for seeds # We use factory_girl for seeds
gem 'factory_girl_rails' gem 'factory_girl_rails'
# Use guard and spring for testing in development # Use guard and spring for testing in development

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 938 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View file

@ -2,6 +2,7 @@
# This class represents a conference # This class represents a conference
class Conference < ActiveRecord::Base class Conference < ActiveRecord::Base
require 'uri'
attr_accessible :title, :short_title, :social_tag, :contact_email, :timezone, :html_export_path, attr_accessible :title, :short_title, :social_tag, :contact_email, :timezone, :html_export_path,
:start_date, :end_date, :rooms_attributes, :tracks_attributes, :dietary_choices_attributes, :start_date, :end_date, :rooms_attributes, :tracks_attributes, :dietary_choices_attributes,
:use_dietary_choices, :use_supporter_levels, :supporter_levels_attributes, :social_events_attributes, :use_dietary_choices, :use_supporter_levels, :supporter_levels_attributes, :social_events_attributes,
@ -10,7 +11,8 @@ class Conference < ActiveRecord::Base
:difficulty_levels_attributes, :use_difficulty_levels, :difficulty_levels_attributes, :use_difficulty_levels,
:use_vpositions, :use_vdays, :vdays_attributes, :vpositions_attributes, :use_volunteers, :use_vpositions, :use_vdays, :vdays_attributes, :vpositions_attributes, :use_volunteers,
:media_id, :media_type, :color, :description, :media_id, :media_type, :color, :description,
:registration_description, :ticket_description :registration_description, :ticket_description, :facebook_url,
:google_url, :twitter_url
has_paper_trail has_paper_trail
@ -59,6 +61,8 @@ class Conference < ActiveRecord::Base
:social_tag, :social_tag,
:start_date, :start_date,
:end_date :end_date
validates :facebook_url, :twitter_url, :google_url,
format: URI::regexp(%w(http https)), allow_blank: true
validates_uniqueness_of :short_title validates_uniqueness_of :short_title
validates_format_of :short_title, :with => /\A[a-zA-Z0-9_-]*\z/ validates_format_of :short_title, :with => /\A[a-zA-Z0-9_-]*\z/
before_create :generate_guid before_create :generate_guid

View file

@ -24,9 +24,12 @@
= f.input :media_type, :as => :select, :label => "Conference Promo Media Type", :class=>"form-control", :collection => Conference.media_types.values, :include_blank => false, :hint => "This media-item will be used to represent this conference at various places in OSEM." = f.input :media_type, :as => :select, :label => "Conference Promo Media Type", :class=>"form-control", :collection => Conference.media_types.values, :include_blank => false, :hint => "This media-item will be used to represent this conference at various places in OSEM."
= f.input :media_id, :label => "Conference Promo Media ID", :as => :string = f.input :media_id, :label => "Conference Promo Media ID", :as => :string
%p{:class => "help-block media-type", :id => "youtube-help"} Go to your YouTube video, click on "share" and copy everything behind http://youtu.be/" %p{:class => "help-block media-type", :id => "youtube-help"} Go to your YouTube video, click on "share" and copy everything behind http://youtu.be/"
%p{:class => "help-block media-type", :id => "slideshare-help", :style => "display:none"} Go to your SlideShare, click on "share" -> "embed" and copy the id %p{:class => "help-block media-type", :id => "slideshare-help", :style => "display:none"} Go to your SlideShare, click on "share" -> "link" and copy the link
%p{:class => "help-block media-type", :id => "flickr-help", :style => "display:none"} Go to your flickr image, click on "Grab the link" -> "Show short url" and copy everything behind https://flic.kr/p/ %p{:class => "help-block media-type", :id => "flickr-help", :style => "display:none"} Go to your flickr image, click on "Grab the link" -> "Show short url" and copy everything behind https://flic.kr/p/
%p{:class => "help-block media-type", :id => "vimeo-help", :style => "display:none"} Go to your vimeo video, click on "share" and copy everything behind http://vimeo.com/ %p{:class => "help-block media-type", :id => "vimeo-help", :style => "display:none"} Go to your vimeo video, click on "share" and copy everything behind http://vimeo.com/
%p{:class => "help-block media-type", :id => "speakerdeck-help", :style => "display:none"} Go to your SpeakerDeck, click on "share" -> "embed" and copy the data-id %p{:class => "help-block media-type", :id => "speakerdeck-help", :style => "display:none"} Go to your SpeakerDeck, click on "share" -> "link" and copy the link
%p{:class => "help-block media-type", :id => "instagram-help", :style => "display:none"} Go to your Instagram photo page and copy everything behind instagram.com/p/ (without trailing /# hash symbol) %p{:class => "help-block media-type", :id => "instagram-help", :style => "display:none"} Go to your Instagram photo page and copy everything behind instagram.com/p/ (without trailing /# hash symbol)
= f.input :facebook_url, hint: 'This will appear in the social media section as link to the Facebook page of your Conference'
= f.input :google_url, label: 'Google+ Url', hint: 'This will appear in the social media section as the link to the Google+ Page of your Conference'
= f.input :twitter_url, hint: 'This will appear in the social media section as the link to the Twitter Page of your Conference'
= f.action :submit, :as => :button, :button_html => {:class => "btn btn-primary"} = f.action :submit, :as => :button, :button_html => {:class => "btn btn-primary"}

View file

@ -3,7 +3,7 @@
%a{ href: '#registration' } Registration %a{ href: '#registration' } Registration
%div.container.text-center %div.container.text-center
%div.row %div.row
%h2 Registration %h1 Registration
- if !@conference.registration_description.blank? - if !@conference.registration_description.blank?
%p %p
= @conference.registration_description = @conference.registration_description

View file

@ -0,0 +1,36 @@
= content_for :splash_nav do
%li
%a{ href: '#social-media' } Social Media
%div.container#social-media.text-center
%h1 We are Social
%div.row
- if !@conference.facebook_url.blank?
%div.col-md-3
= link_to image_tag('fb-logo-blue.png', class: 'img-responsive'),
"#{ @conference.facebook_url }"
- if !@conference.twitter_url.blank?
%div.col-md-3
= link_to image_tag('twitter-logo-blue.png', class: 'img-responsive'), "#{ @conference.twitter_url }"
- if !@conference.media_type.blank? && !@conference.media_id.blank?
%div.col-md-3
-if @conference.media_type == 'YouTube'
= link_to image_tag('youtube-color-logo.png', class: 'img-responsive'),
"http://youtu.be/#{ @conference.media_id}"
-if @conference.media_type == 'SlideShare'
= link_to image_tag('slideshare.png', class: 'img-responsive'), "#{ @conference.media_id}"
-if @conference.media_type == 'Instagram'
= link_to image_tag('instagram.png', class: 'img-responsive'),
"http://instagram.com/p/#{ @conference.media_id}"
-if @conference.media_type == 'Vimeo'
= link_to image_tag('vimeo-logo-dark.png', class: 'img-responsive'),
"http://vimeo.com/#{ @conference.media_id}"
-if @conference.media_type == 'Speakerdeck'
= link_to image_tag('speakerdeck.png', class: 'img-responsive'),"#{ @conference.media_id}"
-if @conference.media_type == 'Flickr'
= link_to image_tag('flickr.png', class: 'img-responsive'),
"https://flic.kr/p/#{ @conference.media_id}"
- if !@conference.google_url.blank?
%div.col-md-3
= link_to image_tag('google-logo.png', class: 'img-responsive'),
"#{ @conference.google_url }"

View file

@ -1,5 +1,5 @@
%div.row %div.row
%h3 Tickets %h2 Tickets
-if !@conference.ticket_description.blank? -if !@conference.ticket_description.blank?
%p #{ @conference.ticket_description } %p #{ @conference.ticket_description }
- @conference.supporter_levels.each do |s| - @conference.supporter_levels.each do |s|

View file

@ -1,9 +1,13 @@
= content_for :brand do = content_for :brand do
= link_to @conference.title, conference_url(@conference.short_title), class: 'navbar-brand' = link_to @conference.title, conference_url(@conference.short_title), class: 'navbar-brand'
%div#program %div#program
= render 'program' = render 'program'
%div#registration %div#registration
= render 'registration' = render 'registration'
%div#callforpapers %div#callforpapers
= render 'call_for_papers' = render 'call_for_papers'
%div#social-media
= render 'social_media'

View file

@ -0,0 +1,5 @@
class AddFacebookUrlToConference < ActiveRecord::Migration
def change
add_column :conferences, :facebook_url, :string
end
end

View file

@ -0,0 +1,5 @@
class AddGoogleUrlToConference < ActiveRecord::Migration
def change
add_column :conferences, :google_url, :string
end
end

View file

@ -0,0 +1,5 @@
class AddTwitterUrlToConference < ActiveRecord::Migration
def change
add_column :conferences, :twitter_url, :string
end
end

View file

@ -81,6 +81,9 @@ ActiveRecord::Schema.define(version: 20140605125153) do
t.text "description" t.text "description"
t.text "registration_description" t.text "registration_description"
t.text "ticket_description" t.text "ticket_description"
t.string "facebook_url"
t.string "google_url"
t.string "twitter_url"
end end
create_table "conferences_questions", id: false, force: true do |t| create_table "conferences_questions", id: false, force: true do |t|

View file

@ -4,14 +4,18 @@ describe 'conference/show.html.haml' do
@conference = create(:conference, registration_description: 'Lorem Ipsum Dolor', @conference = create(:conference, registration_description: 'Lorem Ipsum Dolor',
registration_start_date: Date.today, registration_start_date: Date.today,
registration_end_date: Date.tomorrow, registration_end_date: Date.tomorrow,
description: 'Lorem Ipsum') description: 'Lorem Ipsum',
facebook_url: 'http://www.fbexample.com',
google_url: 'http://www.google-example.com',
media_type: 'YouTube',
media_id: 'rtyutut')
@conference.call_for_papers = create(:call_for_papers, conference: @conference) @conference.call_for_papers = create(:call_for_papers, conference: @conference)
assign :conference, @conference assign :conference, @conference
render render
end end
it 'renders program partial' do it 'renders program partial' do
expect(render).to include("#{@conference.description}") expect(rendered).to include("#{@conference.description}")
expect(view).to render_template(partial: 'conference/_program') expect(view).to render_template(partial: 'conference/_program')
end end
@ -21,6 +25,13 @@ describe 'conference/show.html.haml' do
end end
it 'renders call_for_papers partial' do it 'renders call_for_papers partial' do
expect(render).to include("#{@conference.call_for_papers.description}") expect(rendered).to include("#{@conference.call_for_papers.description}")
end
it 'renders social media partial' do
expect(view).to render_template('conference/_social_media')
expect(rendered).to include('http://www.fbexample.com')
expect(rendered).to include('http://www.google-example.com')
expect(rendered).to include('http://youtu.be/rtyutut')
end end
end end