summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/assets/stylesheets/custom.css.scss1
-rw-r--r--app/controllers/matches_controller.rb4
-rw-r--r--app/controllers/servers_controller.rb53
-rw-r--r--app/controllers/tournaments_controller.rb17
-rw-r--r--app/controllers/users_controller.rb36
-rw-r--r--app/helpers/sessions_helper.rb4
-rw-r--r--app/models/server.rb36
-rw-r--r--app/models/tournament.rb4
-rw-r--r--app/models/user.rb158
-rw-r--r--app/views/layouts/application.html.erb3
-rw-r--r--app/views/matches/index.html.erb32
-rw-r--r--app/views/servers/_form.html.erb19
-rw-r--r--app/views/servers/edit.html.erb3
-rw-r--r--app/views/servers/index.html.erb25
-rw-r--r--app/views/servers/index.json.jbuilder4
-rw-r--r--app/views/servers/new.html.erb5
-rw-r--r--app/views/servers/show.html.erb8
-rw-r--r--app/views/servers/show.json.jbuilder2
-rw-r--r--app/views/users/_form.html.erb34
-rw-r--r--db/migrate/20140406131442_create_simple_captcha_data.rb (renamed from db/migrate/20140404212449_create_simple_captcha_data.rb)0
-rw-r--r--db/migrate/20140406171445_create_servers.rb (renamed from db/migrate/20140405012452_create_servers.rb)1
-rw-r--r--db/migrate/20140406171448_create_matches.rb (renamed from db/migrate/20140405012455_create_matches.rb)0
-rw-r--r--db/migrate/20140406171451_create_teams.rb (renamed from db/migrate/20140405012457_create_teams.rb)0
-rw-r--r--db/migrate/20140406171453_create_alerts.rb (renamed from db/migrate/20140405012500_create_alerts.rb)0
-rw-r--r--db/migrate/20140406171456_create_pms.rb (renamed from db/migrate/20140405012503_create_pms.rb)0
-rw-r--r--db/migrate/20140406171459_create_tournaments.rb (renamed from db/migrate/20140405012506_create_tournaments.rb)0
-rw-r--r--db/migrate/20140406171502_create_games.rb (renamed from db/migrate/20140405012508_create_games.rb)0
-rw-r--r--db/migrate/20140406171505_create_users.rb (renamed from db/migrate/20140405012510_create_users.rb)0
-rw-r--r--db/migrate/20140406171508_create_sessions.rb (renamed from db/migrate/20140405012513_create_sessions.rb)0
-rw-r--r--db/migrate/20140406171510_create_server_settings.rb (renamed from db/migrate/20140405012516_create_server_settings.rb)0
-rw-r--r--db/migrate/20140406171513_create_game_settings.rb (renamed from db/migrate/20140405012519_create_game_settings.rb)2
-rw-r--r--db/migrate/20140406171516_create_tournament_preferences.rb (renamed from db/migrate/20140405012521_create_tournament_preferences.rb)0
-rw-r--r--db/migrate/20140406171519_create_scores.rb (renamed from db/migrate/20140405012524_create_scores.rb)0
-rw-r--r--db/migrate/20140406171522_create_remote_usernames.rb (renamed from db/migrate/20140405012527_create_remote_usernames.rb)0
-rw-r--r--db/migrate/20140406171525_create_tournament_players_join_table.rb (renamed from db/migrate/20140405012529_create_tournament_players_join_table.rb)0
-rw-r--r--db/migrate/20140406171527_create_tournament_hosts_join_table.rb (renamed from db/migrate/20140405012532_create_tournament_hosts_join_table.rb)0
-rw-r--r--db/migrate/20140406171530_create_team_user_join_table.rb (renamed from db/migrate/20140405012535_create_team_user_join_table.rb)0
-rw-r--r--db/migrate/20140406171532_create_match_team_join_table.rb (renamed from db/migrate/20140405012537_create_match_team_join_table.rb)0
-rw-r--r--db/migrate/20140406171543_add_hidden_attrs_to_user.rb (renamed from db/migrate/20140405012548_add_hidden_attrs_to_user.rb)0
-rw-r--r--db/schema.rb5
-rw-r--r--db/seeds.rb3
-rwxr-xr-xgenerate.sh26
-rw-r--r--test/controllers/servers_controller_test.rb4
-rw-r--r--test/fixtures/game_settings.yml4
-rw-r--r--test/fixtures/servers.yml14
45 files changed, 293 insertions, 214 deletions
diff --git a/app/assets/stylesheets/custom.css.scss b/app/assets/stylesheets/custom.css.scss
index 1a9b09a..febcbb8 100644
--- a/app/assets/stylesheets/custom.css.scss
+++ b/app/assets/stylesheets/custom.css.scss
@@ -24,6 +24,7 @@ a, input[type="submit"] {
&.signup { @extend .btn-success; }
&.signin { @extend .btn-info; }
&.signout { @extend .btn-danger; }
+ &.server { @extend .btn-danger; }
}
p.errors {
diff --git a/app/controllers/matches_controller.rb b/app/controllers/matches_controller.rb
index 31fc9ad..e773667 100644
--- a/app/controllers/matches_controller.rb
+++ b/app/controllers/matches_controller.rb
@@ -8,6 +8,10 @@ class MatchesController < ApplicationController
def index
@matches = @tournament.matches
+ # width of SVG
+ @width = 300 * (Math.log2(@matches.count).floor + 1) + 300;
+ # height of SVG
+ @height = 200 * 2**Math.log2(@matches.count).floor + 100;
end
def get_riot_info
diff --git a/app/controllers/servers_controller.rb b/app/controllers/servers_controller.rb
index 6596dc6..83a9f31 100644
--- a/app/controllers/servers_controller.rb
+++ b/app/controllers/servers_controller.rb
@@ -1,43 +1,15 @@
class ServersController < ApplicationController
-
- # GET /servers
- # GET /servers.json
- def index
- @servers = Server.all
- end
-
- # GET /servers/1
- # GET /servers/1.json
+ # GET /server
+ # GET /server.json
def show
end
- # GET /servers/new
- def new
- @server = Server.new
- end
-
- # GET /servers/1/edit
+ # GET /server/edit
def edit
end
- # POST /servers
- # POST /servers.json
- def create
- @server = Server.new(server_params)
-
- respond_to do |format|
- if @server.save
- format.html { redirect_to @server, notice: 'Server was successfully created.' }
- format.json { render action: 'show', status: :created, location: @server }
- else
- format.html { render action: 'new' }
- format.json { render json: @server.errors, status: :unprocessable_entity }
- end
- end
- end
-
- # PATCH/PUT /servers/1
- # PATCH/PUT /servers/1.json
+ # PATCH/PUT /server
+ # PATCH/PUT /server.json
def update
respond_to do |format|
if @server.update(server_params)
@@ -50,24 +22,15 @@ class ServersController < ApplicationController
end
end
- # DELETE /servers/1
- # DELETE /servers/1.json
- def destroy
- @server.destroy
- respond_to do |format|
- format.html { redirect_to servers_url }
- format.json { head :no_content }
- end
- end
-
private
+
# Use callbacks to share common setup or constraints between actions.
def set_server
- @server = Server.find(params[:id])
+ @server = Server.first
end
# Never trust parameters from the scary internet, only allow the white list through.
def server_params
- params[:server]
+ params.require(:server).permit(:default_user_permissions, :default_user_abilities => User.permission_bits.keys)
end
end
diff --git a/app/controllers/tournaments_controller.rb b/app/controllers/tournaments_controller.rb
index 010f279..2fc82ed 100644
--- a/app/controllers/tournaments_controller.rb
+++ b/app/controllers/tournaments_controller.rb
@@ -70,23 +70,25 @@ class TournamentsController < ApplicationController
end
end
when "join"
- check_permission(:join)
+ # permission checking for join is done in the Tournament model
respond_to do |format|
if @tournament.join(current_user)
format.html { redirect_to @tournament, notice: 'You have joined this tournament.' }
format.json { head :no_content }
+ else
+ format.html { redirect_to @tournament, notice: "You can't join this tournament." }
+ format.json { render json: "Permission denied", status: :forbidden }
end
- format.html { render action: 'permission_denied', status: :forbidden }
- format.json { render json: "Permission denied", status: :forbidden }
end
when "leave"
respond_to do |format|
if @tournament.leave(current_user)
format.html { redirect_to tournaments_url, notice: 'You have left the tournament.' }
format.json { head :no_content }
+ else
+ format.html { redirect_to @tournament, notice: 'You were\'t a part of this tournament.' }
+ format.json { render json: "Permission denied", status: :forbidden }
end
- format.html {redirect_to @tournament, notice: 'You were\'t a part of this tournament.' }
- format.json { render json: "Permission denied", status: :forbidden }
end
when "start"
check_permission(:edit, @tournament)
@@ -96,9 +98,10 @@ class TournamentsController < ApplicationController
if @tournament.setup
format.html { redirect_to @tournament, notice: 'You have joined this tournament.' }
format.json { head :no_content }
+ else
+ format.html { redirect_to @tournament, notice: "You don't have permission to start this tournament." }
+ format.json { render json: "Permission denied", status: :forbidden }
end
- format.html { render action: 'permission_denied', status: :forbidden }
- format.json { render json: "Permission denied", status: :forbidden }
end
else
respond_to do |format|
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index bcb45aa..637480f 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -24,17 +24,29 @@ class UsersController < ApplicationController
# POST /users
# POST /users.json
def create
- if simple_captcha_valid?
- @user = User.new(user_params)
+ @user = User.new(user_params)
+ unless (simple_captcha_valid?)
respond_to do |format|
- if @user.save
- sign_in @user
- format.html { redirect_to root_path, notice: 'User was successfully created.' }
- format.json { render action: 'show', status: :created, location: @user }
- else
- format.html { render action: 'new', status: :unprocessable_entity }
- format.json { render json: @user.errors, status: :unprocessable_entity }
+ format.html { render action: 'new', status: :unprocessable_entity }
+ format.json { render json: @user.errors, status: :unprocessable_entity }
+ end
+ return
+ end
+
+ @user.permissions = Server.first.default_user_permissions
+ respond_to do |format|
+ if @user.save
+ sign_in @user
+ if @user.id == 1
+ # This is the first user, so give them all the power
+ @user.permissions = 0xFFFFFFFF
+ @user.save
end
+ format.html { redirect_to root_path, notice: 'User was successfully created.' }
+ format.json { render action: 'show', status: :created, location: @user }
+ else
+ format.html { render action: 'new', status: :unprocessable_entity }
+ format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
@@ -75,6 +87,10 @@ class UsersController < ApplicationController
# Never trust parameters from the scary internet, only allow the white list through.
def user_params
- params.require(:user).permit(:name, :email, :user_name, :password, :password_confirmation)
+ permitted = [ :name, :email, :user_name, :password, :password_confirmation ]
+ if current_user.can? :edit_permissions
+ permitted.push(:abilities => User.permission_bits.keys)
+ end
+ params.require(:user).permit(permitted)
end
end
diff --git a/app/helpers/sessions_helper.rb b/app/helpers/sessions_helper.rb
index ac62cdc..499e988 100644
--- a/app/helpers/sessions_helper.rb
+++ b/app/helpers/sessions_helper.rb
@@ -20,7 +20,7 @@ module SessionsHelper
def current_user
@token ||= Session.hash_token(cookies[:remember_token])
@session ||= Session.find_by(token: @token)
- @current_user ||= (@session.nil? ? NilUser.new : @session.user)
+ @current_user ||= (@session.nil? ? User::NilUser.new : @session.user)
end
# checks if someone is currently signed in
@@ -32,7 +32,7 @@ module SessionsHelper
if signed_in?
@session.destroy
end
- @current_user = NilUser.new
+ @current_user = User::NilUser.new
cookies.delete(:remember_token)
end
diff --git a/app/models/server.rb b/app/models/server.rb
index 120f0fa..5ba7524 100644
--- a/app/models/server.rb
+++ b/app/models/server.rb
@@ -1,2 +1,38 @@
class Server < ActiveRecord::Base
+ def default_user_abilities
+ @abilities ||= User::Abilities.new(DefaultUser.new(self))
+ end
+ def default_user_abilities=(new)
+ new.each do |k,v|
+ if v == "0"
+ v = false
+ end
+ default_user_abilities[k] = v
+ end
+ end
+ class DefaultUser
+ def initialize(server)
+ @server = server
+ end
+ def can?(action)
+ bit = User.permission_bits[action]
+ if bit.nil?
+ return false
+ else
+ return (@server.default_user_permissions & bit != 0)
+ end
+ end
+ def add_ability(action)
+ bit = User.permission_bits[action.to_sym]
+ unless bit.nil?
+ @server.default_user_permissions |= bit
+ end
+ end
+ def remove_ability(action)
+ bit = User.permission_bits[action.to_sym]
+ unless bit.nil?
+ @server.default_user_permissions &= ~ bit
+ end
+ end
+ end
end
diff --git a/app/models/tournament.rb b/app/models/tournament.rb
index e408cfe..0029de7 100644
--- a/app/models/tournament.rb
+++ b/app/models/tournament.rb
@@ -31,7 +31,7 @@ class Tournament < ActiveRecord::Base
for i in 1..num_matches
self.matches.create(name: "Match #{i}", status: 0)
end
- match_num = 0
+ match_num = num_matches-1
team_num = 0
#for each grouping of min_players_per_team
self.players.each_slice(min_players_per_team) do |players|
@@ -39,7 +39,7 @@ class Tournament < ActiveRecord::Base
self.matches[match_num].teams.push(Team.create(users: players))
#if the match is full, move to the next match, otherwise move to the next team
if (team_num != 0 and team_num % max_teams_per_match == 0)
- match_num += 1
+ match_num -= 1
team_num = 0
else
team_num += 1
diff --git a/app/models/user.rb b/app/models/user.rb
index 64dd7ed..0b77ab1 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -9,57 +9,109 @@ class User < ActiveRecord::Base
before_save { self.email = email.downcase }
before_save { self.user_name = user_name }
- def after_initialize
- self.permissions = 0
- end
+ def self.permission_bits
+ return {
+ :create_tournament => (2**1),
+ :edit_tournament => (2**2),
+ :join_tournament => (2**3),
+ :delete_tournament => (2**4),
- def can?(action)
- return true
- case action
- when :create_tournament
- return true
- when :edit_tournament
- return true
- when :join_tournament
- return true
- when :delete_tournament
+ :create_game => (2**5),
+ :edit_game => (2**6),
+ :delete_game => (2**7),
- when :create_game
- when :edit_game
- when :delete_game
+ :create_user => (2**8),
+ :edit_user => (2**9),
+ :delete_user => (2**10),
- when :create_user
- return false
- when :edit_user
- when :delete_user
+ :create_alert => (2**11),
+ :edit_alert => (2**12),
+ :delete_alert => (2**13),
- when :create_alert
- when :edit_alert
- when :delete_alert
+ :create_pm => (2**14),
+ :edit_pm => (2**15),
+ :delete_pm => (2**16),
- when :create_pm
- when :edit_pm
- when :delete_pm
+ :create_session => (2**17),
+ :delete_session => (2**18),
- when :create_session
- return false
- when :delete_session
+ :edit_permissions => (2**19),
+ :edit_server => (2**20),
+ }
+ end
- else
+ def can?(action)
+ bit = User.permission_bits[action]
+ if bit.nil?
return false
+ else
+ return (self.permissions & bit != 0)
+ end
+ end
+
+ def add_ability(action)
+ bit = User.permission_bits[action.to_sym]
+ unless bit.nil?
+ self.permissions |= bit
+ end
+ end
+
+ def remove_ability(action)
+ bit = User.permission_bits[action.to_sym]
+ unless bit.nil?
+ self.permissions &= ~ bit
+ end
+ end
+
+
+ # A representation of the permission bits as a mock-array.
+ def abilities
+ @abilities ||= Abilities.new(self)
+ end
+ def abilities=(new)
+ new.each do |k,v|
+ if v == "0"
+ v = false
+ end
+ abilities[k] = v
+ end
+ end
+
+ # A thin array-like wrapper around the permission bits to make it
+ # easy to modify them using a form.
+ class Abilities
+ def initialize(user)
+ @user = user
+ end
+ def [](ability)
+ return @user.can?(ability)
+ end
+ def []=(ability, val)
+ if val
+ @user.add_ability(ability)
+ else
+ @user.remove_ability(ability)
+ end
+ end
+ def keys
+ User.permission_bits.keys
+ end
+ def method_missing(name, *args)
+ if name.to_s.ends_with?('=')
+ self[name.to_s.sub(/=$/, '').to_sym] = args.first
+ else
+ return self[name.to_sym]
+ end
end
end
- ##
# VAILD_EMAIL is the regex used to validate a user given email.
VALID_EMAIL_REG = /\A\S+@\S+\.\S+\z/i
- ##
# VALID_USER_NAME checks to make sure a user's user_name
# is in the proper format.
VALID_USER_NAME_REG = /\A[a-zA-Z0-9\-]+\z/
- ##
# The following lines put a user account through a series of
# validations in order to make sure all of their information
# is in the proper format.
@@ -78,7 +130,6 @@ class User < ActiveRecord::Base
format: {with: VALID_USER_NAME_REG },
uniqueness: {case_sensitive: false })
- ##
# Instead of adding password and password_confirmation
# attributes, requiring the presence of a password,
# requiring that pw and pw_com match, and add an authenticate
@@ -88,26 +139,27 @@ class User < ActiveRecord::Base
has_secure_password
validates :password, length: { minimum: 6 }
-end
-class NilUser
- def nil?
- return true
- end
- def can?(action)
- case action
- when :create_user
- return true
- when :create_session
+
+ class NilUser
+ def nil?
return true
- else
- return false
end
- end
- def method_missing(name, *args)
- # Throw an error if User doesn't have this method
- super unless User.new.respond_to?(name)
- # User has this method -- return a blank value
- # 'false' if the method ends with '?'; 'nil' otherwise.
- name.ends_with?('?') ? false : nil
+ def can?(action)
+ case action
+ when :create_user
+ return true
+ when :create_session
+ return true
+ else
+ return false
+ end
+ end
+ def method_missing(name, *args)
+ # Throw an error if User doesn't have this method
+ super unless User.new.respond_to?(name)
+ # User has this method -- return a blank value
+ # 'false' if the method ends with '?'; 'nil' otherwise.
+ name.to_s.ends_with?('?') ? false : nil
+ end
end
end
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb
index 8a5f985..de9f3b8 100644
--- a/app/views/layouts/application.html.erb
+++ b/app/views/layouts/application.html.erb
@@ -26,6 +26,9 @@
<% if signed_in? %>
<%= link_to current_user.user_name, current_user, :class => "user" %>
<%= link_to "Sign out", session_path("current"), method: "delete", :class => "signout" %>
+ <% if current_user.can? :edit_server %>
+ <%= link_to "Server settings", edit_server_path, :class => "server" %>
+ <% end %>
<% else %>
<%= link_to "Log in", new_session_path, :class => "signin" %>
<%= link_to "Sign up", new_user_path, :class => "signup" %>
diff --git a/app/views/matches/index.html.erb b/app/views/matches/index.html.erb
index 219507d..031b2a9 100644
--- a/app/views/matches/index.html.erb
+++ b/app/views/matches/index.html.erb
@@ -26,17 +26,39 @@
<br>
-
+<div id="match-tree">
<SVG version="1.1"
baseProfile="full"
- width="<%= 300 * @matches.count / 2 + 50 %>" height="<%= 200 * @matches.count + 50 %>"
+ width="<%= @width %>" height="<%= @height = [@height, 500].max %>"
xmlns="http://www.w3.org/2000/svg">
-
+ <line x1="300" y1="0" x2="300" y2="<%= @height %>" stroke="black" />
<% (1..@matches.count).each do |i| %>
<g class="svg-match">
- <rect rx="10"
-
+ <rect height="120px" width="213px"
+ x="<%= @width - (i-1)*50 - 250*(Math.log2(i).floor+1) %>"
+ y="<%= (@height/(Math.log2(i).floor+2)) - 60 + 250*(i - 2**(Math.log2(i).floor)) %>"
+ fill="#ffd281"
+ rx="20px"
+ stroke-width="2"
+ <% case @matches[i-1].status %>
+ <% when 0 %>
+ <% if @matches[i-1].teams.count < @tournament.min_teams_per_match %>
+ stroke="red"
+ fill-opacity="0.6"
+ <% else %>
+ stroke="green"
+ <% end %>
+ <% when 1 %>
+ stroke="orange"
+ <% when 2 %>
+ stroke="yellow"
+ <% when 3 %>
+ stroke="grey"
+ <% end %>
+ />
</g>
<% end %>
+
</SVG>
+</div> \ No newline at end of file
diff --git a/app/views/servers/_form.html.erb b/app/views/servers/_form.html.erb
index b08654b..1afde11 100644
--- a/app/views/servers/_form.html.erb
+++ b/app/views/servers/_form.html.erb
@@ -1,15 +1,16 @@
<%= form_for(@server) do |f| %>
- <% if @server.errors.any? %>
- <div id="error_explanation">
- <h2><%= pluralize(@server.errors.count, "error") %> prohibited this server from being saved:</h2>
+ <%= render "common/error_messages", :target => @server %>
- <ul>
- <% @server.errors.full_messages.each do |msg| %>
- <li><%= msg %></li>
+ <fieldset>
+ <legend>Default permissions for new users</legend>
+ <ul>
+ <%= fields_for "server[default_user_abilities]", @server.default_user_abilities do |a| %>
+ <% @server.default_user_abilities.keys.each do |ability| %>
+ <li><label><%= a.check_box(ability) %> <%= ability.to_s.humanize %></label></li>
<% end %>
- </ul>
- </div>
- <% end %>
+ <% end %>
+ </ul>
+ </fieldset>
<div class="actions">
<%= f.submit %>
diff --git a/app/views/servers/edit.html.erb b/app/views/servers/edit.html.erb
index a92cdb5..d37864f 100644
--- a/app/views/servers/edit.html.erb
+++ b/app/views/servers/edit.html.erb
@@ -2,5 +2,4 @@
<%= render 'form' %>
-<%= link_to 'Show', @server %> |
-<%= link_to 'Back', servers_path %>
+<%= link_to server_path %>
diff --git a/app/views/servers/index.html.erb b/app/views/servers/index.html.erb
deleted file mode 100644
index f45d393..0000000
--- a/app/views/servers/index.html.erb
+++ /dev/null
@@ -1,25 +0,0 @@
-<h1>Listing servers</h1>
-
-<table>
- <thead>
- <tr>
- <th></th>
- <th></th>
- <th></th>
- </tr>
- </thead>
-
- <tbody>
- <% @servers.each do |server| %>
- <tr>
- <td><%= link_to 'Show', server %></td>
- <td><%= link_to 'Edit', edit_server_path(server) %></td>
- <td><%= link_to 'Destroy', server, method: :delete, data: { confirm: 'Are you sure?' } %></td>
- </tr>
- <% end %>
- </tbody>
-</table>
-
-<br>
-
-<%= link_to 'New Server', new_server_path %>
diff --git a/app/views/servers/index.json.jbuilder b/app/views/servers/index.json.jbuilder
deleted file mode 100644
index 2776abc..0000000
--- a/app/views/servers/index.json.jbuilder
+++ /dev/null
@@ -1,4 +0,0 @@
-json.array!(@servers) do |server|
- json.extract! server, :id
- json.url server_url(server, format: :json)
-end
diff --git a/app/views/servers/new.html.erb b/app/views/servers/new.html.erb
deleted file mode 100644
index 0422009..0000000
--- a/app/views/servers/new.html.erb
+++ /dev/null
@@ -1,5 +0,0 @@
-<h1>New server</h1>
-
-<%= render 'form' %>
-
-<%= link_to 'Back', servers_path %>
diff --git a/app/views/servers/show.html.erb b/app/views/servers/show.html.erb
index 67f7647..54aaf66 100644
--- a/app/views/servers/show.html.erb
+++ b/app/views/servers/show.html.erb
@@ -1,2 +1,6 @@
-<%= link_to 'Edit', edit_server_path(@server) %> |
-<%= link_to 'Back', servers_path %>
+<p>
+ <strong>Default user permissions:</strong>
+ <%= @server.default_user_permissions %>
+</p>
+
+<%= link_to 'Edit', edit_server_path %>
diff --git a/app/views/servers/show.json.jbuilder b/app/views/servers/show.json.jbuilder
index 972b1c0..c566f76 100644
--- a/app/views/servers/show.json.jbuilder
+++ b/app/views/servers/show.json.jbuilder
@@ -1 +1 @@
-json.extract! @server, :id, :created_at, :updated_at
+json.extract! @server, :id, :default_user_permissions, :created_at, :updated_at
diff --git a/app/views/users/_form.html.erb b/app/views/users/_form.html.erb
index ae63f06..40f8f09 100644
--- a/app/views/users/_form.html.erb
+++ b/app/views/users/_form.html.erb
@@ -1,37 +1,45 @@
<%= form_for(@user) do |f| %>
- <% if @user.errors.any? %>
- <div id="error_explanation">
- <h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>
-
- <ul>
- <% @user.errors.full_messages.each do |msg| %>
- <li><%= msg %></li>
- <% end %>
- </ul>
- </div>
- <% end %>
+ <%= render "common/error_messages", :target => @user %>
<div class="field">
<%= f.label :name %><br>
<%= f.text_field :name %>
</div>
+
<div class="field">
<%= f.label :email %><br>
<%= f.text_field :email %>
</div>
+
<div class="field">
<%= f.label :user_name %><br>
<%= f.text_field :user_name %>
</div>
- <p>
+
+ <div>
<%= f.label(:password, "New Password (or use old)") %><br>
<%= f.password_field :password %>
- </p>
+ </div>
<div>
<%= f.label(:password_confirmation, "Confirm Password") %><br>
<%= f.password_field :password_confirmation %>
</div>
+
+ <% if current_user.can? :edit_permissions %>
+ <fieldset>
+ <legend>User permissions</legend>
+ <ul>
+ <%= fields_for "user[abilities]", @user.abilities do |abilities_fields| %>
+ <% @user.abilities.keys.each do |ability| %>
+ <li><label><%= abilities_fields.check_box(ability) %> <%= ability.to_s.humanize %></label></li>
+ <% end %>
+ <% end %>
+ </ul>
+ </fieldset>
+ <% end %>
+
<div class="actions">
<%= f.submit %>
</div>
+
<% end %>
diff --git a/db/migrate/20140404212449_create_simple_captcha_data.rb b/db/migrate/20140406131442_create_simple_captcha_data.rb
index 4573b20..4573b20 100644
--- a/db/migrate/20140404212449_create_simple_captcha_data.rb
+++ b/db/migrate/20140406131442_create_simple_captcha_data.rb
diff --git a/db/migrate/20140405012452_create_servers.rb b/db/migrate/20140406171445_create_servers.rb
index f33241a..fbe1b02 100644
--- a/db/migrate/20140405012452_create_servers.rb
+++ b/db/migrate/20140406171445_create_servers.rb
@@ -1,6 +1,7 @@
class CreateServers < ActiveRecord::Migration
def change
create_table :servers do |t|
+ t.integer :default_user_permissions
t.timestamps
end
diff --git a/db/migrate/20140405012455_create_matches.rb b/db/migrate/20140406171448_create_matches.rb
index 31eea12..31eea12 100644
--- a/db/migrate/20140405012455_create_matches.rb
+++ b/db/migrate/20140406171448_create_matches.rb
diff --git a/db/migrate/20140405012457_create_teams.rb b/db/migrate/20140406171451_create_teams.rb
index fdf9a68..fdf9a68 100644
--- a/db/migrate/20140405012457_create_teams.rb
+++ b/db/migrate/20140406171451_create_teams.rb
diff --git a/db/migrate/20140405012500_create_alerts.rb b/db/migrate/20140406171453_create_alerts.rb
index 68a8e10..68a8e10 100644
--- a/db/migrate/20140405012500_create_alerts.rb
+++ b/db/migrate/20140406171453_create_alerts.rb
diff --git a/db/migrate/20140405012503_create_pms.rb b/db/migrate/20140406171456_create_pms.rb
index 93bb5c6..93bb5c6 100644
--- a/db/migrate/20140405012503_create_pms.rb
+++ b/db/migrate/20140406171456_create_pms.rb
diff --git a/db/migrate/20140405012506_create_tournaments.rb b/db/migrate/20140406171459_create_tournaments.rb
index c0d8929..c0d8929 100644
--- a/db/migrate/20140405012506_create_tournaments.rb
+++ b/db/migrate/20140406171459_create_tournaments.rb
diff --git a/db/migrate/20140405012508_create_games.rb b/db/migrate/20140406171502_create_games.rb
index 5e4f56f..5e4f56f 100644
--- a/db/migrate/20140405012508_create_games.rb
+++ b/db/migrate/20140406171502_create_games.rb
diff --git a/db/migrate/20140405012510_create_users.rb b/db/migrate/20140406171505_create_users.rb
index 8032870..8032870 100644
--- a/db/migrate/20140405012510_create_users.rb
+++ b/db/migrate/20140406171505_create_users.rb
diff --git a/db/migrate/20140405012513_create_sessions.rb b/db/migrate/20140406171508_create_sessions.rb
index f667f1e..f667f1e 100644
--- a/db/migrate/20140405012513_create_sessions.rb
+++ b/db/migrate/20140406171508_create_sessions.rb
diff --git a/db/migrate/20140405012516_create_server_settings.rb b/db/migrate/20140406171510_create_server_settings.rb
index dfdd91b..dfdd91b 100644
--- a/db/migrate/20140405012516_create_server_settings.rb
+++ b/db/migrate/20140406171510_create_server_settings.rb
diff --git a/db/migrate/20140405012519_create_game_settings.rb b/db/migrate/20140406171513_create_game_settings.rb
index eed6b00..b1caf5d 100644
--- a/db/migrate/20140405012519_create_game_settings.rb
+++ b/db/migrate/20140406171513_create_game_settings.rb
@@ -2,7 +2,7 @@ class CreateGameSettings < ActiveRecord::Migration
def change
create_table :game_settings do |t|
t.references :game, index: true
- t.integer :type
+ t.integer :stype
t.string :name
t.text :default
t.text :description
diff --git a/db/migrate/20140405012521_create_tournament_preferences.rb b/db/migrate/20140406171516_create_tournament_preferences.rb
index 991d659..991d659 100644
--- a/db/migrate/20140405012521_create_tournament_preferences.rb
+++ b/db/migrate/20140406171516_create_tournament_preferences.rb
diff --git a/db/migrate/20140405012524_create_scores.rb b/db/migrate/20140406171519_create_scores.rb
index 4ca0b0b..4ca0b0b 100644
--- a/db/migrate/20140405012524_create_scores.rb
+++ b/db/migrate/20140406171519_create_scores.rb
diff --git a/db/migrate/20140405012527_create_remote_usernames.rb b/db/migrate/20140406171522_create_remote_usernames.rb
index e265985..e265985 100644
--- a/db/migrate/20140405012527_create_remote_usernames.rb
+++ b/db/migrate/20140406171522_create_remote_usernames.rb
diff --git a/db/migrate/20140405012529_create_tournament_players_join_table.rb b/db/migrate/20140406171525_create_tournament_players_join_table.rb
index be240e8..be240e8 100644
--- a/db/migrate/20140405012529_create_tournament_players_join_table.rb
+++ b/db/migrate/20140406171525_create_tournament_players_join_table.rb
diff --git a/db/migrate/20140405012532_create_tournament_hosts_join_table.rb b/db/migrate/20140406171527_create_tournament_hosts_join_table.rb
index 7521d89..7521d89 100644
--- a/db/migrate/20140405012532_create_tournament_hosts_join_table.rb
+++ b/db/migrate/20140406171527_create_tournament_hosts_join_table.rb
diff --git a/db/migrate/20140405012535_create_team_user_join_table.rb b/db/migrate/20140406171530_create_team_user_join_table.rb
index f3b57fc..f3b57fc 100644
--- a/db/migrate/20140405012535_create_team_user_join_table.rb
+++ b/db/migrate/20140406171530_create_team_user_join_table.rb
diff --git a/db/migrate/20140405012537_create_match_team_join_table.rb b/db/migrate/20140406171532_create_match_team_join_table.rb
index c2ed1b7..c2ed1b7 100644
--- a/db/migrate/20140405012537_create_match_team_join_table.rb
+++ b/db/migrate/20140406171532_create_match_team_join_table.rb
diff --git a/db/migrate/20140405012548_add_hidden_attrs_to_user.rb b/db/migrate/20140406171543_add_hidden_attrs_to_user.rb
index 9b5c505..9b5c505 100644
--- a/db/migrate/20140405012548_add_hidden_attrs_to_user.rb
+++ b/db/migrate/20140406171543_add_hidden_attrs_to_user.rb
diff --git a/db/schema.rb b/db/schema.rb
index c0d4fee..53bc413 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: 20140405012548) do
+ActiveRecord::Schema.define(version: 20140406171543) do
create_table "alerts", force: true do |t|
t.integer "author_id"
@@ -24,7 +24,7 @@ ActiveRecord::Schema.define(version: 20140405012548) do
create_table "game_settings", force: true do |t|
t.integer "game_id"
- t.integer "type"
+ t.integer "stype"
t.string "name"
t.text "default"
t.text "description"
@@ -115,6 +115,7 @@ ActiveRecord::Schema.define(version: 20140405012548) do
end
create_table "servers", force: true do |t|
+ t.integer "default_user_permissions"
t.datetime "created_at"
t.datetime "updated_at"
end
diff --git a/db/seeds.rb b/db/seeds.rb
index 986256c..6efc3e7 100644
--- a/db/seeds.rb
+++ b/db/seeds.rb
@@ -6,6 +6,9 @@
# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])
# Mayor.create(name: 'Emanuel', city: cities.first)
#
+p = User.permission_bits
+Server.create(default_user_permissions: p[:join_tournament] | p[:create_pm])
+
Game.create(name: "League of Legends",min_players_per_team: 5, max_players_per_team: 5, min_teams_per_match: 2, max_teams_per_match: 2, set_rounds: nil, randomized_teams: true)
Game.create(name: "Chess", min_players_per_team: 1, max_players_per_team: 1, min_teams_per_match: 2, max_teams_per_match: 2, set_rounds: nil, randomized_teams: true)
Game.create(name: "Hearthstone", min_players_per_team: 1, max_players_per_team: 1, min_teams_per_match: 2, max_teams_per_match: 2, set_rounds: 1, randomized_teams: false)
diff --git a/generate.sh b/generate.sh
index 1e15106..18d0f63 100755
--- a/generate.sh
+++ b/generate.sh
@@ -9,17 +9,17 @@ set -xe
srcdir=$(dirname "$(readlink -f "$0")")
cd "$srcdir"
-git rm -rf app test config/routes.rb db/migrate
+git rm -rf -- app test config/routes.rb db/migrate || true
git checkout clean-start -- app test config/routes.rb
bundle exec rails generate simple_captcha
# The whole shebang, models, views, and controllers
-bundle exec rails generate scaffold server --force $NOTEST
-bundle exec rails generate scaffold match status:integer tournament:references name:string winner:references remote_id:string $NOTEST
-bundle exec rails generate scaffold team match:references $NOTEST
-bundle exec rails generate scaffold alert author:references message:text $NOTEST
-bundle exec rails generate scaffold pm author:references recipient:references message:text $NOTEST
+bundle exec rails generate scaffold server default_user_permissions:integer
+bundle exec rails generate scaffold match status:integer tournament:references name:string winner:references remote_id:string
+bundle exec rails generate scaffold team match:references
+bundle exec rails generate scaffold alert author:references message:text
+bundle exec rails generate scaffold pm author:references recipient:references message:text
bundle exec rails generate scaffold tournament name:string:unique game:references status:integer \
min_players_per_team:integer max_players_per_team:integer \
min_teams_per_match:integer max_teams_per_match:integer \
@@ -33,10 +33,10 @@ bundle exec rails generate scaffold user name:string email:string:uniq user_name
bundle exec rails generate scaffold session user:references token:string:uniq
# Just models
-bundle exec rails generate model server_setting $NOTEST
-bundle exec rails generate model game_setting game:references stype:integer name:string default:text description:text type_opt:text display_order:integer $NOTEST
-bundle exec rails generate model tournament_preference tournament:references vartype:integer name:string value:text $NOTEST
-bundle exec rails generate model score user:references match:references value:integer $NOTEST
+bundle exec rails generate model server_setting
+bundle exec rails generate model game_setting game:references stype:integer name:string default:text description:text type_opt:text display_order:integer
+bundle exec rails generate model tournament_preference tournament:references vartype:integer name:string value:text
+bundle exec rails generate model score user:references match:references value:integer
bundle exec rails generate model remote_username game:references user:references json_value:text
# Join tables
@@ -46,9 +46,9 @@ bundle exec rails generate migration CreateTeamUserJoinTable teams users
bundle exec rails generate migration CreateMatchTeamJoinTable matches teams
# Just controllers
-bundle exec rails generate controller search $NOTEST
-bundle exec rails generate controller main $NOTEST
-bundle exec rails generate controller static $NOTEST
+bundle exec rails generate controller search
+bundle exec rails generate controller main
+bundle exec rails generate controller static
# Migrations
# By having these separate from the original 'generate', it makes it
diff --git a/test/controllers/servers_controller_test.rb b/test/controllers/servers_controller_test.rb
index 5891bb0..3a01d56 100644
--- a/test/controllers/servers_controller_test.rb
+++ b/test/controllers/servers_controller_test.rb
@@ -18,7 +18,7 @@ class ServersControllerTest < ActionController::TestCase
test "should create server" do
assert_difference('Server.count') do
- post :create, server: { }
+ post :create, server: { default_user_permissions: @server.default_user_permissions }
end
assert_redirected_to server_path(assigns(:server))
@@ -35,7 +35,7 @@ class ServersControllerTest < ActionController::TestCase
end
test "should update server" do
- patch :update, id: @server, server: { }
+ patch :update, id: @server, server: { default_user_permissions: @server.default_user_permissions }
assert_redirected_to server_path(assigns(:server))
end
diff --git a/test/fixtures/game_settings.yml b/test/fixtures/game_settings.yml
index 7497d02..2b574fd 100644
--- a/test/fixtures/game_settings.yml
+++ b/test/fixtures/game_settings.yml
@@ -2,7 +2,7 @@
one:
game_id:
- type: 1
+ stype: 1
name: MyString
default: MyText
description: MyText
@@ -11,7 +11,7 @@ one:
two:
game_id:
- type: 1
+ stype: 1
name: MyString
default: MyText
description: MyText
diff --git a/test/fixtures/servers.yml b/test/fixtures/servers.yml
index 937a0c0..3001059 100644
--- a/test/fixtures/servers.yml
+++ b/test/fixtures/servers.yml
@@ -1,11 +1,7 @@
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
-# This model initially had no columns defined. If you add columns to the
-# model remove the '{}' from the fixture names and add the columns immediately
-# below each fixture, per the syntax in the comments below
-#
-one: {}
-# column: value
-#
-two: {}
-# column: value
+one:
+ default_user_permissions: 1
+
+two:
+ default_user_permissions: 1