From 0254f9aa2c06a49bfb97d624477ef07f934128eb Mon Sep 17 00:00:00 2001
From: Will Bradley
Date: Sun, 14 Oct 2012 05:46:19 -0700
Subject: [PATCH] Moved card stuff from users model to new card model
---
app/controllers/cards_controller.rb | 109 ++++++++++++++++++
app/controllers/users_controller.rb | 109 ------------------
app/models/card.rb | 77 +++++++++++++
app/models/user.rb | 79 +------------
app/views/cards/_form.html.erb | 37 ++++++
app/views/cards/edit.html.erb | 6 +
app/views/cards/index.html.erb | 34 ++++++
app/views/cards/new.html.erb | 5 +
app/views/cards/show.html.erb | 24 ++++
app/views/cards/upload.html.erb | 14 +++
.../{users => cards}/upload_all.html.erb | 2 +-
app/views/layouts/application.html.erb | 2 +-
app/views/users/_form.html.erb | 55 ---------
app/views/users/edit.html.erb | 6 -
app/views/users/index.html.erb | 34 ------
app/views/users/new.html.erb | 5 -
app/views/users/show.html.erb | 24 ----
app/views/users/upload.html.erb | 14 ---
config/routes.rb | 6 +-
db/migrate/20121014114058_create_cards.rb | 10 ++
.../20121014114527_add_user_id_to_cards.rb | 5 +
.../20121014120140_add_name_to_cards.rb | 5 +
.../20121014120609_move_card_data_to_cards.rb | 11 ++
.../20121014122548_remove_card_from_users.rb | 13 +++
db/schema.rb | 14 ++-
test/fixtures/cards.yml | 9 ++
test/unit/card_test.rb | 7 ++
27 files changed, 384 insertions(+), 332 deletions(-)
create mode 100644 app/controllers/cards_controller.rb
delete mode 100644 app/controllers/users_controller.rb
create mode 100644 app/models/card.rb
create mode 100644 app/views/cards/_form.html.erb
create mode 100644 app/views/cards/edit.html.erb
create mode 100644 app/views/cards/index.html.erb
create mode 100644 app/views/cards/new.html.erb
create mode 100644 app/views/cards/show.html.erb
create mode 100644 app/views/cards/upload.html.erb
rename app/views/{users => cards}/upload_all.html.erb (79%)
delete mode 100644 app/views/users/_form.html.erb
delete mode 100644 app/views/users/edit.html.erb
delete mode 100644 app/views/users/index.html.erb
delete mode 100644 app/views/users/new.html.erb
delete mode 100644 app/views/users/show.html.erb
delete mode 100644 app/views/users/upload.html.erb
create mode 100644 db/migrate/20121014114058_create_cards.rb
create mode 100644 db/migrate/20121014114527_add_user_id_to_cards.rb
create mode 100644 db/migrate/20121014120140_add_name_to_cards.rb
create mode 100644 db/migrate/20121014120609_move_card_data_to_cards.rb
create mode 100644 db/migrate/20121014122548_remove_card_from_users.rb
create mode 100644 test/fixtures/cards.yml
create mode 100644 test/unit/card_test.rb
diff --git a/app/controllers/cards_controller.rb b/app/controllers/cards_controller.rb
new file mode 100644
index 0000000..84b92bc
--- /dev/null
+++ b/app/controllers/cards_controller.rb
@@ -0,0 +1,109 @@
+class CardsController < ApplicationController
+ load_and_authorize_resource
+ before_filter :authenticate_user!
+
+ # GET /cards
+ # GET /cards.json
+ def index
+ #@cards = Card.all
+ #authorize! :read, @cards
+ @cards = @cards.sort_by{|e| e[:id]}
+
+ respond_to do |format|
+ format.html # index.html.erb
+ format.json { render :json => @cards }
+ end
+ end
+
+ # GET /cards/1
+ # GET /cards/1.json
+ def show
+ #@card = Card.find(params[:id])
+
+ respond_to do |format|
+ format.html # show.html.erb
+ format.json { render :json => @card }
+ end
+ end
+
+ # PUT /cards/1/upload
+ def upload
+ #@card = Card.find(params[:id])
+ @upload_result = @card.upload_to_door
+
+ respond_to do |format|
+ format.html # show.html.erb
+ format.json { render :json => @upload_result }
+ end
+ end
+
+ # PUT /cards/upload_all
+ def upload_all
+ @upload_result = Card.upload_all_to_door
+
+ respond_to do |format|
+ format.html # show.html.erb
+ format.json { render :json => @upload_result }
+ end
+ end
+
+ # GET /cards/new
+ # GET /cards/new.json
+ def new
+ #@card = Card.new
+
+ respond_to do |format|
+ format.html # new.html.erb
+ format.json { render :json => @card }
+ end
+ end
+
+ # GET /cards/1/edit
+ def edit
+ #@card = Card.find(params[:id])
+ end
+
+ # POST /cards
+ # POST /cards.json
+ def create
+ #@card = Card.new(params[:card])
+
+ respond_to do |format|
+ if @card.save
+ format.html { redirect_to cards_url, :notice => 'Card was successfully created.' }
+ format.json { render :json => @card, :status => :created, :location => @card }
+ else
+ format.html { render :action => "new" }
+ format.json { render :json => @card.errors, :status => :unprocessable_entity }
+ end
+ end
+ end
+
+ # PUT /cards/1
+ # PUT /cards/1.json
+ def update
+ #@card = Card.find(params[:id])
+
+ respond_to do |format|
+ if @card.update_attributes(params[:card])
+ format.html { redirect_to cards_url, :notice => 'Card was successfully updated.' }
+ format.json { head :no_content }
+ else
+ format.html { render :action => "edit" }
+ format.json { render :json => @card.errors, :status => :unprocessable_entity }
+ end
+ end
+ end
+
+ # DELETE /cards/1
+ # DELETE /cards/1.json
+ def destroy
+ #@card = Card.find(params[:id])
+ @card.destroy
+
+ respond_to do |format|
+ format.html { redirect_to cards_url, :notice => 'Card successfully deleted.' }
+ format.json { head :no_content }
+ end
+ end
+end
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
deleted file mode 100644
index 0e82131..0000000
--- a/app/controllers/users_controller.rb
+++ /dev/null
@@ -1,109 +0,0 @@
-class UsersController < ApplicationController
- load_and_authorize_resource
- before_filter :authenticate_user!
-
- # GET /users
- # GET /users.json
- def index
- #@users = User.all
- #authorize! :read, @users
- @users = @users.sort_by{|e| e[:card_id]}
-
- respond_to do |format|
- format.html # index.html.erb
- format.json { render :json => @users }
- end
- end
-
- # GET /users/1
- # GET /users/1.json
- def show
- #@user = User.find(params[:id])
-
- respond_to do |format|
- format.html # show.html.erb
- format.json { render :json => @user }
- end
- end
-
- # PUT /users/1/upload
- def upload
- #@user = User.find(params[:id])
- @upload_result = @user.upload_to_door
-
- respond_to do |format|
- format.html # show.html.erb
- format.json { render :json => @upload_result }
- end
- end
-
- # PUT /users/upload_all
- def upload_all
- @upload_result = User.upload_all_to_door
-
- respond_to do |format|
- format.html # show.html.erb
- format.json { render :json => @upload_result }
- end
- end
-
- # GET /users/new
- # GET /users/new.json
- def new
- #@user = User.new
-
- respond_to do |format|
- format.html # new.html.erb
- format.json { render :json => @user }
- end
- end
-
- # GET /users/1/edit
- def edit
- #@user = User.find(params[:id])
- end
-
- # POST /users
- # POST /users.json
- def create
- #@user = User.new(params[:user])
-
- respond_to do |format|
- if @user.save
- format.html { redirect_to users_url, :notice => 'User was successfully created.' }
- format.json { render :json => @user, :status => :created, :location => @user }
- else
- format.html { render :action => "new" }
- format.json { render :json => @user.errors, :status => :unprocessable_entity }
- end
- end
- end
-
- # PUT /users/1
- # PUT /users/1.json
- def update
- #@user = User.find(params[:id])
-
- respond_to do |format|
- if @user.update_attributes(params[:user])
- format.html { redirect_to users_url, :notice => 'User was successfully updated.' }
- format.json { head :no_content }
- else
- format.html { render :action => "edit" }
- format.json { render :json => @user.errors, :status => :unprocessable_entity }
- end
- end
- end
-
- # DELETE /users/1
- # DELETE /users/1.json
- def destroy
- #@user = User.find(params[:id])
- @user.destroy
-
- respond_to do |format|
- format.html { redirect_to users_url, :notice => 'User successfully deleted.' }
- format.json { head :no_content }
- end
- end
-end
diff --git a/app/models/card.rb b/app/models/card.rb
new file mode 100644
index 0000000..469fb2f
--- /dev/null
+++ b/app/models/card.rb
@@ -0,0 +1,77 @@
+class Card < ActiveRecord::Base
+ require 'open-uri'
+
+ attr_accessible :id, :user_id, :name, :card_number, :card_permissions
+ validates_uniqueness_of :card_number
+ belongs_to :user
+
+ def upload_to_door
+ # load config values
+ door_access_url = APP_CONFIG['door_access_url']
+ door_access_password = APP_CONFIG['door_access_password']
+
+ # connect to door access system
+ source = open("#{door_access_url}?e=#{door_access_password}").read
+ results = source.scan(/authok/)
+ if(results.size > 0) then
+ #only continue if we've got an OK login
+ cardid = self.id.to_s.rjust(3, '0') #TODO: provide ability for
+ cardperm = self.card_permissions.to_s.rjust(3, '0')
+ cardnum = self.card_number.rjust(8, '0')
+
+ source = open("#{door_access_url}?m#{cardid}&p#{cardperm}&t#{cardnum}").read
+ results = source.scan(/cur/)
+
+ #logout
+ open("#{door_access_url}?e=0000")
+
+ if(results.size > 0) then
+ #only return true if we got some kind of decent response
+ return true
+ else
+ # We didn't get a decent response.
+ return false
+ end
+ else
+ # We didn't get an OK login.
+ return false
+ end
+ end
+
+ def self.upload_all_to_door
+ @cards = Card.all
+ @end_results = Array.new
+
+ # load config values
+ door_access_url = APP_CONFIG['door_access_url']
+ door_access_password = APP_CONFIG['door_access_password']
+
+ source = open("#{door_access_url}?e=#{door_access_password}").read
+ results = source.scan(/authok/)
+ if(results.size > 0) then
+ @cards.each do |u|
+ #only continue if we've got an OK login
+ cardid = u.id.to_s.rjust(3, '0')
+ cardperm = u.card_permissions.to_s.rjust(3, '0')
+ cardnum = u.card_number.rjust(8, '0')
+
+ source = open("#{door_access_url}?m#{cardid}&p#{cardperm}&t#{cardnum}").read
+ results = source.scan(/cur/)
+
+ if(results.size > 0) then
+ #only return true if we got some kind of decent response
+ @end_results.push([cardid,"OK"])
+ else
+ @end_results.push([cardid,"FAIL"])
+ end
+ end
+
+ #logout
+ open("#{door_access_url}?e=0000")
+ else
+ @end_results.push([cardid,"FAIL"])
+ end
+
+ return @end_results
+ end
+end
diff --git a/app/models/user.rb b/app/models/user.rb
index 4699129..565c09b 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -2,84 +2,11 @@ class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable,
# :lockable, :timeoutable and :omniauthable
- devise :database_authenticatable, # :registerable,
+ devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
- attr_accessible :email, :password, :password_confirmation, :remember_me
- require 'open-uri'
+ attr_accessible :email, :password, :password_confirmation, :remember_me, :name, :admin
- attr_accessible :card_id, :card_number, :card_permissions, :name, :admin
- validates_uniqueness_of :card_id, :card_number
-
-
- def upload_to_door
- # load config values
- door_access_url = APP_CONFIG['door_access_url']
- door_access_password = APP_CONFIG['door_access_password']
-
- # connect to door access system
- source = open("#{door_access_url}?e=#{door_access_password}").read
- results = source.scan(/authok/)
- if(results.size > 0) then
- #only continue if we've got an OK login
- usernum = self.card_id.to_s.rjust(3, '0')
- userperm = self.card_permissions.to_s.rjust(3, '0')
- cardnum = self.card_number.rjust(8, '0')
-
- source = open("#{door_access_url}?m#{usernum}&p#{userperm}&t#{cardnum}").read
- results = source.scan(/cur/)
-
- #logout
- open("#{door_access_url}?e=0000")
-
- if(results.size > 0) then
- #only return true if we got some kind of decent response
- return true
- else
- # We didn't get a decent response.
- return false
- end
- else
- # We didn't get an OK login.
- return false
- end
- end
-
- def self.upload_all_to_door
- @users = User.all
- @end_results = Array.new
-
- # load config values
- door_access_url = APP_CONFIG['door_access_url']
- door_access_password = APP_CONFIG['door_access_password']
-
- source = open("#{door_access_url}?e=#{door_access_password}").read
- results = source.scan(/authok/)
- if(results.size > 0) then
- @users.each do |u|
- #only continue if we've got an OK login
- usernum = u.card_id.to_s.rjust(3, '0')
- userperm = u.card_permissions.to_s.rjust(3, '0')
- cardnum = u.card_number.rjust(8, '0')
-
- source = open("#{door_access_url}?m#{usernum}&p#{userperm}&t#{cardnum}").read
- results = source.scan(/cur/)
-
- if(results.size > 0) then
- #only return true if we got some kind of decent response
- @end_results.push([usernum,"OK"])
- else
- @end_results.push([usernum,"FAIL"])
- end
- end
-
- #logout
- open("#{door_access_url}?e=0000")
- else
- @end_results.push([usernum,"FAIL"])
- end
-
- return @end_results
- end
+ has_many :cards
end
diff --git a/app/views/cards/_form.html.erb b/app/views/cards/_form.html.erb
new file mode 100644
index 0000000..3a63ed0
--- /dev/null
+++ b/app/views/cards/_form.html.erb
@@ -0,0 +1,37 @@
+<%= form_for(@card) do |f| %>
+ <% if @card.errors.any? %>
+
+
<%= pluralize(@card.errors.count, "error") %> prohibited this card from being saved:
+
+
+ <% @card.errors.full_messages.each do |msg| %>
+ - <%= msg %>
+ <% end %>
+
+
+ <% end %>
+
+
+ <%= f.label :user %>
+ <%= collection_select(:card, :user_id, User.all.sort_by(&:name), :id, :name) %>
+
+
+ <%= f.label :name, "Card Note" %>
+ <%= f.text_field :name %>
+
+
+ <%= f.label :id, "Card DB ID" %>
+ <%= f.number_field :id, :in => 10...201 %>
+
+
+ <%= f.label :card_number, "Card Number" %>
+ <%= f.text_field :card_number %>
+
+
+ <%= f.label :card_permissions %>
+ <%= f.select :card_permissions, [["Enabled",1],["Disabled",255]] %>
+
+
+ <%= f.submit %>
+
+<% end %>
diff --git a/app/views/cards/edit.html.erb b/app/views/cards/edit.html.erb
new file mode 100644
index 0000000..2e4f615
--- /dev/null
+++ b/app/views/cards/edit.html.erb
@@ -0,0 +1,6 @@
+Editing card
+
+<%= render 'form' %>
+
+<%= link_to 'Show', @card %> |
+<%= link_to 'Back', cards_path %>
diff --git a/app/views/cards/index.html.erb b/app/views/cards/index.html.erb
new file mode 100644
index 0000000..6791c16
--- /dev/null
+++ b/app/views/cards/index.html.erb
@@ -0,0 +1,34 @@
+Listing cards
+
+<%= link_to 'New Card', new_card_path %>
+<%= link_to 'Upload all cards', upload_all_path %>
+
+
+ User |
+ Note |
+ DB ID |
+ Card # |
+ Access? |
+ |
+ |
+ |
+
+
+<% if !@cards.blank? %>
+ <% @cards.each do |card| %>
+
+ <%= card.user.name %> |
+ <%= card.name %> |
+ <%= card.id %> |
+ <%= card.card_number %> |
+ <%= if card.card_permissions == 1 then "Access" end %> |
+ <%= link_to 'Upload', upload_path(card) %> |
+ <%= link_to 'Edit', edit_card_path(card) %> |
+ <%= link_to 'Destroy', card, :confirm => 'Are you sure? WARNING: THIS DOES NOT REMOVE THE CARD FROM THE DOOR SYSTEM! DISABLE AND UPLOAD IT FIRST.', :method => :delete %> |
+
+ <% end %>
+<% end %>
+
+
+
+
diff --git a/app/views/cards/new.html.erb b/app/views/cards/new.html.erb
new file mode 100644
index 0000000..0c279dc
--- /dev/null
+++ b/app/views/cards/new.html.erb
@@ -0,0 +1,5 @@
+New card
+
+<%= render 'form' %>
+
+<%= link_to 'Back', cards_path %>
diff --git a/app/views/cards/show.html.erb b/app/views/cards/show.html.erb
new file mode 100644
index 0000000..381a4bd
--- /dev/null
+++ b/app/views/cards/show.html.erb
@@ -0,0 +1,24 @@
+
+
+ Name:
+ <%= @card.name %>
+
+
+
+ Card DB ID:
+ <%= @card.id %>
+
+
+
+ Card Number:
+ <%= @card.card_number %>
+
+
+
+ Card Permissions:
+ <%= @card.card_permissions %>
+
+
+<%= link_to 'Upload to Door', upload_path(@card) %>
+<%= link_to 'Edit', edit_card_path(@card) %> |
+<%= link_to 'Back', cards_path %>
diff --git a/app/views/cards/upload.html.erb b/app/views/cards/upload.html.erb
new file mode 100644
index 0000000..01f574c
--- /dev/null
+++ b/app/views/cards/upload.html.erb
@@ -0,0 +1,14 @@
+
+<% if @upload_result %>
+
+ Upload result:
+ <%= @card.name %> uploaded successfully.
+
+<% else %>
+
+ Upload result:
+ Error uploading <%= @card.name %>.
+
+<% end %>
+
+<%= link_to 'Back', cards_path %>
diff --git a/app/views/users/upload_all.html.erb b/app/views/cards/upload_all.html.erb
similarity index 79%
rename from app/views/users/upload_all.html.erb
rename to app/views/cards/upload_all.html.erb
index f576dd0..aa6684e 100644
--- a/app/views/users/upload_all.html.erb
+++ b/app/views/cards/upload_all.html.erb
@@ -9,4 +9,4 @@
-<%= link_to 'Back', users_path %>
+<%= link_to 'Back', cards_path %>
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb
index cb3d6eb..284eb5f 100644
--- a/app/views/layouts/application.html.erb
+++ b/app/views/layouts/application.html.erb
@@ -8,7 +8,7 @@