Compare commits

...

29 Commits

Author SHA1 Message Date
Matt Huntington 30b2173fa3 create separate controller for confessions
10 years ago
Matt Huntington cd06597fdd documentation
10 years ago
Matt Huntington 4d073df1eb refresh transgression data once confession is complete
10 years ago
Matt Huntington 0deeb1ba3f renaming angular partial to angular_partial
10 years ago
Matt Huntington 164724c90e action to create a confession
10 years ago
Matt Huntington 21753eeb9a displaying confessions
10 years ago
Matt Huntington eb8ef0d6c4 FTFY using occured_at instead of created_at in response for confession (JSON)
10 years ago
Matt Huntington a5d802cc27 changing transgressions to transgressionsCtrl
10 years ago
Matt Huntington ba684acdd1 create confession corm and function
10 years ago
Matt Huntington ca463e3863 fixing redirect issue
10 years ago
Matt Huntington f28cff24cf better documentation
10 years ago
Matt Huntington 211d63eb55 Update angular.js
10 years ago
Matt Huntington 291f070941 adding multiple reloads for fast response
10 years ago
Matt Huntington 6eec899582 switching sin type to drop down
10 years ago
Matt Huntington 73cf692dbb refresh list of transgressions
10 years ago
Matt Huntington 96493e8df4 creating getTransgressions function for use later in adding transgression
10 years ago
Matt Huntington 52545697ac dynamic transgression generation
10 years ago
Matt Huntington cacf47b8ad listing current user transgressions
10 years ago
Matt Huntington 2b8f1f6625 creating fake transgression data
10 years ago
Matt Huntington 0b3a5f075f transgressions controller working
10 years ago
Matt Huntington 0ed4ee13e7 header controller gets current user and displays it
10 years ago
Matt Huntington 8c9723726d updating documentation
10 years ago
Matt Huntington aab9e37cc0 getting angular to work
10 years ago
Matt Huntington 441ac75f55 adding angular.css, replacing application.css
10 years ago
Matt Huntington ddc37e311f adding angular
10 years ago
Matt Huntington 4fbd4c50ca using angular layout
10 years ago
Matt Huntington 73f7d92fc9 adding angular layout
10 years ago
Matt Huntington 319a215246 redirecting to angular files when logged in
10 years ago
Matt Huntington 2536f3ff68 updating schema
10 years ago

@ -11,7 +11,7 @@ POST /session will create a new session, redirect to SPA page
--- ---
## JSON ## JSON
GET /current_user will return JSON object containing currently logged in user GET /session will return JSON object containing currently logged in user
GET /transgressions will return array of transgressions complete with confessions subarray GET /transgressions will return array of transgressions complete with confessions subarray

@ -0,0 +1,86 @@
var app = angular.module('SinsApp', []);
//Header Controller
app.controller('HeaderController', ['$http', function($http){
var controller = this;
//Get current user fromroute
$http.get('/session').success(function(data){
//setting current user to data.current user because
//data comes back like {current_user:{email:'asdf.asdf'}}
controller.current_user = data.current_user;
})
}]);
//Transgressions Controller
app.controller('TransgressionsController', ['$http', function($http){
//get authenticity_token from DOM (rails injects it on load)
var authenticity_token = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
var controller = this;
// Sin Types for Select in HTML
this.SIN_TYPES = [ 'Gluttony', 'Greed', 'Anger', 'Pride', 'Lust', 'Sloth', 'Envy' ];
this.newTransgressionSinType = 'Gluttony';
//this fetches transgression data and adds it to controller
this.getTransgressions = function(){
// get transgressions for current User
$http.get('/transgressions').success(function(data){
//just add the transgressions to the controller, data comes back with sinner as well
controller.current_user_transgressions = data.transgressions;
});
}
//fetch transgression data for current user as TransgressionsController initializes
this.getTransgressions();
// create a transgression
this.createTransgression = function(){
//as soon as function is called,
//get transgression data (from form)
//and push it onto controller's current_user_transgressions property
//this way the data is there immeditely, while we wait for the ajax calls to return
controller.current_user_transgressions.push({
sin_type: this.newTransgressionSinType + "...loading",
description: this.newTransgressionDescription + "...loading"
});
//make a post to /transgressions
$http.post('/transgressions', {
//include authenticity_token
authenticity_token: authenticity_token,
//values from form
transgression: {
sin_type: this.newTransgressionSinType,
description: this.newTransgressionDescription
}
}).success(function(data){
//once response to create transgression comes back,
//pop off what was pushed at beginning of this.createTransgression
//push the response's data on...
controller.current_user_transgressions.pop();
controller.current_user_transgressions.push(data.transgression);
//...and begin refreshing transgression data
controller.getTransgressions();
});
}
}]);
app.controller('ConfessionsController', ['$http', '$scope', function($http, $scope){
//get authenticity_token from DOM (rails injects it on load)
var authenticity_token = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
// create a confession.!
this.createConfession = function(){
//AJAX call using parameter that identifies transgression
$http.post('/transgressions/'+$scope.$parent.transgression.id+'/confessions', {
//include authenticity_token
authenticity_token: authenticity_token,
confession: {
description: this.newConfessionDescription,
occurred_at: this.newConfessionDate
}
}).success(function(data){
//refresh transgression data once POST is complete
$scope.$parent.transgressionsCtrl.getTransgressions();
});
}
}]);

@ -5,6 +5,10 @@ class ApplicationController < ActionController::Base
helper_method :current_user helper_method :current_user
def angular
render '/angular_partial', layout: 'angular'
end
def welcome def welcome
render '/welcome' render '/welcome'
end end

@ -13,11 +13,12 @@ class SessionController < ApplicationController
user.update(session_token: token) user.update(session_token: token)
flash[:message] = "Thanks for logging in, sinner." flash[:message] = "Thanks for logging in, sinner."
redirect_to application_angular_path
else else
flash[:message] = "Email / Password combo does not exist!" flash[:message] = "Email / Password combo does not exist!"
redirect_to root_path
end end
redirect_to root_path
end end
def destroy def destroy

@ -0,0 +1,45 @@
<header ng-controller="HeaderController as header">
<h1>Greetings {{header.current_user.email}}, you are a glorious reprobate!</h1>
</header>
<main ng-controller="TransgressionsController as transgressionsCtrl">
<h2>This is How You've Pleased Me: Your Current Transgressions</h2>
<ul>
<li ng-repeat="transgression in transgressionsCtrl.current_user_transgressions">
Sin Type: {{transgression.sin_type}}
<br/>
Description: {{transgression.description}}
<div ng-controller="ConfessionsController as confessionsCtrl">
{{confessionsCtrl.bar}}
<h3>Show me what you got (confessions):</h3>
<ul>
<li ng-repeat="confession in transgression.confessions">
What happened: {{confession.description}}
<br/>
When: {{confession.occurred_at}}
</li>
</ul>
<!-- Confessions go are displayed/created -->
<h3>Add a confession (yum):</h3>
<form ng-submit="confessionsCtrl.createConfession()">
<input type="text" ng-model="confessionsCtrl.newConfessionDescription" placeholder="How did you please me?"/>
<br/>
<input type="text" ng-model="confessionsCtrl.newConfessionDate" placeholder="When did it happen?"/>
<br/>
<input type="submit" value="YESSS!" />
<br/>
<br/>
</form>
</div>
</li>
</ul>
<h2>The Flesh is Weak: Admit Your Transgressions</h2>
<form ng-submit="transgressionsCtrl.createTransgression()">
<select ng-model="transgressionsCtrl.newTransgressionSinType">
<option ng-repeat="sinType in transgressionsCtrl.SIN_TYPES">{{sinType}}</option>
</select>
<input type="text" ng-model="transgressionsCtrl.newTransgressionDescription" placeholder="How Have You Pleased Me?"/>
<input type="submit" value="Feed Me Your Regrets" />
</form>
</main>

@ -3,5 +3,5 @@ json.transgression_id @confession.transgression_id
json.confession do json.confession do
json.id @confession.id json.id @confession.id
json.description @confession.description json.description @confession.description
json.occurred_at time_ago_in_words(@confession.created_at) + " ago" json.occurred_at time_ago_in_words(@confession.occurred_at) + " ago"
end end

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html ng-app="SinsApp">
<head>
<title>TheSinsWeCommit</title>
<%= stylesheet_link_tag 'angular', media: 'all', 'data-turbolinks-track' => true %>
<%= csrf_meta_tags %>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js" charset="utf-8"></script>
</head>
<body>
<%= yield %>
<%= javascript_include_tag 'angular', 'data-turbolinks-track' => true %>
</body>
</html>

@ -10,6 +10,6 @@ json.transgressions(@transgressions) do |trans|
json.confessions(trans.confessions) do |conf| json.confessions(trans.confessions) do |conf|
json.id conf.id json.id conf.id
json.description conf.description json.description conf.description
json.occurred_at time_ago_in_words(conf.created_at) + " ago" json.occurred_at time_ago_in_words(conf.occurred_at) + " ago"
end end
end end

@ -8,4 +8,4 @@ Rails.application.config.assets.version = '1.0'
# Precompile additional assets. # Precompile additional assets.
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. # application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
Rails.application.config.assets.precompile += %w( login_signup.js ) Rails.application.config.assets.precompile += %w( login_signup.js angular.js angular.css )

@ -1,6 +1,8 @@
Rails.application.routes.draw do Rails.application.routes.draw do
root 'application#welcome' root 'application#welcome'
get 'application/angular'
resources :transgressions, only: [:index, :create], defaults: { format: :json } do resources :transgressions, only: [:index, :create], defaults: { format: :json } do
resources :confessions, only: [:create], shallow: true resources :confessions, only: [:create], shallow: true
end end

@ -18,7 +18,7 @@ ActiveRecord::Schema.define(version: 20151102165102) do
create_table "confessions", force: :cascade do |t| create_table "confessions", force: :cascade do |t|
t.integer "transgression_id" t.integer "transgression_id"
t.datetime "occurred_at", default: '2015-10-30 13:30:09', null: false t.datetime "occurred_at", default: '2015-11-03 15:03:28', null: false
t.string "description", null: false t.string "description", null: false
t.datetime "created_at", null: false t.datetime "created_at", null: false
t.datetime "updated_at", null: false t.datetime "updated_at", null: false

Loading…
Cancel
Save