mirror of
https://github.com/ENSL/ensl.org.git
synced 2024-12-25 20:11:34 +00:00
Added timezone based google calendar widget
Updated unicorn and capistrano deployment configuration for the staging environment HTML formatting Fixes errors when posting new issues Added Google Calendar client code CSS tweaks to layout Added new .env vars Layout tweaks Updated contributors
This commit is contained in:
parent
53e520e0d2
commit
c2309dd2ef
29 changed files with 1065 additions and 41 deletions
|
@ -2,6 +2,8 @@ RACK_ENV=
|
||||||
RAILS_ENV=
|
RAILS_ENV=
|
||||||
APP_SECRET=
|
APP_SECRET=
|
||||||
|
|
||||||
|
DEPLOY_PATH=
|
||||||
|
|
||||||
UNICORN_USER=deploy
|
UNICORN_USER=deploy
|
||||||
UNICORN_GROUP=deploy
|
UNICORN_GROUP=deploy
|
||||||
UNICORN_WORKERS=4
|
UNICORN_WORKERS=4
|
||||||
|
@ -18,4 +20,5 @@ NEW_RELIC_LICENSE_KEY=
|
||||||
|
|
||||||
EXCEPTIONAL_API_KEY=
|
EXCEPTIONAL_API_KEY=
|
||||||
|
|
||||||
|
GOOGLE_API_KEY=
|
||||||
GOOGLE_CALENDAR_ID=
|
GOOGLE_CALENDAR_ID=
|
||||||
|
|
2
Gemfile
2
Gemfile
|
@ -9,6 +9,7 @@ gem 'dalli', '~> 2.7.0'
|
||||||
|
|
||||||
gem 'exceptional', '~> 2.0.33'
|
gem 'exceptional', '~> 2.0.33'
|
||||||
gem 'oj', '~> 2.5.5'
|
gem 'oj', '~> 2.5.5'
|
||||||
|
gem 'faraday', '~> 0.9.0'
|
||||||
gem 'gruff', '~> 0.3.6'
|
gem 'gruff', '~> 0.3.6'
|
||||||
gem 'nokogiri', '~> 1.6.1'
|
gem 'nokogiri', '~> 1.6.1'
|
||||||
gem 'bbcoder', '~> 1.0.1'
|
gem 'bbcoder', '~> 1.0.1'
|
||||||
|
@ -50,6 +51,7 @@ group :test do
|
||||||
gem 'poltergeist', '~> 1.5.0'
|
gem 'poltergeist', '~> 1.5.0'
|
||||||
gem 'selenium-webdriver', '~> 2.41.0'
|
gem 'selenium-webdriver', '~> 2.41.0'
|
||||||
gem 'factory_girl_rails', '~> 4.4.1'
|
gem 'factory_girl_rails', '~> 4.4.1'
|
||||||
|
gem 'timecop', '~> 0.7.1'
|
||||||
end
|
end
|
||||||
|
|
||||||
group :development, :test do
|
group :development, :test do
|
||||||
|
|
|
@ -100,6 +100,8 @@ GEM
|
||||||
factory_girl_rails (4.4.1)
|
factory_girl_rails (4.4.1)
|
||||||
factory_girl (~> 4.4.0)
|
factory_girl (~> 4.4.0)
|
||||||
railties (>= 3.0.0)
|
railties (>= 3.0.0)
|
||||||
|
faraday (0.9.0)
|
||||||
|
multipart-post (>= 1.2, < 3)
|
||||||
ffi (1.9.3)
|
ffi (1.9.3)
|
||||||
ffi (1.9.3-x86-mingw32)
|
ffi (1.9.3-x86-mingw32)
|
||||||
gruff (0.3.6)
|
gruff (0.3.6)
|
||||||
|
@ -119,6 +121,7 @@ GEM
|
||||||
mime-types (1.25.1)
|
mime-types (1.25.1)
|
||||||
mini_portile (0.5.3)
|
mini_portile (0.5.3)
|
||||||
multi_json (1.8.4)
|
multi_json (1.8.4)
|
||||||
|
multipart-post (2.0.0)
|
||||||
mysql2 (0.3.15)
|
mysql2 (0.3.15)
|
||||||
net-scp (1.1.2)
|
net-scp (1.1.2)
|
||||||
net-ssh (>= 2.6.5)
|
net-ssh (>= 2.6.5)
|
||||||
|
@ -223,6 +226,7 @@ GEM
|
||||||
ref
|
ref
|
||||||
thor (0.18.1)
|
thor (0.18.1)
|
||||||
tilt (1.4.1)
|
tilt (1.4.1)
|
||||||
|
timecop (0.7.1)
|
||||||
tins (1.0.1)
|
tins (1.0.1)
|
||||||
tinymce-rails (3.5.9)
|
tinymce-rails (3.5.9)
|
||||||
railties (>= 3.1.1)
|
railties (>= 3.1.1)
|
||||||
|
@ -268,6 +272,7 @@ DEPENDENCIES
|
||||||
dynamic_form (~> 1.1.4)
|
dynamic_form (~> 1.1.4)
|
||||||
exceptional (~> 2.0.33)
|
exceptional (~> 2.0.33)
|
||||||
factory_girl_rails (~> 4.4.1)
|
factory_girl_rails (~> 4.4.1)
|
||||||
|
faraday (~> 0.9.0)
|
||||||
gruff (~> 0.3.6)
|
gruff (~> 0.3.6)
|
||||||
jquery-rails (~> 2.0.2)
|
jquery-rails (~> 2.0.2)
|
||||||
kgio (~> 2.9.2)
|
kgio (~> 2.9.2)
|
||||||
|
@ -286,6 +291,7 @@ DEPENDENCIES
|
||||||
selenium-webdriver (~> 2.41.0)
|
selenium-webdriver (~> 2.41.0)
|
||||||
simplecov (~> 0.7.1)
|
simplecov (~> 0.7.1)
|
||||||
therubyracer (~> 0.12.1)
|
therubyracer (~> 0.12.1)
|
||||||
|
timecop (~> 0.7.1)
|
||||||
tinymce-rails (~> 3.5.9)
|
tinymce-rails (~> 3.5.9)
|
||||||
uglifier (~> 2.5.0)
|
uglifier (~> 2.5.0)
|
||||||
unicorn (~> 4.8.2)
|
unicorn (~> 4.8.2)
|
||||||
|
|
|
@ -32,6 +32,7 @@ Features:
|
||||||
|
|
||||||
## Contributors
|
## Contributors
|
||||||
|
|
||||||
- [Ari Timonen](https://github.com/jirikivaari) - Original author
|
- [Ari Timonen](https://github.com/jirikivaari) (Original Author)
|
||||||
- [Florent Latombe](https://github.com/flatombe) - Improvements
|
- [Florent Latombe](https://github.com/flatombe)
|
||||||
- [Luke Barratt](https://github.com/lbarratt) - Improvements
|
- [Luke Barratt](https://github.com/lbarratt)
|
||||||
|
- [Callum Barratt](https://github.com/cbarratt)
|
|
@ -6,8 +6,9 @@ div
|
||||||
&.article
|
&.article
|
||||||
@include rounded-corners
|
@include rounded-corners
|
||||||
@include shadow
|
@include shadow
|
||||||
width: 650px
|
width: 100%
|
||||||
padding: 0px
|
padding: 0px
|
||||||
|
margin-right: 0
|
||||||
margin-bottom: 20px
|
margin-bottom: 20px
|
||||||
border: 1px solid #d7d7d7
|
border: 1px solid #d7d7d7
|
||||||
background-color: $bg_box
|
background-color: $bg_box
|
||||||
|
@ -16,8 +17,9 @@ div
|
||||||
&.article
|
&.article
|
||||||
> h1
|
> h1
|
||||||
@include shaded-top
|
@include shaded-top
|
||||||
|
box-sizing: border-box
|
||||||
margin: 0
|
margin: 0
|
||||||
width: 630px
|
width: 100%
|
||||||
font-size: 140%
|
font-size: 140%
|
||||||
h1 a
|
h1 a
|
||||||
color: #ffffff
|
color: #ffffff
|
||||||
|
|
|
@ -164,7 +164,7 @@ input
|
||||||
float: right
|
float: right
|
||||||
|
|
||||||
.big
|
.big
|
||||||
width: 65%
|
width: 70%
|
||||||
|
|
||||||
.big2
|
.big2
|
||||||
width: 62%
|
width: 62%
|
||||||
|
|
|
@ -137,12 +137,13 @@ div
|
||||||
color: #d6d5d5
|
color: #d6d5d5
|
||||||
|
|
||||||
&#indexMainarea
|
&#indexMainarea
|
||||||
padding: 10px 100px 10px 150px
|
padding: 10px 100px 10px 100px
|
||||||
|
|
||||||
&#indexContent
|
&#indexContent
|
||||||
width: 650px
|
width: 700px
|
||||||
|
margin-top: 15px
|
||||||
margin-left: 15px
|
margin-left: 15px
|
||||||
margin-right: 15px
|
margin-right: 20px
|
||||||
float: left
|
float: left
|
||||||
padding: 0
|
padding: 0
|
||||||
|
|
||||||
|
@ -152,7 +153,7 @@ div
|
||||||
&.indexBox
|
&.indexBox
|
||||||
@include rounded-corners
|
@include rounded-corners
|
||||||
@include shadow
|
@include shadow
|
||||||
width: 220px
|
width: 250px
|
||||||
padding-bottom: 10px
|
padding-bottom: 10px
|
||||||
margin-bottom: 15px
|
margin-bottom: 15px
|
||||||
background-color: $bg_box
|
background-color: $bg_box
|
||||||
|
@ -164,6 +165,14 @@ div
|
||||||
height: 25px
|
height: 25px
|
||||||
font-size: 14px
|
font-size: 14px
|
||||||
font-weight: bold
|
font-weight: bold
|
||||||
|
&.separator
|
||||||
|
@include shaded-top
|
||||||
|
border-radius: 0px
|
||||||
|
margin: 0
|
||||||
|
padding-top: 5px
|
||||||
|
height: 20px
|
||||||
|
font-size: 12px
|
||||||
|
font-weight: normal
|
||||||
&.body
|
&.body
|
||||||
width: 100%
|
width: 100%
|
||||||
text-align: left
|
text-align: left
|
||||||
|
@ -183,6 +192,14 @@ div
|
||||||
width: 110px
|
width: 110px
|
||||||
text-align: center
|
text-align: center
|
||||||
|
|
||||||
|
&#index-calendar
|
||||||
|
padding-bottom: 0
|
||||||
|
.widget-content-wrapper
|
||||||
|
padding-bottom: 10px
|
||||||
|
max-height: 400px
|
||||||
|
overflow-x: hidden
|
||||||
|
overflow-y: scroll
|
||||||
|
|
||||||
&#indexPosts
|
&#indexPosts
|
||||||
padding: 5px
|
padding: 5px
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ td
|
||||||
padding-left: 15px
|
padding-left: 15px
|
||||||
padding-top: 20px
|
padding-top: 20px
|
||||||
vertical-align: top
|
vertical-align: top
|
||||||
width: 450px
|
width: 550px
|
||||||
|
|
||||||
div
|
div
|
||||||
&.userFields
|
&.userFields
|
||||||
|
|
|
@ -130,4 +130,18 @@ module ApplicationHelper
|
||||||
end
|
end
|
||||||
link_to_function(name, ("add_fields(this, '#{association}', '#{escape_javascript(fields)}')"))
|
link_to_function(name, ("add_fields(this, '#{association}', '#{escape_javascript(fields)}')"))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def timezone_offset
|
||||||
|
if @cuser
|
||||||
|
@cuser.time_zone
|
||||||
|
else
|
||||||
|
Time.zone.name
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def upcoming_matches
|
||||||
|
GoogleCalendar.new(ENV['GOOGLE_CALENDAR_ID'], timezone_offset).upcoming.sort_by do |event|
|
||||||
|
event.start
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -18,6 +18,8 @@
|
||||||
require File.join(Rails.root, 'vendor', 'plugins', 'acts-as-readable', 'init.rb')
|
require File.join(Rails.root, 'vendor', 'plugins', 'acts-as-readable', 'init.rb')
|
||||||
|
|
||||||
class Issue < ActiveRecord::Base
|
class Issue < ActiveRecord::Base
|
||||||
|
include Extra
|
||||||
|
|
||||||
STATUS_OPEN = 0
|
STATUS_OPEN = 0
|
||||||
STATUS_SOLVED = 1
|
STATUS_SOLVED = 1
|
||||||
STATUS_REJECTED = 2
|
STATUS_REJECTED = 2
|
||||||
|
|
120
app/services/google_calendar.rb
Normal file
120
app/services/google_calendar.rb
Normal file
|
@ -0,0 +1,120 @@
|
||||||
|
class GoogleCalendar
|
||||||
|
attr_accessor :timezone
|
||||||
|
|
||||||
|
def initialize(id, timezone_offset = Time.zone.name)
|
||||||
|
@id = id
|
||||||
|
@timezone_offset = timezone_offset
|
||||||
|
end
|
||||||
|
|
||||||
|
def summary
|
||||||
|
list.summary
|
||||||
|
end
|
||||||
|
|
||||||
|
def timezone
|
||||||
|
list.timezone
|
||||||
|
end
|
||||||
|
|
||||||
|
def events
|
||||||
|
list.events
|
||||||
|
end
|
||||||
|
|
||||||
|
def upcoming
|
||||||
|
events.select do |event|
|
||||||
|
event.start >= Time.zone.now
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def list
|
||||||
|
@list ||= GoogleCalendar::Request.events_list(@id, @timezone_offset)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class GoogleCalendar
|
||||||
|
class Request
|
||||||
|
BASE_URL = "https://www.googleapis.com/calendar/v3/calendars"
|
||||||
|
EVENTS_ENDPOINT = "events"
|
||||||
|
|
||||||
|
def self.events_list(id, timezone_offset)
|
||||||
|
request = self.new(id, EVENTS_ENDPOINT)
|
||||||
|
GoogleCalendar::EventList.new(request.parsed_response, timezone_offset)
|
||||||
|
end
|
||||||
|
|
||||||
|
def initialize(id, endpoint)
|
||||||
|
@id = id
|
||||||
|
@endpoint = endpoint
|
||||||
|
@response = get_data
|
||||||
|
end
|
||||||
|
|
||||||
|
def parsed_response
|
||||||
|
JSON.parse(@response.body)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def get_data
|
||||||
|
Rails.cache.fetch(cache_key, expires_in: 5.minutes) do
|
||||||
|
Faraday.get(request_url)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def cache_key
|
||||||
|
"/google_calendar/#{@id}/#{@endpoint}"
|
||||||
|
end
|
||||||
|
|
||||||
|
def request_url
|
||||||
|
"#{BASE_URL}/#{@id}/#{@endpoint}/?key=#{ENV['GOOGLE_API_KEY']}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class EventList
|
||||||
|
attr_reader :summary, :events, :timezone
|
||||||
|
|
||||||
|
def initialize(list, timezone_offset)
|
||||||
|
@list = list
|
||||||
|
@timezone_offset = timezone_offset
|
||||||
|
|
||||||
|
parse_list
|
||||||
|
parse_events
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def parse_list
|
||||||
|
@summary = @list["summary"]
|
||||||
|
@timezone = @list["timeZone"]
|
||||||
|
end
|
||||||
|
|
||||||
|
def parse_events
|
||||||
|
@events = @list["items"].map do |item|
|
||||||
|
GoogleCalendar::Event.new(item, @timezone_offset)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class Event
|
||||||
|
def initialize(entry, timezone_offset)
|
||||||
|
@entry = entry
|
||||||
|
@timezone_offset = timezone_offset
|
||||||
|
end
|
||||||
|
|
||||||
|
def start
|
||||||
|
Time.use_zone(@timezone_offset) { Time.zone.parse(@entry["start"]["dateTime"]) }
|
||||||
|
end
|
||||||
|
|
||||||
|
def end
|
||||||
|
Time.use_zone(@timezone_offset) { Time.zone.parse(@entry["end"]["dateTime"]) }
|
||||||
|
end
|
||||||
|
|
||||||
|
def formatted_summary
|
||||||
|
summary.gsub(/(http\:\/\/)(.*[^)])/i, '<a href="\1\2">\2</a>').html_safe
|
||||||
|
end
|
||||||
|
|
||||||
|
def [](key)
|
||||||
|
@entry[key]
|
||||||
|
end
|
||||||
|
|
||||||
|
def method_missing(method)
|
||||||
|
self[method.to_s]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -34,6 +34,10 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="indexRight">
|
<div id="indexRight">
|
||||||
|
<div class="indexBox" id="index-calendar">
|
||||||
|
<%= render :partial => "widgets/calendar" %>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="indexBox">
|
<div class="indexBox">
|
||||||
<div class="header">Shoutbox & Match search</div>
|
<div class="header">Shoutbox & Match search</div>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
|
@ -43,11 +47,9 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<%# if @current_controller == "contests" %>
|
|
||||||
<div class="indexBox" id="indexHighlights">
|
<div class="indexBox" id="indexHighlights">
|
||||||
<%= render :partial => "widgets/highlights" %>
|
<%= render :partial => "widgets/highlights" %>
|
||||||
</div>
|
</div>
|
||||||
<%# end %>
|
|
||||||
|
|
||||||
<div class="indexBox" id="indexLatest">
|
<div class="indexBox" id="indexLatest">
|
||||||
<%= render :partial => "widgets/posts" %>
|
<%= render :partial => "widgets/posts" %>
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<ul id="userTab-nav" class="tabs">
|
<ul id="userTab-nav" class="tabs">
|
||||||
<li><a href="#userTabGeneral">General</a></li>
|
<li><a href="#userTabGeneral">General</a></li>
|
||||||
<li><a href="#userTabContact">Contact</a></li>
|
<li><a href="#userTabContact">Contact</a></li>
|
||||||
<li><a href="#userTabCountry">Locals</a></li>
|
<li><a href="#userTabCountry"><%= t('profile.locals') %></a></li>
|
||||||
<li><a href="#userTabFavorites">Favorites</a></li>
|
<li><a href="#userTabFavorites">Favorites</a></li>
|
||||||
<li><a href="#userTabSettings">Settings</a></li>
|
<li><a href="#userTabSettings">Settings</a></li>
|
||||||
<li><a href="#userTabComputer">Computer</a></li>
|
<li><a href="#userTabComputer">Computer</a></li>
|
||||||
|
@ -279,7 +279,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p>
|
<p>
|
||||||
<%= f.submit "Save" %>
|
<%= f.submit %>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
16
app/views/widgets/_calendar.html.erb
Normal file
16
app/views/widgets/_calendar.html.erb
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<div class="header">Match Schedule</div>
|
||||||
|
|
||||||
|
<div class="widget-content-wrapper">
|
||||||
|
<% upcoming_matches.group_by{ |e| e.start.month }.each do |month, events| %>
|
||||||
|
<% events.group_by { |e| e.start.day }.each do |day, day_events| %>
|
||||||
|
<div class="separator"><%= day_events.first.start.strftime("%A, %e %B") %></div>
|
||||||
|
<% day_events.each do |event| %>
|
||||||
|
<div class="content">
|
||||||
|
<p><%= event.formatted_summary %></p>
|
||||||
|
<p><%= event.start.strftime("%H:%M %Z") %></p>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
|
|
@ -19,14 +19,14 @@
|
||||||
<% link_to match do %>
|
<% link_to match do %>
|
||||||
<%= match.contester1 %><br />
|
<%= match.contester1 %><br />
|
||||||
<% if match.score1 > match.score2; c1 = 'green'; c2 = 'red' end %>
|
<% if match.score1 > match.score2; c1 = 'green'; c2 = 'red' end %>
|
||||||
<% if match.score1 < match.score2; c1 = 'red'; c2 = 'green' end %>
|
<% if match.score1 < match.score2; c1 = 'red'; c2 = 'green' end %>
|
||||||
<% if match.score1 == match.score2; c1 = 'yellow'; c2 = 'yellow' end %>
|
<% if match.score1 == match.score2; c1 = 'yellow'; c2 = 'yellow' end %>
|
||||||
<span class="<%= c1 %>"><%= h match.score1 %></span>
|
<span class="<%= c1 %>"><%= h match.score1 %></span>
|
||||||
-
|
-
|
||||||
<span class="<%= c2 %>"><%= h match.score2 %></span>
|
<span class="<%= c2 %>"><%= h match.score2 %></span>
|
||||||
<br />
|
<br>
|
||||||
<%= match.contester2 %>
|
<%= match.contester2 %>
|
||||||
<% end %>
|
<% end %>
|
||||||
</p>
|
</p>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
lock '3.1.0'
|
lock '3.1.0'
|
||||||
|
|
||||||
set :application, 'ensl'
|
set :application, 'ensl'
|
||||||
set :deploy_user, 'deploy'
|
|
||||||
set :deploy_to, '/var/www/virtual/ensl.org/deploy'
|
|
||||||
set :deploy_via, :remote_cache
|
set :deploy_via, :remote_cache
|
||||||
set :pty, true
|
set :pty, true
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
set :branch, 'master'
|
set :branch, 'master'
|
||||||
|
set :deploy_to, '/var/www/virtual/ensl.org/deploy'
|
||||||
|
|
||||||
set :rails_env, 'production'
|
set :rails_env, 'production'
|
||||||
set :unicorn_rack_env, fetch(:rails_env)
|
set :unicorn_rack_env, fetch(:rails_env)
|
||||||
|
|
||||||
role :app, %w{vu2009@ensl.org}
|
role :app, %w{vu2009@ensl.org}
|
||||||
role :web, %w{vu2009@ensl.org}
|
role :web, %w{vu2009@ensl.org}
|
||||||
role :db, %w{vu2009@ensl.org}
|
|
||||||
|
|
||||||
server 'ensl.org', user: 'vu2009', roles: %w{web app}
|
server 'ensl.org', user: 'vu2009', roles: %w{web app}
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
set :branch, 'develop'
|
set :branch, 'develop'
|
||||||
|
set :deploy_to, '/var/www/virtual/ensl.org/staging/rails'
|
||||||
|
|
||||||
set :rails_env, 'staging'
|
set :rails_env, 'staging'
|
||||||
set :unicorn_rack_env, fetch(:rails_env)
|
set :unicorn_rack_env, fetch(:rails_env)
|
||||||
|
|
||||||
role :app, %w{deploy@staging.ensl.org}
|
role :app, %w{vu2009@staging.ensl.org}
|
||||||
role :web, %w{deploy@staging.ensl.org}
|
role :web, %w{vu2009@staging.ensl.org}
|
||||||
role :db, %w{deploy@staging.ensl.org}
|
|
||||||
|
|
||||||
server 'staging.ensl.org', user: 'deploy', roles: %w{web app}
|
server 'staging.ensl.org', user: 'vu2009', roles: %w{web app}
|
||||||
|
|
|
@ -10,7 +10,7 @@ Ensl::Application.configure do
|
||||||
config.whiny_nils = true
|
config.whiny_nils = true
|
||||||
|
|
||||||
# Show full error reports and disable caching
|
# Show full error reports and disable caching
|
||||||
config.consider_all_requests_local = true
|
config.consider_all_requests_local = true
|
||||||
config.action_controller.perform_caching = false
|
config.action_controller.perform_caching = false
|
||||||
|
|
||||||
# Don't care if the mailer can't send
|
# Don't care if the mailer can't send
|
||||||
|
|
|
@ -5,7 +5,7 @@ Ensl::Application.configure do
|
||||||
config.cache_classes = true
|
config.cache_classes = true
|
||||||
|
|
||||||
# Full error reports are disabled and caching is turned on
|
# Full error reports are disabled and caching is turned on
|
||||||
config.consider_all_requests_local = false
|
config.consider_all_requests_local = false
|
||||||
config.action_controller.perform_caching = true
|
config.action_controller.perform_caching = true
|
||||||
|
|
||||||
# Disable Rails's static asset server (Apache or nginx will already do this)
|
# Disable Rails's static asset server (Apache or nginx will already do this)
|
||||||
|
|
|
@ -24,8 +24,8 @@ Ensl::Application.configure do
|
||||||
# config.assets.manifest = YOUR_PATH
|
# config.assets.manifest = YOUR_PATH
|
||||||
|
|
||||||
# Specifies the header that your server uses for sending files
|
# 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-Sendfile" # for apache
|
||||||
config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx
|
# 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.
|
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
|
||||||
# config.force_ssl = true
|
# config.force_ssl = true
|
||||||
|
|
|
@ -81,6 +81,8 @@ en:
|
||||||
votes_success: "Voted successfully."
|
votes_success: "Voted successfully."
|
||||||
error: "error"
|
error: "error"
|
||||||
prohibited: "prohibited"
|
prohibited: "prohibited"
|
||||||
|
profile:
|
||||||
|
locals: "Locals"
|
||||||
sessions:
|
sessions:
|
||||||
form:
|
form:
|
||||||
forgot_password: "Forgot password?"
|
forgot_password: "Forgot password?"
|
||||||
|
@ -92,6 +94,7 @@ en:
|
||||||
user:
|
user:
|
||||||
login: "Login"
|
login: "Login"
|
||||||
create: "Register"
|
create: "Register"
|
||||||
|
update: "Update Profile"
|
||||||
post:
|
post:
|
||||||
create: "Create Article"
|
create: "Create Article"
|
||||||
activerecord:
|
activerecord:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
require "dotenv"
|
require "dotenv"
|
||||||
Dotenv.load
|
Dotenv.load
|
||||||
|
|
||||||
base_path = "/var/www/virtual/ensl.org/deploy"
|
base_path = (ENV['DEPLOY_PATH'] || Dir.pwd)
|
||||||
current_path = "#{base_path}/current"
|
current_path = "#{base_path}/current"
|
||||||
shared_path = "#{base_path}/shared"
|
shared_path = "#{base_path}/shared"
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ timeout 30
|
||||||
preload_app true
|
preload_app true
|
||||||
|
|
||||||
user ENV['UNICORN_USER'], ENV['UNICORN_GROUP']
|
user ENV['UNICORN_USER'], ENV['UNICORN_GROUP']
|
||||||
listen Integer(ENV['UNICORN_PORT'] || 4000), :tcp_nopush => true
|
listen Integer(ENV['UNICORN_PORT']), :tcp_nopush => true
|
||||||
listen ENV['UNICORN_SOCKET'], :backlog => 64
|
listen ENV['UNICORN_SOCKET'], :backlog => 64
|
||||||
|
|
||||||
stderr_path "#{shared_path}/log/unicorn.stderr.log"
|
stderr_path "#{shared_path}/log/unicorn.stderr.log"
|
||||||
|
|
5
spec/factories/profile.rb
Normal file
5
spec/factories/profile.rb
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
FactoryGirl.define do
|
||||||
|
factory :profile do
|
||||||
|
web "ensl.org"
|
||||||
|
end
|
||||||
|
end
|
|
@ -9,6 +9,10 @@ FactoryGirl.define do
|
||||||
country "EU"
|
country "EU"
|
||||||
raw_password "PasswordABC123"
|
raw_password "PasswordABC123"
|
||||||
|
|
||||||
|
after(:create) do |user|
|
||||||
|
create(:profile, user: user)
|
||||||
|
end
|
||||||
|
|
||||||
factory :user_with_team do
|
factory :user_with_team do
|
||||||
after(:create) do |user|
|
after(:create) do |user|
|
||||||
create(:team, founder: user)
|
create(:team, founder: user)
|
||||||
|
|
53
spec/features/calendar/google_calendar_widget_spec.rb
Normal file
53
spec/features/calendar/google_calendar_widget_spec.rb
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
feature 'Google Calendar widget' do
|
||||||
|
let(:time) { Time.zone.local(2014, 4, 1, 12, 0, 0) }
|
||||||
|
let(:events_list_json) { JSON.parse(File.read(Rails.root.join('spec/fixtures/google_calendar.json'))) }
|
||||||
|
let!(:user) { create(:user) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
Timecop.travel(time)
|
||||||
|
|
||||||
|
GoogleCalendar::Request.stub(:events_list) do
|
||||||
|
GoogleCalendar::EventList.new(events_list_json, Time.zone.name)
|
||||||
|
end
|
||||||
|
|
||||||
|
visit root_path
|
||||||
|
end
|
||||||
|
|
||||||
|
scenario 'the most recent upcoming event should appear correctly' do
|
||||||
|
expect(first_event).to have_content("Div 2B: el'pheer vs. RadicaL")
|
||||||
|
end
|
||||||
|
|
||||||
|
feature 'Timezones offsets' do
|
||||||
|
scenario 'when a user is logged out, CEST is default' do
|
||||||
|
expect(first_event).to have_content("20:30 CEST")
|
||||||
|
end
|
||||||
|
|
||||||
|
scenario 'when a user is logged in, their local timezone is used' do
|
||||||
|
sign_in_as(user)
|
||||||
|
change_timezone_for(user, timezone_us_east)
|
||||||
|
visit root_path
|
||||||
|
|
||||||
|
expect(first_event).to have_content(timezone_adjusted)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def first_event
|
||||||
|
page.find(:xpath, "//div[@id = 'index-calendar']/div/div[@class = 'content'][1]")
|
||||||
|
end
|
||||||
|
|
||||||
|
def timezone_adjusted
|
||||||
|
if Time.now.dst?
|
||||||
|
"14:30 EDT"
|
||||||
|
else
|
||||||
|
"15:30 EST"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def timezone_us_east
|
||||||
|
"Eastern Time (US & Canada)"
|
||||||
|
end
|
||||||
|
end
|
763
spec/fixtures/google_calendar.json
vendored
Normal file
763
spec/fixtures/google_calendar.json
vendored
Normal file
|
@ -0,0 +1,763 @@
|
||||||
|
{
|
||||||
|
"kind": "calendar#events",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/uXUVU6PbSJC9e6cCh7-EC4OsKu0\"",
|
||||||
|
"summary": "NSL Season 4 Confirmed Match Schedule",
|
||||||
|
"description": "",
|
||||||
|
"updated": "2014-04-01T20:18:31.372Z",
|
||||||
|
"timeZone": "America/New_York",
|
||||||
|
"accessRole": "reader",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"kind": "calendar#event",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/MTM5NTM1ODMwOTgxMjAwMA\"",
|
||||||
|
"id": "gsq5f4k3mhg4keuqu1hqom1h18",
|
||||||
|
"status": "confirmed",
|
||||||
|
"htmlLink": "https://www.google.com/calendar/event?eid=Z3NxNWY0azNtaGc0a2V1cXUxaHFvbTFoMTggdnQuZWR1X281dHVnc3NqZTRoNnBqbnZ2aHNuNmw3bG9jQGc",
|
||||||
|
"created": "2014-03-19T21:40:28.000Z",
|
||||||
|
"updated": "2014-03-20T23:31:49.812Z",
|
||||||
|
"summary": "Div 3A: Silvermoon vs. Frequency (http://twitch.tv/feathermonster)",
|
||||||
|
"description": "http://www.ensl.org/matches/5488\n\nWeek 1 matchup. \n\nReferee: NeXuS\nCaster: Feathermonster\nStream: http://twitch.tv/feathermonster",
|
||||||
|
"creator": {
|
||||||
|
"email": "joeyh89@vt.edu",
|
||||||
|
"displayName": "Joey Hutchins"
|
||||||
|
},
|
||||||
|
"organizer": {
|
||||||
|
"email": "vt.edu_o5tugssje4h6pjnvvhsn6l7loc@group.calendar.google.com",
|
||||||
|
"displayName": "NSL Season 4 Matches",
|
||||||
|
"self": true
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dateTime": "2014-03-20T22:00:00-04:00"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"dateTime": "2014-03-21T00:00:00-04:00"
|
||||||
|
},
|
||||||
|
"iCalUID": "gsq5f4k3mhg4keuqu1hqom1h18@google.com",
|
||||||
|
"sequence": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "calendar#event",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/MTM5NTM1ODM4NTQyMDAwMA\"",
|
||||||
|
"id": "7g1k46eq471fsrsub1hqiqa4do",
|
||||||
|
"status": "confirmed",
|
||||||
|
"htmlLink": "https://www.google.com/calendar/event?eid=N2cxazQ2ZXE0NzFmc3JzdWIxaHFpcWE0ZG8gdnQuZWR1X281dHVnc3NqZTRoNnBqbnZ2aHNuNmw3bG9jQGc",
|
||||||
|
"created": "2014-03-19T21:37:32.000Z",
|
||||||
|
"updated": "2014-03-20T23:33:05.420Z",
|
||||||
|
"summary": "Div 2B: WongaNS vs. 2hrsLater (http://hitbox.tv/danjio)",
|
||||||
|
"description": "http://www.ensl.org/matches/5509\n\nWeek 1 matchup. \n\nReferee: Sohma\nCaster: Danjio\nStream: http://hitbox.tv/danjio",
|
||||||
|
"creator": {
|
||||||
|
"email": "joeyh89@vt.edu",
|
||||||
|
"displayName": "Joey Hutchins"
|
||||||
|
},
|
||||||
|
"organizer": {
|
||||||
|
"email": "vt.edu_o5tugssje4h6pjnvvhsn6l7loc@group.calendar.google.com",
|
||||||
|
"displayName": "NSL Season 4 Matches",
|
||||||
|
"self": true
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dateTime": "2014-03-26T15:45:00-04:00"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"dateTime": "2014-03-26T17:45:00-04:00"
|
||||||
|
},
|
||||||
|
"transparency": "transparent",
|
||||||
|
"iCalUID": "7g1k46eq471fsrsub1hqiqa4do@google.com",
|
||||||
|
"sequence": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "calendar#event",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/MTM5NTQyMTI1MzAzMDAwMA\"",
|
||||||
|
"id": "4bkilrunk0b0n2bl49v2n2tfok",
|
||||||
|
"status": "confirmed",
|
||||||
|
"htmlLink": "https://www.google.com/calendar/event?eid=NGJraWxydW5rMGIwbjJibDQ5djJuMnRmb2sgdnQuZWR1X281dHVnc3NqZTRoNnBqbnZ2aHNuNmw3bG9jQGc",
|
||||||
|
"created": "2014-03-19T17:39:23.000Z",
|
||||||
|
"updated": "2014-03-21T17:00:53.030Z",
|
||||||
|
"summary": "Div 1: Gnarcolepsy vs. Singularity (http://www.twitch.tv/gold_n)",
|
||||||
|
"description": "http://www.ensl.org/matches/5545\n\nWeek 1 matchup. \n\nReferee: Jehuty\nCaster: Golden & joshhhy\nStream: http://www.twitch.tv/gold_n",
|
||||||
|
"creator": {
|
||||||
|
"email": "joeyh89@vt.edu",
|
||||||
|
"displayName": "Joey Hutchins"
|
||||||
|
},
|
||||||
|
"organizer": {
|
||||||
|
"email": "vt.edu_o5tugssje4h6pjnvvhsn6l7loc@group.calendar.google.com",
|
||||||
|
"displayName": "NSL Season 4 Matches",
|
||||||
|
"self": true
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dateTime": "2014-03-23T20:00:00-04:00",
|
||||||
|
"timeZone": "America/Los_Angeles"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"dateTime": "2014-03-23T22:00:00-04:00",
|
||||||
|
"timeZone": "America/Los_Angeles"
|
||||||
|
},
|
||||||
|
"transparency": "transparent",
|
||||||
|
"iCalUID": "4bkilrunk0b0n2bl49v2n2tfok@google.com",
|
||||||
|
"sequence": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "calendar#event",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/MTM5NTQyOTg3NjIwMTAwMA\"",
|
||||||
|
"id": "i8vir19jo5vgsf57qb1gjuldak",
|
||||||
|
"status": "confirmed",
|
||||||
|
"htmlLink": "https://www.google.com/calendar/event?eid=aTh2aXIxOWpvNXZnc2Y1N3FiMWdqdWxkYWsgdnQuZWR1X281dHVnc3NqZTRoNnBqbnZ2aHNuNmw3bG9jQGc",
|
||||||
|
"created": "2014-03-21T19:23:38.000Z",
|
||||||
|
"updated": "2014-03-21T19:24:36.201Z",
|
||||||
|
"summary": "Div 4B: PinkFluffyGorges vs. FrenchCompany (http://www.twitch.tv/nittai_nev)",
|
||||||
|
"description": "http://www.ensl.org/matches/5582\n\nWeek 1 matchup. \n\nReferee: Yaluzan\nCaster: Nittai\nStream: http://www.twitch.tv/nittai_nev",
|
||||||
|
"creator": {
|
||||||
|
"email": "joeyh89@vt.edu",
|
||||||
|
"displayName": "Joey Hutchins"
|
||||||
|
},
|
||||||
|
"organizer": {
|
||||||
|
"email": "vt.edu_o5tugssje4h6pjnvvhsn6l7loc@group.calendar.google.com",
|
||||||
|
"displayName": "NSL Season 4 Confirmed Match Schedule",
|
||||||
|
"self": true
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dateTime": "2014-03-22T16:00:00-04:00"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"dateTime": "2014-03-22T18:00:00-04:00"
|
||||||
|
},
|
||||||
|
"iCalUID": "i8vir19jo5vgsf57qb1gjuldak@google.com",
|
||||||
|
"sequence": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "calendar#event",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/MTM5NTQzODc1MTM2MTAwMA\"",
|
||||||
|
"id": "2m5v78g88hqq02evfhg5vn9ka8",
|
||||||
|
"status": "confirmed",
|
||||||
|
"htmlLink": "https://www.google.com/calendar/event?eid=Mm01djc4Zzg4aHFxMDJldmZoZzV2bjlrYTggdnQuZWR1X281dHVnc3NqZTRoNnBqbnZ2aHNuNmw3bG9jQGc",
|
||||||
|
"created": "2014-03-21T21:51:27.000Z",
|
||||||
|
"updated": "2014-03-21T21:52:31.361Z",
|
||||||
|
"summary": "Div 2A: Perfect Peckers vs. Intent (http://www.twitch.tv/vindalo0)",
|
||||||
|
"description": "http://www.ensl.org/matches/5532\n\nWeek 1 matchup. \n\nReferee: Unique\nCaster: Vindaloo\nStream: http://www.twitch.tv/vindalo0",
|
||||||
|
"creator": {
|
||||||
|
"email": "pelargir.lsa@gmail.com",
|
||||||
|
"displayName": "Pelargir Chazalet"
|
||||||
|
},
|
||||||
|
"organizer": {
|
||||||
|
"email": "vt.edu_o5tugssje4h6pjnvvhsn6l7loc@group.calendar.google.com",
|
||||||
|
"displayName": "NSL Season 4 Confirmed Match Schedule",
|
||||||
|
"self": true
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dateTime": "2014-03-22T07:00:00-04:00"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"dateTime": "2014-03-22T09:00:00-04:00"
|
||||||
|
},
|
||||||
|
"iCalUID": "2m5v78g88hqq02evfhg5vn9ka8@google.com",
|
||||||
|
"sequence": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "calendar#event",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/MTM5NTUzNDU1MTgxMTAwMA\"",
|
||||||
|
"id": "i7fh8brdlj7im5c7thivp6hc9g",
|
||||||
|
"status": "confirmed",
|
||||||
|
"htmlLink": "https://www.google.com/calendar/event?eid=aTdmaDhicmRsajdpbTVjN3RoaXZwNmhjOWcgdnQuZWR1X281dHVnc3NqZTRoNnBqbnZ2aHNuNmw3bG9jQGc",
|
||||||
|
"created": "2014-03-20T19:21:50.000Z",
|
||||||
|
"updated": "2014-03-23T00:29:11.811Z",
|
||||||
|
"summary": "Div 3A: Gorge Busters vs. >>ACV<< ( http://www.hitbox.tv/danjio)",
|
||||||
|
"description": "http://www.ensl.org/matches/5489\n\nWeek 1 matchup. \n\nReferee: \nCaster: Danjio\nStream: http://hitbox.tv/danjio",
|
||||||
|
"creator": {
|
||||||
|
"email": "joeyh89@vt.edu",
|
||||||
|
"displayName": "Joey Hutchins"
|
||||||
|
},
|
||||||
|
"organizer": {
|
||||||
|
"email": "vt.edu_o5tugssje4h6pjnvvhsn6l7loc@group.calendar.google.com",
|
||||||
|
"displayName": "NSL Season 4 Matches",
|
||||||
|
"self": true
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dateTime": "2014-03-23T14:30:00-04:00"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"dateTime": "2014-03-23T16:30:00-04:00"
|
||||||
|
},
|
||||||
|
"iCalUID": "i7fh8brdlj7im5c7thivp6hc9g@google.com",
|
||||||
|
"sequence": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "calendar#event",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/MTM5NTU4NDU3Mjc1MjAwMA\"",
|
||||||
|
"id": "jt9upnr744ooit6rhijqs248gc",
|
||||||
|
"status": "confirmed",
|
||||||
|
"htmlLink": "https://www.google.com/calendar/event?eid=anQ5dXBucjc0NG9vaXQ2cmhpanFzMjQ4Z2MgdnQuZWR1X281dHVnc3NqZTRoNnBqbnZ2aHNuNmw3bG9jQGc",
|
||||||
|
"created": "2014-03-23T14:22:52.000Z",
|
||||||
|
"updated": "2014-03-23T14:22:52.752Z",
|
||||||
|
"summary": "Div 4A: UKTeamplay vs. LuckyFkers (http://www.twitch.tv/ISEGaming)",
|
||||||
|
"description": "http://www.ensl.org/matches/5596\n\nWeek 1 matchup.\n\nReferee: Argosh \nCaster: ItsSuperEffective \nStream: http://www.twitch.tv/ISEGaming",
|
||||||
|
"creator": {
|
||||||
|
"email": "pelargir.lsa@gmail.com",
|
||||||
|
"displayName": "Pelargir Chazalet"
|
||||||
|
},
|
||||||
|
"organizer": {
|
||||||
|
"email": "vt.edu_o5tugssje4h6pjnvvhsn6l7loc@group.calendar.google.com",
|
||||||
|
"displayName": "NSL Season 4 Confirmed Match Schedule",
|
||||||
|
"self": true
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dateTime": "2014-03-23T15:00:00-04:00"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"dateTime": "2014-03-23T17:00:00-04:00"
|
||||||
|
},
|
||||||
|
"visibility": "public",
|
||||||
|
"iCalUID": "jt9upnr744ooit6rhijqs248gc@google.com",
|
||||||
|
"sequence": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "calendar#event",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/MTM5NTYwMDkwNzc4OTAwMA\"",
|
||||||
|
"id": "mvt93vu72idnqo2p16oklqe5i8",
|
||||||
|
"status": "confirmed",
|
||||||
|
"htmlLink": "https://www.google.com/calendar/event?eid=bXZ0OTN2dTcyaWRucW8ycDE2b2tscWU1aTggdnQuZWR1X281dHVnc3NqZTRoNnBqbnZ2aHNuNmw3bG9jQGc",
|
||||||
|
"created": "2014-03-23T00:33:02.000Z",
|
||||||
|
"updated": "2014-03-23T18:55:07.789Z",
|
||||||
|
"summary": "Div 3B: 3hrsLater vs. PowerUP! (http://www.twitch.tv/RIdeOnSkulks)",
|
||||||
|
"description": "http://www.ensl.org/matches/5475\n\nWeek 1 matchup.\n\nReferee: Pelargir\nCaster: RioS \nStream: http://www.twitch.tv/RIdeOnSkulks",
|
||||||
|
"creator": {
|
||||||
|
"email": "pelargir.lsa@gmail.com",
|
||||||
|
"displayName": "Pelargir Chazalet"
|
||||||
|
},
|
||||||
|
"organizer": {
|
||||||
|
"email": "vt.edu_o5tugssje4h6pjnvvhsn6l7loc@group.calendar.google.com",
|
||||||
|
"displayName": "NSL Season 4 Confirmed Match Schedule",
|
||||||
|
"self": true
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dateTime": "2014-03-23T15:00:00-04:00"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"dateTime": "2014-03-23T17:00:00-04:00"
|
||||||
|
},
|
||||||
|
"visibility": "public",
|
||||||
|
"iCalUID": "mvt93vu72idnqo2p16oklqe5i8@google.com",
|
||||||
|
"sequence": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "calendar#event",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/MTM5NTc0MzY4ODE0NDAwMA\"",
|
||||||
|
"id": "ps74a0vskblsi52i24dkicvklg",
|
||||||
|
"status": "confirmed",
|
||||||
|
"htmlLink": "https://www.google.com/calendar/event?eid=cHM3NGEwdnNrYmxzaTUyaTI0ZGtpY3ZrbGcgdnQuZWR1X281dHVnc3NqZTRoNnBqbnZ2aHNuNmw3bG9jQGc",
|
||||||
|
"created": "2014-03-25T10:34:48.000Z",
|
||||||
|
"updated": "2014-03-25T10:34:48.144Z",
|
||||||
|
"summary": "Div 1: Joan of Arc™ vs. Virtual Dejection (http://www.hitbox.tv/danjio)",
|
||||||
|
"description": "http://www.ensl.org/matches/5547\n\nWeek 1 Matchup.\n\nReferee: Pelargir\nCaster: Danjio\nStream: http://www.hitbox.tv/danjio",
|
||||||
|
"creator": {
|
||||||
|
"email": "pelargir.lsa@gmail.com",
|
||||||
|
"displayName": "Pelargir Chazalet"
|
||||||
|
},
|
||||||
|
"organizer": {
|
||||||
|
"email": "vt.edu_o5tugssje4h6pjnvvhsn6l7loc@group.calendar.google.com",
|
||||||
|
"displayName": "NSL Season 4 Confirmed Match Schedule",
|
||||||
|
"self": true
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dateTime": "2014-03-29T10:00:00-04:00"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"dateTime": "2014-03-29T12:00:00-04:00"
|
||||||
|
},
|
||||||
|
"visibility": "public",
|
||||||
|
"iCalUID": "ps74a0vskblsi52i24dkicvklg@google.com",
|
||||||
|
"sequence": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "calendar#event",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/MTM5NTc2NTM5ODQwNzAwMA\"",
|
||||||
|
"id": "aafemih6n92b5v5o70k5imd348",
|
||||||
|
"status": "confirmed",
|
||||||
|
"htmlLink": "https://www.google.com/calendar/event?eid=YWFmZW1paDZuOTJiNXY1bzcwazVpbWQzNDggdnQuZWR1X281dHVnc3NqZTRoNnBqbnZ2aHNuNmw3bG9jQGc",
|
||||||
|
"created": "2014-03-25T10:31:01.000Z",
|
||||||
|
"updated": "2014-03-25T16:36:38.407Z",
|
||||||
|
"summary": "Div 4B: [karvalakki] vs. TAWsome (http://www.twitch.tv/ggKaneh)",
|
||||||
|
"description": "http://www.ensl.org/matches/5581\n\nWeek 1 Matchup.\n\nReferee: Pelargir\nCaster: Kaneh\nStream: http://www.twitch.tv/ggKaneh",
|
||||||
|
"creator": {
|
||||||
|
"email": "pelargir.lsa@gmail.com",
|
||||||
|
"displayName": "Pelargir Chazalet"
|
||||||
|
},
|
||||||
|
"organizer": {
|
||||||
|
"email": "vt.edu_o5tugssje4h6pjnvvhsn6l7loc@group.calendar.google.com",
|
||||||
|
"displayName": "NSL Season 4 Confirmed Match Schedule",
|
||||||
|
"self": true
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dateTime": "2014-03-25T15:00:00-04:00"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"dateTime": "2014-03-25T17:00:00-04:00"
|
||||||
|
},
|
||||||
|
"visibility": "public",
|
||||||
|
"iCalUID": "aafemih6n92b5v5o70k5imd348@google.com",
|
||||||
|
"sequence": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "calendar#event",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/MTM5NTkxODQ5MDc2ODAwMA\"",
|
||||||
|
"id": "mjipkmgdia834bp7f2ksmnf0rk",
|
||||||
|
"status": "confirmed",
|
||||||
|
"htmlLink": "https://www.google.com/calendar/event?eid=bWppcGttZ2RpYTgzNGJwN2Yya3NtbmYwcmsgdnQuZWR1X281dHVnc3NqZTRoNnBqbnZ2aHNuNmw3bG9jQGc",
|
||||||
|
"created": "2014-03-27T11:08:10.000Z",
|
||||||
|
"updated": "2014-03-27T11:08:10.768Z",
|
||||||
|
"summary": "Div 3B: TAW ♥ vs. HBZ (http://www.twitch.tv/feathermonster)",
|
||||||
|
"description": "http://www.ensl.org/matches/5474\n\nWeek 1 Matchup.\n\nReferee: Pelargir\nCaster: Feathermonster\nStream: http://www.twitch.tv/feathermonster",
|
||||||
|
"creator": {
|
||||||
|
"email": "pelargir.lsa@gmail.com",
|
||||||
|
"displayName": "Pelargir Chazalet"
|
||||||
|
},
|
||||||
|
"organizer": {
|
||||||
|
"email": "vt.edu_o5tugssje4h6pjnvvhsn6l7loc@group.calendar.google.com",
|
||||||
|
"displayName": "NSL Season 4 Confirmed Match Schedule",
|
||||||
|
"self": true
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dateTime": "2014-03-27T15:30:00-04:00"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"dateTime": "2014-03-27T17:30:00-04:00"
|
||||||
|
},
|
||||||
|
"visibility": "public",
|
||||||
|
"iCalUID": "mjipkmgdia834bp7f2ksmnf0rk@google.com",
|
||||||
|
"sequence": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "calendar#event",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/MTM5NTkxODUyNjAxMjAwMA\"",
|
||||||
|
"id": "49jnm0eh22lrjgg6738jr85d3k",
|
||||||
|
"status": "confirmed",
|
||||||
|
"htmlLink": "https://www.google.com/calendar/event?eid=NDlqbm0wZWgyMmxyamdnNjczOGpyODVkM2sgdnQuZWR1X281dHVnc3NqZTRoNnBqbnZ2aHNuNmw3bG9jQGc",
|
||||||
|
"created": "2014-03-25T10:36:45.000Z",
|
||||||
|
"updated": "2014-03-27T11:08:46.012Z",
|
||||||
|
"summary": "Div 2B: Table For Six vs. -/AUS/- (http://www.twitch.tv/schwaschwa)",
|
||||||
|
"description": "http://www.ensl.org/matches/5511\n\nWeek 1 Matchup.\n\nReferee: Tico\nCaster: Schwa\nStream: http://www.twitch.tv/schwaschwa",
|
||||||
|
"creator": {
|
||||||
|
"email": "pelargir.lsa@gmail.com",
|
||||||
|
"displayName": "Pelargir Chazalet"
|
||||||
|
},
|
||||||
|
"organizer": {
|
||||||
|
"email": "vt.edu_o5tugssje4h6pjnvvhsn6l7loc@group.calendar.google.com",
|
||||||
|
"displayName": "NSL Season 4 Confirmed Match Schedule",
|
||||||
|
"self": true
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dateTime": "2014-03-29T22:00:00-04:00"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"dateTime": "2014-03-30T00:00:00-04:00"
|
||||||
|
},
|
||||||
|
"visibility": "public",
|
||||||
|
"iCalUID": "49jnm0eh22lrjgg6738jr85d3k@google.com",
|
||||||
|
"sequence": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "calendar#event",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/MTM5NTkxODk5MzEwMjAwMA\"",
|
||||||
|
"id": "h7k7efkmoorimfolqkcn3833l0",
|
||||||
|
"status": "confirmed",
|
||||||
|
"htmlLink": "https://www.google.com/calendar/event?eid=aDdrN2Vma21vb3JpbWZvbHFrY24zODMzbDAgdnQuZWR1X281dHVnc3NqZTRoNnBqbnZ2aHNuNmw3bG9jQGc",
|
||||||
|
"created": "2014-03-24T15:12:39.000Z",
|
||||||
|
"updated": "2014-03-27T11:16:33.102Z",
|
||||||
|
"summary": "Div 4A: She-Wolves vs. Diamond Gamers (http://www.twitch.tv/ISEGaming)",
|
||||||
|
"description": "http://www.ensl.org/matches/5597\n\nWeek 1 matchup.\n\nReferee: Tico\nCaster: ItsSuperEffective\nStream: http://www.twitch.tv/ISEGaming",
|
||||||
|
"creator": {
|
||||||
|
"email": "pelargir.lsa@gmail.com",
|
||||||
|
"displayName": "Pelargir Chazalet"
|
||||||
|
},
|
||||||
|
"organizer": {
|
||||||
|
"email": "vt.edu_o5tugssje4h6pjnvvhsn6l7loc@group.calendar.google.com",
|
||||||
|
"displayName": "NSL Season 4 Confirmed Match Schedule",
|
||||||
|
"self": true
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dateTime": "2014-03-31T21:00:00-04:00"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"dateTime": "2014-03-31T23:00:00-04:00"
|
||||||
|
},
|
||||||
|
"visibility": "public",
|
||||||
|
"iCalUID": "h7k7efkmoorimfolqkcn3833l0@google.com",
|
||||||
|
"sequence": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "calendar#event",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/MTM5NjAxNTI1MDczNTAwMA\"",
|
||||||
|
"id": "gq026ueot20a8hfv8leu66r7g0",
|
||||||
|
"status": "confirmed",
|
||||||
|
"htmlLink": "https://www.google.com/calendar/event?eid=Z3EwMjZ1ZW90MjBhOGhmdjhsZXU2NnI3ZzAgdnQuZWR1X281dHVnc3NqZTRoNnBqbnZ2aHNuNmw3bG9jQGc",
|
||||||
|
"created": "2014-03-28T14:00:44.000Z",
|
||||||
|
"updated": "2014-03-28T14:00:50.735Z",
|
||||||
|
"summary": "Div 3A: TkMaster vs. Neuromancers (http://www.twitch.tv/sadenki)",
|
||||||
|
"description": "http://www.ensl.org/matches/5493\n\nWeek 2 Matchup.\n\nSTREAM IN FRENCH\n\nReferee:\nCaster: Sadenki\nStream: http://www.twitch.tv/sadenki",
|
||||||
|
"creator": {
|
||||||
|
"email": "pelargir.lsa@gmail.com",
|
||||||
|
"displayName": "Pelargir Chazalet"
|
||||||
|
},
|
||||||
|
"organizer": {
|
||||||
|
"email": "vt.edu_o5tugssje4h6pjnvvhsn6l7loc@group.calendar.google.com",
|
||||||
|
"displayName": "NSL Season 4 Confirmed Match Schedule",
|
||||||
|
"self": true
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dateTime": "2014-03-30T14:30:00-04:00"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"dateTime": "2014-03-30T16:30:00-04:00"
|
||||||
|
},
|
||||||
|
"visibility": "public",
|
||||||
|
"iCalUID": "gq026ueot20a8hfv8leu66r7g0@google.com",
|
||||||
|
"sequence": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "calendar#event",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/MTM5NjA0NDg1OTEyMDAwMA\"",
|
||||||
|
"id": "5kp8kjnmhf0dipvc322quf2f6g",
|
||||||
|
"status": "confirmed",
|
||||||
|
"htmlLink": "https://www.google.com/calendar/event?eid=NWtwOGtqbm1oZjBkaXB2YzMyMnF1ZjJmNmcgdnQuZWR1X281dHVnc3NqZTRoNnBqbnZ2aHNuNmw3bG9jQGc",
|
||||||
|
"created": "2014-03-27T22:26:55.000Z",
|
||||||
|
"updated": "2014-03-28T22:14:19.120Z",
|
||||||
|
"summary": "Div 3A: TkMaster vs. Vexta Ω (http://www.twitch.tv/sadenki)",
|
||||||
|
"description": "http://www.ensl.org/matches/5490\n\nWeek 1 Matchup.\n\nSTREAM IN FRENCH\n\nReferee: Sohma\nCaster: Sadenki & Mirmouz\nStream: http://www.twitch.tv/sadenki",
|
||||||
|
"creator": {
|
||||||
|
"email": "pelargir.lsa@gmail.com",
|
||||||
|
"displayName": "Pelargir Chazalet"
|
||||||
|
},
|
||||||
|
"organizer": {
|
||||||
|
"email": "vt.edu_o5tugssje4h6pjnvvhsn6l7loc@group.calendar.google.com",
|
||||||
|
"displayName": "NSL Season 4 Confirmed Match Schedule",
|
||||||
|
"self": true
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dateTime": "2014-03-31T14:00:00-04:00"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"dateTime": "2014-03-31T16:00:00-04:00"
|
||||||
|
},
|
||||||
|
"visibility": "public",
|
||||||
|
"iCalUID": "5kp8kjnmhf0dipvc322quf2f6g@google.com",
|
||||||
|
"sequence": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "calendar#event",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/MTM5NjA4OTY3NjMyMzAwMA\"",
|
||||||
|
"id": "8u7mrqlspe78mia6tu21pbst1k",
|
||||||
|
"status": "confirmed",
|
||||||
|
"htmlLink": "https://www.google.com/calendar/event?eid=OHU3bXJxbHNwZTc4bWlhNnR1MjFwYnN0MWsgdnQuZWR1X281dHVnc3NqZTRoNnBqbnZ2aHNuNmw3bG9jQGc",
|
||||||
|
"created": "2014-03-29T10:39:01.000Z",
|
||||||
|
"updated": "2014-03-29T10:41:16.323Z",
|
||||||
|
"summary": "Div 1: onFire vs. RaZe (http://www.twitch.tv/ren26)",
|
||||||
|
"description": "http://www.ensl.org/matches/5548\n\nWeek 1 Matchup.\n\nReferee:\nCaster: Ren26\nStream: http://www.twitch.tv/ren26",
|
||||||
|
"creator": {
|
||||||
|
"email": "pelargir.lsa@gmail.com",
|
||||||
|
"displayName": "Pelargir Chazalet"
|
||||||
|
},
|
||||||
|
"organizer": {
|
||||||
|
"email": "vt.edu_o5tugssje4h6pjnvvhsn6l7loc@group.calendar.google.com",
|
||||||
|
"displayName": "NSL Season 4 Confirmed Match Schedule",
|
||||||
|
"self": true
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dateTime": "2014-03-29T19:00:00-04:00"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"dateTime": "2014-03-29T21:00:00-04:00"
|
||||||
|
},
|
||||||
|
"visibility": "public",
|
||||||
|
"iCalUID": "8u7mrqlspe78mia6tu21pbst1k@google.com",
|
||||||
|
"sequence": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "calendar#event",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/MTM5NjExNTY2Mjc0NDAwMA\"",
|
||||||
|
"id": "c46jqcbqt1kb95roo0gedskhd0",
|
||||||
|
"status": "confirmed",
|
||||||
|
"htmlLink": "https://www.google.com/calendar/event?eid=YzQ2anFjYnF0MWtiOTVyb28wZ2Vkc2toZDAgdnQuZWR1X281dHVnc3NqZTRoNnBqbnZ2aHNuNmw3bG9jQGc",
|
||||||
|
"created": "2014-03-29T17:54:22.000Z",
|
||||||
|
"updated": "2014-03-29T17:54:22.744Z",
|
||||||
|
"summary": "Div 2A: Vexta vs. Aphex (http://www.twitch.tv/ren26)",
|
||||||
|
"description": "http://www.ensl.org/matches/5531\n\nWeek 1 Matchup.\n\nReferees: Tico & Zebroe\nCaster: Ren26\nStream: http://www.twitch.tv/ren26",
|
||||||
|
"creator": {
|
||||||
|
"email": "pelargir.lsa@gmail.com",
|
||||||
|
"displayName": "Pelargir Chazalet"
|
||||||
|
},
|
||||||
|
"organizer": {
|
||||||
|
"email": "vt.edu_o5tugssje4h6pjnvvhsn6l7loc@group.calendar.google.com",
|
||||||
|
"displayName": "NSL Season 4 Confirmed Match Schedule",
|
||||||
|
"self": true
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dateTime": "2014-03-29T16:00:00-04:00"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"dateTime": "2014-03-29T18:00:00-04:00"
|
||||||
|
},
|
||||||
|
"visibility": "public",
|
||||||
|
"iCalUID": "c46jqcbqt1kb95roo0gedskhd0@google.com",
|
||||||
|
"sequence": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "calendar#event",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/MTM5NjEyNTcxMzQ1MzAwMA\"",
|
||||||
|
"id": "eeduo3nnj33hci76hff49ii8ts",
|
||||||
|
"status": "confirmed",
|
||||||
|
"htmlLink": "https://www.google.com/calendar/event?eid=ZWVkdW8zbm5qMzNoY2k3NmhmZjQ5aWk4dHMgdnQuZWR1X281dHVnc3NqZTRoNnBqbnZ2aHNuNmw3bG9jQGc",
|
||||||
|
"created": "2014-03-29T20:41:53.000Z",
|
||||||
|
"updated": "2014-03-29T20:41:53.453Z",
|
||||||
|
"summary": "Premiere: Saunamen vs. iMAGINE (http://www.twitch.tv/ren26)",
|
||||||
|
"description": "http://www.ensl.org/matches/5429\n\nWeek 1 Matchup.\n\nReferee: Pelargir\nCaster: Ren26\nStream: http://www.twitch.tv/ren26",
|
||||||
|
"creator": {
|
||||||
|
"email": "pelargir.lsa@gmail.com",
|
||||||
|
"displayName": "Pelargir Chazalet"
|
||||||
|
},
|
||||||
|
"organizer": {
|
||||||
|
"email": "vt.edu_o5tugssje4h6pjnvvhsn6l7loc@group.calendar.google.com",
|
||||||
|
"displayName": "NSL Season 4 Confirmed Match Schedule",
|
||||||
|
"self": true
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dateTime": "2014-03-30T14:00:00-04:00"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"dateTime": "2014-03-30T16:00:00-04:00"
|
||||||
|
},
|
||||||
|
"visibility": "public",
|
||||||
|
"iCalUID": "eeduo3nnj33hci76hff49ii8ts@google.com",
|
||||||
|
"sequence": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "calendar#event",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/MTM5NjE4MDAzODU3ODAwMA\"",
|
||||||
|
"id": "7rdlnhgllqii9582cdtfhki3lc",
|
||||||
|
"status": "confirmed",
|
||||||
|
"htmlLink": "https://www.google.com/calendar/event?eid=N3JkbG5oZ2xscWlpOTU4MmNkdGZoa2kzbGMgdnQuZWR1X281dHVnc3NqZTRoNnBqbnZ2aHNuNmw3bG9jQGc",
|
||||||
|
"created": "2014-03-27T11:10:53.000Z",
|
||||||
|
"updated": "2014-03-30T11:47:18.578Z",
|
||||||
|
"summary": "Premiere: Legendary Snails vs. Titus Gaming (http://www.twitch.tv/naturalselection2)",
|
||||||
|
"description": "http://www.ensl.org/matches/5428\n\nWeek 1 Matchup.\n\nReferee: Yaluzan\nCaster: WasabiOne & Ren26\nStream: http://www.twitch.tv/naturalselection2",
|
||||||
|
"creator": {
|
||||||
|
"email": "pelargir.lsa@gmail.com",
|
||||||
|
"displayName": "Pelargir Chazalet"
|
||||||
|
},
|
||||||
|
"organizer": {
|
||||||
|
"email": "vt.edu_o5tugssje4h6pjnvvhsn6l7loc@group.calendar.google.com",
|
||||||
|
"displayName": "NSL Season 4 Confirmed Match Schedule",
|
||||||
|
"self": true
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dateTime": "2014-03-30T12:00:00-04:00"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"dateTime": "2014-03-30T14:00:00-04:00"
|
||||||
|
},
|
||||||
|
"visibility": "public",
|
||||||
|
"iCalUID": "7rdlnhgllqii9582cdtfhki3lc@google.com",
|
||||||
|
"sequence": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "calendar#event",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/MTM5NjE4MDE0NzAwMzAwMA\"",
|
||||||
|
"id": "aflokq41l64msqdq1q1pmuedqs",
|
||||||
|
"status": "confirmed",
|
||||||
|
"htmlLink": "https://www.google.com/calendar/event?eid=YWZsb2txNDFsNjRtc3FkcTFxMXBtdWVkcXMgdnQuZWR1X281dHVnc3NqZTRoNnBqbnZ2aHNuNmw3bG9jQGc",
|
||||||
|
"created": "2014-03-28T10:11:46.000Z",
|
||||||
|
"updated": "2014-03-30T11:49:07.003Z",
|
||||||
|
"summary": "Div 4B: TAWsome vs. FrenchCompany (http://www.twitch.tv/feathermonster )",
|
||||||
|
"description": "http://www.ensl.org/matches/5585\n\nWeek 2 Matchup.\n\nReferee:\nCaster: Feathermonster\nStream: http://www.twitch.tv/feathermonster",
|
||||||
|
"creator": {
|
||||||
|
"email": "pelargir.lsa@gmail.com",
|
||||||
|
"displayName": "Pelargir Chazalet"
|
||||||
|
},
|
||||||
|
"organizer": {
|
||||||
|
"email": "vt.edu_o5tugssje4h6pjnvvhsn6l7loc@group.calendar.google.com",
|
||||||
|
"displayName": "NSL Season 4 Confirmed Match Schedule",
|
||||||
|
"self": true
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dateTime": "2014-03-30T15:00:00-04:00"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"dateTime": "2014-03-30T17:00:00-04:00"
|
||||||
|
},
|
||||||
|
"visibility": "public",
|
||||||
|
"iCalUID": "aflokq41l64msqdq1q1pmuedqs@google.com",
|
||||||
|
"sequence": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "calendar#event",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/MTM5NjE4MDQ3NDIzMTAwMA\"",
|
||||||
|
"id": "274hn9kkkff6hme7k6de1aun9s",
|
||||||
|
"status": "confirmed",
|
||||||
|
"htmlLink": "https://www.google.com/calendar/event?eid=Mjc0aG45a2trZmY2aG1lN2s2ZGUxYXVuOXMgdnQuZWR1X281dHVnc3NqZTRoNnBqbnZ2aHNuNmw3bG9jQGc",
|
||||||
|
"created": "2014-03-24T15:28:41.000Z",
|
||||||
|
"updated": "2014-03-30T11:54:34.231Z",
|
||||||
|
"summary": "Div 2B: el'pheer vs. RadicaL (http://www.twitch.tv/feathermonster)",
|
||||||
|
"description": "http://www.ensl.org/matches/5510\n\nWeek 1 matchup.\n\nReferee:\nCaster: Feathermonster\nStream: http://www.twitch.tv/feathermonster",
|
||||||
|
"creator": {
|
||||||
|
"email": "pelargir.lsa@gmail.com",
|
||||||
|
"displayName": "Pelargir Chazalet"
|
||||||
|
},
|
||||||
|
"organizer": {
|
||||||
|
"email": "vt.edu_o5tugssje4h6pjnvvhsn6l7loc@group.calendar.google.com",
|
||||||
|
"displayName": "NSL Season 4 Confirmed Match Schedule",
|
||||||
|
"self": true
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dateTime": "2014-04-03T14:30:00-04:00"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"dateTime": "2014-04-03T16:30:00-04:00"
|
||||||
|
},
|
||||||
|
"visibility": "public",
|
||||||
|
"iCalUID": "274hn9kkkff6hme7k6de1aun9s@google.com",
|
||||||
|
"sequence": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "calendar#event",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/MTM5NjE5MjY3Nzg0MTAwMA\"",
|
||||||
|
"id": "ucrpfl5eeoldr1g29cq35s56o0",
|
||||||
|
"status": "confirmed",
|
||||||
|
"htmlLink": "https://www.google.com/calendar/event?eid=dWNycGZsNWVlb2xkcjFnMjljcTM1czU2bzAgdnQuZWR1X281dHVnc3NqZTRoNnBqbnZ2aHNuNmw3bG9jQGc",
|
||||||
|
"created": "2014-03-27T22:22:21.000Z",
|
||||||
|
"updated": "2014-03-30T15:17:57.841Z",
|
||||||
|
"summary": "Div 2A: Cheesecake vs. Gorge Casting Couch (http://www.twitch.tv/ggKaneh)",
|
||||||
|
"description": "http://www.ensl.org/matches/5530\n\nWeek 1 Matchup.\n\nReferee: Danjio\nCaster: Kaneh\nStream: http://www.twitch.tv/ggKaneh",
|
||||||
|
"creator": {
|
||||||
|
"email": "pelargir.lsa@gmail.com",
|
||||||
|
"displayName": "Pelargir Chazalet"
|
||||||
|
},
|
||||||
|
"organizer": {
|
||||||
|
"email": "vt.edu_o5tugssje4h6pjnvvhsn6l7loc@group.calendar.google.com",
|
||||||
|
"displayName": "NSL Season 4 Confirmed Match Schedule",
|
||||||
|
"self": true
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dateTime": "2014-03-30T15:00:00-04:00"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"dateTime": "2014-03-30T17:00:00-04:00"
|
||||||
|
},
|
||||||
|
"visibility": "public",
|
||||||
|
"iCalUID": "ucrpfl5eeoldr1g29cq35s56o0@google.com",
|
||||||
|
"sequence": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "calendar#event",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/MTM5NjI3Mzk4OTc0MzAwMA\"",
|
||||||
|
"id": "4dtgq7c1mk583gjglomk60tn80",
|
||||||
|
"status": "confirmed",
|
||||||
|
"htmlLink": "https://www.google.com/calendar/event?eid=NGR0Z3E3YzFtazU4M2dqZ2xvbWs2MHRuODAgdnQuZWR1X281dHVnc3NqZTRoNnBqbnZ2aHNuNmw3bG9jQGc",
|
||||||
|
"created": "2014-03-31T13:53:09.000Z",
|
||||||
|
"updated": "2014-03-31T13:53:09.743Z",
|
||||||
|
"summary": "Div 3B: OMNOM vs. Mister (twitch.tv/LoopyCaster)",
|
||||||
|
"description": "http://www.ensl.org/matches/5473\n\nWeek 1 Matchup.\n\nReferee: \nCasters! Schwa & Loopy\nStream: http://www.twitch.tv/LoopyCaster",
|
||||||
|
"creator": {
|
||||||
|
"email": "pelargir.lsa@gmail.com",
|
||||||
|
"displayName": "Pelargir Chazalet"
|
||||||
|
},
|
||||||
|
"organizer": {
|
||||||
|
"email": "vt.edu_o5tugssje4h6pjnvvhsn6l7loc@group.calendar.google.com",
|
||||||
|
"displayName": "NSL Season 4 Confirmed Match Schedule",
|
||||||
|
"self": true
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dateTime": "2014-04-05T14:00:00-04:00"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"dateTime": "2014-04-05T16:00:00-04:00"
|
||||||
|
},
|
||||||
|
"visibility": "public",
|
||||||
|
"iCalUID": "4dtgq7c1mk583gjglomk60tn80@google.com",
|
||||||
|
"sequence": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "calendar#event",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/MTM5NjI3NDA3NTQzMTAwMA\"",
|
||||||
|
"id": "do011hdp17c36c8rkoobi6lksk",
|
||||||
|
"status": "confirmed",
|
||||||
|
"htmlLink": "https://www.google.com/calendar/event?eid=ZG8wMTFoZHAxN2MzNmM4cmtvb2JpNmxrc2sgdnQuZWR1X281dHVnc3NqZTRoNnBqbnZ2aHNuNmw3bG9jQGc",
|
||||||
|
"created": "2014-03-24T15:26:11.000Z",
|
||||||
|
"updated": "2014-03-31T13:54:35.431Z",
|
||||||
|
"summary": "Div 1: Gnarcolepsy vs. Ant (http://www.twitch.tv/schwaschwa)",
|
||||||
|
"description": "http://www.ensl.org/matches/5549\n\nWeek 2 matchup.\n\nReferee: \nCaster: Schwa\nStream: http://www.twitch.tv/schwaschwa",
|
||||||
|
"creator": {
|
||||||
|
"email": "pelargir.lsa@gmail.com",
|
||||||
|
"displayName": "Pelargir Chazalet"
|
||||||
|
},
|
||||||
|
"organizer": {
|
||||||
|
"email": "vt.edu_o5tugssje4h6pjnvvhsn6l7loc@group.calendar.google.com",
|
||||||
|
"displayName": "NSL Season 4 Confirmed Match Schedule",
|
||||||
|
"self": true
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dateTime": "2014-04-05T15:30:00-04:00"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"dateTime": "2014-04-05T17:30:00-04:00"
|
||||||
|
},
|
||||||
|
"visibility": "public",
|
||||||
|
"iCalUID": "do011hdp17c36c8rkoobi6lksk@google.com",
|
||||||
|
"sequence": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "calendar#event",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/MTM5NjI3NDE2NTMxMzAwMA\"",
|
||||||
|
"id": "eo46nhg92f1t3domncc0qiejlo",
|
||||||
|
"status": "confirmed",
|
||||||
|
"htmlLink": "https://www.google.com/calendar/event?eid=ZW80Nm5oZzkyZjF0M2RvbW5jYzBxaWVqbG8gdnQuZWR1X281dHVnc3NqZTRoNnBqbnZ2aHNuNmw3bG9jQGc",
|
||||||
|
"created": "2014-03-31T13:56:05.000Z",
|
||||||
|
"updated": "2014-03-31T13:56:05.313Z",
|
||||||
|
"summary": "Div 4B: [karvalakki] vs. PinkFluffyGorges (twitch.tv/LoopyCaster)",
|
||||||
|
"description": "http://www.ensl.org/matches/5584\n\nWeek 2 Matchup.\n\nReferee: \nCaster: Loopy\nStream: http://www.ensl.org/matches/5584",
|
||||||
|
"creator": {
|
||||||
|
"email": "pelargir.lsa@gmail.com",
|
||||||
|
"displayName": "Pelargir Chazalet"
|
||||||
|
},
|
||||||
|
"organizer": {
|
||||||
|
"email": "vt.edu_o5tugssje4h6pjnvvhsn6l7loc@group.calendar.google.com",
|
||||||
|
"displayName": "NSL Season 4 Confirmed Match Schedule",
|
||||||
|
"self": true
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dateTime": "2014-04-06T14:00:00-04:00"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"dateTime": "2014-04-06T16:00:00-04:00"
|
||||||
|
},
|
||||||
|
"visibility": "public",
|
||||||
|
"iCalUID": "eo46nhg92f1t3domncc0qiejlo@google.com",
|
||||||
|
"sequence": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "calendar#event",
|
||||||
|
"etag": "\"2DaeHpkENZGECFHdcr5l8tYxjD4/MTM5NjI3NDMwNDE1MzAwMA\"",
|
||||||
|
"id": "1lb8cg9d6m2nl0bs0ude42nplc",
|
||||||
|
"status": "confirmed",
|
||||||
|
"htmlLink": "https://www.google.com/calendar/event?eid=MWxiOGNnOWQ2bTJubDBiczB1ZGU0Mm5wbGMgdnQuZWR1X281dHVnc3NqZTRoNnBqbnZ2aHNuNmw3bG9jQGc",
|
||||||
|
"created": "2014-03-31T13:58:24.000Z",
|
||||||
|
"updated": "2014-03-31T13:58:24.153Z",
|
||||||
|
"summary": "Div 3B: Mister vs. HBZ (twitch.tv/vindalo0)",
|
||||||
|
"description": "http://www.ensl.org/matches/5477\n\nWeek 2 Matchup.\n\nReferee:\nCaster: Vindaloo\nStream: http://www.twitch.tv/vindalo0",
|
||||||
|
"creator": {
|
||||||
|
"email": "pelargir.lsa@gmail.com",
|
||||||
|
"displayName": "Pelargir Chazalet"
|
||||||
|
},
|
||||||
|
"organizer": {
|
||||||
|
"email": "vt.edu_o5tugssje4h6pjnvvhsn6l7loc@group.calendar.google.com",
|
||||||
|
"displayName": "NSL Season 4 Confirmed Match Schedule",
|
||||||
|
"self": true
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dateTime": "2014-04-04T16:00:00-04:00"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"dateTime": "2014-04-04T18:00:00-04:00"
|
||||||
|
},
|
||||||
|
"visibility": "public",
|
||||||
|
"iCalUID": "1lb8cg9d6m2nl0bs0ude42nplc@google.com",
|
||||||
|
"sequence": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -1,3 +1,5 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Api::V1::UsersCollection do
|
describe Api::V1::UsersCollection do
|
||||||
let(:collection) { Api::V1::UsersCollection.new }
|
let(:collection) { Api::V1::UsersCollection.new }
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,16 @@ module Features
|
||||||
fill_in "login_username", with: user.username
|
fill_in "login_username", with: user.username
|
||||||
fill_in "login_password", with: user.raw_password
|
fill_in "login_password", with: user.raw_password
|
||||||
|
|
||||||
click_button 'Login'
|
click_button I18n.t('helpers.submit.user.login')
|
||||||
|
end
|
||||||
|
|
||||||
|
def change_timezone_for(user, timezone)
|
||||||
|
visit edit_user_path(user.id)
|
||||||
|
|
||||||
|
click_link I18n.t('profile.locals')
|
||||||
|
find("option[value='#{timezone}']").select_option
|
||||||
|
|
||||||
|
click_button I18n.t('helpers.submit.user.update')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
Loading…
Reference in a new issue