diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/.gitignore similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/.gitignore rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/.gitignore diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/Gemfile new file mode 100644 index 0000000..32124a6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/Gemfile @@ -0,0 +1,50 @@ +source 'https://rubygems.org' + + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '4.2.7' +# Use sqlite3 as the database for Active Record +gem 'sqlite3' +# Use SCSS for stylesheets +gem 'sass-rails', '~> 5.0' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# Use CoffeeScript for .coffee assets and views +gem 'coffee-rails', '~> 4.1.0' +# See https://github.com/rails/execjs#readme for more supported runtimes +# gem 'therubyracer', platforms: :ruby + +# Use jquery as the JavaScript library +gem 'jquery-rails' +# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks +gem 'turbolinks' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.0' +# bundle exec rake doc:rails generates the API under doc/api. +gem 'sdoc', '~> 0.4.0', group: :doc + +# Use ActiveModel has_secure_password +gem 'bcrypt', '~> 3.1.7' + +# Use Unicorn as the app server +# gem 'unicorn' + +# Use Capistrano for deployment +# gem 'capistrano-rails', group: :development + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug' +end + +group :development do + # Access an IRB console on exception pages or by using <%= console %> in views + gem 'web-console', '~> 2.0' + + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' +end + +gem 'hirb' +# gem 'client_side_validations' +gem 'rails-footnotes', '~> 4.0' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/Gemfile.lock new file mode 100644 index 0000000..71f3b61 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/Gemfile.lock @@ -0,0 +1,185 @@ +GEM + remote: https://rubygems.org/ + specs: + actionmailer (4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.7) + actionview (= 4.2.7) + activesupport (= 4.2.7) + rack (~> 1.6) + rack-test (~> 0.6.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + activejob (4.2.7) + activesupport (= 4.2.7) + globalid (>= 0.3.0) + activemodel (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + activerecord (4.2.7) + activemodel (= 4.2.7) + activesupport (= 4.2.7) + arel (~> 6.0) + activesupport (4.2.7) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + arel (6.0.4) + bcrypt (3.1.12) + binding_of_caller (0.8.0) + debug_inspector (>= 0.0.1) + builder (3.2.3) + byebug (10.0.2) + client_side_validations (4.2.12) + jquery-rails (>= 3.1.2, < 5.0.0) + js_regex (~> 1.0, >= 1.0.19) + rails (>= 4.0.0, < 4.3.0) + coffee-rails (4.1.1) + coffee-script (>= 2.2.0) + railties (>= 4.0.0, < 5.1.x) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + concurrent-ruby (1.0.5) + crass (1.0.4) + debug_inspector (0.0.3) + erubis (2.7.0) + execjs (2.7.0) + ffi (1.9.25) + globalid (0.4.1) + activesupport (>= 4.2.0) + hirb (0.7.3) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jbuilder (2.7.0) + activesupport (>= 4.2.0) + multi_json (>= 1.2) + jquery-rails (4.3.3) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + js_regex (1.2.3) + regexp_parser (>= 0.3.6, <= 0.5.0) + json (1.8.6) + loofah (2.2.2) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.0) + mini_mime (>= 0.1.1) + mini_mime (1.0.0) + mini_portile2 (2.3.0) + minitest (5.11.3) + multi_json (1.13.1) + nokogiri (1.8.4) + mini_portile2 (~> 2.3.0) + rack (1.6.10) + rack-test (0.6.3) + rack (>= 1.0) + rails (4.2.7) + actionmailer (= 4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + activemodel (= 4.2.7) + activerecord (= 4.2.7) + activesupport (= 4.2.7) + bundler (>= 1.3.0, < 2.0) + railties (= 4.2.7) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.9) + activesupport (>= 4.2.0, < 5.0) + nokogiri (~> 1.6) + rails-deprecated_sanitizer (>= 1.0.1) + rails-footnotes (4.1.8) + rails (>= 3.2) + rails-html-sanitizer (1.0.4) + loofah (~> 2.2, >= 2.2.2) + railties (4.2.7) + actionpack (= 4.2.7) + activesupport (= 4.2.7) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (12.3.1) + rb-fsevent (0.10.3) + rb-inotify (0.9.10) + ffi (>= 0.5.0, < 2) + rdoc (4.3.0) + regexp_parser (0.5.0) + sass (3.5.7) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sass-rails (5.0.7) + railties (>= 4.0.0, < 6) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + sdoc (0.4.2) + json (~> 1.7, >= 1.7.7) + rdoc (~> 4.0) + spring (2.0.2) + activesupport (>= 4.2) + sprockets (3.7.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.2.1) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + sqlite3 (1.3.13) + thor (0.20.0) + thread_safe (0.3.6) + tilt (2.0.8) + turbolinks (5.1.1) + turbolinks-source (~> 5.1) + turbolinks-source (5.1.0) + tzinfo (1.2.5) + thread_safe (~> 0.1) + uglifier (4.1.18) + execjs (>= 0.3.0, < 3) + web-console (2.3.0) + activemodel (>= 4.0) + binding_of_caller (>= 0.7.2) + railties (>= 4.0) + sprockets-rails (>= 2.0, < 4.0) + +PLATFORMS + ruby + +DEPENDENCIES + bcrypt (~> 3.1.7) + byebug + client_side_validations + coffee-rails (~> 4.1.0) + hirb + jbuilder (~> 2.0) + jquery-rails + rails (= 4.2.7) + rails-footnotes (~> 4.0) + sass-rails (~> 5.0) + sdoc (~> 0.4.0) + spring + sqlite3 + turbolinks + uglifier (>= 1.3.0) + web-console (~> 2.0) + +BUNDLED WITH + 1.16.3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/README.rdoc b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/README.rdoc similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/README.rdoc rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/README.rdoc diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/Rakefile similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/Rakefile rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/Rakefile diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/assets/images/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/app/assets/images/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/assets/images/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/assets/images/codingdojo.png b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/assets/images/codingdojo.png new file mode 100644 index 0000000..5c82e33 Binary files /dev/null and b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/assets/images/codingdojo.png differ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/assets/javascripts/application.js new file mode 100644 index 0000000..d81f51a --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/assets/javascripts/application.js @@ -0,0 +1,16 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require jquery +//= require jquery_ujs +//= require turbolinks +//= require_tree . \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/assets/javascripts/dojo.coffee b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/assets/javascripts/dojo.coffee new file mode 100644 index 0000000..24f83d1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/assets/javascripts/dojo.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/assets/javascripts/main.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/assets/javascripts/main.js new file mode 100644 index 0000000..9aed150 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/assets/javascripts/main.js @@ -0,0 +1,25 @@ + +// Nav-Shrink +$(document).ready(function() { + $(window).scroll(function() { + if($(document).scrollTop() > 10) { + $('nav').addClass('shrink'); + } + else { + $('nav').removeClass('shrink'); + } + }); +}); + + +// // ??? +// document.addEventListener('DOMContentLoaded', function() { +// var elems = document.querySelectorAll('.scrollspy'); +// var instances = M.ScrollSpy.init(elems, options); +// }); + +// // Or with jQuery + +// $(document).ready(function(){ +// $('.scrollspy').scrollSpy(); +// }); diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/app/assets/stylesheets/application.css b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/assets/stylesheets/application.css similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/app/assets/stylesheets/application.css rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/assets/stylesheets/application.css diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/assets/stylesheets/dojo.scss b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/assets/stylesheets/dojo.scss new file mode 100644 index 0000000..20f9380 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/assets/stylesheets/dojo.scss @@ -0,0 +1,144 @@ +// Navbar section +nav { + background-color:#000; + padding: 0 4rem; + a:hover { color: tan; } +} + +body { + width: 100%; + height: 100vh; + // position: static; + background-position: center; + background-repeat: no-repeat; + background-size: cover; + background-image: url('https://cdn-images-1.medium.com/max/1600/0*zfW13Mn8_fvEKcU7.jpg') +} + +nav a { color: white; } +nav a img { + width: 100px; + height: 40px; + margin: 0.5rem 0; + border-style: none; +} + +nav a:hover { color: #06a9e2; cursor: pointer; } + + +h1, h2 { + font-family: 'Fredoka One', cursive; + text-align: center; + color: #06a9e2; + margin: 4rem 0 2rem; + position: relative; +} +h1 span { color: #06a9e2; font-family: 'Poiret One', cursive; } + +#notice { + padding: 2rem; + border-radius: 1rem; + border: 2px solid #06a9e2; + background: lightslategrey; +} + +// Form Components [ Add and Edit ] Section +form { padding: 0 15rem; } +ul .form-row { padding-left: 4rem !important; } +.form-row { line-height: 0rem; } + + +// Table Section +.theader { color: #06a9e2; font-family: 'Poiret One', cursive; } +.trbody { font-family: 'Poiret One', cursive; } +.trbody > td { padding: 0; } +.trbody > td:last-child > a { margin: 0.1rem auto; width: 5rem; } +.trbody > td:last-child > form { + input { margin: 0; } + width: 5rem; + margin: 0rem auto; + display: inline-table !important; +} +.trbody:hover { color: #06a9e2; background-color: #0000006b !important; } +.scrolling-wrapper { + -webkit-overflow-scrolling: touch; + padding-bottom: 12rem; + overflow-y: scroll; + position:relative; + opacity: 0.8; + height: 50px !important; + width: 100%; + // z-index: -1; + } + ::-webkit-scrollbar { width: 12px; } + ::-webkit-scrollbar-track { display: none; } + + +// Container section +.container { height: 70% !important; width: 50%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto;} +// .container h1 { margin-top: 2rem; } + +.flxend { display: flex; justify-content: end; } // div container requiring flex +.flexed { display: flex; justify-content: space-between; } // div container requiring flex +.grided { display: grid; grid-template-columns: 1fr 1fr; grid-gap: 2rem; } // div container requiring grid +.inline { display: inline-block; margin: 1rem auto; } // div container requiring grid +.grided input { min-width: 100%; margin-top: 2rem; } +.text-warning { color: #fba153fa; } +.right-margin { margin-right: 1rem; } +.sn { + color: white; + margin-top: 2rem; + border-radius: .2rem; + background-color: #111; + border: 1px solid #f5f5f5; + // background-color: #357ae8; + transition: all .3s ease-in-out; + box-shadow: 1px 2px 2px 0px #444 !important; +} +.sn:hover { + color: #06a9e2; + transition: all .3s ease-in-out; + background-color: #000 !important; + box-shadow: 0px 0px 0px 0px #222 !important; +} +.show { + border-radius: 1rem; + font-size: 10px; + color: #06a9e2; + &:hover { + color: white !important; + background-color: #357ae8 !important; + } +} +.edit { + border-radius: 1rem; + font-size: 10px; + color: lime; + &:hover { + color: white !important; + background-color: green !important; + } +} +.delete { + border-radius: 1rem; + font-size: 10px; + color: #f44336; + &:hover { + color: white !important; + background-color: red !important; + } +} +.brand-logo { + font-family: 'Days One', sans-serif; +} + +input.valid:not([type]), input.valid:not([type]):focus, input.valid[type=text]:not(.browser-default), input.valid[type=text]:not(.browser-default):focus, input.valid[type=password]:not(.browser-default), input.valid[type=password]:not(.browser-default):focus, input.valid[type=email]:not(.browser-default), input.valid[type=email]:not(.browser-default):focus, input.valid[type=url]:not(.browser-default), input.valid[type=url]:not(.browser-default):focus, input.valid[type=time]:not(.browser-default), input.valid[type=time]:not(.browser-default):focus, input.valid[type=date]:not(.browser-default), input.valid[type=date]:not(.browser-default):focus, input.valid[type=datetime]:not(.browser-default), input.valid[type=datetime]:not(.browser-default):focus, input.valid[type=datetime-local]:not(.browser-default), input.valid[type=datetime-local]:not(.browser-default):focus, input.valid[type=tel]:not(.browser-default), input.valid[type=tel]:not(.browser-default):focus, input.valid[type=number]:not(.browser-default), input.valid[type=number]:not(.browser-default):focus, input.valid[type=search]:not(.browser-default), input.valid[type=search]:not(.browser-default):focus, textarea.materialize-textarea.valid, textarea.materialize-textarea.valid:focus, .select-wrapper.valid>input.select-dropdown { + border-bottom: 1px solid #357ae8 !important; + -webkit-box-shadow: 0 1px 0 0 #357ae8 !important; + box-shadow: 0 1px 0 0 #357ae8 !important; +} +input.valid:not([type]), input.valid:not([type]):focus, input.valid[type=text]:not(.browser-default), input.valid[type=text]:not(.browser-default):focus, input.valid[type=password]:not(.browser-default), input.valid[type=password]:not(.browser-default):focus, input.valid[type=email]:not(.browser-default), input.valid[type=email]:not(.browser-default):focus, input.valid[type=url]:not(.browser-default), input.valid[type=url]:not(.browser-default):focus, input.valid[type=time]:not(.browser-default), input.valid[type=time]:not(.browser-default):focus, input.valid[type=date]:not(.browser-default), input.valid[type=date]:not(.browser-default):focus, input.valid[type=datetime]:not(.browser-default), input.valid[type=datetime]:not(.browser-default):focus, input.valid[type=datetime-local]:not(.browser-default), input.valid[type=datetime-local]:not(.browser-default):focus, input.valid[type=tel]:not(.browser-default), input.valid[type=tel]:not(.browser-default):focus, input.valid[type=number]:not(.browser-default), input.valid[type=number]:not(.browser-default):focus, input.valid[type=search]:not(.browser-default), input.valid[type=search]:not(.browser-default):focus, textarea.materialize-textarea.valid, textarea.materialize-textarea.valid:focus, .select-wrapper.valid>input.select-dropdown { + border-bottom: 1px solid #357ae8; + -webkit-box-shadow: 0 1px 0 0 #357ae8; + box-shadow: 0 1px 0 0 #357ae8; +} \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/controllers/application_controller.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/app/controllers/application_controller.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/controllers/application_controller.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/controllers/concerns/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/app/controllers/concerns/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/controllers/concerns/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/controllers/dojo_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/controllers/dojo_controller.rb new file mode 100644 index 0000000..b4cf0a6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/controllers/dojo_controller.rb @@ -0,0 +1,83 @@ +class DojoController < ApplicationController + + before_action :set_dojo, only: [:show, :edit, :update, :destroy] + + # GET Request - Renders root/home page [.html] + def index + @alldojos = Dojo.all + end + + + # GET Request - Renders [.html] + def new + @dojo = Dojo.new + end + + + # POST Request [.html] + # POST Request [.json] + def create + @dojo = Dojo.create(validate_params) + # @dojo.valid? + respond_to do |format| + if @dojo.save + format.html { redirect_to '/', notice: 'Dojo was successfully created.' } + format.json { render :show, status: :created, location: @dojo } + else + format.html { render :new } + format.json { render json: @dojo.errors, status: :unprocessable_entity } + end + end + end + + + # GET Request - Renders [.html] + def show + @dojo = Dojo.find(params[:id]) + end + + + # GET Request - Renders [.html] + def edit + @dojo = Dojo.find(params[:id]) + render "edit" + end + + + # PATCH/PUT Request [.html] + # PATCH/PUT Request [.json] + def update + respond_to do |format| + if @dojo.update(validate_params) + format.html { redirect_to '/', notice: 'Dojo was successfully updated.' } + format.json { render :show, status: :ok, location: @dojo } + else + format.html { render :edit } + format.json { render json: @dojo.errors, status: :unprocessable_entity } + end + end + end + + + # DELETE /dojos/1 + # DELETE /dojos/1.json + def destroy + Dojo.find(params[:id]).destroy + respond_to do |format| + format.html { redirect_to '/', notice: 'Dojo was successfully destroyed.' } + format.json { head :no_content } + end + end + + + private + # Use callbacks to share common setup or constraints between actions. + def set_dojo + @dojo = Dojo.find(params[:id]) + end + + # Sanatizing/Validating Parameters... + def validate_params + params.require(:dojo).permit(:branch, :street, :city, :state) + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/helpers/application_helper.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/app/helpers/application_helper.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/helpers/application_helper.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/helpers/dojo_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/helpers/dojo_helper.rb new file mode 100644 index 0000000..89d551e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/helpers/dojo_helper.rb @@ -0,0 +1,2 @@ +module DojoHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/mailers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/app/mailers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/mailers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/models/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/app/models/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/models/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/models/concerns/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/app/models/concerns/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/models/concerns/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/models/dojo.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/models/dojo.rb new file mode 100644 index 0000000..54b1dd2 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/models/dojo.rb @@ -0,0 +1,4 @@ +class Dojo < ActiveRecord::Base + validates :branch, :street, :city, :state, presence: true, length: { minimum: 2 } + validates :branch, uniqueness: { case_sensitive: false } +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/views/dojo/edit.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/views/dojo/edit.html.erb new file mode 100644 index 0000000..0d5d461 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/views/dojo/edit.html.erb @@ -0,0 +1,59 @@ + + +
+ +

Edit Dojo

+ +
+
+ + <% if @dojo.errors.any? %> +
+
+ <%= pluralize(@dojo.errors.count, "error") %> + prohibited this dojo from being saved: +
+
    + <% @dojo.errors.full_messages.each do |message| %> +
  • »<%= message %>
  • + <% end %> +
+
+ <% end %> + + + + + +
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ +
+
+
diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/views/dojo/index.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/views/dojo/index.html.erb new file mode 100644 index 0000000..dabce3b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/views/dojo/index.html.erb @@ -0,0 +1,44 @@ +
+ + <% if notice %> +

<%= notice %>

+ <% end %> + +

Listing <%= @alldojos.count %> Dojos

+ + + + + + + + + + + + +
+ <% @alldojos.each do |dojo| %> +
+ + + + + + + <% end %> + + +
Coding Dojo BranchStreet City State Actions
<%= dojo.branch %><%= dojo.street %><%= dojo.city %><%= dojo.state %> + Show + Edit +
+ + + +
+
+ + + +
\ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/views/dojo/new.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/views/dojo/new.html.erb new file mode 100644 index 0000000..f2dec1e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/views/dojo/new.html.erb @@ -0,0 +1,52 @@ + + +
+

New Dojo

+
+
+ + + <% if @dojo.errors.any? %> +
+
+ <%= pluralize(@dojo.errors.count, "error") %> + prohibited this dojo from being saved: +
+
    + <% @dojo.errors.full_messages.each do |message| %> +
  • »<%= message %>
  • + <% end %> +
+
+ <% end %> + + + +
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ +
+
+
diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/views/dojo/show.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/views/dojo/show.html.erb new file mode 100644 index 0000000..bedbdc4 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/views/dojo/show.html.erb @@ -0,0 +1,39 @@ +
+ + <% if notice %> +

<%= notice %>

+ <% end %> + +

<%= @dojo.branch %> Information

+ + + + + + + + + + +
+
+ + + + + + +
Street City State
<%= @dojo.street %><%= @dojo.city %><%= @dojo.state %>
+ + +
+ + +
+ Edit + +
+
+
\ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/views/layouts/application.html.erb new file mode 100644 index 0000000..54a3c04 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/app/views/layouts/application.html.erb @@ -0,0 +1,36 @@ + + + + DojoDashBoard + + + + + + + + + + + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= javascript_include_tag 'application', 'main.js','data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + + + + + <%= yield %> + + + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/bin/bundle similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/bin/bundle rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/bin/bundle diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/bin/rails similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/bin/rails rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/bin/rails diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/bin/rake similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/bin/rake rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/bin/rake diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/bin/setup similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/bin/setup rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/bin/setup diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/bin/spring similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/bin/spring rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/bin/spring diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config.ru similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config.ru rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config.ru diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/application.rb new file mode 100644 index 0000000..601fcfd --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/application.rb @@ -0,0 +1,26 @@ +require File.expand_path('../boot', __FILE__) + +require 'rails/all' + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module DojoDashBoard + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Do not swallow errors in after_commit/after_rollback callbacks. + config.active_record.raise_in_transactional_callbacks = true + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/boot.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/boot.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/boot.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/database.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/database.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/database.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/environment.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/environment.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/environment.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/environments/development.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/environments/development.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/environments/development.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/environments/production.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/environments/production.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/environments/production.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/environments/test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/environments/test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/environments/test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/initializers/assets.rb new file mode 100644 index 0000000..3765a88 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/initializers/assets.rb @@ -0,0 +1,12 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path +# Rails.application.config.assets.paths << Emoji.images_path + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. +# Rails.application.config.assets.precompile += %w( search.js ) +Rails.application.config.assets.precompile += %w( main.js ) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/initializers/backtrace_silencers.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/initializers/backtrace_silencers.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/initializers/backtrace_silencers.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/initializers/cookies_serializer.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/initializers/cookies_serializer.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/initializers/cookies_serializer.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/initializers/filter_parameter_logging.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/initializers/filter_parameter_logging.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/initializers/filter_parameter_logging.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/initializers/inflections.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/initializers/inflections.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/initializers/inflections.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/initializers/mime_types.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/initializers/mime_types.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/initializers/mime_types.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/initializers/session_store.rb new file mode 100644 index 0000000..bc1731e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/initializers/session_store.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.session_store :cookie_store, key: '_DojoDashBoard_session' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/initializers/wrap_parameters.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/initializers/wrap_parameters.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/initializers/wrap_parameters.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/locales/en.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/locales/en.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/locales/en.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/routes.rb new file mode 100644 index 0000000..717e344 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/routes.rb @@ -0,0 +1,10 @@ +Rails.application.routes.draw do + root 'dojo#index' + get 'dojos' => 'dojo#index' + post 'dojos' => 'dojo#create' + get 'dojos/new' => 'dojo#new' + get 'dojos/:id' => 'dojo#show' + get 'dojos/:id/edit' => 'dojo#edit' + delete 'dojos/:id' => 'dojo#destroy' + patch 'dojos/:id/update' => 'dojo#update' +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/secrets.yml new file mode 100644 index 0000000..614d14a --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/config/secrets.yml @@ -0,0 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rake secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: dda6b201c362e67a95927763fc7377c83926632189ef1b2306a3b2d30156c3f744f688dfd4334c99716b4481f7c11498648823b2f8d52ec9e2ecb46b5753d104 + +test: + secret_key_base: a15eb0a75685537283b06398a3fdc8fe4a9b274f7bffd534439fbabaef469feda24ef46d3e75cb98195c4e739d4ab8ace536bec66edadf4bb3fe4ec3bc8db48f + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/db/migrate/20180809201224_create_dojos.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/db/migrate/20180809201224_create_dojos.rb new file mode 100644 index 0000000..0df8b3d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/db/migrate/20180809201224_create_dojos.rb @@ -0,0 +1,12 @@ +class CreateDojos < ActiveRecord::Migration + def change + create_table :dojos do |t| + t.string :branch + t.string :street + t.string :city + t.string :state + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/db/schema.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/db/schema.rb new file mode 100644 index 0000000..f9e234e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/db/schema.rb @@ -0,0 +1,25 @@ +# encoding: UTF-8 +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 20180809201224) do + + create_table "dojos", force: :cascade do |t| + t.string "branch" + t.string "street" + t.string "city" + t.string "state" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/db/seeds.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/db/seeds.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/db/seeds.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/lib/assets/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/lib/assets/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/lib/assets/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/lib/tasks/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/lib/tasks/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/lib/tasks/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/log/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/log/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/log/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/public/404.html similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/public/404.html rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/public/404.html diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/public/422.html similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/public/422.html rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/public/422.html diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/public/500.html similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/public/500.html rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/public/500.html diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/public/favicon.ico similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/public/favicon.ico rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/public/favicon.ico diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/public/robots.txt similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/public/robots.txt rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/public/robots.txt diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/test/controllers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/test/controllers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/test/controllers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/test/controllers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/test/controllers/dojo_controller_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/test/controllers/dojo_controller_test.rb new file mode 100644 index 0000000..edfeaf7 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/test/controllers/dojo_controller_test.rb @@ -0,0 +1,39 @@ +require 'test_helper' + +class DojoControllerTest < ActionController::TestCase + test "should get index" do + get :index + assert_response :success + end + + test "should get new" do + get :new + assert_response :success + end + + test "should get create" do + get :create + assert_response :success + end + + test "should get show" do + get :show + assert_response :success + end + + test "should get edit" do + get :edit + assert_response :success + end + + test "should get update" do + get :update + assert_response :success + end + + test "should get destroy" do + get :destroy + assert_response :success + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/test/fixtures/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/test/fixtures/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/test/fixtures/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/test/fixtures/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/test/fixtures/dojos.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/test/fixtures/dojos.yml new file mode 100644 index 0000000..215263e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/test/fixtures/dojos.yml @@ -0,0 +1,13 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + branch: MyString + street: MyString + city: MyString + state: MyString + +two: + branch: MyString + street: MyString + city: MyString + state: MyString diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/test/helpers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/test/helpers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/test/helpers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/test/helpers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/test/integration/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/test/integration/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/test/integration/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/test/integration/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/test/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/test/mailers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/test/mailers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/test/mailers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/test/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/test/models/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/test/models/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/test/models/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/test/models/dojo_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/test/models/dojo_test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/test/models/dojo_test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/test/models/dojo_test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/test/test_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/test/test_helper.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/test/test_helper.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/test/test_helper.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/vendor/assets/javascripts/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/vendor/assets/javascripts/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/vendor/assets/javascripts/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/vendor/assets/stylesheets/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/vendor/assets/stylesheets/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/DojoDashBoard/vendor/assets/stylesheets/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/.gitignore similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/.gitignore rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/.gitignore diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/Gemfile new file mode 100644 index 0000000..ff89877 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/Gemfile @@ -0,0 +1,49 @@ +source 'https://rubygems.org' + + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '4.2.7' +# Use sqlite3 as the database for Active Record +gem 'sqlite3' +# Use SCSS for stylesheets +gem 'sass-rails', '~> 5.0' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# Use CoffeeScript for .coffee assets and views +gem 'coffee-rails', '~> 4.1.0' +# See https://github.com/rails/execjs#readme for more supported runtimes +# gem 'therubyracer', platforms: :ruby + +# Use jquery as the JavaScript library +gem 'jquery-rails' +# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks +gem 'turbolinks' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.0' +# bundle exec rake doc:rails generates the API under doc/api. +gem 'sdoc', '~> 0.4.0', group: :doc + +# Use ActiveModel has_secure_password +# gem 'bcrypt', '~> 3.1.7' + +# Use Unicorn as the app server +# gem 'unicorn' + +# Use Capistrano for deployment +# gem 'capistrano-rails', group: :development + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug' + gem 'hirb' + gem 'rails-footnotes', '>= 4.0.0', '<5' +end + +group :development do + # Access an IRB console on exception pages or by using <%= console %> in views + gem 'web-console', '~> 2.0' + + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' +end + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/Gemfile.lock new file mode 100644 index 0000000..0a6ea59 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/Gemfile.lock @@ -0,0 +1,175 @@ +GEM + remote: https://rubygems.org/ + specs: + actionmailer (4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.7) + actionview (= 4.2.7) + activesupport (= 4.2.7) + rack (~> 1.6) + rack-test (~> 0.6.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + activejob (4.2.7) + activesupport (= 4.2.7) + globalid (>= 0.3.0) + activemodel (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + activerecord (4.2.7) + activemodel (= 4.2.7) + activesupport (= 4.2.7) + arel (~> 6.0) + activesupport (4.2.7) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + arel (6.0.4) + binding_of_caller (0.8.0) + debug_inspector (>= 0.0.1) + builder (3.2.3) + byebug (10.0.2) + coffee-rails (4.1.1) + coffee-script (>= 2.2.0) + railties (>= 4.0.0, < 5.1.x) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + concurrent-ruby (1.0.5) + crass (1.0.4) + debug_inspector (0.0.3) + erubis (2.7.0) + execjs (2.7.0) + ffi (1.9.25) + globalid (0.4.1) + activesupport (>= 4.2.0) + hirb (0.7.3) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jbuilder (2.7.0) + activesupport (>= 4.2.0) + multi_json (>= 1.2) + jquery-rails (4.3.3) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + json (1.8.6) + loofah (2.2.2) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.0) + mini_mime (>= 0.1.1) + mini_mime (1.0.0) + mini_portile2 (2.3.0) + minitest (5.11.3) + multi_json (1.13.1) + nokogiri (1.8.4) + mini_portile2 (~> 2.3.0) + rack (1.6.10) + rack-test (0.6.3) + rack (>= 1.0) + rails (4.2.7) + actionmailer (= 4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + activemodel (= 4.2.7) + activerecord (= 4.2.7) + activesupport (= 4.2.7) + bundler (>= 1.3.0, < 2.0) + railties (= 4.2.7) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.9) + activesupport (>= 4.2.0, < 5.0) + nokogiri (~> 1.6) + rails-deprecated_sanitizer (>= 1.0.1) + rails-footnotes (4.1.8) + rails (>= 3.2) + rails-html-sanitizer (1.0.4) + loofah (~> 2.2, >= 2.2.2) + railties (4.2.7) + actionpack (= 4.2.7) + activesupport (= 4.2.7) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (12.3.1) + rb-fsevent (0.10.3) + rb-inotify (0.9.10) + ffi (>= 0.5.0, < 2) + rdoc (4.3.0) + sass (3.5.7) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sass-rails (5.0.7) + railties (>= 4.0.0, < 6) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + sdoc (0.4.2) + json (~> 1.7, >= 1.7.7) + rdoc (~> 4.0) + spring (2.0.2) + activesupport (>= 4.2) + sprockets (3.7.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.2.1) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + sqlite3 (1.3.13) + thor (0.20.0) + thread_safe (0.3.6) + tilt (2.0.8) + turbolinks (5.1.1) + turbolinks-source (~> 5.1) + turbolinks-source (5.1.0) + tzinfo (1.2.5) + thread_safe (~> 0.1) + uglifier (4.1.17) + execjs (>= 0.3.0, < 3) + web-console (2.3.0) + activemodel (>= 4.0) + binding_of_caller (>= 0.7.2) + railties (>= 4.0) + sprockets-rails (>= 2.0, < 4.0) + +PLATFORMS + ruby + +DEPENDENCIES + byebug + coffee-rails (~> 4.1.0) + hirb + jbuilder (~> 2.0) + jquery-rails + rails (= 4.2.7) + rails-footnotes (>= 4.0.0, < 5) + sass-rails (~> 5.0) + sdoc (~> 0.4.0) + spring + sqlite3 + turbolinks + uglifier (>= 1.3.0) + web-console (~> 2.0) + +BUNDLED WITH + 1.16.3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/README.rdoc b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/README.rdoc new file mode 100644 index 0000000..dd4e97e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/README.rdoc @@ -0,0 +1,28 @@ +== README + +This README would normally document whatever steps are necessary to get the +application up and running. + +Things you may want to cover: + +* Ruby version + +* System dependencies + +* Configuration + +* Database creation + +* Database initialization + +* How to run the test suite + +* Services (job queues, cache servers, search engines, etc.) + +* Deployment instructions + +* ... + + +Please feel free to use a different markup language if you do not plan to run +rake doc:app. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/Rakefile similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/Rakefile rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/Rakefile diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/assets/images/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/assets/images/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/assets/images/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/assets/javascripts/application.js similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/app/assets/javascripts/application.js rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/assets/javascripts/application.js diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/assets/javascripts/users.coffee b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/assets/javascripts/users.coffee new file mode 100644 index 0000000..24f83d1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/assets/javascripts/users.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/assets/stylesheets/application.css b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/assets/stylesheets/application.css similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/assets/stylesheets/application.css rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/assets/stylesheets/application.css diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/assets/stylesheets/users.scss b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/assets/stylesheets/users.scss new file mode 100644 index 0000000..0060581 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/assets/stylesheets/users.scss @@ -0,0 +1,39 @@ +// Navbar section +nav { + background-color:#000; + padding: 0 4rem; + a:hover { color: tan; } +} + +body { + width: 100%; + height: 100%; + // position: relative; + background-position: center; + background-repeat: no-repeat; + background-size: cover; + background-image: url('https://cdn-images-1.medium.com/max/1600/0*zfW13Mn8_fvEKcU7.jpg') +} + +// Container section +.container { height: 70%; width: 70%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; } +.container h1 { margin-top: 2rem; } + +// Form Components [ Add and Edit ] Section +form { padding: 0 15rem; } +ul .form-row { padding-left: 4rem !important; } +.form-row { line-height: 0rem; } + +.flxend { display: flex; justify-content: end; } // div container requiring flex +.flexed { display: flex; justify-content: space-between; } // div container requiring flex +.grided { display: grid; grid-template-columns: 1fr 1fr; grid-gap: 2rem; } // div container requiring grid +.inline { display: inline-block; margin: 1rem auto; } // div container requiring grid +.grided input { min-width: 100%; margin-top: 2rem; } +.btn { background-color: teal } +.btn:hover { background-color: #f5f5f5 !important; color: teal; } +.text-warning { color: #fba153fa; } +.sn:hover { background-color: #222 !important; } + +.brand-logo { + font-family: 'Days One', sans-serif; +} diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/controllers/application_controller.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/controllers/application_controller.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/controllers/application_controller.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/controllers/concerns/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/controllers/concerns/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/controllers/concerns/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/controllers/users_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/controllers/users_controller.rb new file mode 100644 index 0000000..0a08022 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/controllers/users_controller.rb @@ -0,0 +1,51 @@ +class UsersController < ApplicationController + # By defaultsRails render index.html.erb automatically + def index + render "index" + end + + def allusers + render json: User.all + end + + def new + # render "new"... Not needed since it's already being done by RAILS + end + + def create + @user = User.create(user_params) + redirect_to "/users" + end + + def edit + @user = User.find(params[:id]) + # render "edit"... Not needed since it's already being done by RAILS + end + + def show + render json: User.find(params[:id]) + end + + def update + @user = User.find(params[:id]) + if @user.update(user_params) + redirect_to "/users/#{params[:id]}" + else + render "users/edit" + end + end + + # def destroy + # @user.destroy + # redirect_to "/users" + # end + + def total + render text: "Total number of users: #{ User.count }" + end + + private + def user_params + params.require(:user).permit(:id, :name, :created_at, :updated_at) + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/helpers/application_helper.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/helpers/application_helper.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/helpers/application_helper.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/helpers/users_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/helpers/users_helper.rb new file mode 100644 index 0000000..2310a24 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/helpers/users_helper.rb @@ -0,0 +1,2 @@ +module UsersHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/mailers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/mailers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/mailers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/models/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/models/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/models/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/models/concerns/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/models/concerns/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/models/concerns/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/models/user.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/models/user.rb new file mode 100644 index 0000000..4a57cf0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/models/user.rb @@ -0,0 +1,2 @@ +class User < ActiveRecord::Base +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/views/layouts/application.html.erb new file mode 100644 index 0000000..d851913 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/views/layouts/application.html.erb @@ -0,0 +1,30 @@ + + + + + RoutesAndControllers + + + + + + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + + + + + <%= yield %> + + + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/views/users/edit.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/views/users/edit.html.erb new file mode 100644 index 0000000..dcafd4a --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/views/users/edit.html.erb @@ -0,0 +1,19 @@ + +
+

EDIT USER

+
+ +
+
+
+ +
+
+ + +
+
+ +
+
+
diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/views/users/index.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/views/users/index.html.erb new file mode 100644 index 0000000..405c5e6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/views/users/index.html.erb @@ -0,0 +1,3 @@ +
+

Welcome to our Users Page!

+
\ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/views/users/new.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/views/users/new.html.erb new file mode 100644 index 0000000..dc84e99 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/app/views/users/new.html.erb @@ -0,0 +1,19 @@ + +
+

NEW USER

+
+ +
+
+
+ +
+
+ + +
+
+ +
+
+
diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/bin/bundle similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/bin/bundle rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/bin/bundle diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/bin/rails similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/bin/rails rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/bin/rails diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/bin/rake similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/bin/rake rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/bin/rake diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/bin/setup similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/bin/setup rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/bin/setup diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/bin/spring similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/bin/spring rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/bin/spring diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config.ru similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config.ru rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config.ru diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/application.rb new file mode 100644 index 0000000..505c586 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/application.rb @@ -0,0 +1,26 @@ +require File.expand_path('../boot', __FILE__) + +require 'rails/all' + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module RoutesAndControllers + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Do not swallow errors in after_commit/after_rollback callbacks. + config.active_record.raise_in_transactional_callbacks = true + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/boot.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/boot.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/boot.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/database.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/database.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/database.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/environment.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/environment.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/environment.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/environments/development.rb new file mode 100644 index 0000000..e9503bc --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/environments/development.rb @@ -0,0 +1,44 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # Adds additional error checking when serving assets at runtime. + # Checks for improperly declared sprockets dependencies. + # Raises helpful error messages. + config.assets.raise_runtime_errors = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true + + + config.log_level = :warn +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/environments/production.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/environments/production.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/environments/production.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/environments/test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/environments/test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/environments/test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/initializers/assets.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/initializers/assets.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/initializers/assets.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/initializers/backtrace_silencers.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/initializers/backtrace_silencers.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/initializers/backtrace_silencers.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/initializers/cookies_serializer.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/initializers/cookies_serializer.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/initializers/cookies_serializer.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/initializers/filter_parameter_logging.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/initializers/filter_parameter_logging.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/initializers/filter_parameter_logging.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/initializers/inflections.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/initializers/inflections.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/initializers/inflections.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/initializers/mime_types.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/initializers/mime_types.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/initializers/mime_types.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/initializers/rails_footnotes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/initializers/rails_footnotes.rb new file mode 100644 index 0000000..9a15363 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/initializers/rails_footnotes.rb @@ -0,0 +1,27 @@ +defined?(Footnotes) && Footnotes.setup do |f| + # Whether or not to enable footnotes + f.enabled = Rails.env.development? + # You can also use a lambda / proc to conditionally toggle footnotes + # Example : + # f.enabled = -> { User.current.admin? } + # Beware of thread-safety though, Footnotes.enabled is NOT thread safe + # and should not be modified anywhere else. + + # Only toggle some notes : + # f.notes = [:session, :cookies, :params, :filters, :routes, :env, :queries, :log] + + # Change the prefix : + # f.prefix = 'mvim://open?url=file://%s&line=%d&column=%d' + + # Disable style : + # f.no_style = true + + # Lock notes to top right : + # f.lock_top_right = true + + # Change font size : + # f.font_size = '11px' + + # Allow to open multiple notes : + # f.multiple_notes = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/initializers/session_store.rb new file mode 100644 index 0000000..b361aa3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/initializers/session_store.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.session_store :cookie_store, key: '_routes_and_controllers_session' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/initializers/wrap_parameters.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/initializers/wrap_parameters.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/initializers/wrap_parameters.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/locales/en.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/locales/en.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/locales/en.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/routes.rb new file mode 100644 index 0000000..a4efd58 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/routes.rb @@ -0,0 +1,19 @@ +Rails.application.routes.draw do + root 'users#index' + get 'users/total' => 'users#total' + get 'users' => 'users#allusers' + post 'users/:id/update' => 'users#update' + resources :users + #=========================================================== + # patch 'users/:id" => "users#update' + # root GET / users#index + # users_total GET /users/total(.:format) users#total + # users GET /users(.:format) users#index + # POST /users(.:format) users#create + # new_user GET /users/new(.:format) users#new + # edit_user GET /users/:id/edit(.:format) users#edit + # user GET /users/:id(.:format) users#show + # PATCH /users/:id(.:format) users#update + # DELETE /users/:id(.:format) users#destroy + #=========================================================== +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/secrets.yml new file mode 100644 index 0000000..2db2976 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/config/secrets.yml @@ -0,0 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rake secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: 3c84d607c77c3a237f0da5047ae643377278a8930cfcddbd76ba85aa60f5c739bb539a4de16c36954c8ffc7d5d84b4de9e6e1d15eb1a0313168bacf5fc81bb88 + +test: + secret_key_base: adf0fa5885ba6cb74ec426035f8e62b3c243bc360369e88846697a0b6a74a2d871bfb18f971a0a2c2a23bca4f768e66b70949175be5c9879d03d313e66dc36a4 + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/db/migrate/20180807013118_create_users.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/db/migrate/20180807013118_create_users.rb new file mode 100644 index 0000000..5494756 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/db/migrate/20180807013118_create_users.rb @@ -0,0 +1,9 @@ +class CreateUsers < ActiveRecord::Migration + def change + create_table :users do |t| + t.string :name + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/db/schema.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/db/schema.rb new file mode 100644 index 0000000..d6f6568 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/db/schema.rb @@ -0,0 +1,22 @@ +# encoding: UTF-8 +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 20180807013118) do + + create_table "users", force: :cascade do |t| + t.string "name" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/db/seeds.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/db/seeds.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/db/seeds.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/lib/assets/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/lib/assets/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/lib/assets/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/lib/tasks/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/lib/tasks/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/lib/tasks/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/log/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/log/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/log/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/public/404.html similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/public/404.html rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/public/404.html diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/public/422.html similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/public/422.html rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/public/422.html diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/public/500.html similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/public/500.html rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/public/500.html diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/public/favicon.ico similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/public/favicon.ico rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/public/favicon.ico diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/public/robots.txt similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/public/robots.txt rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/public/robots.txt diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/controllers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/test/controllers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/controllers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/test/controllers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/test/controllers/users_controller_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/test/controllers/users_controller_test.rb new file mode 100644 index 0000000..d23f182 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/test/controllers/users_controller_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class UsersControllerTest < ActionController::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/fixtures/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/test/fixtures/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/fixtures/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/test/fixtures/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/test/fixtures/users.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/test/fixtures/users.yml new file mode 100644 index 0000000..56066c6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/test/fixtures/users.yml @@ -0,0 +1,7 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + name: MyString + +two: + name: MyString diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/helpers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/test/helpers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/helpers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/test/helpers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/integration/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/test/integration/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/integration/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/test/integration/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/test/mailers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/mailers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/test/mailers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/test/models/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/models/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/test/models/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/models/user_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/test/models/user_test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/models/user_test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/test/models/user_test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/test_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/test/test_helper.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/test_helper.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/test/test_helper.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/vendor/assets/javascripts/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/vendor/assets/javascripts/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/vendor/assets/javascripts/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/vendor/assets/stylesheets/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/vendor/assets/stylesheets/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/IntegratingModels/vendor/assets/stylesheets/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/.gitignore similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/.gitignore rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/.gitignore diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/Gemfile new file mode 100644 index 0000000..000c3d7 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/Gemfile @@ -0,0 +1,49 @@ +source 'https://rubygems.org' + + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '4.2.7' +# Use sqlite3 as the database for Active Record +gem 'sqlite3' +# Use SCSS for stylesheets +gem 'sass-rails', '~> 5.0' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# Use CoffeeScript for .coffee assets and views +gem 'coffee-rails', '~> 4.1.0' +# See https://github.com/rails/execjs#readme for more supported runtimes +# gem 'therubyracer', platforms: :ruby + +# Use jquery as the JavaScript library +gem 'jquery-rails' +# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks +gem 'turbolinks' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.0' +# bundle exec rake doc:rails generates the API under doc/api. +gem 'sdoc', '~> 0.4.0', group: :doc + +# Use ActiveModel has_secure_password +gem 'bcrypt', '~> 3.1.7' + +# Use Unicorn as the app server +# gem 'unicorn' + +# Use Capistrano for deployment +# gem 'capistrano-rails', group: :development + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug' +end + +group :development do + # Access an IRB console on exception pages or by using <%= console %> in views + gem 'web-console', '~> 2.0' + + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' +end + +gem 'hirb' +gem 'rails-footnotes', '~> 4.0' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/Gemfile.lock new file mode 100644 index 0000000..f95ae64 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/Gemfile.lock @@ -0,0 +1,177 @@ +GEM + remote: https://rubygems.org/ + specs: + actionmailer (4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.7) + actionview (= 4.2.7) + activesupport (= 4.2.7) + rack (~> 1.6) + rack-test (~> 0.6.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + activejob (4.2.7) + activesupport (= 4.2.7) + globalid (>= 0.3.0) + activemodel (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + activerecord (4.2.7) + activemodel (= 4.2.7) + activesupport (= 4.2.7) + arel (~> 6.0) + activesupport (4.2.7) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + arel (6.0.4) + bcrypt (3.1.12) + binding_of_caller (0.8.0) + debug_inspector (>= 0.0.1) + builder (3.2.3) + byebug (10.0.2) + coffee-rails (4.1.1) + coffee-script (>= 2.2.0) + railties (>= 4.0.0, < 5.1.x) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + concurrent-ruby (1.0.5) + crass (1.0.4) + debug_inspector (0.0.3) + erubis (2.7.0) + execjs (2.7.0) + ffi (1.9.25) + globalid (0.4.1) + activesupport (>= 4.2.0) + hirb (0.7.3) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jbuilder (2.7.0) + activesupport (>= 4.2.0) + multi_json (>= 1.2) + jquery-rails (4.3.3) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + json (1.8.6) + loofah (2.2.2) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.0) + mini_mime (>= 0.1.1) + mini_mime (1.0.0) + mini_portile2 (2.3.0) + minitest (5.11.3) + multi_json (1.13.1) + nokogiri (1.8.4) + mini_portile2 (~> 2.3.0) + rack (1.6.10) + rack-test (0.6.3) + rack (>= 1.0) + rails (4.2.7) + actionmailer (= 4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + activemodel (= 4.2.7) + activerecord (= 4.2.7) + activesupport (= 4.2.7) + bundler (>= 1.3.0, < 2.0) + railties (= 4.2.7) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.9) + activesupport (>= 4.2.0, < 5.0) + nokogiri (~> 1.6) + rails-deprecated_sanitizer (>= 1.0.1) + rails-footnotes (4.1.8) + rails (>= 3.2) + rails-html-sanitizer (1.0.4) + loofah (~> 2.2, >= 2.2.2) + railties (4.2.7) + actionpack (= 4.2.7) + activesupport (= 4.2.7) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (12.3.1) + rb-fsevent (0.10.3) + rb-inotify (0.9.10) + ffi (>= 0.5.0, < 2) + rdoc (4.3.0) + sass (3.5.7) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sass-rails (5.0.7) + railties (>= 4.0.0, < 6) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + sdoc (0.4.2) + json (~> 1.7, >= 1.7.7) + rdoc (~> 4.0) + spring (2.0.2) + activesupport (>= 4.2) + sprockets (3.7.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.2.1) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + sqlite3 (1.3.13) + thor (0.20.0) + thread_safe (0.3.6) + tilt (2.0.8) + turbolinks (5.1.1) + turbolinks-source (~> 5.1) + turbolinks-source (5.1.0) + tzinfo (1.2.5) + thread_safe (~> 0.1) + uglifier (4.1.18) + execjs (>= 0.3.0, < 3) + web-console (2.3.0) + activemodel (>= 4.0) + binding_of_caller (>= 0.7.2) + railties (>= 4.0) + sprockets-rails (>= 2.0, < 4.0) + +PLATFORMS + ruby + +DEPENDENCIES + bcrypt (~> 3.1.7) + byebug + coffee-rails (~> 4.1.0) + hirb + jbuilder (~> 2.0) + jquery-rails + rails (= 4.2.7) + rails-footnotes (~> 4.0) + sass-rails (~> 5.0) + sdoc (~> 0.4.0) + spring + sqlite3 + turbolinks + uglifier (>= 1.3.0) + web-console (~> 2.0) + +BUNDLED WITH + 1.16.3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/README.rdoc b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/README.rdoc new file mode 100644 index 0000000..dd4e97e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/README.rdoc @@ -0,0 +1,28 @@ +== README + +This README would normally document whatever steps are necessary to get the +application up and running. + +Things you may want to cover: + +* Ruby version + +* System dependencies + +* Configuration + +* Database creation + +* Database initialization + +* How to run the test suite + +* Services (job queues, cache servers, search engines, etc.) + +* Deployment instructions + +* ... + + +Please feel free to use a different markup language if you do not plan to run +rake doc:app. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/Rakefile similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/Rakefile rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/Rakefile diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/assets/images/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/app/assets/images/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/assets/images/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/assets/javascripts/application.js new file mode 100644 index 0000000..2c268fb --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/assets/javascripts/application.js @@ -0,0 +1,17 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require jquery +//= require jquery_ujs +//= require turbolinks +//= require bootstrap.min +//= require_tree . diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/assets/javascripts/bootstrap.min.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/assets/javascripts/bootstrap.min.js new file mode 100644 index 0000000..00c895f --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/assets/javascripts/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v4.1.3 (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e(t.bootstrap={},t.jQuery,t.Popper)}(this,function(t,e,h){"use strict";function i(t,e){for(var n=0;nthis._items.length-1||t<0))if(this._isSliding)P(this._element).one(Q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=ndocument.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right
',trigger:"hover focus",title:"",delay:0,html:!(Ie={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"}),selector:!(Se={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)"}),placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent"},we="out",Ne={HIDE:"hide"+Ee,HIDDEN:"hidden"+Ee,SHOW:(De="show")+Ee,SHOWN:"shown"+Ee,INSERTED:"inserted"+Ee,CLICK:"click"+Ee,FOCUSIN:"focusin"+Ee,FOCUSOUT:"focusout"+Ee,MOUSEENTER:"mouseenter"+Ee,MOUSELEAVE:"mouseleave"+Ee},Oe="fade",ke="show",Pe=".tooltip-inner",je=".arrow",He="hover",Le="focus",Re="click",xe="manual",We=function(){function i(t,e){if("undefined"==typeof h)throw new TypeError("Bootstrap tooltips require Popper.js (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=pe(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(pe(this.getTipElement()).hasClass(ke))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),pe.removeData(this.element,this.constructor.DATA_KEY),pe(this.element).off(this.constructor.EVENT_KEY),pe(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&pe(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===pe(this.element).css("display"))throw new Error("Please use show on visible elements");var t=pe.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){pe(this.element).trigger(t);var n=pe.contains(this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!n)return;var i=this.getTipElement(),r=Fn.getUID(this.constructor.NAME);i.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&pe(i).addClass(Oe);var o="function"==typeof this.config.placement?this.config.placement.call(this,i,this.element):this.config.placement,s=this._getAttachment(o);this.addAttachmentClass(s);var a=!1===this.config.container?document.body:pe(document).find(this.config.container);pe(i).data(this.constructor.DATA_KEY,this),pe.contains(this.element.ownerDocument.documentElement,this.tip)||pe(i).appendTo(a),pe(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new h(this.element,i,{placement:s,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:je},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){e._handlePopperPlacementChange(t)}}),pe(i).addClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().on("mouseover",null,pe.noop);var l=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,pe(e.element).trigger(e.constructor.Event.SHOWN),t===we&&e._leave(null,e)};if(pe(this.tip).hasClass(Oe)){var c=Fn.getTransitionDurationFromElement(this.tip);pe(this.tip).one(Fn.TRANSITION_END,l).emulateTransitionEnd(c)}else l()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=pe.Event(this.constructor.Event.HIDE),r=function(){e._hoverState!==De&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),pe(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(pe(this.element).trigger(i),!i.isDefaultPrevented()){if(pe(n).removeClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().off("mouseover",null,pe.noop),this._activeTrigger[Re]=!1,this._activeTrigger[Le]=!1,this._activeTrigger[He]=!1,pe(this.tip).hasClass(Oe)){var o=Fn.getTransitionDurationFromElement(n);pe(n).one(Fn.TRANSITION_END,r).emulateTransitionEnd(o)}else r();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){pe(this.getTipElement()).addClass(Te+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||pe(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(pe(t.querySelectorAll(Pe)),this.getTitle()),pe(t).removeClass(Oe+" "+ke)},t.setElementContent=function(t,e){var n=this.config.html;"object"==typeof e&&(e.nodeType||e.jquery)?n?pe(e).parent().is(t)||t.empty().append(e):t.text(pe(e).text()):t[n?"html":"text"](e)},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getAttachment=function(t){return Ie[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)pe(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==xe){var e=t===He?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===He?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;pe(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}pe(i.element).closest(".modal").on("hide.bs.modal",function(){return i.hide()})}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Le:He]=!0),pe(e.getTipElement()).hasClass(ke)||e._hoverState===De?e._hoverState=De:(clearTimeout(e._timeout),e._hoverState=De,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===De&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Le:He]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=we,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===we&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){return"number"==typeof(t=l({},this.constructor.Default,pe(this.element).data(),"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),Fn.typeCheckConfig(ve,t,this.constructor.DefaultType),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=pe(this.getTipElement()),e=t.attr("class").match(be);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(pe(t).removeClass(Oe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=pe(this).data(ye),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),pe(this).data(ye,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return Ae}},{key:"NAME",get:function(){return ve}},{key:"DATA_KEY",get:function(){return ye}},{key:"Event",get:function(){return Ne}},{key:"EVENT_KEY",get:function(){return Ee}},{key:"DefaultType",get:function(){return Se}}]),i}(),pe.fn[ve]=We._jQueryInterface,pe.fn[ve].Constructor=We,pe.fn[ve].noConflict=function(){return pe.fn[ve]=Ce,We._jQueryInterface},We),Jn=(qe="popover",Ke="."+(Fe="bs.popover"),Me=(Ue=e).fn[qe],Qe="bs-popover",Be=new RegExp("(^|\\s)"+Qe+"\\S+","g"),Ve=l({},zn.Default,{placement:"right",trigger:"click",content:"",template:''}),Ye=l({},zn.DefaultType,{content:"(string|element|function)"}),ze="fade",Ze=".popover-header",Ge=".popover-body",$e={HIDE:"hide"+Ke,HIDDEN:"hidden"+Ke,SHOW:(Je="show")+Ke,SHOWN:"shown"+Ke,INSERTED:"inserted"+Ke,CLICK:"click"+Ke,FOCUSIN:"focusin"+Ke,FOCUSOUT:"focusout"+Ke,MOUSEENTER:"mouseenter"+Ke,MOUSELEAVE:"mouseleave"+Ke},Xe=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var r=i.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){Ue(this.getTipElement()).addClass(Qe+"-"+t)},r.getTipElement=function(){return this.tip=this.tip||Ue(this.config.template)[0],this.tip},r.setContent=function(){var t=Ue(this.getTipElement());this.setElementContent(t.find(Ze),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(Ge),e),t.removeClass(ze+" "+Je)},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=Ue(this.getTipElement()),e=t.attr("class").match(Be);null!==e&&0=this._offsets[r]&&("undefined"==typeof this._offsets[r+1]||tcode{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(2.25rem + 2px);padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::after,.was-validated .custom-file-input:valid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::after,.was-validated .custom-file-input:invalid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media screen and (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media screen and (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-right{right:0;left:auto}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-label::after{border-color:#80bdff}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:2.25rem;padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;padding-left:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion .card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media screen and (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:not(:disabled):not(.disabled){cursor:pointer}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{color:#000;text-decoration:none;opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}@media screen and (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-dialog-centered::before{display:block;height:calc(100vh - (.5rem * 2));content:""}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-dialog-centered::before{height:calc(100vh - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-ms-flex-align:center;align-items:center;width:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease}@media screen and (prefers-reduced-motion:reduce){.carousel-item-next,.carousel-item-prev,.carousel-item.active{transition:none}}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-fade .carousel-item{opacity:0;transition-duration:.6s;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/assets/stylesheets/posts.scss b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/assets/stylesheets/posts.scss new file mode 100644 index 0000000..ed4dfd1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/assets/stylesheets/posts.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the Posts controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/assets/stylesheets/users.scss b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/assets/stylesheets/users.scss new file mode 100644 index 0000000..31a2eac --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/assets/stylesheets/users.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the Users controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/controllers/application_controller.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/app/controllers/application_controller.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/controllers/application_controller.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/controllers/concerns/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/app/controllers/concerns/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/controllers/concerns/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/controllers/posts_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/controllers/posts_controller.rb new file mode 100644 index 0000000..35540a6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/controllers/posts_controller.rb @@ -0,0 +1,28 @@ + +class PostsController < ApplicationController + + layout "three_column" + + def index + # This view is automatically rendered by + @all_posts = Post.all + @all_users = User.all + end + + def new + Post.new + end + + def create + puts "=================================== [ Post starts ]" + @post = Post.create(post_params) + puts "=================================== [ Post ends ]" + redirect_to posts_path + end + + private + def post_params + params.require(:post).permit(:title, :content, :user_id) + end + +end \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/controllers/users_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/controllers/users_controller.rb new file mode 100644 index 0000000..9edeb66 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/controllers/users_controller.rb @@ -0,0 +1,26 @@ +class UsersController < ApplicationController + + layout "two_column" + + def index + # This view is automatically rendered by + @all_users = User.all + p @all_users, "all users" + end + + def new + User.new + end + + def create + puts "=================================== [ User ]" + @user = User.create(validate_params) + puts "=================================== [ User ]" + redirect_to root_path + end + + private + def validate_params + params.require(:user).permit(:first_name, :last_name, :favorite_language) + end +end \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/helpers/application_helper.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/app/helpers/application_helper.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/helpers/application_helper.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/helpers/posts_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/helpers/posts_helper.rb new file mode 100644 index 0000000..a7b8cec --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/helpers/posts_helper.rb @@ -0,0 +1,2 @@ +module PostsHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/helpers/users_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/helpers/users_helper.rb new file mode 100644 index 0000000..2310a24 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/helpers/users_helper.rb @@ -0,0 +1,2 @@ +module UsersHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/mailers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/app/mailers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/mailers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/models/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/app/models/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/models/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/models/concerns/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/app/models/concerns/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/models/concerns/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/models/post.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/models/post.rb new file mode 100644 index 0000000..542c073 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/models/post.rb @@ -0,0 +1,3 @@ +class Post < ActiveRecord::Base + belongs_to :user +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/models/user.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/models/user.rb new file mode 100644 index 0000000..8a5f6b5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/models/user.rb @@ -0,0 +1,3 @@ +class User < ActiveRecord::Base + has_many :posts +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/views/layouts/application.html.erb new file mode 100644 index 0000000..1416349 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/views/layouts/application.html.erb @@ -0,0 +1,17 @@ + + + + + LayoutsAssignment + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + + + + <%= yield %> + + + + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/views/layouts/three_column.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/views/layouts/three_column.html.erb new file mode 100644 index 0000000..dc6ffbc --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/views/layouts/three_column.html.erb @@ -0,0 +1,27 @@ + + + + Three Column Layout + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + +
+
+
+ <%= yield :left_column %> +
+
+ <%= yield :middle_column %> +
+
+ <%= yield :right_column %> +
+
+
+ + <%= yield %> + + + \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/views/layouts/two_column.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/views/layouts/two_column.html.erb new file mode 100644 index 0000000..be67165 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/views/layouts/two_column.html.erb @@ -0,0 +1,24 @@ + + + + TwoColumnLayout + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + +
+
+
+ <%= yield :left_column %> +
+
+ <%= yield :right_column %> +
+
+
+ + <%= yield %> + + + \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/views/posts/index.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/views/posts/index.html.erb new file mode 100644 index 0000000..f675d4b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/views/posts/index.html.erb @@ -0,0 +1,78 @@ + +<% content_for :left_column do %> + +

All Posts

+ + + + + + + + + <% @all_posts.each do |post| %> + + + + + + <% end %> + +
Title Content Author
<%= post.title %> <%= post.content %> <%= post.user.first_name %> <%= post.user.last_name %>
+ +<% end %> + + + +<% content_for :middle_column do %> + +

New Post

+ +
+ +
+ + +
+ +
+ + +
+ Looks good! +
+
+ +
+ + +
+ + + +
+<% end %> + + +<% content_for :right_column do %> +

Go to Users Page

+ All Users +<% end %> \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/views/posts/new.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/views/posts/new.html.erb new file mode 100644 index 0000000..e5492bc --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/views/posts/new.html.erb @@ -0,0 +1,2 @@ +

Posts#new

+

Find me in app/views/posts/new.html.erb

diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/views/users/index.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/views/users/index.html.erb new file mode 100644 index 0000000..45315d6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/views/users/index.html.erb @@ -0,0 +1,38 @@ +<% content_for :left_column do %> +

All Users

+ + + + + + + + <% @all_users.each do |user| %> + + + + + + <% end %> + +
First Name Last Name Favorite Language
<%= user.first_name %> <%= user.last_name %> <%= user.favorite_language %>
+<% end %> + +<% content_for :right_column do %> +

New User

+
+ + + + + + + + + + + + +
+ +<% end %> \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/views/users/new.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/views/users/new.html.erb new file mode 100644 index 0000000..c21a1ad --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/app/views/users/new.html.erb @@ -0,0 +1,2 @@ +

Users#new

+

Find me in app/views/users/new.html.erb

diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/bin/bundle similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/bin/bundle rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/bin/bundle diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/bin/rails similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/bin/rails rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/bin/rails diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/bin/rake similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/bin/rake rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/bin/rake diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/bin/setup similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/bin/setup rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/bin/setup diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/bin/spring similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/bin/spring rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/bin/spring diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config.ru similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config.ru rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config.ru diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/application.rb new file mode 100644 index 0000000..0daa42c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/application.rb @@ -0,0 +1,26 @@ +require File.expand_path('../boot', __FILE__) + +require 'rails/all' + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module LayoutsAssign + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Do not swallow errors in after_commit/after_rollback callbacks. + config.active_record.raise_in_transactional_callbacks = true + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/boot.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/boot.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/boot.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/database.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/database.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/database.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/environment.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/environment.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/environment.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/environments/development.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/environments/development.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/environments/development.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/environments/production.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/environments/production.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/environments/production.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/environments/test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/environments/test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/environments/test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/initializers/assets.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/initializers/assets.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/initializers/assets.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/initializers/backtrace_silencers.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/initializers/backtrace_silencers.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/initializers/backtrace_silencers.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/initializers/cookies_serializer.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/initializers/cookies_serializer.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/initializers/cookies_serializer.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/initializers/filter_parameter_logging.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/initializers/filter_parameter_logging.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/initializers/filter_parameter_logging.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/initializers/inflections.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/initializers/inflections.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/initializers/inflections.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/initializers/mime_types.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/initializers/mime_types.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/initializers/mime_types.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/initializers/session_store.rb new file mode 100644 index 0000000..fe3aa28 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/initializers/session_store.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.session_store :cookie_store, key: '_LayoutsAssign_session' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/initializers/wrap_parameters.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/initializers/wrap_parameters.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/initializers/wrap_parameters.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/locales/en.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/locales/en.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/locales/en.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/routes.rb new file mode 100644 index 0000000..f0d00e3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/routes.rb @@ -0,0 +1,29 @@ +Rails.application.routes.draw do + + root 'users#index' + + resources :users + resources :posts + + # ================================================================== + # Prefix Verb URI Pattern Controller#Action + # ================================================================== + # root GET / users#index + # users GET /users(.:format) users#index + # POST /users(.:format) users#create + # new_user GET /users/new(.:format) users#new + # edit_user GET /users/:id/edit(.:format) users#edit + # user GET /users/:id(.:format) users#show + # PATCH /users/:id(.:format) users#update + # PUT /users/:id(.:format) users#update + # DELETE /users/:id(.:format) users#destroy + # posts GET /posts(.:format) posts#index + # POST /posts(.:format) posts#create + # new_post GET /posts/new(.:format) posts#new + # edit_post GET /posts/:id/edit(.:format) posts#edit + # post GET /posts/:id(.:format) posts#show + # PATCH /posts/:id(.:format) posts#update + # PUT /posts/:id(.:format) posts#update + # DELETE /posts/:id(.:format) posts#destroy + # ================================================================== +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/secrets.yml new file mode 100644 index 0000000..3fba5b6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/config/secrets.yml @@ -0,0 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rake secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: e7fb56f6f2d8f029bbabd776272d06aaed76b28dafbbca15ff3b1f5afd233c00b4c0588fe988475c5117589e3ae70fb73f5b6406e7d00539e48fcfc3a486529b + +test: + secret_key_base: 73d354298a9a39b1d092181aa07c81c97e7bd4755fd20170415d8c850fd2ea6b2deba000ee207299783c2331a7a3ebd7a9a572ba850aa7e586aac1797e7193ab + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/db/migrate/20180813001635_create_users.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/db/migrate/20180813001635_create_users.rb new file mode 100644 index 0000000..975d52c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/db/migrate/20180813001635_create_users.rb @@ -0,0 +1,11 @@ +class CreateUsers < ActiveRecord::Migration + def change + create_table :users do |t| + t.string :first_name + t.string :last_name + t.string :favorite_language + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/db/migrate/20180813001654_create_posts.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/db/migrate/20180813001654_create_posts.rb new file mode 100644 index 0000000..0bd3b70 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/db/migrate/20180813001654_create_posts.rb @@ -0,0 +1,11 @@ +class CreatePosts < ActiveRecord::Migration + def change + create_table :posts do |t| + t.string :title + t.text :content + t.references :user, index: true, foreign_key: true + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/db/schema.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/db/schema.rb new file mode 100644 index 0000000..1459dde --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/db/schema.rb @@ -0,0 +1,34 @@ +# encoding: UTF-8 +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 20180813001654) do + + create_table "posts", force: :cascade do |t| + t.string "title" + t.text "content" + t.integer "user_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + add_index "posts", ["user_id"], name: "index_posts_on_user_id" + + create_table "users", force: :cascade do |t| + t.string "first_name" + t.string "last_name" + t.string "favorite_language" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/db/seeds.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/db/seeds.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/db/seeds.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/lib/assets/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/lib/assets/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/lib/assets/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/lib/tasks/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/lib/tasks/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/lib/tasks/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/log/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/log/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/log/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/public/404.html similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/public/404.html rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/public/404.html diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/public/422.html similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/public/422.html rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/public/422.html diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/public/500.html similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/public/500.html rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/public/500.html diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/public/favicon.ico similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/public/favicon.ico rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/public/favicon.ico diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/public/robots.txt similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/public/robots.txt rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/public/robots.txt diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/test/controllers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/controllers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/test/controllers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/controllers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/controllers/posts_controller_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/controllers/posts_controller_test.rb new file mode 100644 index 0000000..2e04f93 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/controllers/posts_controller_test.rb @@ -0,0 +1,14 @@ +require 'test_helper' + +class PostsControllerTest < ActionController::TestCase + test "should get index" do + get :index + assert_response :success + end + + test "should get new" do + get :new + assert_response :success + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/controllers/users_controller_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/controllers/users_controller_test.rb new file mode 100644 index 0000000..331ec05 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/controllers/users_controller_test.rb @@ -0,0 +1,14 @@ +require 'test_helper' + +class UsersControllerTest < ActionController::TestCase + test "should get index" do + get :index + assert_response :success + end + + test "should get new" do + get :new + assert_response :success + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/test/fixtures/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/fixtures/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/test/fixtures/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/fixtures/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/fixtures/posts.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/fixtures/posts.yml new file mode 100644 index 0000000..ad847bc --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/fixtures/posts.yml @@ -0,0 +1,11 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + title: MyString + content: MyText + user_id: + +two: + title: MyString + content: MyText + user_id: diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/fixtures/users.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/fixtures/users.yml new file mode 100644 index 0000000..7cb1841 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/fixtures/users.yml @@ -0,0 +1,11 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + first_name: MyString + last_name: MyString + favorite_language: MyString + +two: + first_name: MyString + last_name: MyString + favorite_language: MyString diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/test/helpers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/helpers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/test/helpers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/helpers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/test/integration/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/integration/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/test/integration/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/integration/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/test/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/mailers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/test/mailers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/mailers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/test/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/models/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/test/models/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/models/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/test/models/post_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/models/post_test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/test/models/post_test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/models/post_test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/test/models/user_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/models/user_test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/test/models/user_test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/models/user_test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/test/test_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/test_helper.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/test/test_helper.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/test/test_helper.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/vendor/assets/javascripts/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/vendor/assets/javascripts/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/vendor/assets/javascripts/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/vendor/assets/stylesheets/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/vendor/assets/stylesheets/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/LayoutsAssign/vendor/assets/stylesheets/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/.gitignore similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/.gitignore rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/.gitignore diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/Gemfile new file mode 100644 index 0000000..4347ba3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/Gemfile @@ -0,0 +1,49 @@ +source 'https://rubygems.org' + + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '4.2.7' +# Use sqlite3 as the database for Active Record +gem 'sqlite3' +# Use SCSS for stylesheets +gem 'sass-rails', '~> 5.0' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# Use CoffeeScript for .coffee assets and views +gem 'coffee-rails', '~> 4.1.0' +# See https://github.com/rails/execjs#readme for more supported runtimes +# gem 'therubyracer', platforms: :ruby + +# Use jquery as the JavaScript library +gem 'jquery-rails' +# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks +gem 'turbolinks' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.0' +# bundle exec rake doc:rails generates the API under doc/api. +gem 'sdoc', '~> 0.4.0', group: :doc + +# Use ActiveModel has_secure_password +# gem 'bcrypt', '~> 3.1.7' + +# Use Unicorn as the app server +# gem 'unicorn' + +# Use Capistrano for deployment +# gem 'capistrano-rails', group: :development + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug' +end + +group :development do + # Access an IRB console on exception pages or by using <%= console %> in views + gem 'web-console', '~> 2.0' + + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' +end + +gem 'hirb' +gem 'rails-footnotes', '~> 4.0' \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/Gemfile.lock new file mode 100644 index 0000000..07d9d03 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/Gemfile.lock @@ -0,0 +1,175 @@ +GEM + remote: https://rubygems.org/ + specs: + actionmailer (4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.7) + actionview (= 4.2.7) + activesupport (= 4.2.7) + rack (~> 1.6) + rack-test (~> 0.6.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + activejob (4.2.7) + activesupport (= 4.2.7) + globalid (>= 0.3.0) + activemodel (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + activerecord (4.2.7) + activemodel (= 4.2.7) + activesupport (= 4.2.7) + arel (~> 6.0) + activesupport (4.2.7) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + arel (6.0.4) + binding_of_caller (0.8.0) + debug_inspector (>= 0.0.1) + builder (3.2.3) + byebug (10.0.2) + coffee-rails (4.1.1) + coffee-script (>= 2.2.0) + railties (>= 4.0.0, < 5.1.x) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + concurrent-ruby (1.0.5) + crass (1.0.4) + debug_inspector (0.0.3) + erubis (2.7.0) + execjs (2.7.0) + ffi (1.9.25) + globalid (0.4.1) + activesupport (>= 4.2.0) + hirb (0.7.3) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jbuilder (2.7.0) + activesupport (>= 4.2.0) + multi_json (>= 1.2) + jquery-rails (4.3.3) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + json (1.8.6) + loofah (2.2.2) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.0) + mini_mime (>= 0.1.1) + mini_mime (1.0.0) + mini_portile2 (2.3.0) + minitest (5.11.3) + multi_json (1.13.1) + nokogiri (1.8.4) + mini_portile2 (~> 2.3.0) + rack (1.6.10) + rack-test (0.6.3) + rack (>= 1.0) + rails (4.2.7) + actionmailer (= 4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + activemodel (= 4.2.7) + activerecord (= 4.2.7) + activesupport (= 4.2.7) + bundler (>= 1.3.0, < 2.0) + railties (= 4.2.7) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.9) + activesupport (>= 4.2.0, < 5.0) + nokogiri (~> 1.6) + rails-deprecated_sanitizer (>= 1.0.1) + rails-footnotes (4.1.8) + rails (>= 3.2) + rails-html-sanitizer (1.0.4) + loofah (~> 2.2, >= 2.2.2) + railties (4.2.7) + actionpack (= 4.2.7) + activesupport (= 4.2.7) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (12.3.1) + rb-fsevent (0.10.3) + rb-inotify (0.9.10) + ffi (>= 0.5.0, < 2) + rdoc (4.3.0) + sass (3.5.7) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sass-rails (5.0.7) + railties (>= 4.0.0, < 6) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + sdoc (0.4.2) + json (~> 1.7, >= 1.7.7) + rdoc (~> 4.0) + spring (2.0.2) + activesupport (>= 4.2) + sprockets (3.7.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.2.1) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + sqlite3 (1.3.13) + thor (0.20.0) + thread_safe (0.3.6) + tilt (2.0.8) + turbolinks (5.1.1) + turbolinks-source (~> 5.1) + turbolinks-source (5.1.0) + tzinfo (1.2.5) + thread_safe (~> 0.1) + uglifier (4.1.17) + execjs (>= 0.3.0, < 3) + web-console (2.3.0) + activemodel (>= 4.0) + binding_of_caller (>= 0.7.2) + railties (>= 4.0) + sprockets-rails (>= 2.0, < 4.0) + +PLATFORMS + ruby + +DEPENDENCIES + byebug + coffee-rails (~> 4.1.0) + hirb + jbuilder (~> 2.0) + jquery-rails + rails (= 4.2.7) + rails-footnotes (~> 4.0) + sass-rails (~> 5.0) + sdoc (~> 0.4.0) + spring + sqlite3 + turbolinks + uglifier (>= 1.3.0) + web-console (~> 2.0) + +BUNDLED WITH + 1.16.3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/README.rdoc b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/README.rdoc new file mode 100644 index 0000000..dd4e97e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/README.rdoc @@ -0,0 +1,28 @@ +== README + +This README would normally document whatever steps are necessary to get the +application up and running. + +Things you may want to cover: + +* Ruby version + +* System dependencies + +* Configuration + +* Database creation + +* Database initialization + +* How to run the test suite + +* Services (job queues, cache servers, search engines, etc.) + +* Deployment instructions + +* ... + + +Please feel free to use a different markup language if you do not plan to run +rake doc:app. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/Rakefile similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/Rakefile rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/Rakefile diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/images/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/app/assets/images/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/images/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/images/casino.gif b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/images/casino.gif new file mode 100644 index 0000000..5a85634 Binary files /dev/null and b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/images/casino.gif differ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/images/cave.gif b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/images/cave.gif new file mode 100644 index 0000000..fb9d7cf Binary files /dev/null and b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/images/cave.gif differ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/images/codingdojo.png b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/images/codingdojo.png new file mode 100644 index 0000000..5c82e33 Binary files /dev/null and b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/images/codingdojo.png differ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/images/farm.gif b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/images/farm.gif new file mode 100644 index 0000000..0fcf857 Binary files /dev/null and b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/images/farm.gif differ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/images/gold.gif b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/images/gold.gif new file mode 100644 index 0000000..6556f2b Binary files /dev/null and b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/images/gold.gif differ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/images/house.gif b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/images/house.gif new file mode 100644 index 0000000..a8a7b01 Binary files /dev/null and b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/images/house.gif differ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/images/saiyan_level.gif b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/images/saiyan_level.gif new file mode 100644 index 0000000..658bfcf Binary files /dev/null and b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/images/saiyan_level.gif differ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/javascripts/application.js similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/assets/javascripts/application.js rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/javascripts/application.js diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/javascripts/rpgs.coffee b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/javascripts/rpgs.coffee new file mode 100644 index 0000000..24f83d1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/javascripts/rpgs.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/stylesheets/application.css b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/stylesheets/application.css new file mode 100644 index 0000000..baa3982 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/stylesheets/application.css @@ -0,0 +1,71 @@ + +* { + margin: 0px; + padding: 0px; } + +body{ + color: rgb(255, 255, 255); + background: rgb(0, 0, 0); + font-family: 'Montserrat', sans-serif; } + +h3 { + font-family: 'Fredoka One', cursive; + color: rgb(255,190,59); + text-align: center; +} + +h4 { + margin-top: 1rem; +} +.timer { margin-left: 2rem; color: silver; } +.brand-logo { color: #d8cab8cc; font-family: 'Fredoka One', cursive; } +.brand-logo span { color: #f5f5f5 !important; } +.brand-logo span:hover { color: #e6be8ad4 !important; } + +.activities { color: rgb(255,190,59); } + +.red { color: red; } + +.score-img { width: 60px; height: 60px; } + +img{ + width: 250px; + height: 190px; + position: center; } + +.anyClass { + height:150px; + overflow-y: scroll; } + +.btn { + float: left; + width: 100%; + margin-bottom: 1rem; +} + +.mybtn { + width: 100px; + float: right; + margin-top: -2.5rem; +} + +form, h4.activities { + display: block; + text-align: center; +} + +@media (max-width: 1199px) { + .col-md-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + min-width: 50%; + } +} + +@media (max-width: 767px) { + .col-md-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + min-width: 100%; + } +} \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/stylesheets/rpgs.scss b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/stylesheets/rpgs.scss new file mode 100644 index 0000000..03b123b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/assets/stylesheets/rpgs.scss @@ -0,0 +1,11 @@ + +// .top { margin-bottom: 0; } +// .brand-logo { +// color: #d8cab8cc; +// // color: #f5f5f5 !important; +// font-family: 'Days One', sans-serif; +// span { +// color: #f5f5f5 !important; +// } +// &:hover { color: #e6be8ad4 !important; } +// } \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/controllers/application_controller.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/app/controllers/application_controller.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/controllers/application_controller.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/controllers/concerns/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/app/controllers/concerns/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/controllers/concerns/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/controllers/rpgs_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/controllers/rpgs_controller.rb new file mode 100644 index 0000000..7eced44 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/controllers/rpgs_controller.rb @@ -0,0 +1,57 @@ +class RpgsController < ApplicationController + + @@time = Time.new + + def index + if !session[:activities] and !session[:gold_count] + session[:gold_count] = 0 + session[:activities] = [] + end + render "rpgs/ninjagold" + end + + def process_money + # @now = '{0:%Y-%m-%d %H:%M:%S}'.format(datetime.now()) + @timestamp = @@time.strftime('%Y/%m/%d %H:%M %p') + if 'farm' == params[:gold] + @rand = rand(10..20) + session[:gold_count]+= @rand + session[:activities] << {status:"green", message:" You hav earned #{@rand} gold from the Farm! ", timer:@timestamp} + print "\n\n\nrand_number: #{@rand} - activity: [ #{session[:activities]} ]\n\n\n\n" + + elsif 'cave' == params[:gold] + @rand = rand(5..10) + session[:gold_count]+= @rand + session[:activities] << {status:"green", message:" You hav earned #{@rand} gold from the Cave! ", timer:@timestamp} + + elsif 'house' == params[:gold] + @rand = rand(2..5) + session[:gold_count]+= @rand + session[:activities] << {status:"green", message:" You hav earned #{@rand} gold from the House! ", timer:@timestamp} + + elsif 'casino' == params[:gold] + @luck = rand(0..2) + @rand = rand(0..50) + if @luck == 0 + session[:gold_count]+= @rand + session[:activities] << {status:"green", message:" You hav earned #{@rand} gold from the casino ", timer:@timestamp} + else + if session[:gold_count]-@rand < 0 + session[:gold_count]= 0 + session[:activities] << {status:"red", message:" You have lost all your gold from the casino! ", timer:@timestamp} + else + session[:gold_count]-= @rand + session[:activities] << {status:"red", message:" You have lost #{@rand} gold from the casino ", timer:@timestamp} + end + end + end + + p 'activities', session[:activities] + redirect_to "/" + end + + def reset + session.clear + redirect_to '/' + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/helpers/application_helper.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/app/helpers/application_helper.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/helpers/application_helper.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/helpers/rpgs_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/helpers/rpgs_helper.rb new file mode 100644 index 0000000..d6ff991 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/helpers/rpgs_helper.rb @@ -0,0 +1,2 @@ +module RpgsHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/mailers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/app/mailers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/mailers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/models/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/app/models/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/models/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/models/concerns/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/app/models/concerns/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/models/concerns/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/views/layouts/application.html.erb new file mode 100644 index 0000000..28064dc --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/views/layouts/application.html.erb @@ -0,0 +1,27 @@ + + + + + + + + + NinjaGold + + + + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + + + <%= yield %> + + + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/views/rpgs/ninjagold.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/views/rpgs/ninjagold.html.erb new file mode 100644 index 0000000..63b1f1e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/app/views/rpgs/ninjagold.html.erb @@ -0,0 +1,76 @@ + +
+
+

Ninja Gold

+
+
+ gold +

x <%= session[:gold_count] =%>

+
+
+
+
+
+ +

Farm

+ gold +

(Earn 10-20 gold)

+ +
+
+
+
+
+ +

Cave

+ gold +

(Earn 5-10 gold)

+ +
+
+
+
+
+ +

House

+ gold +

(Earn 2-5 gold)

+ +
+
+
+
+
+ +

Casino

+ gold +

(Earn/takes 0-50 gold)

+ +
+
+
+
+
+ +
+
+

Game Activities

+ +
+ + +
+ +
+
+ +
+
+
\ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/bin/bundle similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/bin/bundle rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/bin/bundle diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/bin/rails similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/bin/rails rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/bin/rails diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/bin/rake similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/bin/rake rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/bin/rake diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/bin/setup similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/bin/setup rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/bin/setup diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/bin/spring similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/bin/spring rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/bin/spring diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config.ru similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config.ru rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config.ru diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/application.rb new file mode 100644 index 0000000..93cbfbe --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/application.rb @@ -0,0 +1,28 @@ +require File.expand_path('../boot', __FILE__) + +require 'rails/all' + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module NinjaGold + class Application < Rails::Application + config.web_console.whitelisted_ips = '10.0.2.2' + + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Do not swallow errors in after_commit/after_rollback callbacks. + config.active_record.raise_in_transactional_callbacks = true + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/boot.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/boot.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/boot.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/database.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/database.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/database.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/environment.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/environment.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/environment.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/environments/development.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/environments/development.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/environments/development.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/environments/production.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/environments/production.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/environments/production.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/environments/test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/environments/test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/environments/test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/initializers/assets.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/initializers/assets.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/initializers/assets.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/initializers/backtrace_silencers.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/initializers/backtrace_silencers.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/initializers/backtrace_silencers.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/initializers/cookies_serializer.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/initializers/cookies_serializer.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/initializers/cookies_serializer.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/initializers/filter_parameter_logging.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/initializers/filter_parameter_logging.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/initializers/filter_parameter_logging.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/initializers/inflections.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/initializers/inflections.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/initializers/inflections.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/initializers/mime_types.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/initializers/mime_types.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/initializers/mime_types.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/initializers/session_store.rb new file mode 100644 index 0000000..208edba --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/initializers/session_store.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.session_store :cookie_store, key: '_NinjaGold_session' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/initializers/wrap_parameters.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/initializers/wrap_parameters.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/initializers/wrap_parameters.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/locales/en.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/locales/en.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/locales/en.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/routes.rb new file mode 100644 index 0000000..bba088b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/routes.rb @@ -0,0 +1,9 @@ +Rails.application.routes.draw do + root 'rpgs#index' + post '/process' => 'rpgs#process_money' + # post '/farm' => 'rpgs#farm' + # post '/cave' => 'rpgs#cave' + # post '/house' => 'rpgs#house' + # post '/casino' => 'rpgs#casino' + post '/reset' => 'rpgs#reset' +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/secrets.yml new file mode 100644 index 0000000..ee7059e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/config/secrets.yml @@ -0,0 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rake secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: aafd88901f31d2b09264b44b0ef50f874343aa20a814bb1d9dbb8cd6e3019862a314a68658362738f4b53641c75d1dc5419be0227279c9def6bc8c5272a3da59 + +test: + secret_key_base: 3cc4fdc3228de9f648a96e23a04188b3b66de758e35d538a81e473037689c577ae5d50bfc36600d7534d4e24f743a9076450419080cc1cd596e4e38b8758d13e + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/db/seeds.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/db/seeds.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/db/seeds.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/lib/assets/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/lib/assets/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/lib/assets/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/lib/tasks/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/lib/tasks/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/lib/tasks/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/log/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/log/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/log/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/public/404.html similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/public/404.html rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/public/404.html diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/public/422.html similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/public/422.html rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/public/422.html diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/public/500.html similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/public/500.html rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/public/500.html diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/public/favicon.ico similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/public/favicon.ico rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/public/favicon.ico diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/public/robots.txt similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/public/robots.txt rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/public/robots.txt diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/test/controllers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/test/controllers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/test/controllers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/test/controllers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/test/controllers/rpgs_controller_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/test/controllers/rpgs_controller_test.rb new file mode 100644 index 0000000..266db67 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/test/controllers/rpgs_controller_test.rb @@ -0,0 +1,24 @@ +require 'test_helper' + +class RpgsControllerTest < ActionController::TestCase + test "should get farm" do + get :farm + assert_response :success + end + + test "should get cave" do + get :cave + assert_response :success + end + + test "should get casino" do + get :casino + assert_response :success + end + + test "should get house" do + get :house + assert_response :success + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/test/fixtures/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/test/fixtures/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/test/fixtures/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/test/fixtures/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/test/helpers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/test/helpers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/test/helpers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/test/helpers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/test/integration/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/test/integration/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/test/integration/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/test/integration/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/test/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/test/mailers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/test/mailers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/test/mailers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/test/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/test/models/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/test/models/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/test/models/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/test/test_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/test/test_helper.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/test/test_helper.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/test/test_helper.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/vendor/assets/javascripts/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/vendor/assets/javascripts/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/vendor/assets/javascripts/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/vendor/assets/stylesheets/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/vendor/assets/stylesheets/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/NinjaGold/vendor/assets/stylesheets/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/.gitignore similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/.gitignore rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/.gitignore diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/Gemfile new file mode 100644 index 0000000..e87fad5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/Gemfile @@ -0,0 +1,47 @@ +source 'https://rubygems.org' + + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '4.2.7' +# Use sqlite3 as the database for Active Record +gem 'sqlite3' +# Use SCSS for stylesheets +gem 'sass-rails', '~> 5.0' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# Use CoffeeScript for .coffee assets and views +gem 'coffee-rails', '~> 4.1.0' +# See https://github.com/rails/execjs#readme for more supported runtimes +# gem 'therubyracer', platforms: :ruby + +# Use jquery as the JavaScript library +gem 'jquery-rails' +# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks +gem 'turbolinks' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.0' +# bundle exec rake doc:rails generates the API under doc/api. +gem 'sdoc', '~> 0.4.0', group: :doc + +# Use ActiveModel has_secure_password +# gem 'bcrypt', '~> 3.1.7' + +# Use Unicorn as the app server +# gem 'unicorn' + +# Use Capistrano for deployment +# gem 'capistrano-rails', group: :development + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug' +end + +group :development do + # Access an IRB console on exception pages or by using <%= console %> in views + gem 'web-console', '~> 2.0' + + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' +end + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/Gemfile.lock new file mode 100644 index 0000000..be00ff6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/Gemfile.lock @@ -0,0 +1,170 @@ +GEM + remote: https://rubygems.org/ + specs: + actionmailer (4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.7) + actionview (= 4.2.7) + activesupport (= 4.2.7) + rack (~> 1.6) + rack-test (~> 0.6.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + activejob (4.2.7) + activesupport (= 4.2.7) + globalid (>= 0.3.0) + activemodel (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + activerecord (4.2.7) + activemodel (= 4.2.7) + activesupport (= 4.2.7) + arel (~> 6.0) + activesupport (4.2.7) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + arel (6.0.4) + binding_of_caller (0.8.0) + debug_inspector (>= 0.0.1) + builder (3.2.3) + byebug (10.0.2) + coffee-rails (4.1.1) + coffee-script (>= 2.2.0) + railties (>= 4.0.0, < 5.1.x) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + concurrent-ruby (1.0.5) + crass (1.0.4) + debug_inspector (0.0.3) + erubis (2.7.0) + execjs (2.7.0) + ffi (1.9.25) + globalid (0.4.1) + activesupport (>= 4.2.0) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jbuilder (2.7.0) + activesupport (>= 4.2.0) + multi_json (>= 1.2) + jquery-rails (4.3.3) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + json (1.8.6) + loofah (2.2.2) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.0) + mini_mime (>= 0.1.1) + mini_mime (1.0.0) + mini_portile2 (2.3.0) + minitest (5.11.3) + multi_json (1.13.1) + nokogiri (1.8.4) + mini_portile2 (~> 2.3.0) + rack (1.6.10) + rack-test (0.6.3) + rack (>= 1.0) + rails (4.2.7) + actionmailer (= 4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + activemodel (= 4.2.7) + activerecord (= 4.2.7) + activesupport (= 4.2.7) + bundler (>= 1.3.0, < 2.0) + railties (= 4.2.7) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.9) + activesupport (>= 4.2.0, < 5.0) + nokogiri (~> 1.6) + rails-deprecated_sanitizer (>= 1.0.1) + rails-html-sanitizer (1.0.4) + loofah (~> 2.2, >= 2.2.2) + railties (4.2.7) + actionpack (= 4.2.7) + activesupport (= 4.2.7) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (12.3.1) + rb-fsevent (0.10.3) + rb-inotify (0.9.10) + ffi (>= 0.5.0, < 2) + rdoc (4.3.0) + sass (3.5.7) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sass-rails (5.0.7) + railties (>= 4.0.0, < 6) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + sdoc (0.4.2) + json (~> 1.7, >= 1.7.7) + rdoc (~> 4.0) + spring (2.0.2) + activesupport (>= 4.2) + sprockets (3.7.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.2.1) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + sqlite3 (1.3.13) + thor (0.20.0) + thread_safe (0.3.6) + tilt (2.0.8) + turbolinks (5.1.1) + turbolinks-source (~> 5.1) + turbolinks-source (5.1.0) + tzinfo (1.2.5) + thread_safe (~> 0.1) + uglifier (4.1.17) + execjs (>= 0.3.0, < 3) + web-console (2.3.0) + activemodel (>= 4.0) + binding_of_caller (>= 0.7.2) + railties (>= 4.0) + sprockets-rails (>= 2.0, < 4.0) + +PLATFORMS + ruby + +DEPENDENCIES + byebug + coffee-rails (~> 4.1.0) + jbuilder (~> 2.0) + jquery-rails + rails (= 4.2.7) + sass-rails (~> 5.0) + sdoc (~> 0.4.0) + spring + sqlite3 + turbolinks + uglifier (>= 1.3.0) + web-console (~> 2.0) + +BUNDLED WITH + 1.16.3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/README.rdoc b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/README.rdoc new file mode 100644 index 0000000..dd4e97e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/README.rdoc @@ -0,0 +1,28 @@ +== README + +This README would normally document whatever steps are necessary to get the +application up and running. + +Things you may want to cover: + +* Ruby version + +* System dependencies + +* Configuration + +* Database creation + +* Database initialization + +* How to run the test suite + +* Services (job queues, cache servers, search engines, etc.) + +* Deployment instructions + +* ... + + +Please feel free to use a different markup language if you do not plan to run +rake doc:app. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/Rakefile similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/Rakefile rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/Rakefile diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/assets/images/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/app/assets/images/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/assets/images/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/assets/javascripts/application.js similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/app/assets/javascripts/application.js rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/assets/javascripts/application.js diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/assets/javascripts/says.coffee b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/assets/javascripts/says.coffee new file mode 100644 index 0000000..24f83d1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/assets/javascripts/says.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/app/assets/stylesheets/application.css b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/assets/stylesheets/application.css similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/app/assets/stylesheets/application.css rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/assets/stylesheets/application.css diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/assets/stylesheets/says.scss b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/assets/stylesheets/says.scss new file mode 100644 index 0000000..b9b4b94 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/assets/stylesheets/says.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the Says controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/controllers/application_controller.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/app/controllers/application_controller.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/controllers/application_controller.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/controllers/concerns/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/app/controllers/concerns/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/controllers/concerns/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/controllers/says_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/controllers/says_controller.rb new file mode 100644 index 0000000..2a542d3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/controllers/says_controller.rb @@ -0,0 +1,32 @@ +class SaysController < ApplicationController + def index + render text: "What do you want me to say???" + end + + def hello + render text:"Hello Coding Dojo!" + end + + def sayhello + if params[:name].downcase === 'joe' + render text:"Saying Hello Joe!" + elsif params[:name].downcase === 'michael' + redirect_to "/say/hello/joe" + else + render text:"Saying Hello!" + end + end + + def times + if session[:counter].nil? + session[:counter] = 0 + end + session[:counter] += 1 + render text: "You visited this url #{session[:counter]} time" + end + + def restart + session.clear + render text:"Destroyed the session!" + end +end \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/helpers/application_helper.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/app/helpers/application_helper.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/helpers/application_helper.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/helpers/says_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/helpers/says_helper.rb new file mode 100644 index 0000000..0ed9dec --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/helpers/says_helper.rb @@ -0,0 +1,2 @@ +module SaysHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/mailers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/app/mailers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/mailers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/models/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/app/models/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/models/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/models/concerns/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/app/models/concerns/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/models/concerns/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/views/layouts/application.html.erb new file mode 100644 index 0000000..9b169c5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/views/layouts/application.html.erb @@ -0,0 +1,14 @@ + + + + RoutesAndControllers + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + + +<%= yield %> + + + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/views/says/hello.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/views/says/hello.html.erb new file mode 100644 index 0000000..120177d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/views/says/hello.html.erb @@ -0,0 +1,2 @@ +

Says#hello

+

Find me in app/views/says/hello.html.erb

diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/views/says/index.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/views/says/index.html.erb new file mode 100644 index 0000000..e248fe4 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/views/says/index.html.erb @@ -0,0 +1,2 @@ +

Says#index

+

Find me in app/views/says/index.html.erb

diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/views/says/restart.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/views/says/restart.html.erb new file mode 100644 index 0000000..38ce823 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/views/says/restart.html.erb @@ -0,0 +1,2 @@ +

Says#restart

+

Find me in app/views/says/restart.html.erb

diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/views/says/sayhello.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/views/says/sayhello.html.erb new file mode 100644 index 0000000..0ae5d14 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/views/says/sayhello.html.erb @@ -0,0 +1,2 @@ +

Says#sayhello

+

Find me in app/views/says/sayhello.html.erb

diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/views/says/times.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/views/says/times.html.erb new file mode 100644 index 0000000..1a19ed9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/app/views/says/times.html.erb @@ -0,0 +1,2 @@ +

Says#times

+

Find me in app/views/says/times.html.erb

diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/bin/bundle similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/bin/bundle rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/bin/bundle diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/bin/rails similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/bin/rails rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/bin/rails diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/bin/rake similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/bin/rake rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/bin/rake diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/bin/setup similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/bin/setup rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/bin/setup diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/bin/spring similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/bin/spring rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/bin/spring diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config.ru similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config.ru rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config.ru diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/application.rb new file mode 100644 index 0000000..505c586 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/application.rb @@ -0,0 +1,26 @@ +require File.expand_path('../boot', __FILE__) + +require 'rails/all' + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module RoutesAndControllers + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Do not swallow errors in after_commit/after_rollback callbacks. + config.active_record.raise_in_transactional_callbacks = true + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/boot.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/boot.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/boot.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/database.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/database.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/database.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/environment.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/environment.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/environment.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/environments/development.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/environments/development.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/environments/development.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/environments/production.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/environments/production.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/environments/production.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/environments/test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/environments/test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/environments/test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/initializers/assets.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/initializers/assets.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/initializers/assets.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/initializers/backtrace_silencers.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/initializers/backtrace_silencers.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/initializers/backtrace_silencers.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/initializers/cookies_serializer.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/initializers/cookies_serializer.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/initializers/cookies_serializer.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/initializers/filter_parameter_logging.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/initializers/filter_parameter_logging.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/initializers/filter_parameter_logging.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/initializers/inflections.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/initializers/inflections.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/initializers/inflections.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/initializers/mime_types.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/initializers/mime_types.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/initializers/mime_types.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/initializers/session_store.rb new file mode 100644 index 0000000..4dd8057 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/initializers/session_store.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.session_store :cookie_store, key: '_RoutesAndControllers_session' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/initializers/wrap_parameters.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/initializers/wrap_parameters.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/initializers/wrap_parameters.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/locales/en.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/locales/en.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/locales/en.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/routes.rb new file mode 100644 index 0000000..ce5384f --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/routes.rb @@ -0,0 +1,63 @@ +Rails.application.routes.draw do + root 'says#index' + get 'say/hello' => 'says#hello' + get 'say/hello/:name' => 'says#sayhello' + get 'say/times' => 'says#times' + get 'say/restart' => 'says#restart' + + + # The priority is based upon order of creation: first created -> highest priority. + # See how all your routes lay out with "rake routes". + + # You can have the root of your site routed with "root" + # root 'welcome#index' + + # Example of regular route: + # get 'products/:id' => 'catalog#view' + + # Example of named route that can be invoked with purchase_url(id: product.id) + # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase + + # Example resource route (maps HTTP verbs to controller actions automatically): + # resources :products + + # Example resource route with options: + # resources :products do + # member do + # get 'short' + # post 'toggle' + # end + # + # collection do + # get 'sold' + # end + # end + + # Example resource route with sub-resources: + # resources :products do + # resources :comments, :sales + # resource :seller + # end + + # Example resource route with more complex sub-resources: + # resources :products do + # resources :comments + # resources :sales do + # get 'recent', on: :collection + # end + # end + + # Example resource route with concerns: + # concern :toggleable do + # post 'toggle' + # end + # resources :posts, concerns: :toggleable + # resources :photos, concerns: :toggleable + + # Example resource route within a namespace: + # namespace :admin do + # # Directs /admin/products/* to Admin::ProductsController + # # (app/controllers/admin/products_controller.rb) + # resources :products + # end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/secrets.yml new file mode 100644 index 0000000..ea5bd91 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/config/secrets.yml @@ -0,0 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rake secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: d5800e35ff20d95a65e5a319de4cb78900378b8ec72d159bfd16a765b9a99a37c3a6c3eba54bf18f571314767227b345a12e6ae69e718e6cc8f1674cc77a7129 + +test: + secret_key_base: 24c8155cdb85a962678d1d06abfc3a064f9ca6123a260aa15888bf977bc9d6f18e0507cd080d173e647d5cc0b3d698189f23de46491c8184f16528850769e870 + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/db/seeds.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/db/seeds.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/db/seeds.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/lib/assets/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/lib/assets/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/lib/assets/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/lib/tasks/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/lib/tasks/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/lib/tasks/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/log/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/log/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/log/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/public/404.html similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/public/404.html rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/public/404.html diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/public/422.html similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/public/422.html rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/public/422.html diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/public/500.html similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/public/500.html rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/public/500.html diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/public/favicon.ico similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/public/favicon.ico rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/public/favicon.ico diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/public/robots.txt similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/public/robots.txt rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/public/robots.txt diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/test/controllers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/test/controllers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/test/controllers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/test/controllers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/test/controllers/says_controller_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/test/controllers/says_controller_test.rb new file mode 100644 index 0000000..22c9437 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/test/controllers/says_controller_test.rb @@ -0,0 +1,29 @@ +require 'test_helper' + +class SaysControllerTest < ActionController::TestCase + test "should get index" do + get :index + assert_response :success + end + + test "should get hello" do + get :hello + assert_response :success + end + + test "should get sayhello" do + get :sayhello + assert_response :success + end + + test "should get times" do + get :times + assert_response :success + end + + test "should get restart" do + get :restart + assert_response :success + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/test/fixtures/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/test/fixtures/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/test/fixtures/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/test/fixtures/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/test/helpers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/test/helpers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/test/helpers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/test/helpers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/test/integration/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/test/integration/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/test/integration/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/test/integration/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/test/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/test/mailers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/test/mailers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/test/mailers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/test/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/test/models/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/test/models/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/test/models/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/test/test_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/test/test_helper.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/test/test_helper.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/test/test_helper.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/vendor/assets/javascripts/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/vendor/assets/javascripts/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/vendor/assets/javascripts/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/vendor/assets/stylesheets/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/vendor/assets/stylesheets/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/RoutesAndControllers/vendor/assets/stylesheets/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/.gitignore similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/.gitignore rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/.gitignore diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/Gemfile new file mode 100644 index 0000000..8158dac --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/Gemfile @@ -0,0 +1,63 @@ +source 'https://rubygems.org' + + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '4.2.7' + +# Use SCSS for stylesheets +gem 'sass-rails', '~> 5.0' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# Use CoffeeScript for .coffee assets and views +gem 'coffee-rails', '~> 4.1.0' +# See https://github.com/rails/execjs#readme for more supported runtimes +# gem 'therubyracer', platforms: :ruby + +# Use jquery as the JavaScript library +gem 'jquery-rails' +# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks +gem 'turbolinks' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.0' +# bundle exec rake doc:rails generates the API under doc/api. +gem 'sdoc', '~> 0.4.0', group: :doc + +# Use ActiveModel has_secure_password +gem 'bcrypt', '~> 3.1.7' + +# Use Unicorn as the app server +# gem 'unicorn' + +# Use Capistrano for deployment +# gem 'capistrano-rails', group: :development + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug' +end + +group :development do + # Access an IRB console on exception pages or by using <%= console %> in views + gem 'web-console', '~> 2.0' + + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' +end + +gem 'hirb' +# gem 'client_side_validations' +gem 'rails-footnotes', '~> 4.0' + +gem 'nokogiri' +gem 'rack', '~> 2.0.1' +gem 'rspec' + +group :development do + # Use sqlite3 as the database for Active Record + gem 'sqlite3' +end + +group :production do + gem 'pg' + gem 'rails_12factor' +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/Gemfile.lock new file mode 100644 index 0000000..9a2fcaa --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/Gemfile.lock @@ -0,0 +1,185 @@ +GEM + remote: https://rubygems.org/ + specs: + actionmailer (4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.7) + actionview (= 4.2.7) + activesupport (= 4.2.7) + rack (~> 1.6) + rack-test (~> 0.6.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + activejob (4.2.7) + activesupport (= 4.2.7) + globalid (>= 0.3.0) + activemodel (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + activerecord (4.2.7) + activemodel (= 4.2.7) + activesupport (= 4.2.7) + arel (~> 6.0) + activesupport (4.2.7) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + arel (6.0.4) + bcrypt (3.1.12) + binding_of_caller (0.8.0) + debug_inspector (>= 0.0.1) + builder (3.2.3) + byebug (10.0.2) + coffee-rails (4.1.1) + coffee-script (>= 2.2.0) + railties (>= 4.0.0, < 5.1.x) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + concurrent-ruby (1.0.5) + crass (1.0.4) + debug_inspector (0.0.3) + erubis (2.7.0) + execjs (2.7.0) + ffi (1.9.25) + globalid (0.4.1) + activesupport (>= 4.2.0) + hirb (0.7.3) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jbuilder (2.7.0) + activesupport (>= 4.2.0) + multi_json (>= 1.2) + jquery-rails (4.3.3) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + json (1.8.6) + loofah (2.2.2) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.0) + mini_mime (>= 0.1.1) + mini_mime (1.0.0) + mini_portile2 (2.3.0) + minitest (5.11.3) + multi_json (1.13.1) + nokogiri (1.8.4) + mini_portile2 (~> 2.3.0) + pg (1.0.0) + rack (1.6.10) + rack-test (0.6.3) + rack (>= 1.0) + rails (4.2.7) + actionmailer (= 4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + activemodel (= 4.2.7) + activerecord (= 4.2.7) + activesupport (= 4.2.7) + bundler (>= 1.3.0, < 2.0) + railties (= 4.2.7) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.9) + activesupport (>= 4.2.0, < 5.0) + nokogiri (~> 1.6) + rails-deprecated_sanitizer (>= 1.0.1) + rails-footnotes (4.1.8) + rails (>= 3.2) + rails-html-sanitizer (1.0.4) + loofah (~> 2.2, >= 2.2.2) + rails_12factor (0.0.3) + rails_serve_static_assets + rails_stdout_logging + rails_serve_static_assets (0.0.5) + rails_stdout_logging (0.0.5) + railties (4.2.7) + actionpack (= 4.2.7) + activesupport (= 4.2.7) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (12.3.1) + rb-fsevent (0.10.3) + rb-inotify (0.9.10) + ffi (>= 0.5.0, < 2) + rdoc (4.3.0) + sass (3.5.7) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sass-rails (5.0.7) + railties (>= 4.0.0, < 6) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + sdoc (0.4.2) + json (~> 1.7, >= 1.7.7) + rdoc (~> 4.0) + spring (2.0.2) + activesupport (>= 4.2) + sprockets (3.7.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.2.1) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + sqlite3 (1.3.13) + thor (0.20.0) + thread_safe (0.3.6) + tilt (2.0.8) + turbolinks (5.1.1) + turbolinks-source (~> 5.1) + turbolinks-source (5.1.0) + tzinfo (1.2.5) + thread_safe (~> 0.1) + uglifier (4.1.18) + execjs (>= 0.3.0, < 3) + web-console (2.3.0) + activemodel (>= 4.0) + binding_of_caller (>= 0.7.2) + railties (>= 4.0) + sprockets-rails (>= 2.0, < 4.0) + +PLATFORMS + ruby + +DEPENDENCIES + bcrypt (~> 3.1.7) + byebug + coffee-rails (~> 4.1.0) + hirb + jbuilder (~> 2.0) + jquery-rails + pg + rails (= 4.2.7) + rails-footnotes (~> 4.0) + rails_12factor + sass-rails (~> 5.0) + sdoc (~> 0.4.0) + spring + sqlite3 + turbolinks + uglifier (>= 1.3.0) + web-console (~> 2.0) + +BUNDLED WITH + 1.16.3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/README.rdoc b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/README.rdoc new file mode 100644 index 0000000..dd4e97e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/README.rdoc @@ -0,0 +1,28 @@ +== README + +This README would normally document whatever steps are necessary to get the +application up and running. + +Things you may want to cover: + +* Ruby version + +* System dependencies + +* Configuration + +* Database creation + +* Database initialization + +* How to run the test suite + +* Services (job queues, cache servers, search engines, etc.) + +* Deployment instructions + +* ... + + +Please feel free to use a different markup language if you do not plan to run +rake doc:app. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/Rakefile similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/Rakefile rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/Rakefile diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/assets/images/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/assets/images/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/assets/images/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/assets/images/codingdojo.png b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/assets/images/codingdojo.png new file mode 100644 index 0000000..5c82e33 Binary files /dev/null and b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/assets/images/codingdojo.png differ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/assets/javascripts/application.js similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/app/assets/javascripts/application.js rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/assets/javascripts/application.js diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/assets/javascripts/dojo.coffee b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/assets/javascripts/dojo.coffee new file mode 100644 index 0000000..24f83d1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/assets/javascripts/dojo.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/assets/javascripts/main.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/assets/javascripts/main.js new file mode 100644 index 0000000..125462e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/assets/javascripts/main.js @@ -0,0 +1,11 @@ +document.addEventListener('DOMContentLoaded', function() { + var elems = document.querySelectorAll('select'); + var instances = M.FormSelect.init(elems, options); + }); + + // Or with jQuery + + $(document).ready(function(){ + // alert("Well passed....!") + $('select').formSelect(); + }); \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/assets/javascripts/students.coffee b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/assets/javascripts/students.coffee new file mode 100644 index 0000000..24f83d1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/assets/javascripts/students.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/app/assets/stylesheets/application.css b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/assets/stylesheets/application.css similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/app/assets/stylesheets/application.css rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/assets/stylesheets/application.css diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/assets/stylesheets/dojo.scss b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/assets/stylesheets/dojo.scss new file mode 100644 index 0000000..ee4f4c7 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/assets/stylesheets/dojo.scss @@ -0,0 +1,199 @@ +// Navbar section +nav { + background-color:#000; + padding: 0 4rem; + a:hover { color: tan; } +} + +body { + width: 100%; + height: 100vh; + // position: static; + background-position: center; + background-repeat: no-repeat; + background-size: cover; + background-image: url('https://cdn-images-1.medium.com/max/1600/0*zfW13Mn8_fvEKcU7.jpg') +} + +nav a { color: white; } +nav a img { + width: 100px; + height: 40px; + margin: 0.5rem 0; + border-style: none; +} + +nav a:hover { color: #06a9e2; cursor: pointer; } + +h1, h2, .student_header { + font-family: 'Fredoka One', cursive; + text-align: center; + color: #06a9e2; + margin: 4rem 0 2rem; + position: relative; +} +h1 span { color: #06a9e2; font-family: 'Poiret One', cursive; } + +#notice { + padding: 0.5rem 2rem; + border-radius: 1rem; + border: 2px solid #06a9e2; + background: lightslategrey; +} + +// Form Components [ Add and Edit ] Section +form { padding: 0 15rem; } +ul .form-row { padding-left: 4rem !important; } +.form-row { line-height: 0rem; } + + +// Table Section +.theader { color: #06a9e2; font-family: 'Poiret One', cursive; } +.trbody { font-family: 'Poiret One', cursive; } +.trbody > td { padding: 0; } +.trbody > td:last-child > a { margin: 0.1rem auto; width: 5rem; } +.trbody > td:last-child > form { + input { margin: 0; } + width: 5rem; + margin: 0rem auto; + display: inline-table !important; +} +.trbody:hover { color: #06a9e2; background-color: #0000006b !important; } +.scrolling-wrapper { + -webkit-overflow-scrolling: touch; + padding-bottom: 12rem; + overflow-y: scroll; + position:relative; + opacity: 0.8; + height: 50px !important; + width: 100%; + // z-index: -1; + } + ::-webkit-scrollbar { width: 12px; } + ::-webkit-scrollbar-track { display: none; } + + +// Container section +.container { min-height: 70% !important; width: 58%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +.container-min { height: 550px; min-height: 70%; width: 50%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +.container-max { height: 600px; min-height: 70%; width: 50%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +// .container h1 { margin-top: 2rem; } + +.flxend { display: flex; justify-content: end; } // div container requiring flex +.flexed { display: flex; justify-content: space-between; } // div container requiring flex +.grided { display: grid; grid-template-columns: 1fr 1fr; grid-gap: 2rem; } // div container requiring grid +.inline { display: inline-block; margin: 1rem auto; } // div container requiring grid +.grided input { min-width: 100%; margin-top: 2rem; } +.text-warning { color: #fba153fa; } + +// Custom Margin +// =========================== [ 1rem ] +.right-margin1 { margin-right : 1rem !important; } +.left-margin1 { margin-left : 1rem !important; } +.top-margin1 { margin-top : 1rem !important; } +.bottom-margin1 { margin-bottom: 1rem !important; } +// =========================== [ 2rem ] +.right-margin2 { margin-right : 2rem !important; } +.left-margin2 { margin-left : 2rem !important; } +.top-margin2 { margin-top : 2rem !important; } +.bottom-margin2 { margin-bottom: 2rem !important; } +// =========================== [ 4rem ] +.right-margin4 { margin-right : 4rem !important; } +.left-margin4 { margin-left : 4rem !important; } +.top-margin4 { margin-top : 4rem !important; } +.bottom-margin4 { margin-bottom: 4rem !important; } +// =========================== [ 6rem ] +.right-margin6 { margin-right : 6rem !important; } +.left-margin6 { margin-left : 6rem !important; } +.top-margin6 { margin-top : 6rem !important; } +.bottom-margin6 { margin-bottom: 6rem !important; } + +.separator-bar{ margin: 0 1rem; } +.sn { + color: white; + // margin-top: 2rem; + border-radius: .2rem; + background-color: #111; + border: 1px solid #f5f5f5; + // background-color: #357ae8; + transition: all .3s ease-in-out; + box-shadow: 1px 2px 2px 0px #444 !important; +} +.sn:hover { + color: #06a9e2; + transition: all .3s ease-in-out; + background-color: #000 !important; + box-shadow: 0px 0px 0px 0px #222 !important; +} +.show { + border-radius: 1rem; + font-size: 10px; + color: #06a9e2; + &:hover { + color: white !important; + background-color: #357ae8 !important; + } +} +.edit { + border-radius: 1rem; + font-size: 10px; + color: lime; + &:hover { + color: white !important; + background-color: green !important; + } +} +.delete { + border-radius: 1rem; + font-size: 10px; + color: #f44336; + &:hover { + color: white !important; + background-color: red !important; + } +} +.brand-logo { + font-family: 'Days One', sans-serif; +} + +input.valid:not([type]), input.valid:not([type]):focus, input.valid[type=text]:not(.browser-default), input.valid[type=text]:not(.browser-default):focus, input.valid[type=password]:not(.browser-default), input.valid[type=password]:not(.browser-default):focus, input.valid[type=email]:not(.browser-default), input.valid[type=email]:not(.browser-default):focus, input.valid[type=url]:not(.browser-default), input.valid[type=url]:not(.browser-default):focus, input.valid[type=time]:not(.browser-default), input.valid[type=time]:not(.browser-default):focus, input.valid[type=date]:not(.browser-default), input.valid[type=date]:not(.browser-default):focus, input.valid[type=datetime]:not(.browser-default), input.valid[type=datetime]:not(.browser-default):focus, input.valid[type=datetime-local]:not(.browser-default), input.valid[type=datetime-local]:not(.browser-default):focus, input.valid[type=tel]:not(.browser-default), input.valid[type=tel]:not(.browser-default):focus, input.valid[type=number]:not(.browser-default), input.valid[type=number]:not(.browser-default):focus, input.valid[type=search]:not(.browser-default), input.valid[type=search]:not(.browser-default):focus, textarea.materialize-textarea.valid, textarea.materialize-textarea.valid:focus, .select-wrapper.valid>input.select-dropdown { + border-bottom: 1px solid #06a9e2 !important; + -webkit-box-shadow: 0 1px 0 0 #06a9e2 !important; + box-shadow: 0 1px 0 0 #06a9e2 !important; +} +input:not([type]):focus:not([readonly]), input[type=text]:not(.browser-default):focus:not([readonly]), input[type=password]:not(.browser-default):focus:not([readonly]), input[type=email]:not(.browser-default):focus:not([readonly]), input[type=url]:not(.browser-default):focus:not([readonly]), input[type=time]:not(.browser-default):focus:not([readonly]), input[type=date]:not(.browser-default):focus:not([readonly]), input[type=datetime]:not(.browser-default):focus:not([readonly]), input[type=datetime-local]:not(.browser-default):focus:not([readonly]), input[type=tel]:not(.browser-default):focus:not([readonly]), input[type=number]:not(.browser-default):focus:not([readonly]), input[type=search]:not(.browser-default):focus:not([readonly]), textarea.materialize-textarea:focus:not([readonly]) { + border-bottom: 1px solid #06a9e2; + -webkit-box-shadow: 0 1px 0 0 #06a9e2; + box-shadow: 0 1px 0 0 #06a9e2; +} +.dropdown-content li>a, .dropdown-content li>span { + font-size: 16px; + background-color: #020000; + color: #9e9e9edb; + display: block; + line-height: 22px; + padding: 14px 16px; +} +.dropdown-content li>a:hover, .dropdown-content li>span:hover { + background-color: #06a9e2; + color: white; +} + + +.select-wrapper input.select-dropdown { + color: #06a9e2; +} +input:not([type]):focus:not([readonly])+label,.form-wrap input[type=text]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=password]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=email]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=url]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=time]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=date]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=datetime]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=datetime-local]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=tel]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=number]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=search]:not(.browser-default):focus:not([readonly])+label,.form-wrap textarea.materialize-textarea:focus:not([readonly])+label { + color: #06a9e2; +} +input:not([type]):focus:not([readonly])+label, input[type=text]:not(.browser-default):focus:not([readonly])+label, input[type=password]:not(.browser-default):focus:not([readonly])+label, input[type=email]:not(.browser-default):focus:not([readonly])+label, input[type=url]:not(.browser-default):focus:not([readonly])+label, input[type=time]:not(.browser-default):focus:not([readonly])+label, input[type=date]:not(.browser-default):focus:not([readonly])+label, input[type=datetime]:not(.browser-default):focus:not([readonly])+label, input[type=datetime-local]:not(.browser-default):focus:not([readonly])+label, input[type=tel]:not(.browser-default):focus:not([readonly])+label, input[type=number]:not(.browser-default):focus:not([readonly])+label, input[type=search]:not(.browser-default):focus:not([readonly])+label, textarea.materialize-textarea:focus:not([readonly])+label { + color: #06a9e2; +} +.select-wrapper input.select-dropdown { color: #06a9e2 !important; } +.select-wrapper input.select-dropdown:focus { + border-bottom: 2px solid #06a9e2 !important; +} +// label:active { +// font-size: .8rem; +// color: #06a9e2 !important; +// } diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/assets/stylesheets/students.scss b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/assets/stylesheets/students.scss new file mode 100644 index 0000000..f5e154d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/assets/stylesheets/students.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the Students controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/controllers/application_controller.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/controllers/application_controller.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/controllers/application_controller.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/controllers/concerns/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/controllers/concerns/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/controllers/concerns/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/controllers/dojo_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/controllers/dojo_controller.rb new file mode 100644 index 0000000..daa26ea --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/controllers/dojo_controller.rb @@ -0,0 +1,110 @@ +class DojoController < ApplicationController + + before_action :set_dojo, only: [:show, :edit, :update, :destroy] + + # ============================================ + # GET Request - Renders root/home page [.html] + # ============================================ + def index + # --- [ Put in Session ] + session[:page] = "dojo" + # --------------------- + @alldojos = Dojo.all + end + + + # ============================= + # GET Request - Renders [.html] + # ============================= + def new + # --- [ Put in Session ] + session[:page] = "dojo" + # --------------------- + @dojo = Dojo.new + end + + + # ==================== + # POST Request [.html] + # POST Request [.json] + # ==================== + def create + @dojo = Dojo.create(validate_params) + # @dojo.valid? + respond_to do |format| + if @dojo.save + format.html { redirect_to '/', notice: 'Dojo was successfully created.' } + format.json { render :show, status: :created, location: @dojo } + else + format.html { render :new } + format.json { render json: @dojo.errors, status: :unprocessable_entity } + end + end + end + + + # ============================= + # GET Request - Renders [.html] + # ============================= + def show + # --- [ Put in Session ] + session[:page] = "dojo" + # --------------------- + @dojo = Dojo.find(params[:id]) + @students = @dojo.students.order(:last_name) + end + + + # ============================= + # GET Request - Renders [.html] + # ============================= + def edit + # --- [ Put in Session ] + session[:page] = "dojo" + # --------------------- + @dojo = Dojo.find(params[:id]) + render "edit" + end + + + # ========================= + # PATCH/PUT Request [.html] + # PATCH/PUT Request [.json] + # ========================= + def update + respond_to do |format| + if @dojo.update(validate_params) + format.html { redirect_to '/', notice: 'Dojo was successfully updated.' } + format.json { render :show, status: :ok, location: @dojo } + else + format.html { render :edit } + format.json { render json: @dojo.errors, status: :unprocessable_entity } + end + end + end + + + # ==================== + # DELETE /dojos/1 + # DELETE /dojos/1.json + # ==================== + def destroy + Dojo.find(params[:id]).destroy + respond_to do |format| + format.html { redirect_to '/', notice: 'Dojo was successfully destroyed.' } + format.json { head :no_content } + end + end + + + private + # Use callbacks to share common setup or constraints between actions. + def set_dojo + @dojo = Dojo.find(params[:id]) + end + + # Sanatizing/Validating Parameters... + def validate_params + params.require(:dojo).permit(:branch, :street, :city, :state) + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/controllers/students_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/controllers/students_controller.rb new file mode 100644 index 0000000..e8ff2b6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/controllers/students_controller.rb @@ -0,0 +1,119 @@ +class StudentsController < ApplicationController + + before_action :set_student, only: [:first_name, :last_name, :email, :dojo_id] + + # ============================= + # GET Request - Renders [.html] + # ============================= + def new + @dojos = Dojo.all + @student = Student.new + @this_dojo = Dojo.find(params[:dojo_id]) + + # ----------- [ Put in Session ] + session[:page] = "student" + session[:dojoid] = @this_dojo.id + # ------------------------------ + end + + + # ==================== + # POST Request [.html] + # POST Request [.json] + # ==================== + def create + @student = Student.create(validate_params) + # @student.valid? + respond_to do |format| + if @student.save + # format.html { redirect_to dojo_student_url, notice: 'Student was successfully created.' } + format.html { redirect_to "/dojo/#{params[:dojo_id]}", notice: 'Student was successfully created.' } + format.json { render :show, status: :created, location: @student } + else + format.html { render "students/new" } + format.json { render json: @student.errors, status: :unprocessable_entity } + end + end + end + + + # ============================= + # GET Request - Renders [.html] + # ============================= + def show + @student = Student.find(params[:id]) + @this_dojo = Dojo.find(params[:dojo_id]) + @this_student = "#{@student.first_name} #{@student.last_name}" + + # ----------- [ Put in Session ] + session[:page] = "student" + session[:dojoid] = @this_dojo.id + # ------------------------------ + # print "\n\n\n=========\n", @dojo + # print "\n\n\n=========\n", @student + end + + + # ============================= + # GET Request - Renders [.html] + # ============================= + def edit + @alldojos = Dojo.all + @edit_dojo = Dojo.find(params[:dojo_id]) + @student = Student.find(params[:id]) + @this_student = "#{@student.first_name} #{@student.last_name}" + + # -------------------------------- [ Put in Session ] + session[:page] = "student" + session[:dojo_id] = params[:dojo_id] + session[:student_id] = params[:id] + session[:branch] = Dojo.find(params[:dojo_id]).branch + # --------------------------------------------------- + render "edit" + end + + + # ========================= + # PATCH/PUT Request [.html] + # PATCH/PUT Request [.json] + # ========================= + def update + @student = Student.find(params[:id]) + respond_to do |format| + if @student.update(validate_params) + # format.html { redirect_to dojo_student_url, notice: 'Student was successfully updated.' } + format.html { redirect_to "/dojo/#{params[:dojo_id]}/students/#{params[:id]}", notice: 'Student was successfully updated.' } + format.json { render :show, status: :ok, location: @student } + else + format.html { render :edit } + format.json { render json: @student.errors, status: :unprocessable_entity } + end + end + end + + + # ====================== + # DELETE /student/1 + # DELETE /student/1.json + # ====================== + def destroy + Student.find(params[:id]).destroy + respond_to do |format| + # format.html { redirect_to '/', notice: 'Student was successfully destroyed.' } + format.html { redirect_to "/dojo/#{params[:dojo_id]}", notice: 'Student was successfully deleted.' } + format.json { head :no_content } + end + end + + + private + # Use callbacks to share common setup or constraints between actions. + def set_student + @student = Student.find(params[:id]) + end + + # Sanatizing/Validating Parameters... + def validate_params + params.require(:student).permit(:first_name, :last_name, :email, :dojo_id) + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/helpers/application_helper.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/helpers/application_helper.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/helpers/application_helper.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/helpers/dojo_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/helpers/dojo_helper.rb new file mode 100644 index 0000000..89d551e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/helpers/dojo_helper.rb @@ -0,0 +1,2 @@ +module DojoHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/helpers/students_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/helpers/students_helper.rb new file mode 100644 index 0000000..6191d9e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/helpers/students_helper.rb @@ -0,0 +1,2 @@ +module StudentsHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/mailers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/mailers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/mailers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/models/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/models/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/models/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/models/concerns/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/models/concerns/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/models/concerns/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/models/dojo.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/models/dojo.rb new file mode 100644 index 0000000..78ca267 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/models/dojo.rb @@ -0,0 +1,5 @@ +class Dojo < ActiveRecord::Base + has_many :students, :dependent => :destroy + validates :branch, :street, :city, :state, presence: true, length: { minimum: 2 } + validates :branch, uniqueness: { case_sensitive: false } +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/models/student.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/models/student.rb new file mode 100644 index 0000000..a3f6f61 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/models/student.rb @@ -0,0 +1,5 @@ +class Student < ActiveRecord::Base + belongs_to :dojo + validates :first_name, :last_name, :email, presence: true, length: { in: 2..25 } + validates :email, uniqueness: { case_sensitive: false } +end \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/views/dojo/edit.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/views/dojo/edit.html.erb new file mode 100644 index 0000000..59c548f --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/views/dojo/edit.html.erb @@ -0,0 +1,59 @@ + + +
+ +

Edit Dojo

+ +
+
+ + <% if @dojo.errors.any? %> +
+
+ <%= pluralize(@dojo.errors.count, "error") %> + prohibited this dojo from being saved: +
+
    + <% @dojo.errors.full_messages.each do |message| %> +
  • »<%= message %>
  • + <% end %> +
+
+ <% end %> + + + + + +
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ +
+
+
diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/views/dojo/index.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/views/dojo/index.html.erb new file mode 100644 index 0000000..521cb50 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/views/dojo/index.html.erb @@ -0,0 +1,50 @@ +
+ + <% if notice %> +

<%= notice %>

+ <% end %> + +

Listing <%= @alldojos.count %> Dojos

+ + + + + + + + + + + + +
+ <% @alldojos.each do |dojo| %> +
+ + + + + + + <% end %> + + +
Coding Dojo BranchStreet City State Actions
<%= dojo.branch %><%= dojo.street %><%= dojo.city %><%= dojo.state %> + Show + Edit +
+ + + +
+
+
+ +
+
+ + +
+
\ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/views/dojo/new.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/views/dojo/new.html.erb new file mode 100644 index 0000000..a4f7bea --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/views/dojo/new.html.erb @@ -0,0 +1,53 @@ + + +
+

New Dojo

+
+
+ + + <% if @dojo.errors.any? %> +
+
+ <%= pluralize(@dojo.errors.count, "error") %> + prohibited this dojo from being saved: +
+
    + <% @dojo.errors.full_messages.each do |message| %> +
  • »<%= message %>
  • + <% end %> +
+
+ <% end %> + +
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ +
+
+
diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/views/dojo/show.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/views/dojo/show.html.erb new file mode 100644 index 0000000..7e24965 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/views/dojo/show.html.erb @@ -0,0 +1,56 @@ +
+ + <% if notice %> +

<%= notice %>

+ <% end %> + +

<%= @dojo.branch %>

+
    +
  • Address: <%= @dojo.street %>
  • +
  • +
    City: <%= @dojo.city %>
    +
    State: <%= @dojo.state %>
    +
  • +
+ + + + + + + + + + + +
+ <% @students.each do |student| %> +
+ + + + + + <% end %> + + +
First NameLast Name Email Actions
<%= student.first_name %><%= student.last_name %><%= student.email %> + Show + Edit +
+ + + +
+
+
+ +
+
+ + + +
+
\ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/views/layouts/application.html.erb new file mode 100644 index 0000000..ab3ff72 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/views/layouts/application.html.erb @@ -0,0 +1,36 @@ + + + + StudentDashboard + + + + + + + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= javascript_include_tag 'application', 'main.js', 'data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + + + + + <%= yield %> + + + + + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/views/students/edit.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/views/students/edit.html.erb new file mode 100644 index 0000000..05e4571 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/views/students/edit.html.erb @@ -0,0 +1,66 @@ + + + + +
+

Editing <%= @this_student %>

+
+
/students/<%= session["student_id"] %>" method="POST"> + + <% if @student.errors.any? %> +
+
+ <%= pluralize(@student.errors.count, "error") %> + prohibited this student from being saved: +
+
    + <% @student.errors.full_messages.each do |message| %> +
  • »<%= message %>
  • + <% end %> +
+
+ <% end %> + + + + +
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+ +
+
+
\ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/views/students/new.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/views/students/new.html.erb new file mode 100644 index 0000000..cec3ed7 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/views/students/new.html.erb @@ -0,0 +1,67 @@ + + + + +
+

New Student

+
+
/students" method="POST"> + + <% if @student.errors.any? %> +
+
+ <%= pluralize(@student.errors.count, "error") %> + prohibited this student from being saved: +
+
    + <% @student.errors.full_messages.each do |message| %> +
  • »<%= message %>
  • + <% end %> +
+
+ <% end %> + + + +
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+ +
+
+
\ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/views/students/show.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/views/students/show.html.erb new file mode 100644 index 0000000..cdf7ab2 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/app/views/students/show.html.erb @@ -0,0 +1,64 @@ +
+ + + <% if notice %> +

<%= notice %>

+ <% end %> + + +

+ <%= @this_dojo.branch %>'s + <%= @this_student %> + +

+
    +
  • Email: <%= @student.email %>
  • +
+ + + +

Cohort

+ + + + + + + + +
+ <% @this_dojo.students.each do |student| %> +
+ + + + + <% end %> + + +
First NameLast Name Email
<%= student.first_name %><%= student.last_name %><%= student.email %>
+ + +
+ + +
+ Edit + +
+
+
diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/bin/bundle similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/bin/bundle rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/bin/bundle diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/bin/rails similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/bin/rails rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/bin/rails diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/bin/rake similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/bin/rake rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/bin/rake diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/bin/setup similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/bin/setup rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/bin/setup diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/bin/spring similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/bin/spring rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/bin/spring diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config.ru similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config.ru rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config.ru diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/application.rb new file mode 100644 index 0000000..bb7a00d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/application.rb @@ -0,0 +1,27 @@ +require File.expand_path('../boot', __FILE__) + +require 'rails/all' + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module StudentDashboard + class Application < Rails::Application + config.web_console.whitelisted_ips = '10.0.2.2' + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Do not swallow errors in after_commit/after_rollback callbacks. + config.active_record.raise_in_transactional_callbacks = true + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/boot.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/boot.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/boot.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/database.yml new file mode 100644 index 0000000..9acf4ad --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/database.yml @@ -0,0 +1,25 @@ +# SQLite version 3.x +# gem install sqlite3 +# +# Ensure the SQLite 3 gem is defined in your Gemfile +# gem 'sqlite3' +# +default: &default + adapter: postgresql + pool: 5 + timeout: 5000 + +development: + <<: *default + database: obifenix_db_development + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: obifenix_db_test + +production: + <<: *default + database: obifenix_db_production diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/environment.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/environment.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/environment.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/environments/development.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/environments/development.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/environments/development.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/environments/production.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/environments/production.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/environments/production.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/environments/test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/environments/test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/environments/test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/initializers/assets.rb new file mode 100644 index 0000000..70f4c58 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/initializers/assets.rb @@ -0,0 +1,11 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path +# Rails.application.config.assets.paths << Emoji.images_path + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. +Rails.application.config.assets.precompile += %w( main.js ) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/initializers/backtrace_silencers.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/initializers/backtrace_silencers.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/initializers/backtrace_silencers.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/initializers/cookies_serializer.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/initializers/cookies_serializer.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/initializers/cookies_serializer.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/initializers/filter_parameter_logging.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/initializers/filter_parameter_logging.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/initializers/filter_parameter_logging.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/initializers/inflections.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/initializers/inflections.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/initializers/inflections.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/initializers/mime_types.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/initializers/mime_types.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/initializers/mime_types.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/initializers/session_store.rb new file mode 100644 index 0000000..3a86960 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/initializers/session_store.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.session_store :cookie_store, key: '_StudentDashboard_session' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/initializers/wrap_parameters.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/initializers/wrap_parameters.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/initializers/wrap_parameters.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/locales/en.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/locales/en.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/locales/en.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/routes.rb new file mode 100644 index 0000000..1bc008d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/routes.rb @@ -0,0 +1,43 @@ +Rails.application.routes.draw do + + # get 'students/new' + + # get 'students/create' + + # get 'students/show' + + # get 'students/edit' + + # get 'students/update' + + # get 'students/destroy' + + root 'dojo#index' + + resources :dojo do + resources :students + end + +end + + +# Prefix Verb URI Pattern Controller#Action +# ======================================================================================== +# root GET / dojo#index +# dojo_students GET /dojo/:dojo_id/students(.:format) students#index +# POST /dojo/:dojo_id/students(.:format) students#create +# new_dojo_student GET /dojo/:dojo_id/students/new(.:format) students#new +# edit_dojo_student GET /dojo/:dojo_id/students/:id/edit(.:format) students#edit +# dojo_student GET /dojo/:dojo_id/students/:id(.:format) students#show +# PATCH /dojo/:dojo_id/students/:id(.:format) students#update +# PUT /dojo/:dojo_id/students/:id(.:format) students#update +# DELETE /dojo/:dojo_id/students/:id(.:format) students#destroy +# dojo_index GET /dojo(.:format) dojo#index +# POST /dojo(.:format) dojo#create +# new_dojo GET /dojo/new(.:format) dojo#new +# edit_dojo GET /dojo/:id/edit(.:format) dojo#edit +# dojo GET /dojo/:id(.:format) dojo#show +# PATCH /dojo/:id(.:format) dojo#update +# PUT /dojo/:id(.:format) dojo#update +# DELETE /dojo/:id(.:format) dojo#destroy +# ======================================================================================== diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/secrets.yml new file mode 100644 index 0000000..51c4e6d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/config/secrets.yml @@ -0,0 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rake secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: 0707d314704d344906298b7ea8bf08d2eeca8e0152304b868025cc15b311b84961b43c75791ec5f83934d4c7d144c90e1d0dce6bafe9bf23ce5f8f94f3325e4a + +test: + secret_key_base: 87d2a04d0971d1b2dfba487883cf44abba91f59597bdb5a5f30f011cc314d2bab67b022bd30ad1d72ef1672fe2d0b7e1084b4ee827d7cf580bd646889084bd27 + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/db/migrate/20180810133032_create_dojos.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/db/migrate/20180810133032_create_dojos.rb new file mode 100644 index 0000000..0df8b3d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/db/migrate/20180810133032_create_dojos.rb @@ -0,0 +1,12 @@ +class CreateDojos < ActiveRecord::Migration + def change + create_table :dojos do |t| + t.string :branch + t.string :street + t.string :city + t.string :state + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/db/migrate/20180810133107_create_students.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/db/migrate/20180810133107_create_students.rb new file mode 100644 index 0000000..886ff7e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/db/migrate/20180810133107_create_students.rb @@ -0,0 +1,12 @@ +class CreateStudents < ActiveRecord::Migration + def change + create_table :students do |t| + t.string :first_name + t.string :last_name + t.string :email + t.references :dojo, index: true, foreign_key: true + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/db/schema.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/db/schema.rb new file mode 100644 index 0000000..e969f84 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/db/schema.rb @@ -0,0 +1,36 @@ +# encoding: UTF-8 +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 20180810133107) do + + create_table "dojos", force: :cascade do |t| + t.string "branch" + t.string "street" + t.string "city" + t.string "state" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "students", force: :cascade do |t| + t.string "first_name" + t.string "last_name" + t.string "email" + t.integer "dojo_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + add_index "students", ["dojo_id"], name: "index_students_on_dojo_id" + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/db/seeds.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/db/seeds.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/db/seeds.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/lib/assets/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/lib/assets/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/lib/assets/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/lib/tasks/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/lib/tasks/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/lib/tasks/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/log/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/log/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/log/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/public/404.html similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/public/404.html rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/public/404.html diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/public/422.html similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/public/422.html rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/public/422.html diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/public/500.html similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/public/500.html rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/public/500.html diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/public/favicon.ico similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/public/favicon.ico rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/public/favicon.ico diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/public/robots.txt similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/public/robots.txt rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/public/robots.txt diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/controllers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/controllers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/controllers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/controllers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/controllers/dojo_controller_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/controllers/dojo_controller_test.rb new file mode 100644 index 0000000..edfeaf7 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/controllers/dojo_controller_test.rb @@ -0,0 +1,39 @@ +require 'test_helper' + +class DojoControllerTest < ActionController::TestCase + test "should get index" do + get :index + assert_response :success + end + + test "should get new" do + get :new + assert_response :success + end + + test "should get create" do + get :create + assert_response :success + end + + test "should get show" do + get :show + assert_response :success + end + + test "should get edit" do + get :edit + assert_response :success + end + + test "should get update" do + get :update + assert_response :success + end + + test "should get destroy" do + get :destroy + assert_response :success + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/controllers/students_controller_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/controllers/students_controller_test.rb new file mode 100644 index 0000000..1d6a9cd --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/controllers/students_controller_test.rb @@ -0,0 +1,34 @@ +require 'test_helper' + +class StudentsControllerTest < ActionController::TestCase + test "should get new" do + get :new + assert_response :success + end + + test "should get create" do + get :create + assert_response :success + end + + test "should get show" do + get :show + assert_response :success + end + + test "should get edit" do + get :edit + assert_response :success + end + + test "should get update" do + get :update + assert_response :success + end + + test "should get destroy" do + get :destroy + assert_response :success + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/fixtures/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/fixtures/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/fixtures/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/fixtures/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/fixtures/dojos.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/fixtures/dojos.yml new file mode 100644 index 0000000..215263e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/fixtures/dojos.yml @@ -0,0 +1,13 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + branch: MyString + street: MyString + city: MyString + state: MyString + +two: + branch: MyString + street: MyString + city: MyString + state: MyString diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/fixtures/students.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/fixtures/students.yml new file mode 100644 index 0000000..6a94c30 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/fixtures/students.yml @@ -0,0 +1,13 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + first_name: MyString + last_name: MyString + email: MyString + dojo_id: + +two: + first_name: MyString + last_name: MyString + email: MyString + dojo_id: diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/helpers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/helpers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/helpers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/helpers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/integration/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/integration/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/integration/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/integration/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/mailers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/mailers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/mailers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/models/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/models/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/models/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/models/dojo_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/models/dojo_test.rb new file mode 100644 index 0000000..a078f30 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/models/dojo_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class DojoTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/models/student_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/models/student_test.rb new file mode 100644 index 0000000..8a25253 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/models/student_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class StudentTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/test_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/test_helper.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/test_helper.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/test/test_helper.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/vendor/assets/javascripts/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/vendor/assets/javascripts/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/vendor/assets/javascripts/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/vendor/assets/stylesheets/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/vendor/assets/stylesheets/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/StudentDashboard/vendor/assets/stylesheets/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/.gitignore similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/.gitignore rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/.gitignore diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/Gemfile new file mode 100644 index 0000000..050ada8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/Gemfile @@ -0,0 +1,49 @@ +source 'https://rubygems.org' + + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '4.2.7' +# Use sqlite3 as the database for Active Record +gem 'sqlite3' +# Use SCSS for stylesheets +gem 'sass-rails', '~> 5.0' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# Use CoffeeScript for .coffee assets and views +gem 'coffee-rails', '~> 4.1.0' +# See https://github.com/rails/execjs#readme for more supported runtimes +# gem 'therubyracer', platforms: :ruby + +# Use jquery as the JavaScript library +gem 'jquery-rails' +# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks +gem 'turbolinks' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.0' +# bundle exec rake doc:rails generates the API under doc/api. +gem 'sdoc', '~> 0.4.0', group: :doc + +# Use ActiveModel has_secure_password +# gem 'bcrypt', '~> 3.1.7' + +# Use Unicorn as the app server +# gem 'unicorn' + +# Use Capistrano for deployment +# gem 'capistrano-rails', group: :development + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug' +end + +group :development do + # Access an IRB console on exception pages or by using <%= console %> in views + gem 'web-console', '~> 2.0' + + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' +end + +gem 'hirb' +gem 'rails-footnotes', '~> 4.0' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/Gemfile.lock new file mode 100644 index 0000000..07d9d03 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/Gemfile.lock @@ -0,0 +1,175 @@ +GEM + remote: https://rubygems.org/ + specs: + actionmailer (4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.7) + actionview (= 4.2.7) + activesupport (= 4.2.7) + rack (~> 1.6) + rack-test (~> 0.6.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + activejob (4.2.7) + activesupport (= 4.2.7) + globalid (>= 0.3.0) + activemodel (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + activerecord (4.2.7) + activemodel (= 4.2.7) + activesupport (= 4.2.7) + arel (~> 6.0) + activesupport (4.2.7) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + arel (6.0.4) + binding_of_caller (0.8.0) + debug_inspector (>= 0.0.1) + builder (3.2.3) + byebug (10.0.2) + coffee-rails (4.1.1) + coffee-script (>= 2.2.0) + railties (>= 4.0.0, < 5.1.x) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + concurrent-ruby (1.0.5) + crass (1.0.4) + debug_inspector (0.0.3) + erubis (2.7.0) + execjs (2.7.0) + ffi (1.9.25) + globalid (0.4.1) + activesupport (>= 4.2.0) + hirb (0.7.3) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jbuilder (2.7.0) + activesupport (>= 4.2.0) + multi_json (>= 1.2) + jquery-rails (4.3.3) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + json (1.8.6) + loofah (2.2.2) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.0) + mini_mime (>= 0.1.1) + mini_mime (1.0.0) + mini_portile2 (2.3.0) + minitest (5.11.3) + multi_json (1.13.1) + nokogiri (1.8.4) + mini_portile2 (~> 2.3.0) + rack (1.6.10) + rack-test (0.6.3) + rack (>= 1.0) + rails (4.2.7) + actionmailer (= 4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + activemodel (= 4.2.7) + activerecord (= 4.2.7) + activesupport (= 4.2.7) + bundler (>= 1.3.0, < 2.0) + railties (= 4.2.7) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.9) + activesupport (>= 4.2.0, < 5.0) + nokogiri (~> 1.6) + rails-deprecated_sanitizer (>= 1.0.1) + rails-footnotes (4.1.8) + rails (>= 3.2) + rails-html-sanitizer (1.0.4) + loofah (~> 2.2, >= 2.2.2) + railties (4.2.7) + actionpack (= 4.2.7) + activesupport (= 4.2.7) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (12.3.1) + rb-fsevent (0.10.3) + rb-inotify (0.9.10) + ffi (>= 0.5.0, < 2) + rdoc (4.3.0) + sass (3.5.7) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sass-rails (5.0.7) + railties (>= 4.0.0, < 6) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + sdoc (0.4.2) + json (~> 1.7, >= 1.7.7) + rdoc (~> 4.0) + spring (2.0.2) + activesupport (>= 4.2) + sprockets (3.7.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.2.1) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + sqlite3 (1.3.13) + thor (0.20.0) + thread_safe (0.3.6) + tilt (2.0.8) + turbolinks (5.1.1) + turbolinks-source (~> 5.1) + turbolinks-source (5.1.0) + tzinfo (1.2.5) + thread_safe (~> 0.1) + uglifier (4.1.17) + execjs (>= 0.3.0, < 3) + web-console (2.3.0) + activemodel (>= 4.0) + binding_of_caller (>= 0.7.2) + railties (>= 4.0) + sprockets-rails (>= 2.0, < 4.0) + +PLATFORMS + ruby + +DEPENDENCIES + byebug + coffee-rails (~> 4.1.0) + hirb + jbuilder (~> 2.0) + jquery-rails + rails (= 4.2.7) + rails-footnotes (~> 4.0) + sass-rails (~> 5.0) + sdoc (~> 0.4.0) + spring + sqlite3 + turbolinks + uglifier (>= 1.3.0) + web-console (~> 2.0) + +BUNDLED WITH + 1.16.3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/README.rdoc b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/README.rdoc new file mode 100644 index 0000000..dd4e97e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/README.rdoc @@ -0,0 +1,28 @@ +== README + +This README would normally document whatever steps are necessary to get the +application up and running. + +Things you may want to cover: + +* Ruby version + +* System dependencies + +* Configuration + +* Database creation + +* Database initialization + +* How to run the test suite + +* Services (job queues, cache servers, search engines, etc.) + +* Deployment instructions + +* ... + + +Please feel free to use a different markup language if you do not plan to run +rake doc:app. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/Rakefile similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/Rakefile rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/Rakefile diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/assets/images/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/app/assets/images/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/assets/images/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/assets/images/coding-dojo.jpeg b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/assets/images/coding-dojo.jpeg new file mode 100644 index 0000000..70c6380 Binary files /dev/null and b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/assets/images/coding-dojo.jpeg differ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/assets/images/codingdojo.png b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/assets/images/codingdojo.png new file mode 100644 index 0000000..5c82e33 Binary files /dev/null and b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/assets/images/codingdojo.png differ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/assets/javascripts/application.js similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/app/assets/javascripts/application.js rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/assets/javascripts/application.js diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/assets/javascripts/user.coffee b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/assets/javascripts/user.coffee new file mode 100644 index 0000000..24f83d1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/assets/javascripts/user.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/assets/stylesheets/application.css b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/assets/stylesheets/application.css new file mode 100644 index 0000000..4090018 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/assets/stylesheets/application.css @@ -0,0 +1,83 @@ +* { text-decoration: none !important; } + +body { + font-family: 'Montserrat', sans-serif; + background-color: rgb(0, 0, 0) !important; + color: white; +} + +header { + display: flex; + line-height: 100%; + padding: 1rem 2rem; + justify-content: center; +} + +form div.submit { text-align: right !important; } +div.container { padding: 2rem 0rem; justify-content: center; } +div.input-group-addon { width: 100%; } + +header a { color: white; } +header a img { width: 100px; } +header a h2 { display: none; } +header a:hover { color: #06a9e2; cursor: pointer; } +header a span { color: #06a9e2; font-family: 'Poiret One', cursive; } + +div.col { margin: 2rem 10rem !important; } +div.row { + margin: 0; + justify-content: center; +} @media (max-width: 676px) { + div.row { + justify-content: center; +}} + +h1 { + font-family: 'Fredoka One', cursive; + padding-right: 1rem; + padding-bottom: 2rem; + text-align: center; + color: #06a9e2; +} + +label.control-label, +textarea.form-control { color: #06a9e2 !important; } + +input.form-control, +textarea.form-control { color: #0062cc !important; } + +button.btn { + color: inherit; + margin-top: 1rem; + padding: .5rem 1rem; + justify-content: flex-end; + background-color: transparent; + border: .5px solid #06a9e2 !important; +} +button.btn:hover { + cursor: pointer; + background-color: #06a9e2; + border: .5px solid #06a9e2 !important; +} + +@media (min-width: 767px) { + h1 { text-align: left; } + header a h2 { font-family: 'Open Sans', sans-serif; } + header { justify-content: space-between; } + div.row { margin: 0 2rem !important; } + div.container { + padding: 5rem 10rem !important; + justify-content: center !important; } + + .form-group-s { + width: 100%; + display: flex; + justify-content: space-between; + } +} +h5 { + padding: 2rem; + border-radius: 1rem; + border: 2px solid #06a9e2; + background: lightslategrey; +} \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/assets/stylesheets/user.scss b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/assets/stylesheets/user.scss new file mode 100644 index 0000000..c47a13e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/assets/stylesheets/user.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the User controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/controllers/application_controller.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/app/controllers/application_controller.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/controllers/application_controller.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/controllers/concerns/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/app/controllers/concerns/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/controllers/concerns/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/controllers/user_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/controllers/user_controller.rb new file mode 100644 index 0000000..3fd2637 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/controllers/user_controller.rb @@ -0,0 +1,24 @@ +class UserController < ApplicationController + def index + if session[:count].nil? + session[:count] = 0 + end + end + + def submit_survey + session[:survey_form] = survey_params + flash[:success] = "Thanks for submitting this form! You have submitted this form #{8} times now" + redirect_to "/user/success" + end + + def success + session[:count] = 1 + p session[:count] + render "success" + end + + private + def survey_params + params.require(:survey).permit(:name, :location, :language, :comment) + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/helpers/application_helper.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/app/helpers/application_helper.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/helpers/application_helper.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/helpers/user_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/helpers/user_helper.rb new file mode 100644 index 0000000..0147c3f --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/helpers/user_helper.rb @@ -0,0 +1,2 @@ +module UserHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/mailers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/app/mailers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/mailers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/models/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/app/models/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/models/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/models/concerns/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/app/models/concerns/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/models/concerns/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/models/user.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/models/user.rb new file mode 100644 index 0000000..4a57cf0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/models/user.rb @@ -0,0 +1,2 @@ +class User < ActiveRecord::Base +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/views/layouts/application.html.erb new file mode 100644 index 0000000..de35f6e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/views/layouts/application.html.erb @@ -0,0 +1,33 @@ + + + + + + + + Dojo Survey Form + + + + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + + +
+ +

OBIFENIX

+
+ + <%= yield %> + + + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/views/user/index.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/views/user/index.html.erb new file mode 100644 index 0000000..1f8b335 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/views/user/index.html.erb @@ -0,0 +1,45 @@ + + +
+
+
+

Dojo Survey

+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+ + +
+
+
+
+
\ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/views/user/success.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/views/user/success.html.erb new file mode 100644 index 0000000..d9fb66d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/app/views/user/success.html.erb @@ -0,0 +1,81 @@ + +
+
+
+
<%= flash["success"] %>
+
+
+
+ + +
+
+
+
+
+ + +

User Submmitted Info

+ + +
+ +
+
+
+

+ + <%= session["survey_form"]["name"] %> +

+
+
+
+
+ + +
+ +
+
+
+

+ + <%= session["survey_form"]["location"] %> +

+
+
+
+
+ + +
+ +
+
+
+

+ + <%= session["survey_form"]["language"] %> +

+
+
+
+
+ + +
+ + +
+
+
+

<%= session["survey_form"]["comment"] %>

+
+
+
+
+
+
+
+
+
diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/bin/bundle similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/bin/bundle rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/bin/bundle diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/bin/rails similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/bin/rails rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/bin/rails diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/bin/rake similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/bin/rake rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/bin/rake diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/bin/setup similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/bin/setup rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/bin/setup diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/bin/spring similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/bin/spring rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/bin/spring diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config.ru similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config.ru rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config.ru diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/application.rb similarity index 98% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/application.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/application.rb index 156a9d5..d948a28 100644 --- a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/application.rb +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/application.rb @@ -6,7 +6,7 @@ # you've limited to :test, :development, or :production. Bundler.require(*Rails.groups) -module DojoNinjas +module SurveyForm class Application < Rails::Application # Settings in config/environments/* take precedence over those specified here. # Application configuration should go into files in config/initializers diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/boot.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/boot.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/boot.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/database.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/database.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/database.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/environment.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/environment.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/environment.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/environments/development.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/environments/development.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/environments/development.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/environments/production.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/environments/production.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/environments/production.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/environments/test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/environments/test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/environments/test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/initializers/assets.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/initializers/assets.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/initializers/assets.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/initializers/backtrace_silencers.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/initializers/backtrace_silencers.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/initializers/backtrace_silencers.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/initializers/cookies_serializer.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/initializers/cookies_serializer.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/initializers/cookies_serializer.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/initializers/filter_parameter_logging.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/initializers/filter_parameter_logging.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/initializers/filter_parameter_logging.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/initializers/inflections.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/initializers/inflections.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/initializers/inflections.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/initializers/mime_types.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/initializers/mime_types.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/initializers/mime_types.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/initializers/rails_footnotes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/initializers/rails_footnotes.rb new file mode 100644 index 0000000..9a15363 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/initializers/rails_footnotes.rb @@ -0,0 +1,27 @@ +defined?(Footnotes) && Footnotes.setup do |f| + # Whether or not to enable footnotes + f.enabled = Rails.env.development? + # You can also use a lambda / proc to conditionally toggle footnotes + # Example : + # f.enabled = -> { User.current.admin? } + # Beware of thread-safety though, Footnotes.enabled is NOT thread safe + # and should not be modified anywhere else. + + # Only toggle some notes : + # f.notes = [:session, :cookies, :params, :filters, :routes, :env, :queries, :log] + + # Change the prefix : + # f.prefix = 'mvim://open?url=file://%s&line=%d&column=%d' + + # Disable style : + # f.no_style = true + + # Lock notes to top right : + # f.lock_top_right = true + + # Change font size : + # f.font_size = '11px' + + # Allow to open multiple notes : + # f.multiple_notes = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/initializers/session_store.rb new file mode 100644 index 0000000..dc7392b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/initializers/session_store.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.session_store :cookie_store, key: '_SurveyForm_session' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/initializers/wrap_parameters.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/initializers/wrap_parameters.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/initializers/wrap_parameters.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/locales/en.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/locales/en.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/locales/en.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/routes.rb new file mode 100644 index 0000000..0bd7043 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/routes.rb @@ -0,0 +1,60 @@ +Rails.application.routes.draw do + root 'user#index' + post 'user/submitsurvey' => 'user#submit_survey' + get 'user/success' => 'user#success' + + # The priority is based upon order of creation: first created -> highest priority. + # See how all your routes lay out with "rake routes". + + # You can have the root of your site routed with "root" + # root 'welcome#index' + + # Example of regular route: + # get 'products/:id' => 'catalog#view' + + # Example of named route that can be invoked with purchase_url(id: product.id) + # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase + + # Example resource route (maps HTTP verbs to controller actions automatically): + # resources :products + + # Example resource route with options: + # resources :products do + # member do + # get 'short' + # post 'toggle' + # end + # + # collection do + # get 'sold' + # end + # end + + # Example resource route with sub-resources: + # resources :products do + # resources :comments, :sales + # resource :seller + # end + + # Example resource route with more complex sub-resources: + # resources :products do + # resources :comments + # resources :sales do + # get 'recent', on: :collection + # end + # end + + # Example resource route with concerns: + # concern :toggleable do + # post 'toggle' + # end + # resources :posts, concerns: :toggleable + # resources :photos, concerns: :toggleable + + # Example resource route within a namespace: + # namespace :admin do + # # Directs /admin/products/* to Admin::ProductsController + # # (app/controllers/admin/products_controller.rb) + # resources :products + # end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/secrets.yml new file mode 100644 index 0000000..482fd9e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/config/secrets.yml @@ -0,0 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rake secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: 37b81590f07561df3c093eaff72b37c34078392d9569de7dc42c89224d672b065d47d359df99ea23a93025aa93d0d12d6001e20013c3b97642c76b43fad2f7f8 + +test: + secret_key_base: c3fa33a154ee4eda8aa471f6788882a26d9518760c23301a06c6bb1d851dd33a67c66400c4b9c404fa99d3df6ae211015b8c90994f47b889bea6e85d57bcf190 + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/db/migrate/20180808222057_create_users.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/db/migrate/20180808222057_create_users.rb new file mode 100644 index 0000000..4f77c80 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/db/migrate/20180808222057_create_users.rb @@ -0,0 +1,12 @@ +class CreateUsers < ActiveRecord::Migration + def change + create_table :users do |t| + t.string :name + t.string :location + t.string :language + t.text :comment + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/db/schema.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/db/schema.rb new file mode 100644 index 0000000..6e2bec8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/db/schema.rb @@ -0,0 +1,25 @@ +# encoding: UTF-8 +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 20180808222057) do + + create_table "users", force: :cascade do |t| + t.string "name" + t.string "location" + t.string "language" + t.text "comment" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/db/seeds.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/db/seeds.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/db/seeds.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/lib/assets/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/lib/assets/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/lib/assets/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/lib/tasks/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/lib/tasks/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/lib/tasks/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/log/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/log/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/log/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/public/404.html similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/public/404.html rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/public/404.html diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/public/422.html similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/public/422.html rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/public/422.html diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/public/500.html similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/public/500.html rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/public/500.html diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/public/favicon.ico similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/public/favicon.ico rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/public/favicon.ico diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/public/robots.txt similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/public/robots.txt rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/public/robots.txt diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/test/controllers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/test/controllers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/test/controllers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/test/controllers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/test/controllers/user_controller_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/test/controllers/user_controller_test.rb new file mode 100644 index 0000000..2779f95 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/test/controllers/user_controller_test.rb @@ -0,0 +1,14 @@ +require 'test_helper' + +class UserControllerTest < ActionController::TestCase + test "should get index" do + get :index + assert_response :success + end + + test "should get success" do + get :success + assert_response :success + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/test/fixtures/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/test/fixtures/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/test/fixtures/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/test/fixtures/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/test/fixtures/users.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/test/fixtures/users.yml new file mode 100644 index 0000000..0ed3e41 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/test/fixtures/users.yml @@ -0,0 +1,13 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + name: MyString + location: MyString + language: MyString + comment: MyText + +two: + name: MyString + location: MyString + language: MyString + comment: MyText diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/test/helpers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/test/helpers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/test/helpers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/test/helpers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/test/integration/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/test/integration/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/test/integration/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/test/integration/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/test/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/test/mailers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/test/mailers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/test/mailers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/test/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/test/models/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/test/models/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/test/models/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/test/models/user_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/test/models/user_test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/test/models/user_test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/test/models/user_test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/test/test_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/test/test_helper.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/test/test_helper.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/test/test_helper.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/vendor/assets/javascripts/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/vendor/assets/javascripts/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/vendor/assets/javascripts/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/vendor/assets/stylesheets/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/vendor/assets/stylesheets/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/SurveyForm/vendor/assets/stylesheets/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/.gitignore new file mode 100644 index 0000000..050c9d9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/.gitignore @@ -0,0 +1,17 @@ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore the default SQLite database. +/db/*.sqlite3 +/db/*.sqlite3-journal + +# Ignore all logfiles and tempfiles. +/log/* +!/log/.keep +/tmp diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/Gemfile new file mode 100644 index 0000000..68edf60 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/Gemfile @@ -0,0 +1,50 @@ +source 'https://rubygems.org' + + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '4.2.7' +# Use sqlite3 as the database for Active Record +gem 'sqlite3' +# Use SCSS for stylesheets +gem 'sass-rails', '~> 5.0' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# Use CoffeeScript for .coffee assets and views +gem 'coffee-rails', '~> 4.1.0' +# See https://github.com/rails/execjs#readme for more supported runtimes +# gem 'therubyracer', platforms: :ruby + +# Use jquery as the JavaScript library +gem 'jquery-rails' +# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks +gem 'turbolinks' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.0' +# bundle exec rake doc:rails generates the API under doc/api. +gem 'sdoc', '~> 0.4.0', group: :doc + +# Use ActiveModel has_secure_password +# gem 'bcrypt', '~> 3.1.7' + +# Use Unicorn as the app server +# gem 'unicorn' + +# Use Capistrano for deployment +# gem 'capistrano-rails', group: :development + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug' +end + +group :development do + # Access an IRB console on exception pages or by using <%= console %> in views + gem 'web-console', '~> 2.0' + + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' +end + +gem 'hirb' +gem 'rails-footnotes', '~> 4.0' + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/Gemfile.lock new file mode 100644 index 0000000..07d9d03 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/Gemfile.lock @@ -0,0 +1,175 @@ +GEM + remote: https://rubygems.org/ + specs: + actionmailer (4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.7) + actionview (= 4.2.7) + activesupport (= 4.2.7) + rack (~> 1.6) + rack-test (~> 0.6.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + activejob (4.2.7) + activesupport (= 4.2.7) + globalid (>= 0.3.0) + activemodel (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + activerecord (4.2.7) + activemodel (= 4.2.7) + activesupport (= 4.2.7) + arel (~> 6.0) + activesupport (4.2.7) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + arel (6.0.4) + binding_of_caller (0.8.0) + debug_inspector (>= 0.0.1) + builder (3.2.3) + byebug (10.0.2) + coffee-rails (4.1.1) + coffee-script (>= 2.2.0) + railties (>= 4.0.0, < 5.1.x) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + concurrent-ruby (1.0.5) + crass (1.0.4) + debug_inspector (0.0.3) + erubis (2.7.0) + execjs (2.7.0) + ffi (1.9.25) + globalid (0.4.1) + activesupport (>= 4.2.0) + hirb (0.7.3) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jbuilder (2.7.0) + activesupport (>= 4.2.0) + multi_json (>= 1.2) + jquery-rails (4.3.3) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + json (1.8.6) + loofah (2.2.2) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.0) + mini_mime (>= 0.1.1) + mini_mime (1.0.0) + mini_portile2 (2.3.0) + minitest (5.11.3) + multi_json (1.13.1) + nokogiri (1.8.4) + mini_portile2 (~> 2.3.0) + rack (1.6.10) + rack-test (0.6.3) + rack (>= 1.0) + rails (4.2.7) + actionmailer (= 4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + activemodel (= 4.2.7) + activerecord (= 4.2.7) + activesupport (= 4.2.7) + bundler (>= 1.3.0, < 2.0) + railties (= 4.2.7) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.9) + activesupport (>= 4.2.0, < 5.0) + nokogiri (~> 1.6) + rails-deprecated_sanitizer (>= 1.0.1) + rails-footnotes (4.1.8) + rails (>= 3.2) + rails-html-sanitizer (1.0.4) + loofah (~> 2.2, >= 2.2.2) + railties (4.2.7) + actionpack (= 4.2.7) + activesupport (= 4.2.7) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (12.3.1) + rb-fsevent (0.10.3) + rb-inotify (0.9.10) + ffi (>= 0.5.0, < 2) + rdoc (4.3.0) + sass (3.5.7) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sass-rails (5.0.7) + railties (>= 4.0.0, < 6) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + sdoc (0.4.2) + json (~> 1.7, >= 1.7.7) + rdoc (~> 4.0) + spring (2.0.2) + activesupport (>= 4.2) + sprockets (3.7.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.2.1) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + sqlite3 (1.3.13) + thor (0.20.0) + thread_safe (0.3.6) + tilt (2.0.8) + turbolinks (5.1.1) + turbolinks-source (~> 5.1) + turbolinks-source (5.1.0) + tzinfo (1.2.5) + thread_safe (~> 0.1) + uglifier (4.1.17) + execjs (>= 0.3.0, < 3) + web-console (2.3.0) + activemodel (>= 4.0) + binding_of_caller (>= 0.7.2) + railties (>= 4.0) + sprockets-rails (>= 2.0, < 4.0) + +PLATFORMS + ruby + +DEPENDENCIES + byebug + coffee-rails (~> 4.1.0) + hirb + jbuilder (~> 2.0) + jquery-rails + rails (= 4.2.7) + rails-footnotes (~> 4.0) + sass-rails (~> 5.0) + sdoc (~> 0.4.0) + spring + sqlite3 + turbolinks + uglifier (>= 1.3.0) + web-console (~> 2.0) + +BUNDLED WITH + 1.16.3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/README.rdoc b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/README.rdoc new file mode 100644 index 0000000..dd4e97e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/README.rdoc @@ -0,0 +1,28 @@ +== README + +This README would normally document whatever steps are necessary to get the +application up and running. + +Things you may want to cover: + +* Ruby version + +* System dependencies + +* Configuration + +* Database creation + +* Database initialization + +* How to run the test suite + +* Services (job queues, cache servers, search engines, etc.) + +* Deployment instructions + +* ... + + +Please feel free to use a different markup language if you do not plan to run +rake doc:app. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/Rakefile similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/Rakefile rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/Rakefile diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/assets/images/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/app/assets/images/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/assets/images/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/assets/images/coding-dojo.jpeg b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/assets/images/coding-dojo.jpeg new file mode 100644 index 0000000..70c6380 Binary files /dev/null and b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/assets/images/coding-dojo.jpeg differ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/assets/images/codingdojo.png b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/assets/images/codingdojo.png new file mode 100644 index 0000000..5c82e33 Binary files /dev/null and b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/assets/images/codingdojo.png differ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/assets/images/wooden.jpg b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/assets/images/wooden.jpg new file mode 100644 index 0000000..06da295 Binary files /dev/null and b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/assets/images/wooden.jpg differ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/assets/javascripts/application.js similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/assets/javascripts/application.js rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/assets/javascripts/application.js diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/assets/javascripts/time.coffee b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/assets/javascripts/time.coffee new file mode 100644 index 0000000..24f83d1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/assets/javascripts/time.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/app/assets/stylesheets/application.css b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/assets/stylesheets/application.css similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/app/assets/stylesheets/application.css rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/assets/stylesheets/application.css diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/assets/stylesheets/time.scss b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/assets/stylesheets/time.scss new file mode 100644 index 0000000..cee0d09 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/assets/stylesheets/time.scss @@ -0,0 +1,53 @@ +// Navbar section +nav { + background-color:#000; + padding: 0 4rem; + a:hover { color: tan; } +} + +body, html { + width: 100%; + height: 100%; + // position: relative; + background-position: center; + background-repeat: no-repeat; + background-size: cover; + // background-image: url('images/wooden.jpg') + background-image: url('https://assets.codingdojo.com/new_images/home/main.jpg') +} + +// Container section +.container { height: 43%; width: 50%; background-color: #171414e3; color: #f5f5f5; padding: 1rem 2rem; } + +// Form Components [ Add and Edit ] Section +form { padding: 0 15rem; } +ul .form-row { padding-left: 4rem !important; } +.form-row { line-height: 0rem; } + +.flxend { display: flex; justify-content: end; } // div container requiring flex +.flexed { display: flex; justify-content: space-between; } // div container requiring flex +.grided { display: grid; grid-template-columns: 1fr 1fr; grid-gap: 2rem; } // div container requiring grid +.inline { display: inline-block; margin: 1rem auto; } // div container requiring grid +.grided input { min-width: 100%; margin-top: 2rem; } +.btn { background-color: teal } +.btn:hover { background-color: #f5f5f5 !important; color: teal; } +.text-warning { color: #fba153fa; } +.sn:hover { background-color: #222 !important; } + +.brand-logo { + font-family: 'Days One', sans-serif; +} + +.heading { + padding: 1rem 4rem; + margin: 0 auto; + border-radius: .3rem; +} +.timer, h5 { + border: 2px solid cornflowerblue; + text-align: center; + border-radius: .3rem; + line-height: 4rem; +} +.time { color: #c1c7dd; } +.date { color: #f5f5f5; } \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/controllers/application_controller.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/app/controllers/application_controller.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/controllers/application_controller.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/controllers/concerns/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/app/controllers/concerns/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/controllers/concerns/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/controllers/time_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/controllers/time_controller.rb new file mode 100644 index 0000000..a747135 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/controllers/time_controller.rb @@ -0,0 +1,7 @@ +class TimeController < ApplicationController + def timer + @date = Time.current.strftime("%b %d, %Y") + @time = Time.current.strftime("%I:%M %p") + render "timer" + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/helpers/application_helper.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/app/helpers/application_helper.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/helpers/application_helper.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/helpers/time_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/helpers/time_helper.rb new file mode 100644 index 0000000..90020f0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/helpers/time_helper.rb @@ -0,0 +1,2 @@ +module TimeHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/mailers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/app/mailers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/mailers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/models/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/app/models/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/models/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/models/concerns/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/app/models/concerns/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/models/concerns/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/views/layouts/application.html.erb new file mode 100644 index 0000000..31daac9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/views/layouts/application.html.erb @@ -0,0 +1,22 @@ + + + + + + TimeDisplay + + + + + + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + + + +<%= yield %> + + + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/views/time/timer.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/views/time/timer.html.erb new file mode 100644 index 0000000..e428464 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/app/views/time/timer.html.erb @@ -0,0 +1,12 @@ + +
+
+
+
The Current Time and Date:
+
+
+
+

<%= @date %>

+

<%= @time %>

+
+
\ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/bin/bundle similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/bin/bundle rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/bin/bundle diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/bin/rails similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/bin/rails rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/bin/rails diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/bin/rake similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/bin/rake rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/bin/rake diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/bin/setup similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/bin/setup rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/bin/setup diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/bin/spring similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/bin/spring rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/bin/spring diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config.ru similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/config.ru rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config.ru diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/application.rb new file mode 100644 index 0000000..21305cf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/application.rb @@ -0,0 +1,26 @@ +require File.expand_path('../boot', __FILE__) + +require 'rails/all' + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module TimeDisplay + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Do not swallow errors in after_commit/after_rollback callbacks. + config.active_record.raise_in_transactional_callbacks = true + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/boot.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/boot.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/boot.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/database.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/database.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/database.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/environment.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/environment.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/environment.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/environments/development.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/environments/development.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/environments/development.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/environments/production.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/environments/production.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/environments/production.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/environments/test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/environments/test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/environments/test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/initializers/assets.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/initializers/assets.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/initializers/assets.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/initializers/backtrace_silencers.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/initializers/backtrace_silencers.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/initializers/backtrace_silencers.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/initializers/cookies_serializer.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/initializers/cookies_serializer.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/initializers/cookies_serializer.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/initializers/filter_parameter_logging.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/initializers/filter_parameter_logging.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/initializers/filter_parameter_logging.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/initializers/inflections.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/initializers/inflections.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/initializers/inflections.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/initializers/mime_types.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/initializers/mime_types.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/initializers/mime_types.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/initializers/rails_footnotes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/initializers/rails_footnotes.rb new file mode 100644 index 0000000..9a15363 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/initializers/rails_footnotes.rb @@ -0,0 +1,27 @@ +defined?(Footnotes) && Footnotes.setup do |f| + # Whether or not to enable footnotes + f.enabled = Rails.env.development? + # You can also use a lambda / proc to conditionally toggle footnotes + # Example : + # f.enabled = -> { User.current.admin? } + # Beware of thread-safety though, Footnotes.enabled is NOT thread safe + # and should not be modified anywhere else. + + # Only toggle some notes : + # f.notes = [:session, :cookies, :params, :filters, :routes, :env, :queries, :log] + + # Change the prefix : + # f.prefix = 'mvim://open?url=file://%s&line=%d&column=%d' + + # Disable style : + # f.no_style = true + + # Lock notes to top right : + # f.lock_top_right = true + + # Change font size : + # f.font_size = '11px' + + # Allow to open multiple notes : + # f.multiple_notes = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/initializers/session_store.rb new file mode 100644 index 0000000..f54c329 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/initializers/session_store.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.session_store :cookie_store, key: '_TimeDisplay_session' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/initializers/wrap_parameters.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/initializers/wrap_parameters.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/initializers/wrap_parameters.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/locales/en.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/locales/en.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/locales/en.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/routes.rb new file mode 100644 index 0000000..ad71d2b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/routes.rb @@ -0,0 +1,58 @@ +Rails.application.routes.draw do + root 'time#timer' + + # The priority is based upon order of creation: first created -> highest priority. + # See how all your routes lay out with "rake routes". + + # You can have the root of your site routed with "root" + # root 'welcome#index' + + # Example of regular route: + # get 'products/:id' => 'catalog#view' + + # Example of named route that can be invoked with purchase_url(id: product.id) + # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase + + # Example resource route (maps HTTP verbs to controller actions automatically): + # resources :products + + # Example resource route with options: + # resources :products do + # member do + # get 'short' + # post 'toggle' + # end + # + # collection do + # get 'sold' + # end + # end + + # Example resource route with sub-resources: + # resources :products do + # resources :comments, :sales + # resource :seller + # end + + # Example resource route with more complex sub-resources: + # resources :products do + # resources :comments + # resources :sales do + # get 'recent', on: :collection + # end + # end + + # Example resource route with concerns: + # concern :toggleable do + # post 'toggle' + # end + # resources :posts, concerns: :toggleable + # resources :photos, concerns: :toggleable + + # Example resource route within a namespace: + # namespace :admin do + # # Directs /admin/products/* to Admin::ProductsController + # # (app/controllers/admin/products_controller.rb) + # resources :products + # end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/secrets.yml new file mode 100644 index 0000000..baa2322 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/config/secrets.yml @@ -0,0 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rake secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: a96a31d85d4b87d0c9432dc22da3f331c041d1ab062e365124849f604b1ce3babb225c36c2ddcb1aad89d2988ed780ba8ca3a2c70b78dfb40d6a0826a98e94e4 + +test: + secret_key_base: 9459b83d198fcf8a7bb1636bc7d06d91e23fd8885dc274e674eb38d8a8fdb7ad30b27633eaf17d33f3f0cf4a95fd09d5422cbc5eb2e71520aec4dde91c1c51a1 + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/db/seeds.rb new file mode 100644 index 0000000..4edb1e8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). +# +# Examples: +# +# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) +# Mayor.create(name: 'Emanuel', city: cities.first) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/lib/assets/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/lib/assets/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/lib/assets/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/lib/tasks/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/lib/tasks/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/lib/tasks/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/log/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/log/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/log/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/public/404.html similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/public/404.html rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/public/404.html diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/public/422.html similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/public/422.html rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/public/422.html diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/public/500.html similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/public/500.html rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/public/500.html diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/public/favicon.ico similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/public/favicon.ico rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/public/favicon.ico diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/public/robots.txt similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/public/robots.txt rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/public/robots.txt diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/test/controllers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/test/controllers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/test/controllers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/test/controllers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/test/controllers/time_controller_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/test/controllers/time_controller_test.rb new file mode 100644 index 0000000..029b32a --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/test/controllers/time_controller_test.rb @@ -0,0 +1,9 @@ +require 'test_helper' + +class TimeControllerTest < ActionController::TestCase + test "should get timer" do + get :timer + assert_response :success + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/test/fixtures/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/test/fixtures/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/test/fixtures/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/test/fixtures/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/test/helpers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/test/helpers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/test/helpers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/test/helpers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/test/integration/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/test/integration/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/test/integration/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/test/integration/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/test/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/test/mailers/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/test/mailers/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/test/mailers/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/test/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/test/models/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/test/models/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/test/models/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/test/test_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/test/test_helper.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/test/test_helper.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/test/test_helper.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/vendor/assets/javascripts/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/vendor/assets/javascripts/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/vendor/assets/javascripts/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/vendor/assets/stylesheets/.keep similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/vendor/assets/stylesheets/.keep rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Controllers/TimeDisplay/vendor/assets/stylesheets/.keep diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/.gitignore new file mode 100644 index 0000000..5b61ab0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/.gitignore @@ -0,0 +1,13 @@ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore all logfiles and tempfiles. +/log/* +!/log/.keep +/tmp diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/Gemfile new file mode 100644 index 0000000..e1c497b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/Gemfile @@ -0,0 +1,48 @@ +source 'https://rubygems.org' + + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '4.2.7' +# Use postgresql as the database for Active Record +gem 'pg', '~> 0.15' +# Use SCSS for stylesheets +gem 'sass-rails', '~> 5.0' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# Use CoffeeScript for .coffee assets and views +gem 'coffee-rails', '~> 4.1.0' +# See https://github.com/rails/execjs#readme for more supported runtimes +# gem 'therubyracer', platforms: :ruby + +# Use jquery as the JavaScript library +gem 'jquery-rails' +# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks +gem 'turbolinks' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.0' +# bundle exec rake doc:rails generates the API under doc/api. +gem 'sdoc', '~> 0.4.0', group: :doc + +# Use ActiveModel has_secure_password +gem 'bcrypt', '~> 3.1.7' + +# Use Unicorn as the app server +# gem 'unicorn' + +# Use Capistrano for deployment +# gem 'capistrano-rails', group: :development + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug' +end + +group :development do + # Access an IRB console on exception pages or by using <%= console %> in views + gem 'web-console', '~> 2.0' + + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' +end + +gem 'hirb' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/Gemfile.lock new file mode 100644 index 0000000..a2d3f2b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/Gemfile.lock @@ -0,0 +1,174 @@ +GEM + remote: https://rubygems.org/ + specs: + actionmailer (4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.7) + actionview (= 4.2.7) + activesupport (= 4.2.7) + rack (~> 1.6) + rack-test (~> 0.6.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + activejob (4.2.7) + activesupport (= 4.2.7) + globalid (>= 0.3.0) + activemodel (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + activerecord (4.2.7) + activemodel (= 4.2.7) + activesupport (= 4.2.7) + arel (~> 6.0) + activesupport (4.2.7) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + arel (6.0.4) + bcrypt (3.1.12) + binding_of_caller (0.8.0) + debug_inspector (>= 0.0.1) + builder (3.2.3) + byebug (10.0.2) + coffee-rails (4.1.1) + coffee-script (>= 2.2.0) + railties (>= 4.0.0, < 5.1.x) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + concurrent-ruby (1.0.5) + crass (1.0.4) + debug_inspector (0.0.3) + erubis (2.7.0) + execjs (2.7.0) + ffi (1.9.25) + globalid (0.4.1) + activesupport (>= 4.2.0) + hirb (0.7.3) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jbuilder (2.7.0) + activesupport (>= 4.2.0) + multi_json (>= 1.2) + jquery-rails (4.3.3) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + json (1.8.6) + loofah (2.2.2) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.0) + mini_mime (>= 0.1.1) + mini_mime (1.0.1) + mini_portile2 (2.3.0) + minitest (5.11.3) + multi_json (1.13.1) + nokogiri (1.8.4) + mini_portile2 (~> 2.3.0) + pg (0.21.0) + rack (1.6.10) + rack-test (0.6.3) + rack (>= 1.0) + rails (4.2.7) + actionmailer (= 4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + activemodel (= 4.2.7) + activerecord (= 4.2.7) + activesupport (= 4.2.7) + bundler (>= 1.3.0, < 2.0) + railties (= 4.2.7) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.9) + activesupport (>= 4.2.0, < 5.0) + nokogiri (~> 1.6) + rails-deprecated_sanitizer (>= 1.0.1) + rails-html-sanitizer (1.0.4) + loofah (~> 2.2, >= 2.2.2) + railties (4.2.7) + actionpack (= 4.2.7) + activesupport (= 4.2.7) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (12.3.1) + rb-fsevent (0.10.3) + rb-inotify (0.9.10) + ffi (>= 0.5.0, < 2) + rdoc (4.3.0) + sass (3.5.7) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sass-rails (5.0.7) + railties (>= 4.0.0, < 6) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + sdoc (0.4.2) + json (~> 1.7, >= 1.7.7) + rdoc (~> 4.0) + spring (2.0.2) + activesupport (>= 4.2) + sprockets (3.7.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.2.1) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + thor (0.20.0) + thread_safe (0.3.6) + tilt (2.0.8) + turbolinks (5.1.1) + turbolinks-source (~> 5.1) + turbolinks-source (5.1.0) + tzinfo (1.2.5) + thread_safe (~> 0.1) + uglifier (4.1.18) + execjs (>= 0.3.0, < 3) + web-console (2.3.0) + activemodel (>= 4.0) + binding_of_caller (>= 0.7.2) + railties (>= 4.0) + sprockets-rails (>= 2.0, < 4.0) + +PLATFORMS + ruby + +DEPENDENCIES + bcrypt (~> 3.1.7) + byebug + coffee-rails (~> 4.1.0) + hirb + jbuilder (~> 2.0) + jquery-rails + pg (~> 0.15) + rails (= 4.2.7) + sass-rails (~> 5.0) + sdoc (~> 0.4.0) + spring + turbolinks + uglifier (>= 1.3.0) + web-console (~> 2.0) + +BUNDLED WITH + 1.16.3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/README.rdoc b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/README.rdoc new file mode 100644 index 0000000..dd4e97e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/README.rdoc @@ -0,0 +1,28 @@ +== README + +This README would normally document whatever steps are necessary to get the +application up and running. + +Things you may want to cover: + +* Ruby version + +* System dependencies + +* Configuration + +* Database creation + +* Database initialization + +* How to run the test suite + +* Services (job queues, cache servers, search engines, etc.) + +* Deployment instructions + +* ... + + +Please feel free to use a different markup language if you do not plan to run +rake doc:app. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/Rakefile new file mode 100644 index 0000000..ba6b733 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Rails.application.load_tasks diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/images/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/images/codingdojo.png b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/images/codingdojo.png new file mode 100644 index 0000000..5c82e33 Binary files /dev/null and b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/images/codingdojo.png differ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/javascripts/application.js similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/app/assets/javascripts/application.js rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/javascripts/application.js diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/javascripts/comments.coffee b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/javascripts/comments.coffee new file mode 100644 index 0000000..24f83d1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/javascripts/comments.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/javascripts/events.coffee b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/javascripts/events.coffee new file mode 100644 index 0000000..24f83d1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/javascripts/events.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/javascripts/main.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/javascripts/main.js new file mode 100644 index 0000000..e4a70c5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/javascripts/main.js @@ -0,0 +1,14 @@ +document.addEventListener('DOMContentLoaded', function() { + var elems = document.querySelectorAll('select'); + var instances = M.FormSelect.init(elems, options); + }); + + // Or with jQuery + + $(document).ready(function(){ + // alert("Well passed....!") + $('select').formSelect(); + }); + $(document).ready(function(){ + $('.datepicker').datepicker(); + }); diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/javascripts/sessions.coffee b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/javascripts/sessions.coffee new file mode 100644 index 0000000..24f83d1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/javascripts/sessions.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/javascripts/users.coffee b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/javascripts/users.coffee new file mode 100644 index 0000000..24f83d1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/javascripts/users.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/assets/stylesheets/application.css b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/stylesheets/application.css similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/assets/stylesheets/application.css rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/stylesheets/application.css diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/stylesheets/bootstrap.min.css b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/stylesheets/bootstrap.min.css new file mode 100644 index 0000000..8826912 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/stylesheets/bootstrap.min.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap v4.1.3 (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014 \00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(2.25rem + 2px);padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::after,.was-validated .custom-file-input:valid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::after,.was-validated .custom-file-input:invalid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media screen and (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media screen and (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-right{right:0;left:auto}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-label::after{border-color:#80bdff}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:2.25rem;padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;padding-left:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion .card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media screen and (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:not(:disabled):not(.disabled){cursor:pointer}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{color:#000;text-decoration:none;opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}@media screen and (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-dialog-centered::before{display:block;height:calc(100vh - (.5rem * 2));content:""}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-dialog-centered::before{height:calc(100vh - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-ms-flex-align:center;align-items:center;width:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease}@media screen and (prefers-reduced-motion:reduce){.carousel-item-next,.carousel-item-prev,.carousel-item.active{transition:none}}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-fade .carousel-item{opacity:0;transition-duration:.6s;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/stylesheets/comments.scss b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/stylesheets/comments.scss new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/stylesheets/events.scss b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/stylesheets/events.scss new file mode 100644 index 0000000..92f8fe0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/stylesheets/events.scss @@ -0,0 +1,199 @@ +// Navbar section +nav { + background-color:#000; + padding: 0 4rem; + a:hover { color: tan; } +} + +body { + width: 100%; + height: 100%; + // position: static; + background-position: center; + background-repeat: no-repeat; + background-size: cover; + background-image: url('https://cdn-images-1.medium.com/max/1600/0*zfW13Mn8_fvEKcU7.jpg') +} + +nav a { color: white; } +nav a img { + width: 100px; + height: 40px; + margin: 0.5rem 0; + border-style: none; +} + +nav a:hover { color: #06a9e2; cursor: pointer; } + +h1, h2, .student_header { + font-family: 'Fredoka One', cursive; + text-align: center; + color: #06a9e2; + margin: 4rem 0 2rem; + position: relative; +} +h1 span { color: #06a9e2; font-family: 'Poiret One', cursive; } + +#notice { + padding: 0.5rem 2rem; + border-radius: 1rem; + border: 2px solid #06a9e2; + background: lightslategrey; +} + +// Form Components [ Add and Edit ] Section +form { padding: 0 15rem; } +ul .form-row { padding-left: 4rem !important; } +.form-row { line-height: 0rem; } + + +// Table Section +.theader { color: #06a9e2; font-family: 'Poiret One', cursive; } +.trbody { font-family: 'Poiret One', cursive; } +.trbody > td { padding: 0; } +.trbody > td:last-child > a { margin: 0.1rem auto; width: 5rem; } +.trbody > td:last-child > form { + input { margin: 0; } + width: 5rem; + margin: 0rem auto; + display: inline-table !important; +} +.trbody:hover { color: #06a9e2; background-color: #0000006b !important; } +.scrolling-wrapper { + -webkit-overflow-scrolling: touch; + padding-bottom: 12rem; + overflow-y: scroll; + position:relative; + opacity: 0.8; + height: 50px !important; + width: 100%; + // z-index: -1; + } + ::-webkit-scrollbar { width: 12px; } + ::-webkit-scrollbar-track { display: none; } + + +// Container section +.container { min-height: 70% !important; width: 80% !important; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +.container-min { height: 550px; min-height: 70%; width: 50%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +.container-max { height: 600px; min-height: 70%; width: 50%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +// .container h1 { margin-top: 2rem; } + +.flxend { display: flex; justify-content: end; } // div container requiring flex +.flexed { display: flex; justify-content: space-between; } // div container requiring flex +.grided { display: grid; grid-template-columns: 1fr 1fr; grid-gap: 2rem; } // div container requiring grid +.inline { display: inline-block; margin: 1rem auto; } // div container requiring grid +.grided input { min-width: 100%; margin-top: 2rem; } +.text-warning { color: #fba153fa; } + +// Custom Margin +// =========================== [ 1rem ] +.right-margin1 { margin-right : 1rem !important; } +.left-margin1 { margin-left : 1rem !important; } +.top-margin1 { margin-top : 1rem !important; } +.bottom-margin1 { margin-bottom: 1rem !important; } +// =========================== [ 2rem ] +.right-margin2 { margin-right : 2rem !important; } +.left-margin2 { margin-left : 2rem !important; } +.top-margin2 { margin-top : 2rem !important; } +.bottom-margin2 { margin-bottom: 2rem !important; } +// =========================== [ 4rem ] +.right-margin4 { margin-right : 4rem !important; } +.left-margin4 { margin-left : 4rem !important; } +.top-margin4 { margin-top : 4rem !important; } +.bottom-margin4 { margin-bottom: 4rem !important; } +// =========================== [ 6rem ] +.right-margin6 { margin-right : 6rem !important; } +.left-margin6 { margin-left : 6rem !important; } +.top-margin6 { margin-top : 6rem !important; } +.bottom-margin6 { margin-bottom: 6rem !important; } + +.separator-bar{ margin: 0 1rem; } +.sn { + color: white; + // margin-top: 2rem; + border-radius: .2rem; + background-color: #111; + border: 1px solid #f5f5f5; + // background-color: #357ae8; + transition: all .3s ease-in-out; + box-shadow: 1px 2px 2px 0px #444 !important; +} +.sn:hover { + color: #06a9e2; + transition: all .3s ease-in-out; + background-color: #000 !important; + box-shadow: 0px 0px 0px 0px #222 !important; +} +.show { + border-radius: 1rem; + font-size: 10px; + color: #06a9e2; + &:hover { + color: white !important; + background-color: #357ae8 !important; + } +} +.edit { + border-radius: 1rem; + font-size: 10px; + color: lime; + &:hover { + color: white !important; + background-color: green !important; + } +} +.delete { + border-radius: 1rem; + font-size: 10px; + color: #f44336; + &:hover { + color: white !important; + background-color: red !important; + } +} +.brand-logo { + font-family: 'Days One', sans-serif; +} + +input.valid:not([type]), input.valid:not([type]):focus, input.valid[type=text]:not(.browser-default), input.valid[type=text]:not(.browser-default):focus, input.valid[type=password]:not(.browser-default), input.valid[type=password]:not(.browser-default):focus, input.valid[type=email]:not(.browser-default), input.valid[type=email]:not(.browser-default):focus, input.valid[type=url]:not(.browser-default), input.valid[type=url]:not(.browser-default):focus, input.valid[type=time]:not(.browser-default), input.valid[type=time]:not(.browser-default):focus, input.valid[type=date]:not(.browser-default), input.valid[type=date]:not(.browser-default):focus, input.valid[type=datetime]:not(.browser-default), input.valid[type=datetime]:not(.browser-default):focus, input.valid[type=datetime-local]:not(.browser-default), input.valid[type=datetime-local]:not(.browser-default):focus, input.valid[type=tel]:not(.browser-default), input.valid[type=tel]:not(.browser-default):focus, input.valid[type=number]:not(.browser-default), input.valid[type=number]:not(.browser-default):focus, input.valid[type=search]:not(.browser-default), input.valid[type=search]:not(.browser-default):focus, textarea.materialize-textarea.valid, textarea.materialize-textarea.valid:focus, .select-wrapper.valid>input.select-dropdown { + border-bottom: 1px solid #06a9e2 !important; + -webkit-box-shadow: 0 1px 0 0 #06a9e2 !important; + box-shadow: 0 1px 0 0 #06a9e2 !important; +} +input:not([type]):focus:not([readonly]), input[type=text]:not(.browser-default):focus:not([readonly]), input[type=password]:not(.browser-default):focus:not([readonly]), input[type=email]:not(.browser-default):focus:not([readonly]), input[type=url]:not(.browser-default):focus:not([readonly]), input[type=time]:not(.browser-default):focus:not([readonly]), input[type=date]:not(.browser-default):focus:not([readonly]), input[type=datetime]:not(.browser-default):focus:not([readonly]), input[type=datetime-local]:not(.browser-default):focus:not([readonly]), input[type=tel]:not(.browser-default):focus:not([readonly]), input[type=number]:not(.browser-default):focus:not([readonly]), input[type=search]:not(.browser-default):focus:not([readonly]), textarea.materialize-textarea:focus:not([readonly]) { + border-bottom: 1px solid #06a9e2; + -webkit-box-shadow: 0 1px 0 0 #06a9e2; + box-shadow: 0 1px 0 0 #06a9e2; +} +.dropdown-content li>a, .dropdown-content li>span { + font-size: 16px; + background-color: #020000; + color: #9e9e9edb; + display: block; + line-height: 22px; + padding: 14px 16px; +} +.dropdown-content li>a:hover, .dropdown-content li>span:hover { + background-color: #06a9e2; + color: white; +} + + +.select-wrapper input.select-dropdown { + color: #06a9e2; +} +input:not([type]):focus:not([readonly])+label,.form-wrap input[type=text]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=password]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=email]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=url]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=time]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=date]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=datetime]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=datetime-local]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=tel]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=number]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=search]:not(.browser-default):focus:not([readonly])+label,.form-wrap textarea.materialize-textarea:focus:not([readonly])+label { + color: #06a9e2; +} +input:not([type]):focus:not([readonly])+label, input[type=text]:not(.browser-default):focus:not([readonly])+label, input[type=password]:not(.browser-default):focus:not([readonly])+label, input[type=email]:not(.browser-default):focus:not([readonly])+label, input[type=url]:not(.browser-default):focus:not([readonly])+label, input[type=time]:not(.browser-default):focus:not([readonly])+label, input[type=date]:not(.browser-default):focus:not([readonly])+label, input[type=datetime]:not(.browser-default):focus:not([readonly])+label, input[type=datetime-local]:not(.browser-default):focus:not([readonly])+label, input[type=tel]:not(.browser-default):focus:not([readonly])+label, input[type=number]:not(.browser-default):focus:not([readonly])+label, input[type=search]:not(.browser-default):focus:not([readonly])+label, textarea.materialize-textarea:focus:not([readonly])+label { + color: #06a9e2; +} +.select-wrapper input.select-dropdown { color: #06a9e2 !important; } +.select-wrapper input.select-dropdown:focus { + border-bottom: 2px solid #06a9e2 !important; +} +// label:active { +// font-size: .8rem; +// color: #06a9e2 !important; +// } diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/stylesheets/sessions.scss b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/stylesheets/sessions.scss new file mode 100644 index 0000000..ee4f4c7 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/stylesheets/sessions.scss @@ -0,0 +1,199 @@ +// Navbar section +nav { + background-color:#000; + padding: 0 4rem; + a:hover { color: tan; } +} + +body { + width: 100%; + height: 100vh; + // position: static; + background-position: center; + background-repeat: no-repeat; + background-size: cover; + background-image: url('https://cdn-images-1.medium.com/max/1600/0*zfW13Mn8_fvEKcU7.jpg') +} + +nav a { color: white; } +nav a img { + width: 100px; + height: 40px; + margin: 0.5rem 0; + border-style: none; +} + +nav a:hover { color: #06a9e2; cursor: pointer; } + +h1, h2, .student_header { + font-family: 'Fredoka One', cursive; + text-align: center; + color: #06a9e2; + margin: 4rem 0 2rem; + position: relative; +} +h1 span { color: #06a9e2; font-family: 'Poiret One', cursive; } + +#notice { + padding: 0.5rem 2rem; + border-radius: 1rem; + border: 2px solid #06a9e2; + background: lightslategrey; +} + +// Form Components [ Add and Edit ] Section +form { padding: 0 15rem; } +ul .form-row { padding-left: 4rem !important; } +.form-row { line-height: 0rem; } + + +// Table Section +.theader { color: #06a9e2; font-family: 'Poiret One', cursive; } +.trbody { font-family: 'Poiret One', cursive; } +.trbody > td { padding: 0; } +.trbody > td:last-child > a { margin: 0.1rem auto; width: 5rem; } +.trbody > td:last-child > form { + input { margin: 0; } + width: 5rem; + margin: 0rem auto; + display: inline-table !important; +} +.trbody:hover { color: #06a9e2; background-color: #0000006b !important; } +.scrolling-wrapper { + -webkit-overflow-scrolling: touch; + padding-bottom: 12rem; + overflow-y: scroll; + position:relative; + opacity: 0.8; + height: 50px !important; + width: 100%; + // z-index: -1; + } + ::-webkit-scrollbar { width: 12px; } + ::-webkit-scrollbar-track { display: none; } + + +// Container section +.container { min-height: 70% !important; width: 58%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +.container-min { height: 550px; min-height: 70%; width: 50%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +.container-max { height: 600px; min-height: 70%; width: 50%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +// .container h1 { margin-top: 2rem; } + +.flxend { display: flex; justify-content: end; } // div container requiring flex +.flexed { display: flex; justify-content: space-between; } // div container requiring flex +.grided { display: grid; grid-template-columns: 1fr 1fr; grid-gap: 2rem; } // div container requiring grid +.inline { display: inline-block; margin: 1rem auto; } // div container requiring grid +.grided input { min-width: 100%; margin-top: 2rem; } +.text-warning { color: #fba153fa; } + +// Custom Margin +// =========================== [ 1rem ] +.right-margin1 { margin-right : 1rem !important; } +.left-margin1 { margin-left : 1rem !important; } +.top-margin1 { margin-top : 1rem !important; } +.bottom-margin1 { margin-bottom: 1rem !important; } +// =========================== [ 2rem ] +.right-margin2 { margin-right : 2rem !important; } +.left-margin2 { margin-left : 2rem !important; } +.top-margin2 { margin-top : 2rem !important; } +.bottom-margin2 { margin-bottom: 2rem !important; } +// =========================== [ 4rem ] +.right-margin4 { margin-right : 4rem !important; } +.left-margin4 { margin-left : 4rem !important; } +.top-margin4 { margin-top : 4rem !important; } +.bottom-margin4 { margin-bottom: 4rem !important; } +// =========================== [ 6rem ] +.right-margin6 { margin-right : 6rem !important; } +.left-margin6 { margin-left : 6rem !important; } +.top-margin6 { margin-top : 6rem !important; } +.bottom-margin6 { margin-bottom: 6rem !important; } + +.separator-bar{ margin: 0 1rem; } +.sn { + color: white; + // margin-top: 2rem; + border-radius: .2rem; + background-color: #111; + border: 1px solid #f5f5f5; + // background-color: #357ae8; + transition: all .3s ease-in-out; + box-shadow: 1px 2px 2px 0px #444 !important; +} +.sn:hover { + color: #06a9e2; + transition: all .3s ease-in-out; + background-color: #000 !important; + box-shadow: 0px 0px 0px 0px #222 !important; +} +.show { + border-radius: 1rem; + font-size: 10px; + color: #06a9e2; + &:hover { + color: white !important; + background-color: #357ae8 !important; + } +} +.edit { + border-radius: 1rem; + font-size: 10px; + color: lime; + &:hover { + color: white !important; + background-color: green !important; + } +} +.delete { + border-radius: 1rem; + font-size: 10px; + color: #f44336; + &:hover { + color: white !important; + background-color: red !important; + } +} +.brand-logo { + font-family: 'Days One', sans-serif; +} + +input.valid:not([type]), input.valid:not([type]):focus, input.valid[type=text]:not(.browser-default), input.valid[type=text]:not(.browser-default):focus, input.valid[type=password]:not(.browser-default), input.valid[type=password]:not(.browser-default):focus, input.valid[type=email]:not(.browser-default), input.valid[type=email]:not(.browser-default):focus, input.valid[type=url]:not(.browser-default), input.valid[type=url]:not(.browser-default):focus, input.valid[type=time]:not(.browser-default), input.valid[type=time]:not(.browser-default):focus, input.valid[type=date]:not(.browser-default), input.valid[type=date]:not(.browser-default):focus, input.valid[type=datetime]:not(.browser-default), input.valid[type=datetime]:not(.browser-default):focus, input.valid[type=datetime-local]:not(.browser-default), input.valid[type=datetime-local]:not(.browser-default):focus, input.valid[type=tel]:not(.browser-default), input.valid[type=tel]:not(.browser-default):focus, input.valid[type=number]:not(.browser-default), input.valid[type=number]:not(.browser-default):focus, input.valid[type=search]:not(.browser-default), input.valid[type=search]:not(.browser-default):focus, textarea.materialize-textarea.valid, textarea.materialize-textarea.valid:focus, .select-wrapper.valid>input.select-dropdown { + border-bottom: 1px solid #06a9e2 !important; + -webkit-box-shadow: 0 1px 0 0 #06a9e2 !important; + box-shadow: 0 1px 0 0 #06a9e2 !important; +} +input:not([type]):focus:not([readonly]), input[type=text]:not(.browser-default):focus:not([readonly]), input[type=password]:not(.browser-default):focus:not([readonly]), input[type=email]:not(.browser-default):focus:not([readonly]), input[type=url]:not(.browser-default):focus:not([readonly]), input[type=time]:not(.browser-default):focus:not([readonly]), input[type=date]:not(.browser-default):focus:not([readonly]), input[type=datetime]:not(.browser-default):focus:not([readonly]), input[type=datetime-local]:not(.browser-default):focus:not([readonly]), input[type=tel]:not(.browser-default):focus:not([readonly]), input[type=number]:not(.browser-default):focus:not([readonly]), input[type=search]:not(.browser-default):focus:not([readonly]), textarea.materialize-textarea:focus:not([readonly]) { + border-bottom: 1px solid #06a9e2; + -webkit-box-shadow: 0 1px 0 0 #06a9e2; + box-shadow: 0 1px 0 0 #06a9e2; +} +.dropdown-content li>a, .dropdown-content li>span { + font-size: 16px; + background-color: #020000; + color: #9e9e9edb; + display: block; + line-height: 22px; + padding: 14px 16px; +} +.dropdown-content li>a:hover, .dropdown-content li>span:hover { + background-color: #06a9e2; + color: white; +} + + +.select-wrapper input.select-dropdown { + color: #06a9e2; +} +input:not([type]):focus:not([readonly])+label,.form-wrap input[type=text]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=password]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=email]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=url]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=time]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=date]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=datetime]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=datetime-local]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=tel]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=number]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=search]:not(.browser-default):focus:not([readonly])+label,.form-wrap textarea.materialize-textarea:focus:not([readonly])+label { + color: #06a9e2; +} +input:not([type]):focus:not([readonly])+label, input[type=text]:not(.browser-default):focus:not([readonly])+label, input[type=password]:not(.browser-default):focus:not([readonly])+label, input[type=email]:not(.browser-default):focus:not([readonly])+label, input[type=url]:not(.browser-default):focus:not([readonly])+label, input[type=time]:not(.browser-default):focus:not([readonly])+label, input[type=date]:not(.browser-default):focus:not([readonly])+label, input[type=datetime]:not(.browser-default):focus:not([readonly])+label, input[type=datetime-local]:not(.browser-default):focus:not([readonly])+label, input[type=tel]:not(.browser-default):focus:not([readonly])+label, input[type=number]:not(.browser-default):focus:not([readonly])+label, input[type=search]:not(.browser-default):focus:not([readonly])+label, textarea.materialize-textarea:focus:not([readonly])+label { + color: #06a9e2; +} +.select-wrapper input.select-dropdown { color: #06a9e2 !important; } +.select-wrapper input.select-dropdown:focus { + border-bottom: 2px solid #06a9e2 !important; +} +// label:active { +// font-size: .8rem; +// color: #06a9e2 !important; +// } diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/stylesheets/users.scss b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/stylesheets/users.scss new file mode 100644 index 0000000..dccb4f4 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/assets/stylesheets/users.scss @@ -0,0 +1,199 @@ +// Navbar section +nav { + background-color:#000; + padding: 0 4rem; + a:hover { color: tan; } +} + +body { + width: 100%; + height: 100%; + // position: static; + background-position: center; + background-repeat: no-repeat; + background-size: cover; + background-image: url('https://cdn-images-1.medium.com/max/1600/0*zfW13Mn8_fvEKcU7.jpg') +} + +nav a { color: white; } +nav a img { + width: 100px; + height: 40px; + margin: 0.5rem 0; + border-style: none; +} + +nav a:hover { color: #06a9e2; cursor: pointer; } + +h1, h2, .student_header { + font-family: 'Fredoka One', cursive; + text-align: center; + color: #06a9e2; + margin: 4rem 0 2rem; + position: relative; +} +h1 span { color: #06a9e2; font-family: 'Poiret One', cursive; } + +#notice { + padding: 0.5rem 2rem; + border-radius: 1rem; + border: 2px solid #06a9e2; + background: lightslategrey; +} + +// Form Components [ Add and Edit ] Section +form { padding: 0 15rem; } +ul .form-row { padding-left: 4rem !important; } +.form-row { line-height: 0rem; } + + +// Table Section +.theader { color: #06a9e2; font-family: 'Poiret One', cursive; } +.trbody { font-family: 'Poiret One', cursive; } +.trbody > td { padding: 0; } +.trbody > td:last-child > a { margin: 0.1rem auto; width: 5rem; } +.trbody > td:last-child > form { + input { margin: 0; } + width: 5rem; + margin: 0rem auto; + display: inline-table !important; +} +.trbody:hover { color: #06a9e2; background-color: #0000006b !important; } +.scrolling-wrapper { + -webkit-overflow-scrolling: touch; + padding-bottom: 12rem; + overflow-y: scroll; + position:relative; + opacity: 0.8; + height: 50px !important; + width: 100%; + // z-index: -1; + } + ::-webkit-scrollbar { width: 12px; } + ::-webkit-scrollbar-track { display: none; } + + +// Container section +.container { min-height: 70% !important; width: 58%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +.container-min { height: 550px; min-height: 70%; width: 50%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +.container-max { height: 600px; min-height: 70%; width: 50%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +// .container h1 { margin-top: 2rem; } + +.flxend { display: flex; justify-content: end; } // div container requiring flex +.flexed { display: flex; justify-content: space-between; } // div container requiring flex +.grided { display: grid; grid-template-columns: 1fr 1fr; grid-gap: 2rem; } // div container requiring grid +.inline { display: inline-block; margin: 1rem auto; } // div container requiring grid +.grided input { min-width: 100%; margin-top: 2rem; } +.text-warning { color: #fba153fa; } + +// Custom Margin +// =========================== [ 1rem ] +.right-margin1 { margin-right : 1rem !important; } +.left-margin1 { margin-left : 1rem !important; } +.top-margin1 { margin-top : 1rem !important; } +.bottom-margin1 { margin-bottom: 1rem !important; } +// =========================== [ 2rem ] +.right-margin2 { margin-right : 2rem !important; } +.left-margin2 { margin-left : 2rem !important; } +.top-margin2 { margin-top : 2rem !important; } +.bottom-margin2 { margin-bottom: 2rem !important; } +// =========================== [ 4rem ] +.right-margin4 { margin-right : 4rem !important; } +.left-margin4 { margin-left : 4rem !important; } +.top-margin4 { margin-top : 4rem !important; } +.bottom-margin4 { margin-bottom: 4rem !important; } +// =========================== [ 6rem ] +.right-margin6 { margin-right : 6rem !important; } +.left-margin6 { margin-left : 6rem !important; } +.top-margin6 { margin-top : 6rem !important; } +.bottom-margin6 { margin-bottom: 6rem !important; } + +.separator-bar{ margin: 0 1rem; } +.sn { + color: white; + // margin-top: 2rem; + border-radius: .2rem; + background-color: #111; + border: 1px solid #f5f5f5; + // background-color: #357ae8; + transition: all .3s ease-in-out; + box-shadow: 1px 2px 2px 0px #444 !important; +} +.sn:hover { + color: #06a9e2; + transition: all .3s ease-in-out; + background-color: #000 !important; + box-shadow: 0px 0px 0px 0px #222 !important; +} +.show { + border-radius: 1rem; + font-size: 10px; + color: #06a9e2; + &:hover { + color: white !important; + background-color: #357ae8 !important; + } +} +.edit { + border-radius: 1rem; + font-size: 10px; + color: lime; + &:hover { + color: white !important; + background-color: green !important; + } +} +.delete { + border-radius: 1rem; + font-size: 10px; + color: #f44336; + &:hover { + color: white !important; + background-color: red !important; + } +} +.brand-logo { + font-family: 'Days One', sans-serif; +} + +input.valid:not([type]), input.valid:not([type]):focus, input.valid[type=text]:not(.browser-default), input.valid[type=text]:not(.browser-default):focus, input.valid[type=password]:not(.browser-default), input.valid[type=password]:not(.browser-default):focus, input.valid[type=email]:not(.browser-default), input.valid[type=email]:not(.browser-default):focus, input.valid[type=url]:not(.browser-default), input.valid[type=url]:not(.browser-default):focus, input.valid[type=time]:not(.browser-default), input.valid[type=time]:not(.browser-default):focus, input.valid[type=date]:not(.browser-default), input.valid[type=date]:not(.browser-default):focus, input.valid[type=datetime]:not(.browser-default), input.valid[type=datetime]:not(.browser-default):focus, input.valid[type=datetime-local]:not(.browser-default), input.valid[type=datetime-local]:not(.browser-default):focus, input.valid[type=tel]:not(.browser-default), input.valid[type=tel]:not(.browser-default):focus, input.valid[type=number]:not(.browser-default), input.valid[type=number]:not(.browser-default):focus, input.valid[type=search]:not(.browser-default), input.valid[type=search]:not(.browser-default):focus, textarea.materialize-textarea.valid, textarea.materialize-textarea.valid:focus, .select-wrapper.valid>input.select-dropdown { + border-bottom: 1px solid #06a9e2 !important; + -webkit-box-shadow: 0 1px 0 0 #06a9e2 !important; + box-shadow: 0 1px 0 0 #06a9e2 !important; +} +input:not([type]):focus:not([readonly]), input[type=text]:not(.browser-default):focus:not([readonly]), input[type=password]:not(.browser-default):focus:not([readonly]), input[type=email]:not(.browser-default):focus:not([readonly]), input[type=url]:not(.browser-default):focus:not([readonly]), input[type=time]:not(.browser-default):focus:not([readonly]), input[type=date]:not(.browser-default):focus:not([readonly]), input[type=datetime]:not(.browser-default):focus:not([readonly]), input[type=datetime-local]:not(.browser-default):focus:not([readonly]), input[type=tel]:not(.browser-default):focus:not([readonly]), input[type=number]:not(.browser-default):focus:not([readonly]), input[type=search]:not(.browser-default):focus:not([readonly]), textarea.materialize-textarea:focus:not([readonly]) { + border-bottom: 1px solid #06a9e2; + -webkit-box-shadow: 0 1px 0 0 #06a9e2; + box-shadow: 0 1px 0 0 #06a9e2; +} +.dropdown-content li>a, .dropdown-content li>span { + font-size: 16px; + background-color: #020000; + color: #9e9e9edb; + display: block; + line-height: 22px; + padding: 14px 16px; +} +.dropdown-content li>a:hover, .dropdown-content li>span:hover { + background-color: #06a9e2; + color: white; +} + + +.select-wrapper input.select-dropdown { + color: #06a9e2; +} +input:not([type]):focus:not([readonly])+label,.form-wrap input[type=text]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=password]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=email]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=url]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=time]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=date]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=datetime]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=datetime-local]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=tel]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=number]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=search]:not(.browser-default):focus:not([readonly])+label,.form-wrap textarea.materialize-textarea:focus:not([readonly])+label { + color: #06a9e2; +} +input:not([type]):focus:not([readonly])+label, input[type=text]:not(.browser-default):focus:not([readonly])+label, input[type=password]:not(.browser-default):focus:not([readonly])+label, input[type=email]:not(.browser-default):focus:not([readonly])+label, input[type=url]:not(.browser-default):focus:not([readonly])+label, input[type=time]:not(.browser-default):focus:not([readonly])+label, input[type=date]:not(.browser-default):focus:not([readonly])+label, input[type=datetime]:not(.browser-default):focus:not([readonly])+label, input[type=datetime-local]:not(.browser-default):focus:not([readonly])+label, input[type=tel]:not(.browser-default):focus:not([readonly])+label, input[type=number]:not(.browser-default):focus:not([readonly])+label, input[type=search]:not(.browser-default):focus:not([readonly])+label, textarea.materialize-textarea:focus:not([readonly])+label { + color: #06a9e2; +} +.select-wrapper input.select-dropdown { color: #06a9e2 !important; } +.select-wrapper input.select-dropdown:focus { + border-bottom: 2px solid #06a9e2 !important; +} +// label:active { +// font-size: .8rem; +// color: #06a9e2 !important; +// } diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/controllers/application_controller.rb new file mode 100644 index 0000000..e9d4934 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/controllers/application_controller.rb @@ -0,0 +1,19 @@ +class ApplicationController < ActionController::Base + # Prevent CSRF attacks by raising an exception. + # For APIs, you may want to use :null_session instead. + protect_from_forgery with: :exception + + # before_action :require_login + def current_user + User.find(session[:user_id]) if session[:user_id] + end + + helper_method :current_user + # + # private + # def require_login + # unless current_user + # redirect_to "/" + # end + # end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/controllers/comments_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/controllers/comments_controller.rb new file mode 100644 index 0000000..7669955 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/controllers/comments_controller.rb @@ -0,0 +1,2 @@ +class CommentsController < ApplicationController +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/controllers/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/controllers/events_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/controllers/events_controller.rb new file mode 100644 index 0000000..7d445d9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/controllers/events_controller.rb @@ -0,0 +1,46 @@ +class EventsController < ApplicationController + def index + @events = Event.where(state: current_user.state) + @otherevents = Event.where.not(state: current_user.state) + @attends = Attend.all + end + + def create + @new_event = Event.create(event_params.merge(user_id:current_user.id)) + unless @new_event.valid? + flash[:errors] = @new_event.errors + end + redirect_to "/events" + end + + # ====================== + # GET Request [.html] + # GET Request [.json] + # ====================== + def show + print "\n\n===============================\n\n" + puts "BEFORE" + print "\n\n===============================\n\n" + @this_event = Event.find(id=params[:id]) + @host = "#{@this_event.user.first_name} #{@this_event.user.last_name}" + @attends_count = Attendee.where("event_id = '#{params[:id]}'").count + @attendees = Attendee.where("event_id = '#{params[:id]}'") + # @comments = Comment.joins(:event).where(event_id: @event.id) + end + + + # ====================== + # DELETE Request [.html] + # DELETE Request [.json] + # ====================== + def destroy + User.find(params[:id]).delete + # reset_session + redirect_to event_path + end + + private + def event_params + params.require(:event).permit(:name, :date, :city, :state) + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/controllers/sessions_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/controllers/sessions_controller.rb new file mode 100644 index 0000000..e709f33 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/controllers/sessions_controller.rb @@ -0,0 +1,42 @@ +class SessionsController < ApplicationController + def index + User.new + @errors = [] + end + + def switch + if session[:form] === "login" + session[:form] = "register" + else + session[:form] = "login" + end + redirect_to "/" + end + + + def create + @user = User.find_by_email(params[:email]) + + if @user and @user.authenticate(params[:password]) + session["user_id"] = @user.id + redirect_to "/events" + else + flash[:errors] = ["Invalid login information!"] + redirect_to :back + end + end + + + # ==================== + # DELETE /User/1 + # DELETE /User/1.json + # ==================== + def destroy + reset_session + respond_to do |format| + format.html { redirect_to '/', notice: 'User was successfully logged out.' } + format.json { head :no_content } + end + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/controllers/users_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/controllers/users_controller.rb new file mode 100644 index 0000000..fcdbedf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/controllers/users_controller.rb @@ -0,0 +1,20 @@ +class UsersController < ApplicationController + + def create + @user = User.create(user_params) + unless @user.valid? + flash[:errors] = @user.errors.full_messages + redirect_to :back + else + # @errors = flash@user.errors.full_messages + session["user_id"] = @user.id + redirect_to "/events" + end + end + + + private + def user_params + params.require(:user).permit(:first_name, :last_name, :email, :city, :state, :password, :password_confirmation) + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/helpers/application_helper.rb new file mode 100644 index 0000000..de6be79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/helpers/comments_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/helpers/comments_helper.rb new file mode 100644 index 0000000..0ec9ca5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/helpers/comments_helper.rb @@ -0,0 +1,2 @@ +module CommentsHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/helpers/events_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/helpers/events_helper.rb new file mode 100644 index 0000000..8a9a878 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/helpers/events_helper.rb @@ -0,0 +1,2 @@ +module EventsHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/helpers/sessions_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/helpers/sessions_helper.rb new file mode 100644 index 0000000..309f8b2 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/helpers/sessions_helper.rb @@ -0,0 +1,2 @@ +module SessionsHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/helpers/users_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/helpers/users_helper.rb new file mode 100644 index 0000000..2310a24 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/helpers/users_helper.rb @@ -0,0 +1,2 @@ +module UsersHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/models/attendee.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/models/attendee.rb new file mode 100644 index 0000000..061f61a --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/models/attendee.rb @@ -0,0 +1,6 @@ +class Attendee < ActiveRecord::Base + belongs_to :user + belongs_to :event + + validates :event, :user, presence: true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/models/comment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/models/comment.rb new file mode 100644 index 0000000..115b64f --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/models/comment.rb @@ -0,0 +1,6 @@ +class Comment < ActiveRecord::Base + belongs_to :user + belongs_to :event + + validates :content, :event, :user, presence: true, length: {minimum:2} +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/models/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/models/event.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/models/event.rb new file mode 100644 index 0000000..7a3a810 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/models/event.rb @@ -0,0 +1,14 @@ +class Event < ActiveRecord::Base + belongs_to :user + has_many :comments, dependent: :destroy + has_many :attends, dependent: :destroy + # has_many :joins, dependent: :destroy + has_many :users_attending, through: :attends, source: :user + + validates :name, :date, :city, :state, :user, presence: true + validate :valid_date + private + def valid_date + errors.add(:date, "can't be in the past") unless date.future? + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/models/user.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/models/user.rb new file mode 100644 index 0000000..5ee1296 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/models/user.rb @@ -0,0 +1,21 @@ +class User < ActiveRecord::Base + has_secure_password + has_many :events, dependent: :destroy # events user created + has_many :comments, dependent: :destroy # comments user created + has_many :events_joined, through: :joins, source: :event # events user joined + + EMAIL_REGEX = /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]+)\z/i + before_validation :downcase_fields + + validates :first_name, :last_name, :email, :city, :state, presence: true + validates :email, uniqueness: { case_sensitive: false }, format: { with: EMAIL_REGEX } + validates :state, length: { is: 2 } + validates :password, length: { minimum: 8, maximum: 15 }, on: :create + # validates :password, confirmation: true, length: {minimum:8} + # validates :password_confirmation, presence: true, length: {minimum:8} + # before_save { |user| user.email = user.email.downcase } + private + def downcase_fields + self.email.downcase! + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/views/comments/index.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/views/comments/index.html.erb new file mode 100644 index 0000000..e5860d7 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/views/comments/index.html.erb @@ -0,0 +1 @@ +

COMMENT

diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/views/events/index.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/views/events/index.html.erb new file mode 100644 index 0000000..f2a50a2 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/views/events/index.html.erb @@ -0,0 +1,180 @@ +
+ + <% if notice %> +

<%= notice %>

+ <% end %> + +

Here Are Some Of the Events At your State.

+ + + + + + + + + + + + +
+ <% @events.each do |event| %> +
+ + + + + + + + <% end %> + + +
Name Date Location Host Actions/Status
<%= event.name %> <%= event.date %> <%= event.city %> <%= event.state %> <%= event.user.first_name %> + Join + Edit +
+ + + +
+
+
+ +
+ + <% if notice %> +

<%= notice %>

+ <% end %> + +

Here Are Some Of the Events At your State.

+ + + + + + + + + + + + +
+ <% @otherevents.each do |event| %> +
+ + + + + + + + <% end %> + + +
Name Date Location Host Actions/Status
<%= event.name %> <%= event.date %> <%= event.city %> <%= event.state %> <%= event.user.first_name %> + Join + Edit + <%= link_to "Log out", "/logout", data: { method: :delete, confirm: "Are you sure?"} %> +
+
+ + + +
+
+ +

ADDEVENT

+ +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+ + + +
+
+ + +
+ + +
+
+
diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/views/events/show.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/views/events/show.html.erb new file mode 100644 index 0000000..66b7002 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/views/events/show.html.erb @@ -0,0 +1,63 @@ +
+
+
+

<%= @this_event.name %>

+
    +
  • Host: <%= @host %>
  • +
  • Date: <%= @this_event.date %>
  • +
  • Location: <%= @this_event.city %>, <%= @this_event.state%>
  • +
  • People who have joined the event: <%= @attends_count %>
  • +
+ +
+ + + + + + + + + +
+ <% @attendees.each do |attendee| %> +
+ + + + + <% end %> + + +
Name LocationState
+ <%= attendee.user.first_name %> + <%= attendee.user.last_name %> + <%= attendee.user.city %> <%= attendee.user.state %>
+
+
+
+
+
+
+
+ + Card Title + add +
+
+

I am a very simple card. I am good at containing small bits of information. I am convenient because I require little markup to use effectively.

+
+
+
+
+
+
Add comment:
+
+ + + +
+
+
+
+
diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/views/layouts/application.html.erb new file mode 100644 index 0000000..c3efcaf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/views/layouts/application.html.erb @@ -0,0 +1,65 @@ + + + + Events + + + + + + + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= javascript_include_tag 'application', 'main.js', 'data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + + + + + + <% if flash[:errors] %> +
+
+ <%= pluralize(flash[:errors].count, "error") %> + prohibited this user from being saved: +
+
    + <% flash[:errors].each do |message| %> +
  • »<%= message %>
  • + <% end %> +
+
+ <% end %> + + + + <%= yield %> + + + + + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/views/sessions/_login_form.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/views/sessions/_login_form.html.erb new file mode 100644 index 0000000..9a20816 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/views/sessions/_login_form.html.erb @@ -0,0 +1,30 @@ +

LOGIN

+ +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ +
+ +
+

+ Don't have an account yet? + Create one now! +

+
+
diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/views/sessions/_register_form.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/views/sessions/_register_form.html.erb new file mode 100644 index 0000000..1544d5a --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/views/sessions/_register_form.html.erb @@ -0,0 +1,108 @@ +

REGISTRATION

+ +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+ + + +
+
+
+
+ + +
+
+ + +
+
+ + +
+ +
+

+ Already have an account? + Login now! +

+
+
diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/views/sessions/index.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/views/sessions/index.html.erb new file mode 100644 index 0000000..9423895 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/app/views/sessions/index.html.erb @@ -0,0 +1,8 @@ + + +
+ <% if notice %>

<%= notice %>

<% end %> + <% if session['form'] == 'login' %><%= render "login_form" %> + <% else %> <%= render "register_form" %> + <% end %> +
diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/backup_navbar.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/backup_navbar.html.erb new file mode 100644 index 0000000..54bf70a --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/backup_navbar.html.erb @@ -0,0 +1,86 @@ + + + + Events + + + + + + + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= javascript_include_tag 'application', 'main.js', 'data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + + + + + + <% if flash[:errors] %> +
+
+ <%= pluralize(flash[:errors].count, "error") %> + prohibited this user from being saved: +
+
    + <% flash[:errors].each do |message| %> +
  • »<%= message %>
  • + <% end %> +
+
+ <% end %> + + + + <%= yield %> + + + + + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/bin/bundle new file mode 100755 index 0000000..66e9889 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/bin/rails new file mode 100755 index 0000000..0138d79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/bin/rails @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +APP_PATH = File.expand_path('../../config/application', __FILE__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/bin/rake new file mode 100755 index 0000000..d87d5f5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/bin/rake @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/bin/setup new file mode 100755 index 0000000..acdb2c1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/bin/setup @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +Dir.chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file: + + puts "== Installing dependencies ==" + system "gem install bundler --conservative" + system "bundle check || bundle install" + + # puts "\n== Copying sample files ==" + # unless File.exist?("config/database.yml") + # system "cp config/database.yml.sample config/database.yml" + # end + + puts "\n== Preparing database ==" + system "bin/rake db:setup" + + puts "\n== Removing old logs and tempfiles ==" + system "rm -f log/*" + system "rm -rf tmp/cache" + + puts "\n== Restarting application server ==" + system "touch tmp/restart.txt" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/bin/spring new file mode 100755 index 0000000..fb2ec2e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/bin/spring @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +# This file loads spring without using Bundler, in order to be fast. +# It gets overwritten when you run the `spring binstub` command. + +unless defined?(Spring) + require 'rubygems' + require 'bundler' + + lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read) + spring = lockfile.specs.detect { |spec| spec.name == "spring" } + if spring + Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path + gem 'spring', spring.version + require 'spring/binstub' + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config.ru new file mode 100644 index 0000000..bd83b25 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Rails.application diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/application.rb new file mode 100644 index 0000000..bd07317 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/application.rb @@ -0,0 +1,35 @@ +require File.expand_path('../boot', __FILE__) + +require "rails" +# Pick the frameworks you want: +require "active_model/railtie" +require "active_job/railtie" +require "active_record/railtie" +require "action_controller/railtie" +require "action_mailer/railtie" +require "action_view/railtie" +require "sprockets/railtie" +# require "rails/test_unit/railtie" + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module Events + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Do not swallow errors in after_commit/after_rollback callbacks. + config.active_record.raise_in_transactional_callbacks = true + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/boot.rb new file mode 100644 index 0000000..6b750f0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/boot.rb @@ -0,0 +1,3 @@ +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) + +require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/database.yml new file mode 100644 index 0000000..fd5c16a --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/database.yml @@ -0,0 +1,85 @@ +# PostgreSQL. Versions 8.2 and up are supported. +# +# Install the pg driver: +# gem install pg +# On OS X with Homebrew: +# gem install pg -- --with-pg-config=/usr/local/bin/pg_config +# On OS X with MacPorts: +# gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config +# On Windows: +# gem install pg +# Choose the win32 build. +# Install PostgreSQL and put its /bin directory on your path. +# +# Configure Using Gemfile +# gem 'pg' +# +default: &default + adapter: postgresql + encoding: unicode + # For details on connection pooling, see rails configuration guide + # http://guides.rubyonrails.org/configuring.html#database-pooling + pool: 5 + +development: + <<: *default + database: Events_development + + # The specified database role being used to connect to postgres. + # To create additional roles in postgres see `$ createuser --help`. + # When left blank, postgres will use the default role. This is + # the same name as the operating system user that initialized the database. + #username: Events + + # The password associated with the postgres role (username). + #password: + + # Connect on a TCP socket. Omitted by default since the client uses a + # domain socket that doesn't need configuration. Windows does not have + # domain sockets, so uncomment these lines. + #host: localhost + + # The TCP port the server listens on. Defaults to 5432. + # If your server runs on a different port number, change accordingly. + #port: 5432 + + # Schema search path. The server defaults to $user,public + #schema_search_path: myapp,sharedapp,public + + # Minimum log levels, in increasing order: + # debug5, debug4, debug3, debug2, debug1, + # log, notice, warning, error, fatal, and panic + # Defaults to warning. + #min_messages: notice + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: Events_test + +# As with config/secrets.yml, you never want to store sensitive information, +# like your database password, in your source code. If your source code is +# ever seen by anyone, they now have access to your database. +# +# Instead, provide the password as a unix environment variable when you boot +# the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database +# for a full rundown on how to provide these environment variables in a +# production deployment. +# +# On Heroku and other platform providers, you may have a full connection URL +# available as an environment variable. For example: +# +# DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase" +# +# You can use this database configuration with: +# +# production: +# url: <%= ENV['DATABASE_URL'] %> +# +production: + <<: *default + database: Events_production + username: Events + password: <%= ENV['EVENTS_DATABASE_PASSWORD'] %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/environment.rb new file mode 100644 index 0000000..ee8d90d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require File.expand_path('../application', __FILE__) + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/environments/development.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/environments/development.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/environments/development.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/environments/production.rb new file mode 100644 index 0000000..5c1b32e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/environments/production.rb @@ -0,0 +1,79 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like + # NGINX, varnish or squid. + # config.action_dispatch.rack_cache = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # 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-Accel-Redirect' # for NGINX + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug + + # Prepend all log lines with the following tags. + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/environments/test.rb new file mode 100644 index 0000000..1c19f08 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/environments/test.rb @@ -0,0 +1,42 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure static file server for tests with Cache-Control for performance. + config.serve_static_files = true + config.static_cache_control = 'public, max-age=3600' + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Randomize the order test cases are executed. + config.active_support.test_order = :random + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/initializers/assets.rb new file mode 100644 index 0000000..70f4c58 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/initializers/assets.rb @@ -0,0 +1,11 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path +# Rails.application.config.assets.paths << Emoji.images_path + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. +Rails.application.config.assets.precompile += %w( main.js ) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..59385cd --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/initializers/cookies_serializer.rb new file mode 100644 index 0000000..7f70458 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/initializers/cookies_serializer.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000..4a994e1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/initializers/inflections.rb new file mode 100644 index 0000000..ac033bf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/initializers/mime_types.rb new file mode 100644 index 0000000..dc18996 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/initializers/mime_types.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/initializers/session_store.rb new file mode 100644 index 0000000..597d95b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/initializers/session_store.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.session_store :cookie_store, key: '_Events_session' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..33725e9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] if respond_to?(:wrap_parameters) +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/locales/en.yml new file mode 100644 index 0000000..0653957 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/locales/en.yml @@ -0,0 +1,23 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/routes.rb new file mode 100644 index 0000000..e4cd397 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/routes.rb @@ -0,0 +1,51 @@ +Rails.application.routes.draw do + root 'sessions#index' + get 'sessions/sw' => 'sessions#switch' + delete 'logout' => 'sessions#logout' + + resources :sessions + resources :users + resources :events + resources :comments +end + + +# Prefix Verb URI Pattern Controller#Action +# ==================================================================== [ Sessions Routes ] +# root GET / sessions#index +# sessions_switch GET /sessions/switch(.:format) sessions#switch +# sessions GET /sessions(.:format) sessions#index +# POST /sessions(.:format) sessions#create +# new_session GET /sessions/new(.:format) sessions#new +# edit_session GET /sessions/:id/edit(.:format) sessions#edit +# session GET /sessions/:id(.:format) sessions#show +# PATCH /sessions/:id(.:format) sessions#update +# PUT /sessions/:id(.:format) sessions#update +# DELETE /sessions/:id(.:format) sessions#destroy +# ==================================================================== [ Users Routes ] +# users GET /users(.:format) users#index +# POST /users(.:format) users#create +# new_user GET /users/new(.:format) users#new +# edit_user GET /users/:id/edit(.:format) users#edit +# user GET /users/:id(.:format) users#show +# PATCH /users/:id(.:format) users#update +# PUT /users/:id(.:format) users#update +# DELETE /users/:id(.:format) users#destroy +# ==================================================================== [ Events Routes ] +# events GET /events(.:format) events#index +# POST /events(.:format) events#create +# new_event GET /events/new(.:format) events#new +# edit_event GET /events/:id/edit(.:format) events#edit +# event GET /events/:id(.:format) events#show +# PATCH /events/:id(.:format) events#update +# PUT /events/:id(.:format) events#update +# DELETE /events/:id(.:format) events#destroy +# ==================================================================== [ Comments Routes ] +# comments GET /comments(.:format) comments#index +# POST /comments(.:format) comments#create +# new_comment GET /comments/new(.:format) comments#new +# edit_comment GET /comments/:id/edit(.:format) comments#edit +# comment GET /comments/:id(.:format) comments#show +# PATCH /comments/:id(.:format) comments#update +# PUT /comments/:id(.:format) comments#update +# DELETE /comments/:id(.:format) comments#destroy diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/secrets.yml new file mode 100644 index 0000000..25f6e7d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/config/secrets.yml @@ -0,0 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rake secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: 80cada4f3bfd3ecd796ff38d25d186d87a109caf812947237f1621f98447b1bfbb08623c0d13207ec8d7172068c7b83159d5dd3ac710cdc653e2b55887f3f9c7 + +test: + secret_key_base: 0da4cf4a1940b064b20a851a6386d916ffaad3b7a73ae8cee23e6f9e56c1aabf542400f4bad06a12b59d293416598efa8a95962e29dd228675fba82e56bb47cb + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/db/migrate/20180816163357_create_users.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/db/migrate/20180816163357_create_users.rb new file mode 100644 index 0000000..3353223 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/db/migrate/20180816163357_create_users.rb @@ -0,0 +1,14 @@ +class CreateUsers < ActiveRecord::Migration + def change + create_table :users do |t| + t.string :first_name + t.string :last_name + t.string :email + t.string :city + t.string :state + t.string :password_digest + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/db/migrate/20180816163846_create_events.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/db/migrate/20180816163846_create_events.rb new file mode 100644 index 0000000..18df508 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/db/migrate/20180816163846_create_events.rb @@ -0,0 +1,13 @@ +class CreateEvents < ActiveRecord::Migration + def change + create_table :events do |t| + t.string :name + t.date :date + t.string :city + t.string :state + t.integer :user_id + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/db/migrate/20180816164056_create_comments.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/db/migrate/20180816164056_create_comments.rb new file mode 100644 index 0000000..f98dc36 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/db/migrate/20180816164056_create_comments.rb @@ -0,0 +1,10 @@ +class CreateComments < ActiveRecord::Migration + def change + create_table :comments do |t| + t.integer :user_id + t.integer :event_id + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/db/migrate/20180816164249_create_attendees.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/db/migrate/20180816164249_create_attendees.rb new file mode 100644 index 0000000..c0f9df1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/db/migrate/20180816164249_create_attendees.rb @@ -0,0 +1,10 @@ +class CreateAttendees < ActiveRecord::Migration + def change + create_table :attendees do |t| + t.integer :user_id + t.integer :event_id + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/db/schema.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/db/schema.rb new file mode 100644 index 0000000..df99b94 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/db/schema.rb @@ -0,0 +1,54 @@ +# encoding: UTF-8 +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 20180816164249) do + + # These are extensions that must be enabled in order to support this database + enable_extension "plpgsql" + + create_table "attendees", force: :cascade do |t| + t.integer "user_id" + t.integer "event_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "comments", force: :cascade do |t| + t.integer "user_id" + t.integer "event_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "events", force: :cascade do |t| + t.string "name" + t.date "date" + t.string "city" + t.string "state" + t.integer "user_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "users", force: :cascade do |t| + t.string "first_name" + t.string "last_name" + t.string "email" + t.string "city" + t.string "state" + t.string "password_digest" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/db/seeds.rb new file mode 100644 index 0000000..4edb1e8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). +# +# Examples: +# +# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) +# Mayor.create(name: 'Emanuel', city: cities.first) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/lib/assets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/lib/tasks/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/log/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/public/404.html new file mode 100644 index 0000000..b612547 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +
+
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/public/422.html new file mode 100644 index 0000000..a21f82b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
+
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/public/500.html new file mode 100644 index 0000000..061abc5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/public/500.html @@ -0,0 +1,66 @@ + + + + We're sorry, but something went wrong (500) + + + + + + +
+
+

We're sorry, but something went wrong.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/public/robots.txt new file mode 100644 index 0000000..3c9c7c0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-agent: * +# Disallow: / diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/vendor/assets/javascripts/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Events/vendor/assets/stylesheets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/.gitignore new file mode 100644 index 0000000..050c9d9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/.gitignore @@ -0,0 +1,17 @@ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore the default SQLite database. +/db/*.sqlite3 +/db/*.sqlite3-journal + +# Ignore all logfiles and tempfiles. +/log/* +!/log/.keep +/tmp diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/Gemfile similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/Gemfile rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/Gemfile diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/Gemfile.lock similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/Gemfile.lock rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/Gemfile.lock diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/README.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/README.txt similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/README.txt rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/README.txt diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/Rakefile new file mode 100644 index 0000000..ba6b733 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Rails.application.load_tasks diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/assets/images/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/assets/javascripts/application.js similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/app/assets/javascripts/application.js rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/assets/javascripts/application.js diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/app/assets/stylesheets/application.css b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/assets/stylesheets/application.css similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/app/assets/stylesheets/application.css rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/assets/stylesheets/application.css diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/controllers/application_controller.rb new file mode 100644 index 0000000..d83690e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/controllers/application_controller.rb @@ -0,0 +1,5 @@ +class ApplicationController < ActionController::Base + # Prevent CSRF attacks by raising an exception. + # For APIs, you may want to use :null_session instead. + protect_from_forgery with: :exception +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/controllers/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/helpers/application_helper.rb new file mode 100644 index 0000000..de6be79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/app/models/blog.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/models/blog.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/app/models/blog.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/models/blog.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/models/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/app/models/message.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/models/message.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/app/models/message.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/models/message.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/app/models/post.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/models/post.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/app/models/post.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/models/post.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/views/layouts/application.html.erb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/app/views/layouts/application.html.erb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/app/views/layouts/application.html.erb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/bin/bundle new file mode 100755 index 0000000..66e9889 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/bin/rails new file mode 100755 index 0000000..0138d79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/bin/rails @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +APP_PATH = File.expand_path('../../config/application', __FILE__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/bin/rake new file mode 100755 index 0000000..d87d5f5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/bin/rake @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/bin/setup new file mode 100755 index 0000000..acdb2c1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/bin/setup @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +Dir.chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file: + + puts "== Installing dependencies ==" + system "gem install bundler --conservative" + system "bundle check || bundle install" + + # puts "\n== Copying sample files ==" + # unless File.exist?("config/database.yml") + # system "cp config/database.yml.sample config/database.yml" + # end + + puts "\n== Preparing database ==" + system "bin/rake db:setup" + + puts "\n== Removing old logs and tempfiles ==" + system "rm -f log/*" + system "rm -rf tmp/cache" + + puts "\n== Restarting application server ==" + system "touch tmp/restart.txt" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/bin/spring new file mode 100755 index 0000000..fb2ec2e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/bin/spring @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +# This file loads spring without using Bundler, in order to be fast. +# It gets overwritten when you run the `spring binstub` command. + +unless defined?(Spring) + require 'rubygems' + require 'bundler' + + lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read) + spring = lockfile.specs.detect { |spec| spec.name == "spring" } + if spring + Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path + gem 'spring', spring.version + require 'spring/binstub' + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config.ru new file mode 100644 index 0000000..bd83b25 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Rails.application diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/application.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/application.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/application.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/boot.rb new file mode 100644 index 0000000..6b750f0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/boot.rb @@ -0,0 +1,3 @@ +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) + +require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/database.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/database.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/database.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/environment.rb new file mode 100644 index 0000000..ee8d90d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require File.expand_path('../application', __FILE__) + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/environments/development.rb new file mode 100644 index 0000000..b55e214 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/environments/development.rb @@ -0,0 +1,41 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # Adds additional error checking when serving assets at runtime. + # Checks for improperly declared sprockets dependencies. + # Raises helpful error messages. + config.assets.raise_runtime_errors = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/environments/production.rb new file mode 100644 index 0000000..5c1b32e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/environments/production.rb @@ -0,0 +1,79 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like + # NGINX, varnish or squid. + # config.action_dispatch.rack_cache = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # 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-Accel-Redirect' # for NGINX + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug + + # Prepend all log lines with the following tags. + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/environments/test.rb new file mode 100644 index 0000000..1c19f08 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/environments/test.rb @@ -0,0 +1,42 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure static file server for tests with Cache-Control for performance. + config.serve_static_files = true + config.static_cache_control = 'public, max-age=3600' + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Randomize the order test cases are executed. + config.active_support.test_order = :random + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/initializers/assets.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/initializers/assets.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/initializers/assets.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..59385cd --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/initializers/cookies_serializer.rb new file mode 100644 index 0000000..7f70458 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/initializers/cookies_serializer.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000..4a994e1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/initializers/inflections.rb new file mode 100644 index 0000000..ac033bf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/initializers/mime_types.rb new file mode 100644 index 0000000..dc18996 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/initializers/mime_types.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/initializers/session_store.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/initializers/session_store.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/initializers/session_store.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..33725e9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] if respond_to?(:wrap_parameters) +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/locales/en.yml new file mode 100644 index 0000000..0653957 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/locales/en.yml @@ -0,0 +1,23 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/routes.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/routes.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/routes.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/secrets.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/config/secrets.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/config/secrets.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/db/migrate/20180802231355_create_blogs.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/db/migrate/20180802231355_create_blogs.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/db/migrate/20180802231355_create_blogs.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/db/migrate/20180802231355_create_blogs.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/db/migrate/20180802231413_create_posts.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/db/migrate/20180802231413_create_posts.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/db/migrate/20180802231413_create_posts.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/db/migrate/20180802231413_create_posts.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/db/migrate/20180802231428_create_messages.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/db/migrate/20180802231428_create_messages.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/db/migrate/20180802231428_create_messages.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/db/migrate/20180802231428_create_messages.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/db/schema.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/db/schema.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/db/schema.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/db/schema.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/db/seeds.rb new file mode 100644 index 0000000..4edb1e8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). +# +# Examples: +# +# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) +# Mayor.create(name: 'Emanuel', city: cities.first) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/lib/assets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/lib/tasks/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/log/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/public/404.html new file mode 100644 index 0000000..b612547 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +
+
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/public/422.html new file mode 100644 index 0000000..a21f82b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
+
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/public/500.html new file mode 100644 index 0000000..061abc5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/public/500.html @@ -0,0 +1,66 @@ + + + + We're sorry, but something went wrong (500) + + + + + + +
+
+

We're sorry, but something went wrong.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/public/robots.txt new file mode 100644 index 0000000..3c9c7c0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-agent: * +# Disallow: / diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/controllers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/controllers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/fixtures/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/fixtures/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/test/fixtures/blogs.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/fixtures/blogs.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/test/fixtures/blogs.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/fixtures/blogs.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/test/fixtures/messages.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/fixtures/messages.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/test/fixtures/messages.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/fixtures/messages.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/test/fixtures/posts.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/fixtures/posts.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/test/fixtures/posts.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/fixtures/posts.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/helpers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/helpers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/integration/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/integration/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/test/models/blog_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/models/blog_test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/test/models/blog_test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/models/blog_test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/test/models/message_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/models/message_test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_I/test/models/message_test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/models/message_test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/models/post_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/models/post_test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/models/post_test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/models/post_test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/test_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/test_helper.rb new file mode 100644 index 0000000..92e39b2 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/test/test_helper.rb @@ -0,0 +1,10 @@ +ENV['RAILS_ENV'] ||= 'test' +require File.expand_path('../../config/environment', __FILE__) +require 'rails/test_help' + +class ActiveSupport::TestCase + # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. + fixtures :all + + # Add more helper methods to be used by all tests here... +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/vendor/assets/javascripts/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_I/vendor/assets/stylesheets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/.gitignore new file mode 100644 index 0000000..050c9d9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/.gitignore @@ -0,0 +1,17 @@ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore the default SQLite database. +/db/*.sqlite3 +/db/*.sqlite3-journal + +# Ignore all logfiles and tempfiles. +/log/* +!/log/.keep +/tmp diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/Gemfile similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/Gemfile rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/Gemfile diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/Gemfile.lock similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/Gemfile.lock rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/Gemfile.lock diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/README.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/README.txt similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/README.txt rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/README.txt diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/Rakefile new file mode 100644 index 0000000..ba6b733 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Rails.application.load_tasks diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/assets/images/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/assets/javascripts/application.js new file mode 100644 index 0000000..e07c5a8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/assets/javascripts/application.js @@ -0,0 +1,16 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require jquery +//= require jquery_ujs +//= require turbolinks +//= require_tree . diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/app/assets/stylesheets/application.css b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/assets/stylesheets/application.css similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/app/assets/stylesheets/application.css rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/assets/stylesheets/application.css diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/controllers/application_controller.rb new file mode 100644 index 0000000..d83690e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/controllers/application_controller.rb @@ -0,0 +1,5 @@ +class ApplicationController < ActionController::Base + # Prevent CSRF attacks by raising an exception. + # For APIs, you may want to use :null_session instead. + protect_from_forgery with: :exception +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/controllers/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/helpers/application_helper.rb new file mode 100644 index 0000000..de6be79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/models/blog.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/models/blog.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/models/blog.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/models/blog.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/models/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/models/messsage.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/models/messsage.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/models/messsage.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/models/messsage.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/models/owner.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/models/owner.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/models/owner.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/models/owner.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/models/post.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/models/post.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/models/post.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/models/post.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/models/user.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/models/user.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/models/user.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/models/user.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/views/layouts/application.html.erb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/app/views/layouts/application.html.erb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/app/views/layouts/application.html.erb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/bin/bundle new file mode 100755 index 0000000..66e9889 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/bin/rails new file mode 100755 index 0000000..0138d79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/bin/rails @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +APP_PATH = File.expand_path('../../config/application', __FILE__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/bin/rake new file mode 100755 index 0000000..d87d5f5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/bin/rake @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/bin/setup new file mode 100755 index 0000000..acdb2c1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/bin/setup @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +Dir.chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file: + + puts "== Installing dependencies ==" + system "gem install bundler --conservative" + system "bundle check || bundle install" + + # puts "\n== Copying sample files ==" + # unless File.exist?("config/database.yml") + # system "cp config/database.yml.sample config/database.yml" + # end + + puts "\n== Preparing database ==" + system "bin/rake db:setup" + + puts "\n== Removing old logs and tempfiles ==" + system "rm -f log/*" + system "rm -rf tmp/cache" + + puts "\n== Restarting application server ==" + system "touch tmp/restart.txt" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/bin/spring new file mode 100755 index 0000000..fb2ec2e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/bin/spring @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +# This file loads spring without using Bundler, in order to be fast. +# It gets overwritten when you run the `spring binstub` command. + +unless defined?(Spring) + require 'rubygems' + require 'bundler' + + lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read) + spring = lockfile.specs.detect { |spec| spec.name == "spring" } + if spring + Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path + gem 'spring', spring.version + require 'spring/binstub' + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config.ru new file mode 100644 index 0000000..bd83b25 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Rails.application diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/application.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/application.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/application.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/boot.rb new file mode 100644 index 0000000..6b750f0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/boot.rb @@ -0,0 +1,3 @@ +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) + +require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/database.yml new file mode 100644 index 0000000..1c1a37c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/database.yml @@ -0,0 +1,25 @@ +# SQLite version 3.x +# gem install sqlite3 +# +# Ensure the SQLite 3 gem is defined in your Gemfile +# gem 'sqlite3' +# +default: &default + adapter: sqlite3 + pool: 5 + timeout: 5000 + +development: + <<: *default + database: db/development.sqlite3 + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: db/test.sqlite3 + +production: + <<: *default + database: db/production.sqlite3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/environment.rb new file mode 100644 index 0000000..ee8d90d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require File.expand_path('../application', __FILE__) + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/environments/development.rb new file mode 100644 index 0000000..b55e214 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/environments/development.rb @@ -0,0 +1,41 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # Adds additional error checking when serving assets at runtime. + # Checks for improperly declared sprockets dependencies. + # Raises helpful error messages. + config.assets.raise_runtime_errors = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/environments/production.rb new file mode 100644 index 0000000..5c1b32e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/environments/production.rb @@ -0,0 +1,79 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like + # NGINX, varnish or squid. + # config.action_dispatch.rack_cache = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # 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-Accel-Redirect' # for NGINX + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug + + # Prepend all log lines with the following tags. + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/environments/test.rb new file mode 100644 index 0000000..1c19f08 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/environments/test.rb @@ -0,0 +1,42 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure static file server for tests with Cache-Control for performance. + config.serve_static_files = true + config.static_cache_control = 'public, max-age=3600' + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Randomize the order test cases are executed. + config.active_support.test_order = :random + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/initializers/assets.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/initializers/assets.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/initializers/assets.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..59385cd --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/initializers/cookies_serializer.rb new file mode 100644 index 0000000..7f70458 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/initializers/cookies_serializer.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000..4a994e1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/initializers/inflections.rb new file mode 100644 index 0000000..ac033bf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/initializers/mime_types.rb new file mode 100644 index 0000000..dc18996 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/initializers/mime_types.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/initializers/session_store.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/initializers/session_store.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/initializers/session_store.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..33725e9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] if respond_to?(:wrap_parameters) +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/locales/en.yml new file mode 100644 index 0000000..0653957 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/locales/en.yml @@ -0,0 +1,23 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/routes.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/routes.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/routes.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/secrets.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/config/secrets.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/config/secrets.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/db/migrate/20180803161149_create_users.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/db/migrate/20180803161149_create_users.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/db/migrate/20180803161149_create_users.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/db/migrate/20180803161149_create_users.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/db/migrate/20180803162114_create_blogs.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/db/migrate/20180803162114_create_blogs.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/db/migrate/20180803162114_create_blogs.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/db/migrate/20180803162114_create_blogs.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/db/migrate/20180803162409_create_posts.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/db/migrate/20180803162409_create_posts.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/db/migrate/20180803162409_create_posts.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/db/migrate/20180803162409_create_posts.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/db/migrate/20180803162518_create_messsages.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/db/migrate/20180803162518_create_messsages.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/db/migrate/20180803162518_create_messsages.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/db/migrate/20180803162518_create_messsages.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/db/migrate/20180803162655_create_owners.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/db/migrate/20180803162655_create_owners.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/db/migrate/20180803162655_create_owners.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/db/migrate/20180803162655_create_owners.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/db/schema.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/db/schema.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/db/schema.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/db/schema.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/db/seeds.rb new file mode 100644 index 0000000..4edb1e8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). +# +# Examples: +# +# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) +# Mayor.create(name: 'Emanuel', city: cities.first) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/lib/assets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/lib/tasks/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/log/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/public/404.html new file mode 100644 index 0000000..b612547 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +
+
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/public/422.html new file mode 100644 index 0000000..a21f82b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
+
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/public/500.html new file mode 100644 index 0000000..061abc5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/public/500.html @@ -0,0 +1,66 @@ + + + + We're sorry, but something went wrong (500) + + + + + + +
+
+

We're sorry, but something went wrong.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/public/robots.txt new file mode 100644 index 0000000..3c9c7c0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-agent: * +# Disallow: / diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/q b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/q similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/q rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/q diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/controllers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/controllers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/fixtures/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/fixtures/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/fixtures/blogs.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/fixtures/blogs.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/fixtures/blogs.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/fixtures/blogs.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/fixtures/messsages.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/fixtures/messsages.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/fixtures/messsages.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/fixtures/messsages.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/fixtures/owners.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/fixtures/owners.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/fixtures/owners.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/fixtures/owners.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/fixtures/posts.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/fixtures/posts.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/fixtures/posts.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/fixtures/posts.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/fixtures/users.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/fixtures/users.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/fixtures/users.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/fixtures/users.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/helpers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/helpers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/integration/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/integration/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/models/blog_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/models/blog_test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/models/blog_test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/models/blog_test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/models/messsage_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/models/messsage_test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/models/messsage_test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/models/messsage_test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/models/owner_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/models/owner_test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/BlogsPostMsgs_II/test/models/owner_test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/models/owner_test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/models/post_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/models/post_test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/models/post_test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/models/post_test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/models/user_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/models/user_test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/models/user_test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/models/user_test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/test_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/test_helper.rb new file mode 100644 index 0000000..92e39b2 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/test/test_helper.rb @@ -0,0 +1,10 @@ +ENV['RAILS_ENV'] ||= 'test' +require File.expand_path('../../config/environment', __FILE__) +require 'rails/test_help' + +class ActiveSupport::TestCase + # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. + fixtures :all + + # Add more helper methods to be used by all tests here... +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/vendor/assets/javascripts/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/BlogsPostMsgs_II/vendor/assets/stylesheets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/.gitignore new file mode 100644 index 0000000..050c9d9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/.gitignore @@ -0,0 +1,17 @@ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore the default SQLite database. +/db/*.sqlite3 +/db/*.sqlite3-journal + +# Ignore all logfiles and tempfiles. +/log/* +!/log/.keep +/tmp diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/Gemfile similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/Gemfile rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/Gemfile diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/Gemfile.lock similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/Gemfile.lock rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/Gemfile.lock diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/README.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/README.txt similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/README.txt rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/README.txt diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/Rakefile new file mode 100644 index 0000000..ba6b733 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Rails.application.load_tasks diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/assets/images/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/assets/javascripts/application.js new file mode 100644 index 0000000..e07c5a8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/assets/javascripts/application.js @@ -0,0 +1,16 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require jquery +//= require jquery_ujs +//= require turbolinks +//= require_tree . diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/assets/stylesheets/application.css b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/assets/stylesheets/application.css new file mode 100644 index 0000000..f9cd5b3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/assets/stylesheets/application.css @@ -0,0 +1,15 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, + * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the bottom of the + * compiled file so the styles you add here take precedence over styles defined in any styles + * defined in the other CSS/SCSS files in this directory. It is generally better to create a new + * file per style scope. + * + *= require_tree . + *= require_self + */ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/controllers/application_controller.rb new file mode 100644 index 0000000..d83690e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/controllers/application_controller.rb @@ -0,0 +1,5 @@ +class ApplicationController < ActionController::Base + # Prevent CSRF attacks by raising an exception. + # For APIs, you may want to use :null_session instead. + protect_from_forgery with: :exception +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/controllers/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/helpers/application_helper.rb new file mode 100644 index 0000000..de6be79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/models/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/app/models/dojo.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/models/dojo.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/app/models/dojo.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/models/dojo.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/app/models/ninja.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/models/ninja.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/app/models/ninja.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/models/ninja.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/views/layouts/application.html.erb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/app/views/layouts/application.html.erb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/app/views/layouts/application.html.erb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/bin/bundle new file mode 100755 index 0000000..66e9889 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/bin/rails new file mode 100755 index 0000000..0138d79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/bin/rails @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +APP_PATH = File.expand_path('../../config/application', __FILE__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/bin/rake new file mode 100755 index 0000000..d87d5f5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/bin/rake @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/bin/setup new file mode 100755 index 0000000..acdb2c1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/bin/setup @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +Dir.chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file: + + puts "== Installing dependencies ==" + system "gem install bundler --conservative" + system "bundle check || bundle install" + + # puts "\n== Copying sample files ==" + # unless File.exist?("config/database.yml") + # system "cp config/database.yml.sample config/database.yml" + # end + + puts "\n== Preparing database ==" + system "bin/rake db:setup" + + puts "\n== Removing old logs and tempfiles ==" + system "rm -f log/*" + system "rm -rf tmp/cache" + + puts "\n== Restarting application server ==" + system "touch tmp/restart.txt" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/bin/spring new file mode 100755 index 0000000..fb2ec2e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/bin/spring @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +# This file loads spring without using Bundler, in order to be fast. +# It gets overwritten when you run the `spring binstub` command. + +unless defined?(Spring) + require 'rubygems' + require 'bundler' + + lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read) + spring = lockfile.specs.detect { |spec| spec.name == "spring" } + if spring + Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path + gem 'spring', spring.version + require 'spring/binstub' + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config.ru new file mode 100644 index 0000000..bd83b25 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Rails.application diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/application.rb new file mode 100644 index 0000000..def1823 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/application.rb @@ -0,0 +1,27 @@ +require File.expand_path('../boot', __FILE__) + +require 'rails/all' + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module DojoNinjas + class Application < Rails::Application + config.web_console.whitelisted_ips = '10.0.2.2' + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Do not swallow errors in after_commit/after_rollback callbacks. + config.active_record.raise_in_transactional_callbacks = true + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/boot.rb new file mode 100644 index 0000000..6b750f0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/boot.rb @@ -0,0 +1,3 @@ +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) + +require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/database.yml new file mode 100644 index 0000000..1c1a37c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/database.yml @@ -0,0 +1,25 @@ +# SQLite version 3.x +# gem install sqlite3 +# +# Ensure the SQLite 3 gem is defined in your Gemfile +# gem 'sqlite3' +# +default: &default + adapter: sqlite3 + pool: 5 + timeout: 5000 + +development: + <<: *default + database: db/development.sqlite3 + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: db/test.sqlite3 + +production: + <<: *default + database: db/production.sqlite3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/environment.rb new file mode 100644 index 0000000..ee8d90d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require File.expand_path('../application', __FILE__) + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/environments/development.rb new file mode 100644 index 0000000..b55e214 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/environments/development.rb @@ -0,0 +1,41 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # Adds additional error checking when serving assets at runtime. + # Checks for improperly declared sprockets dependencies. + # Raises helpful error messages. + config.assets.raise_runtime_errors = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/environments/production.rb new file mode 100644 index 0000000..5c1b32e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/environments/production.rb @@ -0,0 +1,79 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like + # NGINX, varnish or squid. + # config.action_dispatch.rack_cache = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # 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-Accel-Redirect' # for NGINX + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug + + # Prepend all log lines with the following tags. + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/environments/test.rb new file mode 100644 index 0000000..1c19f08 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/environments/test.rb @@ -0,0 +1,42 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure static file server for tests with Cache-Control for performance. + config.serve_static_files = true + config.static_cache_control = 'public, max-age=3600' + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Randomize the order test cases are executed. + config.active_support.test_order = :random + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/initializers/assets.rb new file mode 100644 index 0000000..01ef3e6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/initializers/assets.rb @@ -0,0 +1,11 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path +# Rails.application.config.assets.paths << Emoji.images_path + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. +# Rails.application.config.assets.precompile += %w( search.js ) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..59385cd --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/initializers/cookies_serializer.rb new file mode 100644 index 0000000..7f70458 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/initializers/cookies_serializer.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000..4a994e1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/initializers/inflections.rb new file mode 100644 index 0000000..ac033bf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/initializers/mime_types.rb new file mode 100644 index 0000000..dc18996 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/initializers/mime_types.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/initializers/session_store.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/initializers/session_store.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/initializers/session_store.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..33725e9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] if respond_to?(:wrap_parameters) +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/locales/en.yml new file mode 100644 index 0000000..0653957 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/locales/en.yml @@ -0,0 +1,23 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/routes.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/routes.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/routes.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/secrets.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/config/secrets.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/config/secrets.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/db/migrate/20180802153530_create_dojos.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/db/migrate/20180802153530_create_dojos.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/db/migrate/20180802153530_create_dojos.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/db/migrate/20180802153530_create_dojos.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/db/migrate/20180802153742_create_ninjas.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/db/migrate/20180802153742_create_ninjas.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/db/migrate/20180802153742_create_ninjas.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/db/migrate/20180802153742_create_ninjas.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/db/schema.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/db/schema.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/db/schema.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/db/schema.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/db/seeds.rb new file mode 100644 index 0000000..4edb1e8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). +# +# Examples: +# +# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) +# Mayor.create(name: 'Emanuel', city: cities.first) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/lib/assets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/lib/tasks/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/log/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/public/404.html new file mode 100644 index 0000000..b612547 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +
+
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/public/422.html new file mode 100644 index 0000000..a21f82b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
+
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/public/500.html new file mode 100644 index 0000000..061abc5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/public/500.html @@ -0,0 +1,66 @@ + + + + We're sorry, but something went wrong (500) + + + + + + +
+
+

We're sorry, but something went wrong.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/public/robots.txt new file mode 100644 index 0000000..3c9c7c0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-agent: * +# Disallow: / diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/test/controllers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/test/controllers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/test/fixtures/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/test/fixtures/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/test/fixtures/dojos.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/test/fixtures/dojos.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/test/fixtures/dojos.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/test/fixtures/dojos.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/test/fixtures/ninjas.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/test/fixtures/ninjas.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/test/fixtures/ninjas.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/test/fixtures/ninjas.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/test/helpers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/test/helpers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/test/integration/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/test/integration/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/test/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/test/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/test/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/test/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/test/models/dojo_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/test/models/dojo_test.rb new file mode 100644 index 0000000..a078f30 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/test/models/dojo_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class DojoTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/test/models/ninja_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/test/models/ninja_test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/DojoNinjas/test/models/ninja_test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/test/models/ninja_test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/test/test_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/test/test_helper.rb new file mode 100644 index 0000000..92e39b2 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/test/test_helper.rb @@ -0,0 +1,10 @@ +ENV['RAILS_ENV'] ||= 'test' +require File.expand_path('../../config/environment', __FILE__) +require 'rails/test_help' + +class ActiveSupport::TestCase + # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. + fixtures :all + + # Add more helper methods to be used by all tests here... +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/vendor/assets/javascripts/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/DojoNinjas/vendor/assets/stylesheets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/.gitignore new file mode 100644 index 0000000..050c9d9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/.gitignore @@ -0,0 +1,17 @@ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore the default SQLite database. +/db/*.sqlite3 +/db/*.sqlite3-journal + +# Ignore all logfiles and tempfiles. +/log/* +!/log/.keep +/tmp diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/Gemfile similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/Gemfile rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/Gemfile diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/Gemfile.lock similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/Gemfile.lock rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/Gemfile.lock diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/README.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/README.txt similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/README.txt rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/README.txt diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/Rakefile new file mode 100644 index 0000000..ba6b733 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Rails.application.load_tasks diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/assets/images/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/assets/javascripts/application.js new file mode 100644 index 0000000..e07c5a8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/assets/javascripts/application.js @@ -0,0 +1,16 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require jquery +//= require jquery_ujs +//= require turbolinks +//= require_tree . diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/assets/stylesheets/application.css b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/assets/stylesheets/application.css new file mode 100644 index 0000000..f9cd5b3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/assets/stylesheets/application.css @@ -0,0 +1,15 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, + * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the bottom of the + * compiled file so the styles you add here take precedence over styles defined in any styles + * defined in the other CSS/SCSS files in this directory. It is generally better to create a new + * file per style scope. + * + *= require_tree . + *= require_self + */ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/controllers/application_controller.rb new file mode 100644 index 0000000..d83690e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/controllers/application_controller.rb @@ -0,0 +1,5 @@ +class ApplicationController < ActionController::Base + # Prevent CSRF attacks by raising an exception. + # For APIs, you may want to use :null_session instead. + protect_from_forgery with: :exception +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/controllers/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/helpers/application_helper.rb new file mode 100644 index 0000000..de6be79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/models/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/app/models/friendship.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/models/friendship.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/app/models/friendship.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/models/friendship.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/app/models/user.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/models/user.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/app/models/user.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/models/user.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/views/layouts/application.html.erb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/app/views/layouts/application.html.erb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/app/views/layouts/application.html.erb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/bin/bundle new file mode 100755 index 0000000..66e9889 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/bin/rails new file mode 100755 index 0000000..0138d79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/bin/rails @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +APP_PATH = File.expand_path('../../config/application', __FILE__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/bin/rake new file mode 100755 index 0000000..d87d5f5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/bin/rake @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/bin/setup new file mode 100755 index 0000000..acdb2c1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/bin/setup @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +Dir.chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file: + + puts "== Installing dependencies ==" + system "gem install bundler --conservative" + system "bundle check || bundle install" + + # puts "\n== Copying sample files ==" + # unless File.exist?("config/database.yml") + # system "cp config/database.yml.sample config/database.yml" + # end + + puts "\n== Preparing database ==" + system "bin/rake db:setup" + + puts "\n== Removing old logs and tempfiles ==" + system "rm -f log/*" + system "rm -rf tmp/cache" + + puts "\n== Restarting application server ==" + system "touch tmp/restart.txt" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/bin/spring new file mode 100755 index 0000000..fb2ec2e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/bin/spring @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +# This file loads spring without using Bundler, in order to be fast. +# It gets overwritten when you run the `spring binstub` command. + +unless defined?(Spring) + require 'rubygems' + require 'bundler' + + lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read) + spring = lockfile.specs.detect { |spec| spec.name == "spring" } + if spring + Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path + gem 'spring', spring.version + require 'spring/binstub' + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config.ru new file mode 100644 index 0000000..bd83b25 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Rails.application diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/application.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/application.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/application.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/boot.rb new file mode 100644 index 0000000..6b750f0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/boot.rb @@ -0,0 +1,3 @@ +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) + +require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/database.yml new file mode 100644 index 0000000..1c1a37c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/database.yml @@ -0,0 +1,25 @@ +# SQLite version 3.x +# gem install sqlite3 +# +# Ensure the SQLite 3 gem is defined in your Gemfile +# gem 'sqlite3' +# +default: &default + adapter: sqlite3 + pool: 5 + timeout: 5000 + +development: + <<: *default + database: db/development.sqlite3 + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: db/test.sqlite3 + +production: + <<: *default + database: db/production.sqlite3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/environment.rb new file mode 100644 index 0000000..ee8d90d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require File.expand_path('../application', __FILE__) + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/environments/development.rb new file mode 100644 index 0000000..b55e214 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/environments/development.rb @@ -0,0 +1,41 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # Adds additional error checking when serving assets at runtime. + # Checks for improperly declared sprockets dependencies. + # Raises helpful error messages. + config.assets.raise_runtime_errors = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/environments/production.rb new file mode 100644 index 0000000..5c1b32e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/environments/production.rb @@ -0,0 +1,79 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like + # NGINX, varnish or squid. + # config.action_dispatch.rack_cache = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # 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-Accel-Redirect' # for NGINX + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug + + # Prepend all log lines with the following tags. + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/environments/test.rb new file mode 100644 index 0000000..1c19f08 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/environments/test.rb @@ -0,0 +1,42 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure static file server for tests with Cache-Control for performance. + config.serve_static_files = true + config.static_cache_control = 'public, max-age=3600' + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Randomize the order test cases are executed. + config.active_support.test_order = :random + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/initializers/assets.rb new file mode 100644 index 0000000..01ef3e6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/initializers/assets.rb @@ -0,0 +1,11 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path +# Rails.application.config.assets.paths << Emoji.images_path + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. +# Rails.application.config.assets.precompile += %w( search.js ) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..59385cd --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/initializers/cookies_serializer.rb new file mode 100644 index 0000000..7f70458 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/initializers/cookies_serializer.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000..4a994e1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/initializers/inflections.rb new file mode 100644 index 0000000..ac033bf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/initializers/mime_types.rb new file mode 100644 index 0000000..dc18996 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/initializers/mime_types.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/initializers/session_store.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/initializers/session_store.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/initializers/session_store.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..33725e9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] if respond_to?(:wrap_parameters) +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/locales/en.yml new file mode 100644 index 0000000..0653957 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/locales/en.yml @@ -0,0 +1,23 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/routes.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/routes.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/routes.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/secrets.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/config/secrets.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/config/secrets.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/db/migrate/20180805054511_create_users.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/db/migrate/20180805054511_create_users.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/db/migrate/20180805054511_create_users.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/db/migrate/20180805054511_create_users.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/db/migrate/20180805054805_create_friendships.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/db/migrate/20180805054805_create_friendships.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/db/migrate/20180805054805_create_friendships.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/db/migrate/20180805054805_create_friendships.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/db/schema.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/db/schema.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/db/schema.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/db/schema.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/db/seeds.rb new file mode 100644 index 0000000..4edb1e8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). +# +# Examples: +# +# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) +# Mayor.create(name: 'Emanuel', city: cities.first) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/lib/assets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/lib/tasks/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/log/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/public/404.html new file mode 100644 index 0000000..b612547 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +
+
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/public/422.html new file mode 100644 index 0000000..a21f82b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
+
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/public/500.html new file mode 100644 index 0000000..061abc5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/public/500.html @@ -0,0 +1,66 @@ + + + + We're sorry, but something went wrong (500) + + + + + + +
+
+

We're sorry, but something went wrong.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/public/robots.txt new file mode 100644 index 0000000..3c9c7c0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-agent: * +# Disallow: / diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/test/controllers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/test/controllers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/test/fixtures/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/test/fixtures/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/test/fixtures/friendships.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/test/fixtures/friendships.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/test/fixtures/friendships.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/test/fixtures/friendships.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/test/fixtures/users.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/test/fixtures/users.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/test/fixtures/users.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/test/fixtures/users.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/test/helpers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/test/helpers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/test/integration/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/test/integration/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/test/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/test/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/test/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/test/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/test/models/friendship_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/test/models/friendship_test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Friendships_SelfJoin/test/models/friendship_test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/test/models/friendship_test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/test/models/user_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/test/models/user_test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/test/models/user_test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/test/models/user_test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/test/test_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/test/test_helper.rb new file mode 100644 index 0000000..92e39b2 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/test/test_helper.rb @@ -0,0 +1,10 @@ +ENV['RAILS_ENV'] ||= 'test' +require File.expand_path('../../config/environment', __FILE__) +require 'rails/test_help' + +class ActiveSupport::TestCase + # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. + fixtures :all + + # Add more helper methods to be used by all tests here... +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/vendor/assets/javascripts/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Friendships_SelfJoin/vendor/assets/stylesheets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/.gitignore new file mode 100644 index 0000000..050c9d9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/.gitignore @@ -0,0 +1,17 @@ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore the default SQLite database. +/db/*.sqlite3 +/db/*.sqlite3-journal + +# Ignore all logfiles and tempfiles. +/log/* +!/log/.keep +/tmp diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/Gemfile similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/Gemfile rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/Gemfile diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/Gemfile.lock similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/Gemfile.lock rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/Gemfile.lock diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/README.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/README.txt similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/README.txt rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/README.txt diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/Rakefile new file mode 100644 index 0000000..ba6b733 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Rails.application.load_tasks diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/assets/images/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/assets/javascripts/application.js new file mode 100644 index 0000000..e07c5a8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/assets/javascripts/application.js @@ -0,0 +1,16 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require jquery +//= require jquery_ujs +//= require turbolinks +//= require_tree . diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/assets/stylesheets/application.css b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/assets/stylesheets/application.css new file mode 100644 index 0000000..f9cd5b3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/assets/stylesheets/application.css @@ -0,0 +1,15 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, + * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the bottom of the + * compiled file so the styles you add here take precedence over styles defined in any styles + * defined in the other CSS/SCSS files in this directory. It is generally better to create a new + * file per style scope. + * + *= require_tree . + *= require_self + */ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/controllers/application_controller.rb new file mode 100644 index 0000000..d83690e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/controllers/application_controller.rb @@ -0,0 +1,5 @@ +class ApplicationController < ActionController::Base + # Prevent CSRF attacks by raising an exception. + # For APIs, you may want to use :null_session instead. + protect_from_forgery with: :exception +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/controllers/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/helpers/application_helper.rb new file mode 100644 index 0000000..de6be79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/models/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/app/models/follow.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/models/follow.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/app/models/follow.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/models/follow.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/app/models/user.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/models/user.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/app/models/user.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/models/user.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/views/layouts/application.html.erb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/app/views/layouts/application.html.erb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/app/views/layouts/application.html.erb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/bin/bundle new file mode 100755 index 0000000..66e9889 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/bin/rails new file mode 100755 index 0000000..0138d79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/bin/rails @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +APP_PATH = File.expand_path('../../config/application', __FILE__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/bin/rake new file mode 100755 index 0000000..d87d5f5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/bin/rake @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/bin/setup new file mode 100755 index 0000000..acdb2c1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/bin/setup @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +Dir.chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file: + + puts "== Installing dependencies ==" + system "gem install bundler --conservative" + system "bundle check || bundle install" + + # puts "\n== Copying sample files ==" + # unless File.exist?("config/database.yml") + # system "cp config/database.yml.sample config/database.yml" + # end + + puts "\n== Preparing database ==" + system "bin/rake db:setup" + + puts "\n== Removing old logs and tempfiles ==" + system "rm -f log/*" + system "rm -rf tmp/cache" + + puts "\n== Restarting application server ==" + system "touch tmp/restart.txt" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/bin/spring new file mode 100755 index 0000000..fb2ec2e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/bin/spring @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +# This file loads spring without using Bundler, in order to be fast. +# It gets overwritten when you run the `spring binstub` command. + +unless defined?(Spring) + require 'rubygems' + require 'bundler' + + lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read) + spring = lockfile.specs.detect { |spec| spec.name == "spring" } + if spring + Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path + gem 'spring', spring.version + require 'spring/binstub' + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config.ru new file mode 100644 index 0000000..bd83b25 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Rails.application diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/application.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/application.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/application.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/boot.rb new file mode 100644 index 0000000..6b750f0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/boot.rb @@ -0,0 +1,3 @@ +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) + +require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/database.yml new file mode 100644 index 0000000..1c1a37c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/database.yml @@ -0,0 +1,25 @@ +# SQLite version 3.x +# gem install sqlite3 +# +# Ensure the SQLite 3 gem is defined in your Gemfile +# gem 'sqlite3' +# +default: &default + adapter: sqlite3 + pool: 5 + timeout: 5000 + +development: + <<: *default + database: db/development.sqlite3 + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: db/test.sqlite3 + +production: + <<: *default + database: db/production.sqlite3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/environment.rb new file mode 100644 index 0000000..ee8d90d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require File.expand_path('../application', __FILE__) + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/environments/development.rb new file mode 100644 index 0000000..b55e214 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/environments/development.rb @@ -0,0 +1,41 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # Adds additional error checking when serving assets at runtime. + # Checks for improperly declared sprockets dependencies. + # Raises helpful error messages. + config.assets.raise_runtime_errors = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/environments/production.rb new file mode 100644 index 0000000..5c1b32e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/environments/production.rb @@ -0,0 +1,79 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like + # NGINX, varnish or squid. + # config.action_dispatch.rack_cache = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # 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-Accel-Redirect' # for NGINX + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug + + # Prepend all log lines with the following tags. + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/environments/test.rb new file mode 100644 index 0000000..1c19f08 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/environments/test.rb @@ -0,0 +1,42 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure static file server for tests with Cache-Control for performance. + config.serve_static_files = true + config.static_cache_control = 'public, max-age=3600' + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Randomize the order test cases are executed. + config.active_support.test_order = :random + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/initializers/assets.rb new file mode 100644 index 0000000..01ef3e6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/initializers/assets.rb @@ -0,0 +1,11 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path +# Rails.application.config.assets.paths << Emoji.images_path + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. +# Rails.application.config.assets.precompile += %w( search.js ) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..59385cd --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/initializers/cookies_serializer.rb new file mode 100644 index 0000000..7f70458 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/initializers/cookies_serializer.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000..4a994e1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/initializers/inflections.rb new file mode 100644 index 0000000..ac033bf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/initializers/mime_types.rb new file mode 100644 index 0000000..dc18996 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/initializers/mime_types.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/initializers/session_store.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/initializers/session_store.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/initializers/session_store.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..33725e9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] if respond_to?(:wrap_parameters) +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/locales/en.yml new file mode 100644 index 0000000..0653957 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/locales/en.yml @@ -0,0 +1,23 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/routes.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/routes.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/routes.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/secrets.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/config/secrets.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/config/secrets.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/db/migrate/20180805024627_create_users.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/db/migrate/20180805024627_create_users.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/db/migrate/20180805024627_create_users.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/db/migrate/20180805024627_create_users.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/db/migrate/20180805030359_create_follows.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/db/migrate/20180805030359_create_follows.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/db/migrate/20180805030359_create_follows.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/db/migrate/20180805030359_create_follows.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/db/schema.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/db/schema.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/db/schema.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/db/schema.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/db/seeds.rb new file mode 100644 index 0000000..4edb1e8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). +# +# Examples: +# +# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) +# Mayor.create(name: 'Emanuel', city: cities.first) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/lib/assets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/lib/tasks/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/log/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/public/404.html new file mode 100644 index 0000000..b612547 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +
+
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/public/422.html new file mode 100644 index 0000000..a21f82b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
+
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/public/500.html new file mode 100644 index 0000000..061abc5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/public/500.html @@ -0,0 +1,66 @@ + + + + We're sorry, but something went wrong (500) + + + + + + +
+
+

We're sorry, but something went wrong.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/public/robots.txt new file mode 100644 index 0000000..3c9c7c0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-agent: * +# Disallow: / diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/test/controllers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/test/controllers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/test/fixtures/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/test/fixtures/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/test/fixtures/follows.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/test/fixtures/follows.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/test/fixtures/follows.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/test/fixtures/follows.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/test/fixtures/users.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/test/fixtures/users.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/test/fixtures/users.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/test/fixtures/users.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/test/helpers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/test/helpers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/test/integration/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/test/integration/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/test/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/test/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/test/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/test/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/test/models/follow_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/test/models/follow_test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Instagram_SelfJoin/test/models/follow_test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/test/models/follow_test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/test/models/user_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/test/models/user_test.rb new file mode 100644 index 0000000..82f61e0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/test/models/user_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class UserTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/test/test_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/test/test_helper.rb new file mode 100644 index 0000000..92e39b2 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/test/test_helper.rb @@ -0,0 +1,10 @@ +ENV['RAILS_ENV'] ||= 'test' +require File.expand_path('../../config/environment', __FILE__) +require 'rails/test_help' + +class ActiveSupport::TestCase + # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. + fixtures :all + + # Add more helper methods to be used by all tests here... +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/vendor/assets/javascripts/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Instagram_SelfJoin/vendor/assets/stylesheets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/.gitignore new file mode 100644 index 0000000..050c9d9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/.gitignore @@ -0,0 +1,17 @@ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore the default SQLite database. +/db/*.sqlite3 +/db/*.sqlite3-journal + +# Ignore all logfiles and tempfiles. +/log/* +!/log/.keep +/tmp diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/Gemfile similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/Gemfile rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/Gemfile diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/Gemfile.lock similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/Gemfile.lock rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/Gemfile.lock diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/README.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/README.txt similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/README.txt rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/README.txt diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/Rakefile new file mode 100644 index 0000000..ba6b733 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Rails.application.load_tasks diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/assets/images/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/assets/javascripts/application.js new file mode 100644 index 0000000..e07c5a8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/assets/javascripts/application.js @@ -0,0 +1,16 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require jquery +//= require jquery_ujs +//= require turbolinks +//= require_tree . diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/assets/stylesheets/application.css b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/assets/stylesheets/application.css new file mode 100644 index 0000000..f9cd5b3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/assets/stylesheets/application.css @@ -0,0 +1,15 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, + * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the bottom of the + * compiled file so the styles you add here take precedence over styles defined in any styles + * defined in the other CSS/SCSS files in this directory. It is generally better to create a new + * file per style scope. + * + *= require_tree . + *= require_self + */ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/controllers/application_controller.rb new file mode 100644 index 0000000..d83690e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/controllers/application_controller.rb @@ -0,0 +1,5 @@ +class ApplicationController < ActionController::Base + # Prevent CSRF attacks by raising an exception. + # For APIs, you may want to use :null_session instead. + protect_from_forgery with: :exception +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/controllers/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/helpers/application_helper.rb new file mode 100644 index 0000000..de6be79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/models/blog.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/models/blog.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/models/blog.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/models/blog.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/models/comment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/models/comment.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/models/comment.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/models/comment.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/models/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/models/messsage.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/models/messsage.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/models/messsage.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/models/messsage.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/models/owner.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/models/owner.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/models/owner.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/models/owner.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/models/post.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/models/post.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/models/post.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/models/post.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/models/user.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/models/user.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/models/user.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/models/user.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/views/layouts/application.html.erb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/app/views/layouts/application.html.erb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/app/views/layouts/application.html.erb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/bin/bundle new file mode 100755 index 0000000..66e9889 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/bin/rails new file mode 100755 index 0000000..0138d79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/bin/rails @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +APP_PATH = File.expand_path('../../config/application', __FILE__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/bin/rake new file mode 100755 index 0000000..d87d5f5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/bin/rake @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/bin/setup new file mode 100755 index 0000000..acdb2c1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/bin/setup @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +Dir.chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file: + + puts "== Installing dependencies ==" + system "gem install bundler --conservative" + system "bundle check || bundle install" + + # puts "\n== Copying sample files ==" + # unless File.exist?("config/database.yml") + # system "cp config/database.yml.sample config/database.yml" + # end + + puts "\n== Preparing database ==" + system "bin/rake db:setup" + + puts "\n== Removing old logs and tempfiles ==" + system "rm -f log/*" + system "rm -rf tmp/cache" + + puts "\n== Restarting application server ==" + system "touch tmp/restart.txt" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/bin/spring new file mode 100755 index 0000000..fb2ec2e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/bin/spring @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +# This file loads spring without using Bundler, in order to be fast. +# It gets overwritten when you run the `spring binstub` command. + +unless defined?(Spring) + require 'rubygems' + require 'bundler' + + lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read) + spring = lockfile.specs.detect { |spec| spec.name == "spring" } + if spring + Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path + gem 'spring', spring.version + require 'spring/binstub' + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config.ru new file mode 100644 index 0000000..bd83b25 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Rails.application diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/application.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/application.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/application.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/boot.rb new file mode 100644 index 0000000..6b750f0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/boot.rb @@ -0,0 +1,3 @@ +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) + +require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/database.yml new file mode 100644 index 0000000..1c1a37c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/database.yml @@ -0,0 +1,25 @@ +# SQLite version 3.x +# gem install sqlite3 +# +# Ensure the SQLite 3 gem is defined in your Gemfile +# gem 'sqlite3' +# +default: &default + adapter: sqlite3 + pool: 5 + timeout: 5000 + +development: + <<: *default + database: db/development.sqlite3 + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: db/test.sqlite3 + +production: + <<: *default + database: db/production.sqlite3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/environment.rb new file mode 100644 index 0000000..ee8d90d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require File.expand_path('../application', __FILE__) + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/environments/development.rb new file mode 100644 index 0000000..b55e214 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/environments/development.rb @@ -0,0 +1,41 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # Adds additional error checking when serving assets at runtime. + # Checks for improperly declared sprockets dependencies. + # Raises helpful error messages. + config.assets.raise_runtime_errors = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/environments/production.rb new file mode 100644 index 0000000..5c1b32e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/environments/production.rb @@ -0,0 +1,79 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like + # NGINX, varnish or squid. + # config.action_dispatch.rack_cache = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # 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-Accel-Redirect' # for NGINX + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug + + # Prepend all log lines with the following tags. + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/environments/test.rb new file mode 100644 index 0000000..1c19f08 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/environments/test.rb @@ -0,0 +1,42 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure static file server for tests with Cache-Control for performance. + config.serve_static_files = true + config.static_cache_control = 'public, max-age=3600' + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Randomize the order test cases are executed. + config.active_support.test_order = :random + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/initializers/assets.rb new file mode 100644 index 0000000..01ef3e6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/initializers/assets.rb @@ -0,0 +1,11 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path +# Rails.application.config.assets.paths << Emoji.images_path + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. +# Rails.application.config.assets.precompile += %w( search.js ) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..59385cd --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/initializers/cookies_serializer.rb new file mode 100644 index 0000000..7f70458 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/initializers/cookies_serializer.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000..4a994e1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/initializers/inflections.rb new file mode 100644 index 0000000..ac033bf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/initializers/mime_types.rb new file mode 100644 index 0000000..dc18996 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/initializers/mime_types.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/initializers/session_store.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/initializers/session_store.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/initializers/session_store.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..33725e9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] if respond_to?(:wrap_parameters) +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/locales/en.yml new file mode 100644 index 0000000..0653957 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/locales/en.yml @@ -0,0 +1,23 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/routes.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/routes.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/routes.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/secrets.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/config/secrets.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/config/secrets.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/db/migrate/20180803161149_create_users.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/db/migrate/20180803161149_create_users.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/db/migrate/20180803161149_create_users.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/db/migrate/20180803161149_create_users.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/db/migrate/20180803162114_create_blogs.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/db/migrate/20180803162114_create_blogs.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/db/migrate/20180803162114_create_blogs.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/db/migrate/20180803162114_create_blogs.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/db/migrate/20180803162409_create_posts.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/db/migrate/20180803162409_create_posts.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/db/migrate/20180803162409_create_posts.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/db/migrate/20180803162409_create_posts.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/db/migrate/20180803162518_create_messsages.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/db/migrate/20180803162518_create_messsages.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/db/migrate/20180803162518_create_messsages.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/db/migrate/20180803162518_create_messsages.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/db/migrate/20180803162655_create_owners.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/db/migrate/20180803162655_create_owners.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/db/migrate/20180803162655_create_owners.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/db/migrate/20180803162655_create_owners.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/db/migrate/20180804224501_create_comments.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/db/migrate/20180804224501_create_comments.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/db/migrate/20180804224501_create_comments.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/db/migrate/20180804224501_create_comments.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/db/schema.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/db/schema.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/db/schema.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/db/schema.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/db/seeds.rb new file mode 100644 index 0000000..4edb1e8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). +# +# Examples: +# +# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) +# Mayor.create(name: 'Emanuel', city: cities.first) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/lib/assets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/lib/tasks/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/log/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/public/404.html new file mode 100644 index 0000000..b612547 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +
+
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/public/422.html new file mode 100644 index 0000000..a21f82b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
+
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/public/500.html new file mode 100644 index 0000000..061abc5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/public/500.html @@ -0,0 +1,66 @@ + + + + We're sorry, but something went wrong (500) + + + + + + +
+
+

We're sorry, but something went wrong.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/public/robots.txt new file mode 100644 index 0000000..3c9c7c0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-agent: * +# Disallow: / diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/q b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/q similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/q rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/q diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/controllers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/controllers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/fixtures/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/fixtures/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/fixtures/blogs.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/fixtures/blogs.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/fixtures/blogs.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/fixtures/blogs.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/fixtures/comments.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/fixtures/comments.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/fixtures/comments.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/fixtures/comments.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/fixtures/messsages.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/fixtures/messsages.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/fixtures/messsages.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/fixtures/messsages.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/fixtures/owners.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/fixtures/owners.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/fixtures/owners.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/fixtures/owners.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/fixtures/posts.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/fixtures/posts.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/fixtures/posts.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/fixtures/posts.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/fixtures/users.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/fixtures/users.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/fixtures/users.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/fixtures/users.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/helpers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/helpers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/integration/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/integration/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/models/blog_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/models/blog_test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/models/blog_test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/models/blog_test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/models/comment_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/models/comment_test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/models/comment_test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/models/comment_test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/models/messsage_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/models/messsage_test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/models/messsage_test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/models/messsage_test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/models/owner_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/models/owner_test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/Polymorphism/test/models/owner_test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/models/owner_test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/models/post_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/models/post_test.rb new file mode 100644 index 0000000..6d9d463 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/models/post_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class PostTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/models/user_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/models/user_test.rb new file mode 100644 index 0000000..82f61e0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/models/user_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class UserTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/test_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/test_helper.rb new file mode 100644 index 0000000..92e39b2 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/test/test_helper.rb @@ -0,0 +1,10 @@ +ENV['RAILS_ENV'] ||= 'test' +require File.expand_path('../../config/environment', __FILE__) +require 'rails/test_help' + +class ActiveSupport::TestCase + # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. + fixtures :all + + # Add more helper methods to be used by all tests here... +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/vendor/assets/javascripts/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Polymorphism/vendor/assets/stylesheets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/.gitignore new file mode 100644 index 0000000..050c9d9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/.gitignore @@ -0,0 +1,17 @@ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore the default SQLite database. +/db/*.sqlite3 +/db/*.sqlite3-journal + +# Ignore all logfiles and tempfiles. +/log/* +!/log/.keep +/tmp diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/Gemfile similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/Gemfile rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/Gemfile diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/Gemfile.lock similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/Gemfile.lock rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/Gemfile.lock diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/README.pdf b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/README.pdf similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/README.pdf rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/README.pdf diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/Rakefile new file mode 100644 index 0000000..ba6b733 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Rails.application.load_tasks diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/assets/images/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/assets/javascripts/application.js new file mode 100644 index 0000000..e07c5a8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/assets/javascripts/application.js @@ -0,0 +1,16 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require jquery +//= require jquery_ujs +//= require turbolinks +//= require_tree . diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/assets/stylesheets/application.css b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/assets/stylesheets/application.css new file mode 100644 index 0000000..f9cd5b3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/assets/stylesheets/application.css @@ -0,0 +1,15 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, + * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the bottom of the + * compiled file so the styles you add here take precedence over styles defined in any styles + * defined in the other CSS/SCSS files in this directory. It is generally better to create a new + * file per style scope. + * + *= require_tree . + *= require_self + */ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/controllers/application_controller.rb new file mode 100644 index 0000000..d83690e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/controllers/application_controller.rb @@ -0,0 +1,5 @@ +class ApplicationController < ActionController::Base + # Prevent CSRF attacks by raising an exception. + # For APIs, you may want to use :null_session instead. + protect_from_forgery with: :exception +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/controllers/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/helpers/application_helper.rb new file mode 100644 index 0000000..de6be79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/models/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/app/models/player.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/models/player.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/app/models/player.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/models/player.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/app/models/team.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/models/team.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/app/models/team.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/models/team.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/views/layouts/application.html.erb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/app/views/layouts/application.html.erb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/app/views/layouts/application.html.erb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/bin/bundle new file mode 100755 index 0000000..66e9889 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/bin/rails new file mode 100755 index 0000000..0138d79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/bin/rails @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +APP_PATH = File.expand_path('../../config/application', __FILE__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/bin/rake new file mode 100755 index 0000000..d87d5f5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/bin/rake @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/bin/setup new file mode 100755 index 0000000..acdb2c1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/bin/setup @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +Dir.chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file: + + puts "== Installing dependencies ==" + system "gem install bundler --conservative" + system "bundle check || bundle install" + + # puts "\n== Copying sample files ==" + # unless File.exist?("config/database.yml") + # system "cp config/database.yml.sample config/database.yml" + # end + + puts "\n== Preparing database ==" + system "bin/rake db:setup" + + puts "\n== Removing old logs and tempfiles ==" + system "rm -f log/*" + system "rm -rf tmp/cache" + + puts "\n== Restarting application server ==" + system "touch tmp/restart.txt" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/bin/spring new file mode 100755 index 0000000..fb2ec2e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/bin/spring @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +# This file loads spring without using Bundler, in order to be fast. +# It gets overwritten when you run the `spring binstub` command. + +unless defined?(Spring) + require 'rubygems' + require 'bundler' + + lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read) + spring = lockfile.specs.detect { |spec| spec.name == "spring" } + if spring + Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path + gem 'spring', spring.version + require 'spring/binstub' + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config.ru new file mode 100644 index 0000000..bd83b25 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Rails.application diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/application.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/application.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/application.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/boot.rb new file mode 100644 index 0000000..6b750f0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/boot.rb @@ -0,0 +1,3 @@ +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) + +require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/database.yml new file mode 100644 index 0000000..1c1a37c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/database.yml @@ -0,0 +1,25 @@ +# SQLite version 3.x +# gem install sqlite3 +# +# Ensure the SQLite 3 gem is defined in your Gemfile +# gem 'sqlite3' +# +default: &default + adapter: sqlite3 + pool: 5 + timeout: 5000 + +development: + <<: *default + database: db/development.sqlite3 + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: db/test.sqlite3 + +production: + <<: *default + database: db/production.sqlite3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/environment.rb new file mode 100644 index 0000000..ee8d90d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require File.expand_path('../application', __FILE__) + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/environments/development.rb new file mode 100644 index 0000000..b55e214 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/environments/development.rb @@ -0,0 +1,41 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # Adds additional error checking when serving assets at runtime. + # Checks for improperly declared sprockets dependencies. + # Raises helpful error messages. + config.assets.raise_runtime_errors = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/environments/production.rb new file mode 100644 index 0000000..5c1b32e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/environments/production.rb @@ -0,0 +1,79 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like + # NGINX, varnish or squid. + # config.action_dispatch.rack_cache = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # 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-Accel-Redirect' # for NGINX + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug + + # Prepend all log lines with the following tags. + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/environments/test.rb new file mode 100644 index 0000000..1c19f08 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/environments/test.rb @@ -0,0 +1,42 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure static file server for tests with Cache-Control for performance. + config.serve_static_files = true + config.static_cache_control = 'public, max-age=3600' + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Randomize the order test cases are executed. + config.active_support.test_order = :random + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/initializers/assets.rb new file mode 100644 index 0000000..01ef3e6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/initializers/assets.rb @@ -0,0 +1,11 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path +# Rails.application.config.assets.paths << Emoji.images_path + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. +# Rails.application.config.assets.precompile += %w( search.js ) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..59385cd --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/initializers/cookies_serializer.rb new file mode 100644 index 0000000..7f70458 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/initializers/cookies_serializer.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000..4a994e1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/initializers/inflections.rb new file mode 100644 index 0000000..ac033bf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/initializers/mime_types.rb new file mode 100644 index 0000000..dc18996 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/initializers/mime_types.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/initializers/session_store.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/initializers/session_store.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/initializers/session_store.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..33725e9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] if respond_to?(:wrap_parameters) +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/locales/en.yml new file mode 100644 index 0000000..0653957 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/locales/en.yml @@ -0,0 +1,23 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/routes.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/routes.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/routes.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/secrets.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/config/secrets.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/config/secrets.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/db/migrate/20180803015851_create_teams.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/db/migrate/20180803015851_create_teams.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/db/migrate/20180803015851_create_teams.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/db/migrate/20180803015851_create_teams.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/db/migrate/20180803015857_create_players.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/db/migrate/20180803015857_create_players.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/db/migrate/20180803015857_create_players.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/db/migrate/20180803015857_create_players.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/db/schema.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/db/schema.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/db/schema.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/db/schema.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/db/seeds.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/db/seeds.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/db/seeds.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/lib/assets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/lib/tasks/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/log/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/public/404.html new file mode 100644 index 0000000..b612547 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +
+
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/public/422.html new file mode 100644 index 0000000..a21f82b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
+
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/public/500.html new file mode 100644 index 0000000..061abc5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/public/500.html @@ -0,0 +1,66 @@ + + + + We're sorry, but something went wrong (500) + + + + + + +
+
+

We're sorry, but something went wrong.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/public/robots.txt new file mode 100644 index 0000000..3c9c7c0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-agent: * +# Disallow: / diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/test/controllers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/test/controllers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/test/fixtures/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/test/fixtures/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/test/fixtures/players.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/test/fixtures/players.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/test/fixtures/players.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/test/fixtures/players.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/test/fixtures/teams.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/test/fixtures/teams.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/test/fixtures/teams.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/test/fixtures/teams.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/test/helpers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/test/helpers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/test/integration/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/test/integration/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/test/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/test/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/test/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/test/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/test/models/player_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/test/models/player_test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/test/models/player_test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/test/models/player_test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/test/models/team_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/test/models/team_test.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/QueryOptimization/test/models/team_test.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/test/models/team_test.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/test/test_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/test/test_helper.rb new file mode 100644 index 0000000..92e39b2 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/test/test_helper.rb @@ -0,0 +1,10 @@ +ENV['RAILS_ENV'] ||= 'test' +require File.expand_path('../../config/environment', __FILE__) +require 'rails/test_help' + +class ActiveSupport::TestCase + # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. + fixtures :all + + # Add more helper methods to be used by all tests here... +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/vendor/assets/javascripts/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/QueryOptimization/vendor/assets/stylesheets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/.gitignore similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/.gitignore rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/.gitignore diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/Gemfile similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/Gemfile rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/Gemfile diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/Gemfile.lock similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/Gemfile.lock rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/Gemfile.lock diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/README.rdoc b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/README.rdoc new file mode 100644 index 0000000..dd4e97e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/README.rdoc @@ -0,0 +1,28 @@ +== README + +This README would normally document whatever steps are necessary to get the +application up and running. + +Things you may want to cover: + +* Ruby version + +* System dependencies + +* Configuration + +* Database creation + +* Database initialization + +* How to run the test suite + +* Services (job queues, cache servers, search engines, etc.) + +* Deployment instructions + +* ... + + +Please feel free to use a different markup language if you do not plan to run +rake doc:app. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/Rakefile new file mode 100644 index 0000000..ba6b733 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Rails.application.load_tasks diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/app/assets/images/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/app/assets/javascripts/application.js new file mode 100644 index 0000000..e07c5a8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/app/assets/javascripts/application.js @@ -0,0 +1,16 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require jquery +//= require jquery_ujs +//= require turbolinks +//= require_tree . diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/app/assets/stylesheets/application.css b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/app/assets/stylesheets/application.css new file mode 100644 index 0000000..f9cd5b3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/app/assets/stylesheets/application.css @@ -0,0 +1,15 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, + * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the bottom of the + * compiled file so the styles you add here take precedence over styles defined in any styles + * defined in the other CSS/SCSS files in this directory. It is generally better to create a new + * file per style scope. + * + *= require_tree . + *= require_self + */ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/app/controllers/application_controller.rb new file mode 100644 index 0000000..d83690e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/app/controllers/application_controller.rb @@ -0,0 +1,5 @@ +class ApplicationController < ActionController::Base + # Prevent CSRF attacks by raising an exception. + # For APIs, you may want to use :null_session instead. + protect_from_forgery with: :exception +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/app/controllers/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/app/helpers/application_helper.rb new file mode 100644 index 0000000..de6be79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/app/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/app/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/app/models/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/app/models/user.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/app/models/user.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/app/models/user.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/app/models/user.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/app/views/layouts/application.html.erb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/app/views/layouts/application.html.erb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/app/views/layouts/application.html.erb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/bin/bundle new file mode 100755 index 0000000..66e9889 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/bin/rails new file mode 100755 index 0000000..0138d79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/bin/rails @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +APP_PATH = File.expand_path('../../config/application', __FILE__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/bin/rake new file mode 100755 index 0000000..d87d5f5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/bin/rake @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/bin/setup new file mode 100755 index 0000000..acdb2c1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/bin/setup @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +Dir.chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file: + + puts "== Installing dependencies ==" + system "gem install bundler --conservative" + system "bundle check || bundle install" + + # puts "\n== Copying sample files ==" + # unless File.exist?("config/database.yml") + # system "cp config/database.yml.sample config/database.yml" + # end + + puts "\n== Preparing database ==" + system "bin/rake db:setup" + + puts "\n== Removing old logs and tempfiles ==" + system "rm -f log/*" + system "rm -rf tmp/cache" + + puts "\n== Restarting application server ==" + system "touch tmp/restart.txt" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/bin/spring new file mode 100755 index 0000000..fb2ec2e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/bin/spring @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +# This file loads spring without using Bundler, in order to be fast. +# It gets overwritten when you run the `spring binstub` command. + +unless defined?(Spring) + require 'rubygems' + require 'bundler' + + lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read) + spring = lockfile.specs.detect { |spec| spec.name == "spring" } + if spring + Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path + gem 'spring', spring.version + require 'spring/binstub' + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config.ru new file mode 100644 index 0000000..bd83b25 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Rails.application diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/application.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/application.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/application.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/boot.rb new file mode 100644 index 0000000..6b750f0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/boot.rb @@ -0,0 +1,3 @@ +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) + +require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/database.yml new file mode 100644 index 0000000..1c1a37c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/database.yml @@ -0,0 +1,25 @@ +# SQLite version 3.x +# gem install sqlite3 +# +# Ensure the SQLite 3 gem is defined in your Gemfile +# gem 'sqlite3' +# +default: &default + adapter: sqlite3 + pool: 5 + timeout: 5000 + +development: + <<: *default + database: db/development.sqlite3 + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: db/test.sqlite3 + +production: + <<: *default + database: db/production.sqlite3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/environment.rb new file mode 100644 index 0000000..ee8d90d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require File.expand_path('../application', __FILE__) + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/environments/development.rb new file mode 100644 index 0000000..b55e214 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/environments/development.rb @@ -0,0 +1,41 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # Adds additional error checking when serving assets at runtime. + # Checks for improperly declared sprockets dependencies. + # Raises helpful error messages. + config.assets.raise_runtime_errors = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/environments/production.rb new file mode 100644 index 0000000..5c1b32e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/environments/production.rb @@ -0,0 +1,79 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like + # NGINX, varnish or squid. + # config.action_dispatch.rack_cache = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # 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-Accel-Redirect' # for NGINX + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug + + # Prepend all log lines with the following tags. + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/environments/test.rb new file mode 100644 index 0000000..1c19f08 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/environments/test.rb @@ -0,0 +1,42 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure static file server for tests with Cache-Control for performance. + config.serve_static_files = true + config.static_cache_control = 'public, max-age=3600' + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Randomize the order test cases are executed. + config.active_support.test_order = :random + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/initializers/assets.rb new file mode 100644 index 0000000..01ef3e6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/initializers/assets.rb @@ -0,0 +1,11 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path +# Rails.application.config.assets.paths << Emoji.images_path + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. +# Rails.application.config.assets.precompile += %w( search.js ) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..59385cd --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/initializers/cookies_serializer.rb new file mode 100644 index 0000000..7f70458 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/initializers/cookies_serializer.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000..4a994e1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/initializers/inflections.rb new file mode 100644 index 0000000..ac033bf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/initializers/mime_types.rb new file mode 100644 index 0000000..dc18996 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/initializers/mime_types.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/initializers/session_store.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/initializers/session_store.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/initializers/session_store.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..33725e9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] if respond_to?(:wrap_parameters) +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/locales/en.yml new file mode 100644 index 0000000..0653957 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/locales/en.yml @@ -0,0 +1,23 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/routes.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/routes.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/routes.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/secrets.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/config/secrets.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/config/secrets.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/db/migrate/20180801162703_create_users.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/db/migrate/20180801162703_create_users.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/db/migrate/20180801162703_create_users.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/db/migrate/20180801162703_create_users.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/db/schema.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/db/schema.rb similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/db/schema.rb rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/db/schema.rb diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/db/seeds.rb new file mode 100644 index 0000000..4edb1e8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). +# +# Examples: +# +# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) +# Mayor.create(name: 'Emanuel', city: cities.first) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/lib/assets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/lib/tasks/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/log/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/public/404.html new file mode 100644 index 0000000..b612547 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +
+
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/public/422.html new file mode 100644 index 0000000..a21f82b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
+
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/public/500.html new file mode 100644 index 0000000..061abc5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/public/500.html @@ -0,0 +1,66 @@ + + + + We're sorry, but something went wrong (500) + + + + + + +
+
+

We're sorry, but something went wrong.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/public/robots.txt new file mode 100644 index 0000000..3c9c7c0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-agent: * +# Disallow: / diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/test/controllers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/test/controllers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/test/fixtures/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/test/fixtures/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/users/test/fixtures/users.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/test/fixtures/users.yml similarity index 100% rename from ObiFenix-RubyStack/Ruby-Stack/Rails/users/test/fixtures/users.yml rename to ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/test/fixtures/users.yml diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/test/helpers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/test/helpers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/test/integration/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/test/integration/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/test/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/test/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/test/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/test/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/test/models/user_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/test/models/user_test.rb new file mode 100644 index 0000000..82f61e0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/test/models/user_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class UserTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/test/test_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/test/test_helper.rb new file mode 100644 index 0000000..92e39b2 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/test/test_helper.rb @@ -0,0 +1,10 @@ +ENV['RAILS_ENV'] ||= 'test' +require File.expand_path('../../config/environment', __FILE__) +require 'rails/test_help' + +class ActiveSupport::TestCase + # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. + fixtures :all + + # Add more helper methods to be used by all tests here... +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/vendor/assets/javascripts/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/Models/Users/vendor/assets/stylesheets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/.gitignore new file mode 100644 index 0000000..5b61ab0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/.gitignore @@ -0,0 +1,13 @@ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore all logfiles and tempfiles. +/log/* +!/log/.keep +/tmp diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/Gemfile new file mode 100644 index 0000000..5e575de --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/Gemfile @@ -0,0 +1,54 @@ +source 'https://rubygems.org' + + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '4.2.7' +# Use postgresql as the database for Active Record +gem 'pg', '~> 0.15' +# Use SCSS for stylesheets +gem 'sass-rails', '~> 5.0' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# Use CoffeeScript for .coffee assets and views +gem 'coffee-rails', '~> 4.1.0' +# See https://github.com/rails/execjs#readme for more supported runtimes +# gem 'therubyracer', platforms: :ruby + +# Use jquery as the JavaScript library +gem 'jquery-rails' +# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks +gem 'turbolinks' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.0' +# bundle exec rake doc:rails generates the API under doc/api. +gem 'sdoc', '~> 0.4.0', group: :doc + +# Use ActiveModel has_secure_password +gem 'bcrypt', '~> 3.1.7' + +# Use Unicorn as the app server +# gem 'unicorn' + +# Use Capistrano for deployment +# gem 'capistrano-rails', group: :development + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug' +end + +group :development do + # Access an IRB console on exception pages or by using <%= console %> in views + gem 'web-console', '~> 2.0' + + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' +end + +gem 'hirb' + +group :development, :test do + gem 'rspec-rails' + gem 'factory_bot_rails' + gem 'capybara' +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/Gemfile.lock new file mode 100644 index 0000000..eb7edc2 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/Gemfile.lock @@ -0,0 +1,212 @@ +GEM + remote: https://rubygems.org/ + specs: + actionmailer (4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.7) + actionview (= 4.2.7) + activesupport (= 4.2.7) + rack (~> 1.6) + rack-test (~> 0.6.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + activejob (4.2.7) + activesupport (= 4.2.7) + globalid (>= 0.3.0) + activemodel (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + activerecord (4.2.7) + activemodel (= 4.2.7) + activesupport (= 4.2.7) + arel (~> 6.0) + activesupport (4.2.7) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + addressable (2.5.2) + public_suffix (>= 2.0.2, < 4.0) + arel (6.0.4) + bcrypt (3.1.12) + binding_of_caller (0.8.0) + debug_inspector (>= 0.0.1) + builder (3.2.3) + byebug (10.0.2) + capybara (3.5.1) + addressable + mini_mime (>= 0.1.3) + nokogiri (~> 1.8) + rack (>= 1.6.0) + rack-test (>= 0.6.3) + xpath (~> 3.1) + coffee-rails (4.1.1) + coffee-script (>= 2.2.0) + railties (>= 4.0.0, < 5.1.x) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + concurrent-ruby (1.0.5) + crass (1.0.4) + debug_inspector (0.0.3) + diff-lcs (1.3) + erubis (2.7.0) + execjs (2.7.0) + factory_bot (4.10.0) + activesupport (>= 3.0.0) + factory_bot_rails (4.10.0) + factory_bot (~> 4.10.0) + railties (>= 3.0.0) + ffi (1.9.25) + globalid (0.4.1) + activesupport (>= 4.2.0) + hirb (0.7.3) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jbuilder (2.7.0) + activesupport (>= 4.2.0) + multi_json (>= 1.2) + jquery-rails (4.3.3) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + json (1.8.6) + loofah (2.2.2) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.0) + mini_mime (>= 0.1.1) + mini_mime (1.0.1) + mini_portile2 (2.3.0) + minitest (5.11.3) + multi_json (1.13.1) + nokogiri (1.8.4) + mini_portile2 (~> 2.3.0) + pg (0.21.0) + public_suffix (3.0.2) + rack (1.6.10) + rack-test (0.6.3) + rack (>= 1.0) + rails (4.2.7) + actionmailer (= 4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + activemodel (= 4.2.7) + activerecord (= 4.2.7) + activesupport (= 4.2.7) + bundler (>= 1.3.0, < 2.0) + railties (= 4.2.7) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.9) + activesupport (>= 4.2.0, < 5.0) + nokogiri (~> 1.6) + rails-deprecated_sanitizer (>= 1.0.1) + rails-html-sanitizer (1.0.4) + loofah (~> 2.2, >= 2.2.2) + railties (4.2.7) + actionpack (= 4.2.7) + activesupport (= 4.2.7) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (12.3.1) + rb-fsevent (0.10.3) + rb-inotify (0.9.10) + ffi (>= 0.5.0, < 2) + rdoc (4.3.0) + rspec-core (3.8.0) + rspec-support (~> 3.8.0) + rspec-expectations (3.8.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.8.0) + rspec-mocks (3.8.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.8.0) + rspec-rails (3.8.0) + actionpack (>= 3.0) + activesupport (>= 3.0) + railties (>= 3.0) + rspec-core (~> 3.8.0) + rspec-expectations (~> 3.8.0) + rspec-mocks (~> 3.8.0) + rspec-support (~> 3.8.0) + rspec-support (3.8.0) + sass (3.5.7) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sass-rails (5.0.7) + railties (>= 4.0.0, < 6) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + sdoc (0.4.2) + json (~> 1.7, >= 1.7.7) + rdoc (~> 4.0) + spring (2.0.2) + activesupport (>= 4.2) + sprockets (3.7.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.2.1) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + thor (0.20.0) + thread_safe (0.3.6) + tilt (2.0.8) + turbolinks (5.1.1) + turbolinks-source (~> 5.1) + turbolinks-source (5.1.0) + tzinfo (1.2.5) + thread_safe (~> 0.1) + uglifier (4.1.18) + execjs (>= 0.3.0, < 3) + web-console (2.3.0) + activemodel (>= 4.0) + binding_of_caller (>= 0.7.2) + railties (>= 4.0) + sprockets-rails (>= 2.0, < 4.0) + xpath (3.1.0) + nokogiri (~> 1.8) + +PLATFORMS + ruby + +DEPENDENCIES + bcrypt (~> 3.1.7) + byebug + capybara + coffee-rails (~> 4.1.0) + factory_bot_rails + hirb + jbuilder (~> 2.0) + jquery-rails + pg (~> 0.15) + rails (= 4.2.7) + rspec-rails + sass-rails (~> 5.0) + sdoc (~> 0.4.0) + spring + turbolinks + uglifier (>= 1.3.0) + web-console (~> 2.0) + +BUNDLED WITH + 1.16.3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/README.rdoc b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/README.rdoc new file mode 100644 index 0000000..dd4e97e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/README.rdoc @@ -0,0 +1,28 @@ +== README + +This README would normally document whatever steps are necessary to get the +application up and running. + +Things you may want to cover: + +* Ruby version + +* System dependencies + +* Configuration + +* Database creation + +* Database initialization + +* How to run the test suite + +* Services (job queues, cache servers, search engines, etc.) + +* Deployment instructions + +* ... + + +Please feel free to use a different markup language if you do not plan to run +rake doc:app. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/Rakefile new file mode 100644 index 0000000..ba6b733 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Rails.application.load_tasks diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/assets/images/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/assets/images/codingdojo.png b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/assets/images/codingdojo.png new file mode 100644 index 0000000..5c82e33 Binary files /dev/null and b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/assets/images/codingdojo.png differ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/assets/javascripts/application.js new file mode 100644 index 0000000..2c268fb --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/assets/javascripts/application.js @@ -0,0 +1,17 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require jquery +//= require jquery_ujs +//= require turbolinks +//= require bootstrap.min +//= require_tree . diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/assets/javascripts/bootstrap.min.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/assets/javascripts/bootstrap.min.js new file mode 100644 index 0000000..00c895f --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/assets/javascripts/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v4.1.3 (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e(t.bootstrap={},t.jQuery,t.Popper)}(this,function(t,e,h){"use strict";function i(t,e){for(var n=0;nthis._items.length-1||t<0))if(this._isSliding)P(this._element).one(Q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=ndocument.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right
',trigger:"hover focus",title:"",delay:0,html:!(Ie={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"}),selector:!(Se={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)"}),placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent"},we="out",Ne={HIDE:"hide"+Ee,HIDDEN:"hidden"+Ee,SHOW:(De="show")+Ee,SHOWN:"shown"+Ee,INSERTED:"inserted"+Ee,CLICK:"click"+Ee,FOCUSIN:"focusin"+Ee,FOCUSOUT:"focusout"+Ee,MOUSEENTER:"mouseenter"+Ee,MOUSELEAVE:"mouseleave"+Ee},Oe="fade",ke="show",Pe=".tooltip-inner",je=".arrow",He="hover",Le="focus",Re="click",xe="manual",We=function(){function i(t,e){if("undefined"==typeof h)throw new TypeError("Bootstrap tooltips require Popper.js (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=pe(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(pe(this.getTipElement()).hasClass(ke))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),pe.removeData(this.element,this.constructor.DATA_KEY),pe(this.element).off(this.constructor.EVENT_KEY),pe(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&pe(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===pe(this.element).css("display"))throw new Error("Please use show on visible elements");var t=pe.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){pe(this.element).trigger(t);var n=pe.contains(this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!n)return;var i=this.getTipElement(),r=Fn.getUID(this.constructor.NAME);i.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&pe(i).addClass(Oe);var o="function"==typeof this.config.placement?this.config.placement.call(this,i,this.element):this.config.placement,s=this._getAttachment(o);this.addAttachmentClass(s);var a=!1===this.config.container?document.body:pe(document).find(this.config.container);pe(i).data(this.constructor.DATA_KEY,this),pe.contains(this.element.ownerDocument.documentElement,this.tip)||pe(i).appendTo(a),pe(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new h(this.element,i,{placement:s,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:je},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){e._handlePopperPlacementChange(t)}}),pe(i).addClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().on("mouseover",null,pe.noop);var l=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,pe(e.element).trigger(e.constructor.Event.SHOWN),t===we&&e._leave(null,e)};if(pe(this.tip).hasClass(Oe)){var c=Fn.getTransitionDurationFromElement(this.tip);pe(this.tip).one(Fn.TRANSITION_END,l).emulateTransitionEnd(c)}else l()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=pe.Event(this.constructor.Event.HIDE),r=function(){e._hoverState!==De&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),pe(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(pe(this.element).trigger(i),!i.isDefaultPrevented()){if(pe(n).removeClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().off("mouseover",null,pe.noop),this._activeTrigger[Re]=!1,this._activeTrigger[Le]=!1,this._activeTrigger[He]=!1,pe(this.tip).hasClass(Oe)){var o=Fn.getTransitionDurationFromElement(n);pe(n).one(Fn.TRANSITION_END,r).emulateTransitionEnd(o)}else r();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){pe(this.getTipElement()).addClass(Te+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||pe(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(pe(t.querySelectorAll(Pe)),this.getTitle()),pe(t).removeClass(Oe+" "+ke)},t.setElementContent=function(t,e){var n=this.config.html;"object"==typeof e&&(e.nodeType||e.jquery)?n?pe(e).parent().is(t)||t.empty().append(e):t.text(pe(e).text()):t[n?"html":"text"](e)},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getAttachment=function(t){return Ie[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)pe(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==xe){var e=t===He?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===He?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;pe(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}pe(i.element).closest(".modal").on("hide.bs.modal",function(){return i.hide()})}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Le:He]=!0),pe(e.getTipElement()).hasClass(ke)||e._hoverState===De?e._hoverState=De:(clearTimeout(e._timeout),e._hoverState=De,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===De&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Le:He]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=we,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===we&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){return"number"==typeof(t=l({},this.constructor.Default,pe(this.element).data(),"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),Fn.typeCheckConfig(ve,t,this.constructor.DefaultType),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=pe(this.getTipElement()),e=t.attr("class").match(be);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(pe(t).removeClass(Oe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=pe(this).data(ye),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),pe(this).data(ye,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return Ae}},{key:"NAME",get:function(){return ve}},{key:"DATA_KEY",get:function(){return ye}},{key:"Event",get:function(){return Ne}},{key:"EVENT_KEY",get:function(){return Ee}},{key:"DefaultType",get:function(){return Se}}]),i}(),pe.fn[ve]=We._jQueryInterface,pe.fn[ve].Constructor=We,pe.fn[ve].noConflict=function(){return pe.fn[ve]=Ce,We._jQueryInterface},We),Jn=(qe="popover",Ke="."+(Fe="bs.popover"),Me=(Ue=e).fn[qe],Qe="bs-popover",Be=new RegExp("(^|\\s)"+Qe+"\\S+","g"),Ve=l({},zn.Default,{placement:"right",trigger:"click",content:"",template:''}),Ye=l({},zn.DefaultType,{content:"(string|element|function)"}),ze="fade",Ze=".popover-header",Ge=".popover-body",$e={HIDE:"hide"+Ke,HIDDEN:"hidden"+Ke,SHOW:(Je="show")+Ke,SHOWN:"shown"+Ke,INSERTED:"inserted"+Ke,CLICK:"click"+Ke,FOCUSIN:"focusin"+Ke,FOCUSOUT:"focusout"+Ke,MOUSEENTER:"mouseenter"+Ke,MOUSELEAVE:"mouseleave"+Ke},Xe=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var r=i.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){Ue(this.getTipElement()).addClass(Qe+"-"+t)},r.getTipElement=function(){return this.tip=this.tip||Ue(this.config.template)[0],this.tip},r.setContent=function(){var t=Ue(this.getTipElement());this.setElementContent(t.find(Ze),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(Ge),e),t.removeClass(ze+" "+Je)},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=Ue(this.getTipElement()),e=t.attr("class").match(Be);null!==e&&0=this._offsets[r]&&("undefined"==typeof this._offsets[r+1]||tcode{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(2.25rem + 2px);padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::after,.was-validated .custom-file-input:valid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::after,.was-validated .custom-file-input:invalid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media screen and (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media screen and (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-right{right:0;left:auto}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-label::after{border-color:#80bdff}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:2.25rem;padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;padding-left:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion .card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media screen and (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:not(:disabled):not(.disabled){cursor:pointer}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{color:#000;text-decoration:none;opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}@media screen and (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-dialog-centered::before{display:block;height:calc(100vh - (.5rem * 2));content:""}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-dialog-centered::before{height:calc(100vh - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-ms-flex-align:center;align-items:center;width:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease}@media screen and (prefers-reduced-motion:reduce){.carousel-item-next,.carousel-item-prev,.carousel-item.active{transition:none}}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-fade .carousel-item{opacity:0;transition-duration:.6s;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/assets/stylesheets/likes.scss b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/assets/stylesheets/likes.scss new file mode 100644 index 0000000..ee4f4c7 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/assets/stylesheets/likes.scss @@ -0,0 +1,199 @@ +// Navbar section +nav { + background-color:#000; + padding: 0 4rem; + a:hover { color: tan; } +} + +body { + width: 100%; + height: 100vh; + // position: static; + background-position: center; + background-repeat: no-repeat; + background-size: cover; + background-image: url('https://cdn-images-1.medium.com/max/1600/0*zfW13Mn8_fvEKcU7.jpg') +} + +nav a { color: white; } +nav a img { + width: 100px; + height: 40px; + margin: 0.5rem 0; + border-style: none; +} + +nav a:hover { color: #06a9e2; cursor: pointer; } + +h1, h2, .student_header { + font-family: 'Fredoka One', cursive; + text-align: center; + color: #06a9e2; + margin: 4rem 0 2rem; + position: relative; +} +h1 span { color: #06a9e2; font-family: 'Poiret One', cursive; } + +#notice { + padding: 0.5rem 2rem; + border-radius: 1rem; + border: 2px solid #06a9e2; + background: lightslategrey; +} + +// Form Components [ Add and Edit ] Section +form { padding: 0 15rem; } +ul .form-row { padding-left: 4rem !important; } +.form-row { line-height: 0rem; } + + +// Table Section +.theader { color: #06a9e2; font-family: 'Poiret One', cursive; } +.trbody { font-family: 'Poiret One', cursive; } +.trbody > td { padding: 0; } +.trbody > td:last-child > a { margin: 0.1rem auto; width: 5rem; } +.trbody > td:last-child > form { + input { margin: 0; } + width: 5rem; + margin: 0rem auto; + display: inline-table !important; +} +.trbody:hover { color: #06a9e2; background-color: #0000006b !important; } +.scrolling-wrapper { + -webkit-overflow-scrolling: touch; + padding-bottom: 12rem; + overflow-y: scroll; + position:relative; + opacity: 0.8; + height: 50px !important; + width: 100%; + // z-index: -1; + } + ::-webkit-scrollbar { width: 12px; } + ::-webkit-scrollbar-track { display: none; } + + +// Container section +.container { min-height: 70% !important; width: 58%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +.container-min { height: 550px; min-height: 70%; width: 50%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +.container-max { height: 600px; min-height: 70%; width: 50%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +// .container h1 { margin-top: 2rem; } + +.flxend { display: flex; justify-content: end; } // div container requiring flex +.flexed { display: flex; justify-content: space-between; } // div container requiring flex +.grided { display: grid; grid-template-columns: 1fr 1fr; grid-gap: 2rem; } // div container requiring grid +.inline { display: inline-block; margin: 1rem auto; } // div container requiring grid +.grided input { min-width: 100%; margin-top: 2rem; } +.text-warning { color: #fba153fa; } + +// Custom Margin +// =========================== [ 1rem ] +.right-margin1 { margin-right : 1rem !important; } +.left-margin1 { margin-left : 1rem !important; } +.top-margin1 { margin-top : 1rem !important; } +.bottom-margin1 { margin-bottom: 1rem !important; } +// =========================== [ 2rem ] +.right-margin2 { margin-right : 2rem !important; } +.left-margin2 { margin-left : 2rem !important; } +.top-margin2 { margin-top : 2rem !important; } +.bottom-margin2 { margin-bottom: 2rem !important; } +// =========================== [ 4rem ] +.right-margin4 { margin-right : 4rem !important; } +.left-margin4 { margin-left : 4rem !important; } +.top-margin4 { margin-top : 4rem !important; } +.bottom-margin4 { margin-bottom: 4rem !important; } +// =========================== [ 6rem ] +.right-margin6 { margin-right : 6rem !important; } +.left-margin6 { margin-left : 6rem !important; } +.top-margin6 { margin-top : 6rem !important; } +.bottom-margin6 { margin-bottom: 6rem !important; } + +.separator-bar{ margin: 0 1rem; } +.sn { + color: white; + // margin-top: 2rem; + border-radius: .2rem; + background-color: #111; + border: 1px solid #f5f5f5; + // background-color: #357ae8; + transition: all .3s ease-in-out; + box-shadow: 1px 2px 2px 0px #444 !important; +} +.sn:hover { + color: #06a9e2; + transition: all .3s ease-in-out; + background-color: #000 !important; + box-shadow: 0px 0px 0px 0px #222 !important; +} +.show { + border-radius: 1rem; + font-size: 10px; + color: #06a9e2; + &:hover { + color: white !important; + background-color: #357ae8 !important; + } +} +.edit { + border-radius: 1rem; + font-size: 10px; + color: lime; + &:hover { + color: white !important; + background-color: green !important; + } +} +.delete { + border-radius: 1rem; + font-size: 10px; + color: #f44336; + &:hover { + color: white !important; + background-color: red !important; + } +} +.brand-logo { + font-family: 'Days One', sans-serif; +} + +input.valid:not([type]), input.valid:not([type]):focus, input.valid[type=text]:not(.browser-default), input.valid[type=text]:not(.browser-default):focus, input.valid[type=password]:not(.browser-default), input.valid[type=password]:not(.browser-default):focus, input.valid[type=email]:not(.browser-default), input.valid[type=email]:not(.browser-default):focus, input.valid[type=url]:not(.browser-default), input.valid[type=url]:not(.browser-default):focus, input.valid[type=time]:not(.browser-default), input.valid[type=time]:not(.browser-default):focus, input.valid[type=date]:not(.browser-default), input.valid[type=date]:not(.browser-default):focus, input.valid[type=datetime]:not(.browser-default), input.valid[type=datetime]:not(.browser-default):focus, input.valid[type=datetime-local]:not(.browser-default), input.valid[type=datetime-local]:not(.browser-default):focus, input.valid[type=tel]:not(.browser-default), input.valid[type=tel]:not(.browser-default):focus, input.valid[type=number]:not(.browser-default), input.valid[type=number]:not(.browser-default):focus, input.valid[type=search]:not(.browser-default), input.valid[type=search]:not(.browser-default):focus, textarea.materialize-textarea.valid, textarea.materialize-textarea.valid:focus, .select-wrapper.valid>input.select-dropdown { + border-bottom: 1px solid #06a9e2 !important; + -webkit-box-shadow: 0 1px 0 0 #06a9e2 !important; + box-shadow: 0 1px 0 0 #06a9e2 !important; +} +input:not([type]):focus:not([readonly]), input[type=text]:not(.browser-default):focus:not([readonly]), input[type=password]:not(.browser-default):focus:not([readonly]), input[type=email]:not(.browser-default):focus:not([readonly]), input[type=url]:not(.browser-default):focus:not([readonly]), input[type=time]:not(.browser-default):focus:not([readonly]), input[type=date]:not(.browser-default):focus:not([readonly]), input[type=datetime]:not(.browser-default):focus:not([readonly]), input[type=datetime-local]:not(.browser-default):focus:not([readonly]), input[type=tel]:not(.browser-default):focus:not([readonly]), input[type=number]:not(.browser-default):focus:not([readonly]), input[type=search]:not(.browser-default):focus:not([readonly]), textarea.materialize-textarea:focus:not([readonly]) { + border-bottom: 1px solid #06a9e2; + -webkit-box-shadow: 0 1px 0 0 #06a9e2; + box-shadow: 0 1px 0 0 #06a9e2; +} +.dropdown-content li>a, .dropdown-content li>span { + font-size: 16px; + background-color: #020000; + color: #9e9e9edb; + display: block; + line-height: 22px; + padding: 14px 16px; +} +.dropdown-content li>a:hover, .dropdown-content li>span:hover { + background-color: #06a9e2; + color: white; +} + + +.select-wrapper input.select-dropdown { + color: #06a9e2; +} +input:not([type]):focus:not([readonly])+label,.form-wrap input[type=text]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=password]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=email]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=url]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=time]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=date]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=datetime]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=datetime-local]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=tel]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=number]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=search]:not(.browser-default):focus:not([readonly])+label,.form-wrap textarea.materialize-textarea:focus:not([readonly])+label { + color: #06a9e2; +} +input:not([type]):focus:not([readonly])+label, input[type=text]:not(.browser-default):focus:not([readonly])+label, input[type=password]:not(.browser-default):focus:not([readonly])+label, input[type=email]:not(.browser-default):focus:not([readonly])+label, input[type=url]:not(.browser-default):focus:not([readonly])+label, input[type=time]:not(.browser-default):focus:not([readonly])+label, input[type=date]:not(.browser-default):focus:not([readonly])+label, input[type=datetime]:not(.browser-default):focus:not([readonly])+label, input[type=datetime-local]:not(.browser-default):focus:not([readonly])+label, input[type=tel]:not(.browser-default):focus:not([readonly])+label, input[type=number]:not(.browser-default):focus:not([readonly])+label, input[type=search]:not(.browser-default):focus:not([readonly])+label, textarea.materialize-textarea:focus:not([readonly])+label { + color: #06a9e2; +} +.select-wrapper input.select-dropdown { color: #06a9e2 !important; } +.select-wrapper input.select-dropdown:focus { + border-bottom: 2px solid #06a9e2 !important; +} +// label:active { +// font-size: .8rem; +// color: #06a9e2 !important; +// } diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/assets/stylesheets/secrets.scss b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/assets/stylesheets/secrets.scss new file mode 100644 index 0000000..ee4f4c7 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/assets/stylesheets/secrets.scss @@ -0,0 +1,199 @@ +// Navbar section +nav { + background-color:#000; + padding: 0 4rem; + a:hover { color: tan; } +} + +body { + width: 100%; + height: 100vh; + // position: static; + background-position: center; + background-repeat: no-repeat; + background-size: cover; + background-image: url('https://cdn-images-1.medium.com/max/1600/0*zfW13Mn8_fvEKcU7.jpg') +} + +nav a { color: white; } +nav a img { + width: 100px; + height: 40px; + margin: 0.5rem 0; + border-style: none; +} + +nav a:hover { color: #06a9e2; cursor: pointer; } + +h1, h2, .student_header { + font-family: 'Fredoka One', cursive; + text-align: center; + color: #06a9e2; + margin: 4rem 0 2rem; + position: relative; +} +h1 span { color: #06a9e2; font-family: 'Poiret One', cursive; } + +#notice { + padding: 0.5rem 2rem; + border-radius: 1rem; + border: 2px solid #06a9e2; + background: lightslategrey; +} + +// Form Components [ Add and Edit ] Section +form { padding: 0 15rem; } +ul .form-row { padding-left: 4rem !important; } +.form-row { line-height: 0rem; } + + +// Table Section +.theader { color: #06a9e2; font-family: 'Poiret One', cursive; } +.trbody { font-family: 'Poiret One', cursive; } +.trbody > td { padding: 0; } +.trbody > td:last-child > a { margin: 0.1rem auto; width: 5rem; } +.trbody > td:last-child > form { + input { margin: 0; } + width: 5rem; + margin: 0rem auto; + display: inline-table !important; +} +.trbody:hover { color: #06a9e2; background-color: #0000006b !important; } +.scrolling-wrapper { + -webkit-overflow-scrolling: touch; + padding-bottom: 12rem; + overflow-y: scroll; + position:relative; + opacity: 0.8; + height: 50px !important; + width: 100%; + // z-index: -1; + } + ::-webkit-scrollbar { width: 12px; } + ::-webkit-scrollbar-track { display: none; } + + +// Container section +.container { min-height: 70% !important; width: 58%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +.container-min { height: 550px; min-height: 70%; width: 50%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +.container-max { height: 600px; min-height: 70%; width: 50%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +// .container h1 { margin-top: 2rem; } + +.flxend { display: flex; justify-content: end; } // div container requiring flex +.flexed { display: flex; justify-content: space-between; } // div container requiring flex +.grided { display: grid; grid-template-columns: 1fr 1fr; grid-gap: 2rem; } // div container requiring grid +.inline { display: inline-block; margin: 1rem auto; } // div container requiring grid +.grided input { min-width: 100%; margin-top: 2rem; } +.text-warning { color: #fba153fa; } + +// Custom Margin +// =========================== [ 1rem ] +.right-margin1 { margin-right : 1rem !important; } +.left-margin1 { margin-left : 1rem !important; } +.top-margin1 { margin-top : 1rem !important; } +.bottom-margin1 { margin-bottom: 1rem !important; } +// =========================== [ 2rem ] +.right-margin2 { margin-right : 2rem !important; } +.left-margin2 { margin-left : 2rem !important; } +.top-margin2 { margin-top : 2rem !important; } +.bottom-margin2 { margin-bottom: 2rem !important; } +// =========================== [ 4rem ] +.right-margin4 { margin-right : 4rem !important; } +.left-margin4 { margin-left : 4rem !important; } +.top-margin4 { margin-top : 4rem !important; } +.bottom-margin4 { margin-bottom: 4rem !important; } +// =========================== [ 6rem ] +.right-margin6 { margin-right : 6rem !important; } +.left-margin6 { margin-left : 6rem !important; } +.top-margin6 { margin-top : 6rem !important; } +.bottom-margin6 { margin-bottom: 6rem !important; } + +.separator-bar{ margin: 0 1rem; } +.sn { + color: white; + // margin-top: 2rem; + border-radius: .2rem; + background-color: #111; + border: 1px solid #f5f5f5; + // background-color: #357ae8; + transition: all .3s ease-in-out; + box-shadow: 1px 2px 2px 0px #444 !important; +} +.sn:hover { + color: #06a9e2; + transition: all .3s ease-in-out; + background-color: #000 !important; + box-shadow: 0px 0px 0px 0px #222 !important; +} +.show { + border-radius: 1rem; + font-size: 10px; + color: #06a9e2; + &:hover { + color: white !important; + background-color: #357ae8 !important; + } +} +.edit { + border-radius: 1rem; + font-size: 10px; + color: lime; + &:hover { + color: white !important; + background-color: green !important; + } +} +.delete { + border-radius: 1rem; + font-size: 10px; + color: #f44336; + &:hover { + color: white !important; + background-color: red !important; + } +} +.brand-logo { + font-family: 'Days One', sans-serif; +} + +input.valid:not([type]), input.valid:not([type]):focus, input.valid[type=text]:not(.browser-default), input.valid[type=text]:not(.browser-default):focus, input.valid[type=password]:not(.browser-default), input.valid[type=password]:not(.browser-default):focus, input.valid[type=email]:not(.browser-default), input.valid[type=email]:not(.browser-default):focus, input.valid[type=url]:not(.browser-default), input.valid[type=url]:not(.browser-default):focus, input.valid[type=time]:not(.browser-default), input.valid[type=time]:not(.browser-default):focus, input.valid[type=date]:not(.browser-default), input.valid[type=date]:not(.browser-default):focus, input.valid[type=datetime]:not(.browser-default), input.valid[type=datetime]:not(.browser-default):focus, input.valid[type=datetime-local]:not(.browser-default), input.valid[type=datetime-local]:not(.browser-default):focus, input.valid[type=tel]:not(.browser-default), input.valid[type=tel]:not(.browser-default):focus, input.valid[type=number]:not(.browser-default), input.valid[type=number]:not(.browser-default):focus, input.valid[type=search]:not(.browser-default), input.valid[type=search]:not(.browser-default):focus, textarea.materialize-textarea.valid, textarea.materialize-textarea.valid:focus, .select-wrapper.valid>input.select-dropdown { + border-bottom: 1px solid #06a9e2 !important; + -webkit-box-shadow: 0 1px 0 0 #06a9e2 !important; + box-shadow: 0 1px 0 0 #06a9e2 !important; +} +input:not([type]):focus:not([readonly]), input[type=text]:not(.browser-default):focus:not([readonly]), input[type=password]:not(.browser-default):focus:not([readonly]), input[type=email]:not(.browser-default):focus:not([readonly]), input[type=url]:not(.browser-default):focus:not([readonly]), input[type=time]:not(.browser-default):focus:not([readonly]), input[type=date]:not(.browser-default):focus:not([readonly]), input[type=datetime]:not(.browser-default):focus:not([readonly]), input[type=datetime-local]:not(.browser-default):focus:not([readonly]), input[type=tel]:not(.browser-default):focus:not([readonly]), input[type=number]:not(.browser-default):focus:not([readonly]), input[type=search]:not(.browser-default):focus:not([readonly]), textarea.materialize-textarea:focus:not([readonly]) { + border-bottom: 1px solid #06a9e2; + -webkit-box-shadow: 0 1px 0 0 #06a9e2; + box-shadow: 0 1px 0 0 #06a9e2; +} +.dropdown-content li>a, .dropdown-content li>span { + font-size: 16px; + background-color: #020000; + color: #9e9e9edb; + display: block; + line-height: 22px; + padding: 14px 16px; +} +.dropdown-content li>a:hover, .dropdown-content li>span:hover { + background-color: #06a9e2; + color: white; +} + + +.select-wrapper input.select-dropdown { + color: #06a9e2; +} +input:not([type]):focus:not([readonly])+label,.form-wrap input[type=text]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=password]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=email]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=url]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=time]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=date]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=datetime]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=datetime-local]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=tel]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=number]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=search]:not(.browser-default):focus:not([readonly])+label,.form-wrap textarea.materialize-textarea:focus:not([readonly])+label { + color: #06a9e2; +} +input:not([type]):focus:not([readonly])+label, input[type=text]:not(.browser-default):focus:not([readonly])+label, input[type=password]:not(.browser-default):focus:not([readonly])+label, input[type=email]:not(.browser-default):focus:not([readonly])+label, input[type=url]:not(.browser-default):focus:not([readonly])+label, input[type=time]:not(.browser-default):focus:not([readonly])+label, input[type=date]:not(.browser-default):focus:not([readonly])+label, input[type=datetime]:not(.browser-default):focus:not([readonly])+label, input[type=datetime-local]:not(.browser-default):focus:not([readonly])+label, input[type=tel]:not(.browser-default):focus:not([readonly])+label, input[type=number]:not(.browser-default):focus:not([readonly])+label, input[type=search]:not(.browser-default):focus:not([readonly])+label, textarea.materialize-textarea:focus:not([readonly])+label { + color: #06a9e2; +} +.select-wrapper input.select-dropdown { color: #06a9e2 !important; } +.select-wrapper input.select-dropdown:focus { + border-bottom: 2px solid #06a9e2 !important; +} +// label:active { +// font-size: .8rem; +// color: #06a9e2 !important; +// } diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/assets/stylesheets/sessions.scss b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/assets/stylesheets/sessions.scss new file mode 100644 index 0000000..ee4f4c7 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/assets/stylesheets/sessions.scss @@ -0,0 +1,199 @@ +// Navbar section +nav { + background-color:#000; + padding: 0 4rem; + a:hover { color: tan; } +} + +body { + width: 100%; + height: 100vh; + // position: static; + background-position: center; + background-repeat: no-repeat; + background-size: cover; + background-image: url('https://cdn-images-1.medium.com/max/1600/0*zfW13Mn8_fvEKcU7.jpg') +} + +nav a { color: white; } +nav a img { + width: 100px; + height: 40px; + margin: 0.5rem 0; + border-style: none; +} + +nav a:hover { color: #06a9e2; cursor: pointer; } + +h1, h2, .student_header { + font-family: 'Fredoka One', cursive; + text-align: center; + color: #06a9e2; + margin: 4rem 0 2rem; + position: relative; +} +h1 span { color: #06a9e2; font-family: 'Poiret One', cursive; } + +#notice { + padding: 0.5rem 2rem; + border-radius: 1rem; + border: 2px solid #06a9e2; + background: lightslategrey; +} + +// Form Components [ Add and Edit ] Section +form { padding: 0 15rem; } +ul .form-row { padding-left: 4rem !important; } +.form-row { line-height: 0rem; } + + +// Table Section +.theader { color: #06a9e2; font-family: 'Poiret One', cursive; } +.trbody { font-family: 'Poiret One', cursive; } +.trbody > td { padding: 0; } +.trbody > td:last-child > a { margin: 0.1rem auto; width: 5rem; } +.trbody > td:last-child > form { + input { margin: 0; } + width: 5rem; + margin: 0rem auto; + display: inline-table !important; +} +.trbody:hover { color: #06a9e2; background-color: #0000006b !important; } +.scrolling-wrapper { + -webkit-overflow-scrolling: touch; + padding-bottom: 12rem; + overflow-y: scroll; + position:relative; + opacity: 0.8; + height: 50px !important; + width: 100%; + // z-index: -1; + } + ::-webkit-scrollbar { width: 12px; } + ::-webkit-scrollbar-track { display: none; } + + +// Container section +.container { min-height: 70% !important; width: 58%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +.container-min { height: 550px; min-height: 70%; width: 50%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +.container-max { height: 600px; min-height: 70%; width: 50%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +// .container h1 { margin-top: 2rem; } + +.flxend { display: flex; justify-content: end; } // div container requiring flex +.flexed { display: flex; justify-content: space-between; } // div container requiring flex +.grided { display: grid; grid-template-columns: 1fr 1fr; grid-gap: 2rem; } // div container requiring grid +.inline { display: inline-block; margin: 1rem auto; } // div container requiring grid +.grided input { min-width: 100%; margin-top: 2rem; } +.text-warning { color: #fba153fa; } + +// Custom Margin +// =========================== [ 1rem ] +.right-margin1 { margin-right : 1rem !important; } +.left-margin1 { margin-left : 1rem !important; } +.top-margin1 { margin-top : 1rem !important; } +.bottom-margin1 { margin-bottom: 1rem !important; } +// =========================== [ 2rem ] +.right-margin2 { margin-right : 2rem !important; } +.left-margin2 { margin-left : 2rem !important; } +.top-margin2 { margin-top : 2rem !important; } +.bottom-margin2 { margin-bottom: 2rem !important; } +// =========================== [ 4rem ] +.right-margin4 { margin-right : 4rem !important; } +.left-margin4 { margin-left : 4rem !important; } +.top-margin4 { margin-top : 4rem !important; } +.bottom-margin4 { margin-bottom: 4rem !important; } +// =========================== [ 6rem ] +.right-margin6 { margin-right : 6rem !important; } +.left-margin6 { margin-left : 6rem !important; } +.top-margin6 { margin-top : 6rem !important; } +.bottom-margin6 { margin-bottom: 6rem !important; } + +.separator-bar{ margin: 0 1rem; } +.sn { + color: white; + // margin-top: 2rem; + border-radius: .2rem; + background-color: #111; + border: 1px solid #f5f5f5; + // background-color: #357ae8; + transition: all .3s ease-in-out; + box-shadow: 1px 2px 2px 0px #444 !important; +} +.sn:hover { + color: #06a9e2; + transition: all .3s ease-in-out; + background-color: #000 !important; + box-shadow: 0px 0px 0px 0px #222 !important; +} +.show { + border-radius: 1rem; + font-size: 10px; + color: #06a9e2; + &:hover { + color: white !important; + background-color: #357ae8 !important; + } +} +.edit { + border-radius: 1rem; + font-size: 10px; + color: lime; + &:hover { + color: white !important; + background-color: green !important; + } +} +.delete { + border-radius: 1rem; + font-size: 10px; + color: #f44336; + &:hover { + color: white !important; + background-color: red !important; + } +} +.brand-logo { + font-family: 'Days One', sans-serif; +} + +input.valid:not([type]), input.valid:not([type]):focus, input.valid[type=text]:not(.browser-default), input.valid[type=text]:not(.browser-default):focus, input.valid[type=password]:not(.browser-default), input.valid[type=password]:not(.browser-default):focus, input.valid[type=email]:not(.browser-default), input.valid[type=email]:not(.browser-default):focus, input.valid[type=url]:not(.browser-default), input.valid[type=url]:not(.browser-default):focus, input.valid[type=time]:not(.browser-default), input.valid[type=time]:not(.browser-default):focus, input.valid[type=date]:not(.browser-default), input.valid[type=date]:not(.browser-default):focus, input.valid[type=datetime]:not(.browser-default), input.valid[type=datetime]:not(.browser-default):focus, input.valid[type=datetime-local]:not(.browser-default), input.valid[type=datetime-local]:not(.browser-default):focus, input.valid[type=tel]:not(.browser-default), input.valid[type=tel]:not(.browser-default):focus, input.valid[type=number]:not(.browser-default), input.valid[type=number]:not(.browser-default):focus, input.valid[type=search]:not(.browser-default), input.valid[type=search]:not(.browser-default):focus, textarea.materialize-textarea.valid, textarea.materialize-textarea.valid:focus, .select-wrapper.valid>input.select-dropdown { + border-bottom: 1px solid #06a9e2 !important; + -webkit-box-shadow: 0 1px 0 0 #06a9e2 !important; + box-shadow: 0 1px 0 0 #06a9e2 !important; +} +input:not([type]):focus:not([readonly]), input[type=text]:not(.browser-default):focus:not([readonly]), input[type=password]:not(.browser-default):focus:not([readonly]), input[type=email]:not(.browser-default):focus:not([readonly]), input[type=url]:not(.browser-default):focus:not([readonly]), input[type=time]:not(.browser-default):focus:not([readonly]), input[type=date]:not(.browser-default):focus:not([readonly]), input[type=datetime]:not(.browser-default):focus:not([readonly]), input[type=datetime-local]:not(.browser-default):focus:not([readonly]), input[type=tel]:not(.browser-default):focus:not([readonly]), input[type=number]:not(.browser-default):focus:not([readonly]), input[type=search]:not(.browser-default):focus:not([readonly]), textarea.materialize-textarea:focus:not([readonly]) { + border-bottom: 1px solid #06a9e2; + -webkit-box-shadow: 0 1px 0 0 #06a9e2; + box-shadow: 0 1px 0 0 #06a9e2; +} +.dropdown-content li>a, .dropdown-content li>span { + font-size: 16px; + background-color: #020000; + color: #9e9e9edb; + display: block; + line-height: 22px; + padding: 14px 16px; +} +.dropdown-content li>a:hover, .dropdown-content li>span:hover { + background-color: #06a9e2; + color: white; +} + + +.select-wrapper input.select-dropdown { + color: #06a9e2; +} +input:not([type]):focus:not([readonly])+label,.form-wrap input[type=text]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=password]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=email]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=url]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=time]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=date]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=datetime]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=datetime-local]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=tel]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=number]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=search]:not(.browser-default):focus:not([readonly])+label,.form-wrap textarea.materialize-textarea:focus:not([readonly])+label { + color: #06a9e2; +} +input:not([type]):focus:not([readonly])+label, input[type=text]:not(.browser-default):focus:not([readonly])+label, input[type=password]:not(.browser-default):focus:not([readonly])+label, input[type=email]:not(.browser-default):focus:not([readonly])+label, input[type=url]:not(.browser-default):focus:not([readonly])+label, input[type=time]:not(.browser-default):focus:not([readonly])+label, input[type=date]:not(.browser-default):focus:not([readonly])+label, input[type=datetime]:not(.browser-default):focus:not([readonly])+label, input[type=datetime-local]:not(.browser-default):focus:not([readonly])+label, input[type=tel]:not(.browser-default):focus:not([readonly])+label, input[type=number]:not(.browser-default):focus:not([readonly])+label, input[type=search]:not(.browser-default):focus:not([readonly])+label, textarea.materialize-textarea:focus:not([readonly])+label { + color: #06a9e2; +} +.select-wrapper input.select-dropdown { color: #06a9e2 !important; } +.select-wrapper input.select-dropdown:focus { + border-bottom: 2px solid #06a9e2 !important; +} +// label:active { +// font-size: .8rem; +// color: #06a9e2 !important; +// } diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/assets/stylesheets/users.scss b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/assets/stylesheets/users.scss new file mode 100644 index 0000000..ee4f4c7 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/assets/stylesheets/users.scss @@ -0,0 +1,199 @@ +// Navbar section +nav { + background-color:#000; + padding: 0 4rem; + a:hover { color: tan; } +} + +body { + width: 100%; + height: 100vh; + // position: static; + background-position: center; + background-repeat: no-repeat; + background-size: cover; + background-image: url('https://cdn-images-1.medium.com/max/1600/0*zfW13Mn8_fvEKcU7.jpg') +} + +nav a { color: white; } +nav a img { + width: 100px; + height: 40px; + margin: 0.5rem 0; + border-style: none; +} + +nav a:hover { color: #06a9e2; cursor: pointer; } + +h1, h2, .student_header { + font-family: 'Fredoka One', cursive; + text-align: center; + color: #06a9e2; + margin: 4rem 0 2rem; + position: relative; +} +h1 span { color: #06a9e2; font-family: 'Poiret One', cursive; } + +#notice { + padding: 0.5rem 2rem; + border-radius: 1rem; + border: 2px solid #06a9e2; + background: lightslategrey; +} + +// Form Components [ Add and Edit ] Section +form { padding: 0 15rem; } +ul .form-row { padding-left: 4rem !important; } +.form-row { line-height: 0rem; } + + +// Table Section +.theader { color: #06a9e2; font-family: 'Poiret One', cursive; } +.trbody { font-family: 'Poiret One', cursive; } +.trbody > td { padding: 0; } +.trbody > td:last-child > a { margin: 0.1rem auto; width: 5rem; } +.trbody > td:last-child > form { + input { margin: 0; } + width: 5rem; + margin: 0rem auto; + display: inline-table !important; +} +.trbody:hover { color: #06a9e2; background-color: #0000006b !important; } +.scrolling-wrapper { + -webkit-overflow-scrolling: touch; + padding-bottom: 12rem; + overflow-y: scroll; + position:relative; + opacity: 0.8; + height: 50px !important; + width: 100%; + // z-index: -1; + } + ::-webkit-scrollbar { width: 12px; } + ::-webkit-scrollbar-track { display: none; } + + +// Container section +.container { min-height: 70% !important; width: 58%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +.container-min { height: 550px; min-height: 70%; width: 50%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +.container-max { height: 600px; min-height: 70%; width: 50%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +// .container h1 { margin-top: 2rem; } + +.flxend { display: flex; justify-content: end; } // div container requiring flex +.flexed { display: flex; justify-content: space-between; } // div container requiring flex +.grided { display: grid; grid-template-columns: 1fr 1fr; grid-gap: 2rem; } // div container requiring grid +.inline { display: inline-block; margin: 1rem auto; } // div container requiring grid +.grided input { min-width: 100%; margin-top: 2rem; } +.text-warning { color: #fba153fa; } + +// Custom Margin +// =========================== [ 1rem ] +.right-margin1 { margin-right : 1rem !important; } +.left-margin1 { margin-left : 1rem !important; } +.top-margin1 { margin-top : 1rem !important; } +.bottom-margin1 { margin-bottom: 1rem !important; } +// =========================== [ 2rem ] +.right-margin2 { margin-right : 2rem !important; } +.left-margin2 { margin-left : 2rem !important; } +.top-margin2 { margin-top : 2rem !important; } +.bottom-margin2 { margin-bottom: 2rem !important; } +// =========================== [ 4rem ] +.right-margin4 { margin-right : 4rem !important; } +.left-margin4 { margin-left : 4rem !important; } +.top-margin4 { margin-top : 4rem !important; } +.bottom-margin4 { margin-bottom: 4rem !important; } +// =========================== [ 6rem ] +.right-margin6 { margin-right : 6rem !important; } +.left-margin6 { margin-left : 6rem !important; } +.top-margin6 { margin-top : 6rem !important; } +.bottom-margin6 { margin-bottom: 6rem !important; } + +.separator-bar{ margin: 0 1rem; } +.sn { + color: white; + // margin-top: 2rem; + border-radius: .2rem; + background-color: #111; + border: 1px solid #f5f5f5; + // background-color: #357ae8; + transition: all .3s ease-in-out; + box-shadow: 1px 2px 2px 0px #444 !important; +} +.sn:hover { + color: #06a9e2; + transition: all .3s ease-in-out; + background-color: #000 !important; + box-shadow: 0px 0px 0px 0px #222 !important; +} +.show { + border-radius: 1rem; + font-size: 10px; + color: #06a9e2; + &:hover { + color: white !important; + background-color: #357ae8 !important; + } +} +.edit { + border-radius: 1rem; + font-size: 10px; + color: lime; + &:hover { + color: white !important; + background-color: green !important; + } +} +.delete { + border-radius: 1rem; + font-size: 10px; + color: #f44336; + &:hover { + color: white !important; + background-color: red !important; + } +} +.brand-logo { + font-family: 'Days One', sans-serif; +} + +input.valid:not([type]), input.valid:not([type]):focus, input.valid[type=text]:not(.browser-default), input.valid[type=text]:not(.browser-default):focus, input.valid[type=password]:not(.browser-default), input.valid[type=password]:not(.browser-default):focus, input.valid[type=email]:not(.browser-default), input.valid[type=email]:not(.browser-default):focus, input.valid[type=url]:not(.browser-default), input.valid[type=url]:not(.browser-default):focus, input.valid[type=time]:not(.browser-default), input.valid[type=time]:not(.browser-default):focus, input.valid[type=date]:not(.browser-default), input.valid[type=date]:not(.browser-default):focus, input.valid[type=datetime]:not(.browser-default), input.valid[type=datetime]:not(.browser-default):focus, input.valid[type=datetime-local]:not(.browser-default), input.valid[type=datetime-local]:not(.browser-default):focus, input.valid[type=tel]:not(.browser-default), input.valid[type=tel]:not(.browser-default):focus, input.valid[type=number]:not(.browser-default), input.valid[type=number]:not(.browser-default):focus, input.valid[type=search]:not(.browser-default), input.valid[type=search]:not(.browser-default):focus, textarea.materialize-textarea.valid, textarea.materialize-textarea.valid:focus, .select-wrapper.valid>input.select-dropdown { + border-bottom: 1px solid #06a9e2 !important; + -webkit-box-shadow: 0 1px 0 0 #06a9e2 !important; + box-shadow: 0 1px 0 0 #06a9e2 !important; +} +input:not([type]):focus:not([readonly]), input[type=text]:not(.browser-default):focus:not([readonly]), input[type=password]:not(.browser-default):focus:not([readonly]), input[type=email]:not(.browser-default):focus:not([readonly]), input[type=url]:not(.browser-default):focus:not([readonly]), input[type=time]:not(.browser-default):focus:not([readonly]), input[type=date]:not(.browser-default):focus:not([readonly]), input[type=datetime]:not(.browser-default):focus:not([readonly]), input[type=datetime-local]:not(.browser-default):focus:not([readonly]), input[type=tel]:not(.browser-default):focus:not([readonly]), input[type=number]:not(.browser-default):focus:not([readonly]), input[type=search]:not(.browser-default):focus:not([readonly]), textarea.materialize-textarea:focus:not([readonly]) { + border-bottom: 1px solid #06a9e2; + -webkit-box-shadow: 0 1px 0 0 #06a9e2; + box-shadow: 0 1px 0 0 #06a9e2; +} +.dropdown-content li>a, .dropdown-content li>span { + font-size: 16px; + background-color: #020000; + color: #9e9e9edb; + display: block; + line-height: 22px; + padding: 14px 16px; +} +.dropdown-content li>a:hover, .dropdown-content li>span:hover { + background-color: #06a9e2; + color: white; +} + + +.select-wrapper input.select-dropdown { + color: #06a9e2; +} +input:not([type]):focus:not([readonly])+label,.form-wrap input[type=text]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=password]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=email]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=url]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=time]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=date]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=datetime]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=datetime-local]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=tel]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=number]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=search]:not(.browser-default):focus:not([readonly])+label,.form-wrap textarea.materialize-textarea:focus:not([readonly])+label { + color: #06a9e2; +} +input:not([type]):focus:not([readonly])+label, input[type=text]:not(.browser-default):focus:not([readonly])+label, input[type=password]:not(.browser-default):focus:not([readonly])+label, input[type=email]:not(.browser-default):focus:not([readonly])+label, input[type=url]:not(.browser-default):focus:not([readonly])+label, input[type=time]:not(.browser-default):focus:not([readonly])+label, input[type=date]:not(.browser-default):focus:not([readonly])+label, input[type=datetime]:not(.browser-default):focus:not([readonly])+label, input[type=datetime-local]:not(.browser-default):focus:not([readonly])+label, input[type=tel]:not(.browser-default):focus:not([readonly])+label, input[type=number]:not(.browser-default):focus:not([readonly])+label, input[type=search]:not(.browser-default):focus:not([readonly])+label, textarea.materialize-textarea:focus:not([readonly])+label { + color: #06a9e2; +} +.select-wrapper input.select-dropdown { color: #06a9e2 !important; } +.select-wrapper input.select-dropdown:focus { + border-bottom: 2px solid #06a9e2 !important; +} +// label:active { +// font-size: .8rem; +// color: #06a9e2 !important; +// } diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/controllers/application_controller.rb new file mode 100644 index 0000000..a79f0c8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/controllers/application_controller.rb @@ -0,0 +1,10 @@ +class ApplicationController < ActionController::Base + # Prevent CSRF attacks by raising an exception. + # For APIs, you may want to use :null_session instead. + protect_from_forgery with: :exception + + def current_user + User.find(session[:user_id]) if session[:user_id] + end + helper_method :current_user +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/controllers/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/controllers/likes_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/controllers/likes_controller.rb new file mode 100644 index 0000000..634dc59 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/controllers/likes_controller.rb @@ -0,0 +1,12 @@ +class LikesController < ApplicationController + def like + Like.create(user: current_user, secret_id: params[:id]) + redirect_to "/secrets" + end + + def dislike + @like = Like.find(params[:id]) + @like.destroy if current_user === @like.user + redirect_to "/secrets" + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/controllers/secrets_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/controllers/secrets_controller.rb new file mode 100644 index 0000000..d29fb83 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/controllers/secrets_controller.rb @@ -0,0 +1,23 @@ +class SecretsController < ApplicationController + def index + @secrets = Secret.all + @likes = Like.all + end + + def create + @secret = Secret.new(content: params[:Content], user_id: current_user.id) + if @secret.save + redirect_to :back + else + flash[:errors] = "You must tell your secret" + redirect_to :back + end + end + + def destroy + @secret = Secret.find(params[:id]) + @secret.destroy if @secret.user == current_user + @user = current_user + redirect_to "/users/#{@user.id}" + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/controllers/sessions_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/controllers/sessions_controller.rb new file mode 100644 index 0000000..6cdcc03 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/controllers/sessions_controller.rb @@ -0,0 +1,52 @@ +class SessionsController < ApplicationController + + skip_before_action :require_login, only: [:new] + + def new + @user=User.new + session[:form] = "login" + end + + # def switch + # if session[:form] === "login" + # session[:form] = "register" + # redirect_to users_new + # else + # session[:form] = "login" + # end + # redirect_to "/" + # end + + # ==================== + # POST Request [.html] + # POST Request [.json] + # ==================== + def login + @user = User.find_by_email(params[:email]).try(:authenticate, params[:password]) + respond_to do |format| + if @user + session[:user_id] = @user.id + format.html { redirect_to "/users/#{@user.id}}", notice: 'User was successfully logged in!' } + format.json { render :profile, status: :created, location: @user } + else + format.html { redirect_to root_path(@user.errors), alert: 'Invalid login information!' } + format.json { render json: @user.errors, status: :unprocessable_entity } + end + end + end + + # ====================== + # DELETE /user/:id + # DELETE /user/:id.json + # ====================== + def logout + reset_session + redirect_to root_path + end + + private + # Sanatizes/Validates Form Parameters... + def form_params + params.require(:user_form).permit(:name, :email, :password) + end + end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/controllers/users_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/controllers/users_controller.rb new file mode 100644 index 0000000..ec0b804 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/controllers/users_controller.rb @@ -0,0 +1,91 @@ +class UsersController < ApplicationController + # Pre-config + skip_before_action :require_login, only: [:new] + before_action :valid_user, only: [:edit, :profile, :update, :destroy] + + # ============================= + # GET Request - Renders [.html] + # ============================= + def new + @user = User.new + session[:form] = "register" + end + + def profile + @mysecrets = User.find(current_user).secrets + p current_user + end + + # ==================== + # POST Request [.html] + # POST Request [.json] + # ==================== + def register + # First Check if user is alrady logged in...! + if @user == User.find_by_email(:email) + flash[:errors] = "The email provided is already registered" #CHECK LATER ???? + redirect_to :back + + # Creates/Registers a new user + else + if params[:password] == params[:conf_password] + @user = User.create(valid_form_params) + respond_to do |format| + if @user.save + session[:user_id] = @user.id + p session[:user_id] + # redirect_to new_session_path + format.html { redirect_to "/users/#{@user.id}", notice: 'User was successfully created.' } + format.json { render :profile, status: :ok, location: @user } + else + redirect_to :back, flash[:errors] = @user.errors.full_messages + end + end + end + end + end + # =================================================== + # GET Request [.html] | Already being render by rails + # =================================================== + def edit + end + + # ==================== + # POST Request [.html] + # POST Request [.json] + # ==================== + def update + @user = User.find(current_user.id) + respond_to do |format| + if @user.update(email: params[:email], name: params[:name]) + format.html { redirect_to "/users/#{@user.id}", notice: 'Student was successfully updated.' } + format.json { render :profile, status: :ok, location: @user } + else + # format.html { render :edit, flash[:errors] = @user.errors.full_messages } + format.html { redirect_to :back, flash[:errors] = @user.errors.full_messages } + format.json { render json: @user.errors, status: :unprocessable_entity } + end + end + end + + # ====================== + # DELETE Request [.html] + # DELETE Request [.json] + # ====================== + def destroy + User.find(current_user.id) + reset_session + redirect_to new_user_path + end + + private + def valid_form_params + params.require(:user).permit(:name, :email, :password) + end + + def valid_user + if current_user != User.find(params[:id]) + redirect_to "/users/#{session[:user_id]}" + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/helpers/application_helper.rb new file mode 100644 index 0000000..de6be79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/helpers/likes_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/helpers/likes_helper.rb new file mode 100644 index 0000000..a78a759 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/helpers/likes_helper.rb @@ -0,0 +1,2 @@ +module LikesHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/helpers/secrets_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/helpers/secrets_helper.rb new file mode 100644 index 0000000..17ab1ea --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/helpers/secrets_helper.rb @@ -0,0 +1,2 @@ +module SecretsHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/helpers/sessions_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/helpers/sessions_helper.rb new file mode 100644 index 0000000..309f8b2 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/helpers/sessions_helper.rb @@ -0,0 +1,2 @@ +module SessionsHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/helpers/users_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/helpers/users_helper.rb new file mode 100644 index 0000000..2310a24 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/helpers/users_helper.rb @@ -0,0 +1,2 @@ +module UsersHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/models/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/models/like.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/models/like.rb new file mode 100644 index 0000000..c034f10 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/models/like.rb @@ -0,0 +1,4 @@ +class Like < ActiveRecord::Base + belongs_to :user + belongs_to :secret +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/models/secret.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/models/secret.rb new file mode 100644 index 0000000..6ac2e7c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/models/secret.rb @@ -0,0 +1,6 @@ +class Secret < ActiveRecord::Base + validates :content, presence: true + belongs_to :user + has_many :likes, dependent: :destroy + has_many :users, through: :likes +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/models/user.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/models/user.rb new file mode 100644 index 0000000..dec91a3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/models/user.rb @@ -0,0 +1,13 @@ +class User < ActiveRecord::Base + has_secure_password + + EMAIL_REGEX = /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]+)\z/i + validates :name, presence: true, length: { in: 2..40 } + validates :email, presence: true, uniqueness: { case_sensitive: false }, format: { with: EMAIL_REGEX } + validates :password, presence: true + before_save { self.email.downcase! unless self.email.blank? } + + has_many :secrets + has_many :likes, dependent: :destroy + has_many :secrets_liked, through: :likes, source: :secret +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/layouts/application.html.erb new file mode 100644 index 0000000..d0b3d94 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/layouts/application.html.erb @@ -0,0 +1,51 @@ + + + + DojoSecrets + + + + + + + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= javascript_include_tag 'application', 'main.js', 'data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + + + + + <%= yield %> + + + + + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/likes/dislike.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/likes/dislike.html.erb new file mode 100644 index 0000000..964fb30 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/likes/dislike.html.erb @@ -0,0 +1,2 @@ +

Likes#dislike

+

Find me in app/views/likes/dislike.html.erb

diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/likes/like.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/likes/like.html.erb new file mode 100644 index 0000000..1fdcef8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/likes/like.html.erb @@ -0,0 +1,2 @@ +

Likes#like

+

Find me in app/views/likes/like.html.erb

diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/secrets/create.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/secrets/create.html.erb new file mode 100644 index 0000000..73239a1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/secrets/create.html.erb @@ -0,0 +1,2 @@ +

Secrets#create

+

Find me in app/views/secrets/create.html.erb

diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/secrets/destroy.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/secrets/destroy.html.erb new file mode 100644 index 0000000..c737229 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/secrets/destroy.html.erb @@ -0,0 +1,2 @@ +

Secrets#destroy

+

Find me in app/views/secrets/destroy.html.erb

diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/secrets/like.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/secrets/like.html.erb new file mode 100644 index 0000000..655d4c7 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/secrets/like.html.erb @@ -0,0 +1,2 @@ +

Secrets#like

+

Find me in app/views/secrets/like.html.erb

diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/secrets/new.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/secrets/new.html.erb new file mode 100644 index 0000000..fa9bce0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/secrets/new.html.erb @@ -0,0 +1,2 @@ +

Secrets#new

+

Find me in app/views/secrets/new.html.erb

diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/sessions/_login_form.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/sessions/_login_form.html.erb new file mode 100644 index 0000000..6dd6e1d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/sessions/_login_form.html.erb @@ -0,0 +1,35 @@ +

LOGIN

+ +
+
+ + + + +
+
+ + +
+
+
+
+ + +
+
+ +
+ +
+

+ Don't have an account yet? + Create one now! +

+
+
diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/sessions/new.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/sessions/new.html.erb new file mode 100644 index 0000000..ffa7253 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/sessions/new.html.erb @@ -0,0 +1,5 @@ + + +
+ <%= render "login_form" %> +
diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/users/_register_form.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/users/_register_form.html.erb new file mode 100644 index 0000000..0ac661a --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/users/_register_form.html.erb @@ -0,0 +1,60 @@ +

REGISTRATION

+ +
+
+ + + <% if @user.errors.any? %> +
+
+ <%= pluralize(@user.errors.count, "error") %> + prohibited this user from being saved: +
+
    + <% @user.errors.full_messages.each do |message| %> +
  • »<%= message %>
  • + <% end %> +
+
+ <% end %> + + +
+
+ + +
+
+
+
+ + +
+
+
+ +
+ + +
+
+ + +
+
+ + +
+ +
+

+ Already have an account? + Login now! +

+
+
diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/users/new.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/users/new.html.erb new file mode 100644 index 0000000..d5e96f3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/users/new.html.erb @@ -0,0 +1,6 @@ + + +
+ <% if notice %>

<%= notice %>

<% end %> + <%= render "register_form" %> +
diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/users/profile.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/users/profile.html.erb new file mode 100644 index 0000000..1881fbd --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/app/views/users/profile.html.erb @@ -0,0 +1,2 @@ +

Users#edit

+

Find me in app/views/users/edit.html.erb

diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/bin/bundle new file mode 100755 index 0000000..66e9889 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/bin/rails new file mode 100755 index 0000000..0138d79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/bin/rails @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +APP_PATH = File.expand_path('../../config/application', __FILE__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/bin/rake new file mode 100755 index 0000000..d87d5f5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/bin/rake @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/bin/setup new file mode 100755 index 0000000..acdb2c1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/bin/setup @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +Dir.chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file: + + puts "== Installing dependencies ==" + system "gem install bundler --conservative" + system "bundle check || bundle install" + + # puts "\n== Copying sample files ==" + # unless File.exist?("config/database.yml") + # system "cp config/database.yml.sample config/database.yml" + # end + + puts "\n== Preparing database ==" + system "bin/rake db:setup" + + puts "\n== Removing old logs and tempfiles ==" + system "rm -f log/*" + system "rm -rf tmp/cache" + + puts "\n== Restarting application server ==" + system "touch tmp/restart.txt" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/bin/spring new file mode 100755 index 0000000..fb2ec2e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/bin/spring @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +# This file loads spring without using Bundler, in order to be fast. +# It gets overwritten when you run the `spring binstub` command. + +unless defined?(Spring) + require 'rubygems' + require 'bundler' + + lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read) + spring = lockfile.specs.detect { |spec| spec.name == "spring" } + if spring + Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path + gem 'spring', spring.version + require 'spring/binstub' + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config.ru new file mode 100644 index 0000000..bd83b25 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Rails.application diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/application.rb new file mode 100644 index 0000000..7b88c7a --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/application.rb @@ -0,0 +1,35 @@ +require File.expand_path('../boot', __FILE__) + +require "rails" +# Pick the frameworks you want: +require "active_model/railtie" +require "active_job/railtie" +require "active_record/railtie" +require "action_controller/railtie" +require "action_mailer/railtie" +require "action_view/railtie" +require "sprockets/railtie" +# require "rails/test_unit/railtie" + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module DojoSecrets + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Do not swallow errors in after_commit/after_rollback callbacks. + config.active_record.raise_in_transactional_callbacks = true + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/boot.rb new file mode 100644 index 0000000..6b750f0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/boot.rb @@ -0,0 +1,3 @@ +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) + +require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/database.yml new file mode 100644 index 0000000..06981ca --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/database.yml @@ -0,0 +1,85 @@ +# PostgreSQL. Versions 8.2 and up are supported. +# +# Install the pg driver: +# gem install pg +# On OS X with Homebrew: +# gem install pg -- --with-pg-config=/usr/local/bin/pg_config +# On OS X with MacPorts: +# gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config +# On Windows: +# gem install pg +# Choose the win32 build. +# Install PostgreSQL and put its /bin directory on your path. +# +# Configure Using Gemfile +# gem 'pg' +# +default: &default + adapter: postgresql + encoding: unicode + # For details on connection pooling, see rails configuration guide + # http://guides.rubyonrails.org/configuring.html#database-pooling + pool: 5 + +development: + <<: *default + database: DojoSecrets_development + + # The specified database role being used to connect to postgres. + # To create additional roles in postgres see `$ createuser --help`. + # When left blank, postgres will use the default role. This is + # the same name as the operating system user that initialized the database. + #username: DojoSecrets + + # The password associated with the postgres role (username). + #password: + + # Connect on a TCP socket. Omitted by default since the client uses a + # domain socket that doesn't need configuration. Windows does not have + # domain sockets, so uncomment these lines. + #host: localhost + + # The TCP port the server listens on. Defaults to 5432. + # If your server runs on a different port number, change accordingly. + #port: 5432 + + # Schema search path. The server defaults to $user,public + #schema_search_path: myapp,sharedapp,public + + # Minimum log levels, in increasing order: + # debug5, debug4, debug3, debug2, debug1, + # log, notice, warning, error, fatal, and panic + # Defaults to warning. + #min_messages: notice + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: DojoSecrets_test + +# As with config/secrets.yml, you never want to store sensitive information, +# like your database password, in your source code. If your source code is +# ever seen by anyone, they now have access to your database. +# +# Instead, provide the password as a unix environment variable when you boot +# the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database +# for a full rundown on how to provide these environment variables in a +# production deployment. +# +# On Heroku and other platform providers, you may have a full connection URL +# available as an environment variable. For example: +# +# DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase" +# +# You can use this database configuration with: +# +# production: +# url: <%= ENV['DATABASE_URL'] %> +# +production: + <<: *default + database: DojoSecrets_production + username: DojoSecrets + password: <%= ENV['DOJOSECRETS_DATABASE_PASSWORD'] %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/environment.rb new file mode 100644 index 0000000..ee8d90d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require File.expand_path('../application', __FILE__) + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/environments/development.rb new file mode 100644 index 0000000..b55e214 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/environments/development.rb @@ -0,0 +1,41 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # Adds additional error checking when serving assets at runtime. + # Checks for improperly declared sprockets dependencies. + # Raises helpful error messages. + config.assets.raise_runtime_errors = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/environments/production.rb new file mode 100644 index 0000000..5c1b32e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/environments/production.rb @@ -0,0 +1,79 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like + # NGINX, varnish or squid. + # config.action_dispatch.rack_cache = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # 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-Accel-Redirect' # for NGINX + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug + + # Prepend all log lines with the following tags. + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/environments/test.rb new file mode 100644 index 0000000..1c19f08 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/environments/test.rb @@ -0,0 +1,42 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure static file server for tests with Cache-Control for performance. + config.serve_static_files = true + config.static_cache_control = 'public, max-age=3600' + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Randomize the order test cases are executed. + config.active_support.test_order = :random + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/initializers/assets.rb new file mode 100644 index 0000000..70f4c58 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/initializers/assets.rb @@ -0,0 +1,11 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path +# Rails.application.config.assets.paths << Emoji.images_path + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. +Rails.application.config.assets.precompile += %w( main.js ) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..59385cd --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/initializers/cookies_serializer.rb new file mode 100644 index 0000000..7f70458 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/initializers/cookies_serializer.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000..4a994e1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/initializers/inflections.rb new file mode 100644 index 0000000..ac033bf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/initializers/mime_types.rb new file mode 100644 index 0000000..dc18996 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/initializers/mime_types.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/initializers/session_store.rb new file mode 100644 index 0000000..745fa7c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/initializers/session_store.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.session_store :cookie_store, key: '_DojoSecrets_session' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..33725e9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] if respond_to?(:wrap_parameters) +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/locales/en.yml new file mode 100644 index 0000000..0653957 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/locales/en.yml @@ -0,0 +1,23 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/routes.rb new file mode 100644 index 0000000..8e1e0b4 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/routes.rb @@ -0,0 +1,23 @@ +Rails.application.routes.draw do + + # Sessions Routes + root 'sessions#new' + post 'sessions' => 'sessions#login' + delete'/logout' => 'sessions#logout' + + # Users Routes + get 'users/new' => 'users#new' + post 'users/' => 'users#register' + get 'users/:id' => 'users#profile' + get 'users/:id/edit' => 'users#edit' + patch 'users/:id/update' => 'users#update' + + # Secret Routes + get 'secrets' => 'secrets#index' + post 'secrets' => 'secrets#post' + delete'secrets/:id' => 'secrets#delete' + post 'secrets/:id/like' => 'likes#like' # Likes Rout for + post 'secrets/:id/dislike' => 'likes#dislike' # Likes Rout for + delete'secrets/:id/destroy' => 'secrets#destroy' + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/secrets.yml new file mode 100644 index 0000000..443259e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/config/secrets.yml @@ -0,0 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rake secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: a1c9a45fd75b54d3d40f5923e279e86397ba98ad955fa92982b7d90a0608dfba691aeab01dbd340f68f4f4e4fe644f54a2aeecf72c2ca49d23175643e90468ac + +test: + secret_key_base: 9cd8163710a85ee021d77028ec2584147e0434f807b083eca375998913f825a3349b91a838729e65543d271b292bcf9c0ab4b4352bdc9d7bafec39e33ea921c0 + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/migrate/20180815151450_create_users.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/migrate/20180815151450_create_users.rb new file mode 100644 index 0000000..5d21440 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/migrate/20180815151450_create_users.rb @@ -0,0 +1,11 @@ +class CreateUsers < ActiveRecord::Migration + def change + create_table :users do |t| + t.string :name + t.string :email + t.string :password + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/migrate/20180815151655_create_secrets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/migrate/20180815151655_create_secrets.rb new file mode 100644 index 0000000..7f23a85 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/migrate/20180815151655_create_secrets.rb @@ -0,0 +1,10 @@ +class CreateSecrets < ActiveRecord::Migration + def change + create_table :secrets do |t| + t.text :content + t.integer :user_id + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/migrate/20180815151841_create_likes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/migrate/20180815151841_create_likes.rb new file mode 100644 index 0000000..f4b2689 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/migrate/20180815151841_create_likes.rb @@ -0,0 +1,10 @@ +class CreateLikes < ActiveRecord::Migration + def change + create_table :likes do |t| + t.integer :user_id + t.integer :secret_id + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/migrate/20180815213518_remove_password_from_users.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/migrate/20180815213518_remove_password_from_users.rb new file mode 100644 index 0000000..2eb26b9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/migrate/20180815213518_remove_password_from_users.rb @@ -0,0 +1,5 @@ +class RemovePasswordFromUsers < ActiveRecord::Migration + def change + remove_column :users, :password, :string + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/migrate/20180815213749_add_password_column_to_users.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/migrate/20180815213749_add_password_column_to_users.rb new file mode 100644 index 0000000..339dd6e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/migrate/20180815213749_add_password_column_to_users.rb @@ -0,0 +1,5 @@ +class AddPasswordColumnToUsers < ActiveRecord::Migration + def change + add_column :users, :encrypted_password, :string + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/migrate/20180815215156_remove_encrypt_password_from_users.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/migrate/20180815215156_remove_encrypt_password_from_users.rb new file mode 100644 index 0000000..6e1cd5c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/migrate/20180815215156_remove_encrypt_password_from_users.rb @@ -0,0 +1,5 @@ +class RemoveEncryptPasswordFromUsers < ActiveRecord::Migration + def change + remove_column :users, :encrypted_password, :string + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/migrate/20180815215422_add_password_digest_column_to_users.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/migrate/20180815215422_add_password_digest_column_to_users.rb new file mode 100644 index 0000000..7cdad42 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/migrate/20180815215422_add_password_digest_column_to_users.rb @@ -0,0 +1,5 @@ +class AddPasswordDigestColumnToUsers < ActiveRecord::Migration + def change + add_column :users, :password_digest, :string + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/schema.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/schema.rb new file mode 100644 index 0000000..bd7c434 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/schema.rb @@ -0,0 +1,41 @@ +# encoding: UTF-8 +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 20180815215422) do + + # These are extensions that must be enabled in order to support this database + enable_extension "plpgsql" + + create_table "likes", force: :cascade do |t| + t.integer "user_id" + t.integer "secret_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "secrets", force: :cascade do |t| + t.text "content" + t.integer "user_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "users", force: :cascade do |t| + t.string "name" + t.string "email" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "password_digest" + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/seeds.rb new file mode 100644 index 0000000..4edb1e8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). +# +# Examples: +# +# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) +# Mayor.create(name: 'Emanuel', city: cities.first) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/lib/assets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/lib/tasks/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/log/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/public/404.html new file mode 100644 index 0000000..b612547 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +
+
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/public/422.html new file mode 100644 index 0000000..a21f82b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
+
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/public/500.html new file mode 100644 index 0000000..061abc5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/public/500.html @@ -0,0 +1,66 @@ + + + + We're sorry, but something went wrong (500) + + + + + + +
+
+

We're sorry, but something went wrong.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/public/robots.txt new file mode 100644 index 0000000..3c9c7c0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-agent: * +# Disallow: / diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/controllers/likes_controller_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/controllers/likes_controller_spec.rb new file mode 100644 index 0000000..ce7ba7d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/controllers/likes_controller_spec.rb @@ -0,0 +1,19 @@ +require 'rails_helper' + +RSpec.describe LikesController, type: :controller do + + describe "GET #like" do + it "returns http success" do + get :like + expect(response).to have_http_status(:success) + end + end + + describe "GET #dislike" do + it "returns http success" do + get :dislike + expect(response).to have_http_status(:success) + end + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/controllers/secrets_controller_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/controllers/secrets_controller_spec.rb new file mode 100644 index 0000000..98bc128 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/controllers/secrets_controller_spec.rb @@ -0,0 +1,33 @@ +require 'rails_helper' + +RSpec.describe SecretsController, type: :controller do + + describe "GET #new" do + it "returns http success" do + get :new + expect(response).to have_http_status(:success) + end + end + + describe "GET #create" do + it "returns http success" do + get :create + expect(response).to have_http_status(:success) + end + end + + describe "GET #like" do + it "returns http success" do + get :like + expect(response).to have_http_status(:success) + end + end + + describe "GET #destroy" do + it "returns http success" do + get :destroy + expect(response).to have_http_status(:success) + end + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/controllers/sessions_controller_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/controllers/sessions_controller_spec.rb new file mode 100644 index 0000000..5929d2e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/controllers/sessions_controller_spec.rb @@ -0,0 +1,26 @@ +require 'rails_helper' + +RSpec.describe SessionsController, type: :controller do + + describe "GET #new" do + it "returns http success" do + get :new + expect(response).to have_http_status(:success) + end + end + + describe "GET #create" do + it "returns http success" do + get :create + expect(response).to have_http_status(:success) + end + end + + describe "GET #destroy" do + it "returns http success" do + get :destroy + expect(response).to have_http_status(:success) + end + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/controllers/users_controller_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/controllers/users_controller_spec.rb new file mode 100644 index 0000000..93ba0e2 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/controllers/users_controller_spec.rb @@ -0,0 +1,40 @@ +require 'rails_helper' + +RSpec.describe UsersController, type: :controller do + + describe "GET #new" do + it "returns http success" do + get :new + expect(response).to have_http_status(:success) + end + end + + describe "GET #create" do + it "returns http success" do + get :create + expect(response).to have_http_status(:success) + end + end + + describe "GET #edit" do + it "returns http success" do + get :edit + expect(response).to have_http_status(:success) + end + end + + describe "GET #update" do + it "returns http success" do + get :update + expect(response).to have_http_status(:success) + end + end + + describe "GET #destroy" do + it "returns http success" do + get :destroy + expect(response).to have_http_status(:success) + end + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/factories/likes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/factories/likes.rb new file mode 100644 index 0000000..a01cd65 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/factories/likes.rb @@ -0,0 +1,6 @@ +FactoryBot.define do + factory :like do + user_id 1 + secret_id 1 + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/factories/secrets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/factories/secrets.rb new file mode 100644 index 0000000..d3d3a9f --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/factories/secrets.rb @@ -0,0 +1,6 @@ +FactoryBot.define do + factory :secret do + content "MyText" + user_id 1 + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/factories/users.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/factories/users.rb new file mode 100644 index 0000000..ac6ddd8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/factories/users.rb @@ -0,0 +1,7 @@ +FactoryBot.define do + factory :user do + name "MyString" + email "MyString" + password "MyString" + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/helpers/likes_helper_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/helpers/likes_helper_spec.rb new file mode 100644 index 0000000..bc19687 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/helpers/likes_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the LikesHelper. For example: +# +# describe LikesHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe LikesHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/helpers/secrets_helper_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/helpers/secrets_helper_spec.rb new file mode 100644 index 0000000..285256a --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/helpers/secrets_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the SecretsHelper. For example: +# +# describe SecretsHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe SecretsHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/helpers/sessions_helper_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/helpers/sessions_helper_spec.rb new file mode 100644 index 0000000..9484198 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/helpers/sessions_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the SessionsHelper. For example: +# +# describe SessionsHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe SessionsHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/helpers/users_helper_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/helpers/users_helper_spec.rb new file mode 100644 index 0000000..b2e3444 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/helpers/users_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the UsersHelper. For example: +# +# describe UsersHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe UsersHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/models/like_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/models/like_spec.rb new file mode 100644 index 0000000..76ea93d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/models/like_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Like, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/models/secret_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/models/secret_spec.rb new file mode 100644 index 0000000..3ccda95 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/models/secret_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Secret, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/models/user_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/models/user_spec.rb new file mode 100644 index 0000000..47a31bb --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/models/user_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe User, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/likes/dislike.html.erb_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/likes/dislike.html.erb_spec.rb new file mode 100644 index 0000000..34b9db1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/likes/dislike.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "likes/dislike.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/likes/like.html.erb_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/likes/like.html.erb_spec.rb new file mode 100644 index 0000000..fb419d4 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/likes/like.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "likes/like.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/login_reg/login.html.erb_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/login_reg/login.html.erb_spec.rb new file mode 100644 index 0000000..db65ff8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/login_reg/login.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "login_reg/login.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/login_reg/logout.html.erb_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/login_reg/logout.html.erb_spec.rb new file mode 100644 index 0000000..b1763d1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/login_reg/logout.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "login_reg/logout.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/login_reg/register.html.erb_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/login_reg/register.html.erb_spec.rb new file mode 100644 index 0000000..ec8b4de --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/login_reg/register.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "login_reg/register.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/secrets/create.html.erb_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/secrets/create.html.erb_spec.rb new file mode 100644 index 0000000..a2394bf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/secrets/create.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "secrets/create.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/secrets/destroy.html.erb_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/secrets/destroy.html.erb_spec.rb new file mode 100644 index 0000000..87e6045 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/secrets/destroy.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "secrets/destroy.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/secrets/like.html.erb_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/secrets/like.html.erb_spec.rb new file mode 100644 index 0000000..f29ac10 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/secrets/like.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "secrets/like.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/secrets/new.html.erb_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/secrets/new.html.erb_spec.rb new file mode 100644 index 0000000..4e23648 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/secrets/new.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "secrets/new.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/sessions/create.html.erb_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/sessions/create.html.erb_spec.rb new file mode 100644 index 0000000..1dbc1ee --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/sessions/create.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "sessions/create.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/sessions/destroy.html.erb_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/sessions/destroy.html.erb_spec.rb new file mode 100644 index 0000000..b27166d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/sessions/destroy.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "sessions/destroy.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/sessions/new.html.erb_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/sessions/new.html.erb_spec.rb new file mode 100644 index 0000000..6de37da --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/sessions/new.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "sessions/new.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/users/create.html.erb_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/users/create.html.erb_spec.rb new file mode 100644 index 0000000..e3141c5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/users/create.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "users/create.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/users/destroy.html.erb_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/users/destroy.html.erb_spec.rb new file mode 100644 index 0000000..c5955f4 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/users/destroy.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "users/destroy.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/users/edit.html.erb_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/users/edit.html.erb_spec.rb new file mode 100644 index 0000000..7d1e936 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/users/edit.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "users/edit.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/users/new.html.erb_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/users/new.html.erb_spec.rb new file mode 100644 index 0000000..47b47d3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/users/new.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "users/new.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/users/update.html.erb_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/users/update.html.erb_spec.rb new file mode 100644 index 0000000..7d2a4b9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/spec/views/users/update.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "users/update.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/vendor/assets/javascripts/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/DojoSecrets/vendor/assets/stylesheets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/.gitignore new file mode 100644 index 0000000..050c9d9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/.gitignore @@ -0,0 +1,17 @@ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore the default SQLite database. +/db/*.sqlite3 +/db/*.sqlite3-journal + +# Ignore all logfiles and tempfiles. +/log/* +!/log/.keep +/tmp diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/Gemfile new file mode 100644 index 0000000..9fef5da --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/Gemfile @@ -0,0 +1,53 @@ +source 'https://rubygems.org' + + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '4.2.7' +# Use sqlite3 as the database for Active Record +gem 'sqlite3' +# Use SCSS for stylesheets +gem 'sass-rails', '~> 5.0' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# Use CoffeeScript for .coffee assets and views +gem 'coffee-rails', '~> 4.1.0' +# See https://github.com/rails/execjs#readme for more supported runtimes +# gem 'therubyracer', platforms: :ruby + +# Use jquery as the JavaScript library +gem 'jquery-rails' +# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks +gem 'turbolinks' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.0' +# bundle exec rake doc:rails generates the API under doc/api. +gem 'sdoc', '~> 0.4.0', group: :doc + +# Use ActiveModel has_secure_password +gem 'bcrypt', '~> 3.1.7' + +# Use Unicorn as the app server +# gem 'unicorn' + +# Use Capistrano for deployment +# gem 'capistrano-rails', group: :development + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug' +end + +group :development do + # Access an IRB console on exception pages or by using <%= console %> in views + gem 'web-console', '~> 2.0' + + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' +end + +group :development, :test do + gem 'capybara' + # gem 'percy-capybara' + gem 'rspec-rails' + gem 'factory_bot_rails' +end \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/Gemfile.lock new file mode 100644 index 0000000..5997193 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/Gemfile.lock @@ -0,0 +1,210 @@ +GEM + remote: https://rubygems.org/ + specs: + actionmailer (4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.7) + actionview (= 4.2.7) + activesupport (= 4.2.7) + rack (~> 1.6) + rack-test (~> 0.6.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + activejob (4.2.7) + activesupport (= 4.2.7) + globalid (>= 0.3.0) + activemodel (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + activerecord (4.2.7) + activemodel (= 4.2.7) + activesupport (= 4.2.7) + arel (~> 6.0) + activesupport (4.2.7) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + addressable (2.5.2) + public_suffix (>= 2.0.2, < 4.0) + arel (6.0.4) + bcrypt (3.1.12) + binding_of_caller (0.8.0) + debug_inspector (>= 0.0.1) + builder (3.2.3) + byebug (10.0.2) + capybara (3.5.1) + addressable + mini_mime (>= 0.1.3) + nokogiri (~> 1.8) + rack (>= 1.6.0) + rack-test (>= 0.6.3) + xpath (~> 3.1) + coffee-rails (4.1.1) + coffee-script (>= 2.2.0) + railties (>= 4.0.0, < 5.1.x) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + concurrent-ruby (1.0.5) + crass (1.0.4) + debug_inspector (0.0.3) + diff-lcs (1.3) + erubis (2.7.0) + execjs (2.7.0) + factory_bot (4.10.0) + activesupport (>= 3.0.0) + factory_bot_rails (4.10.0) + factory_bot (~> 4.10.0) + railties (>= 3.0.0) + ffi (1.9.25) + globalid (0.4.1) + activesupport (>= 4.2.0) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jbuilder (2.7.0) + activesupport (>= 4.2.0) + multi_json (>= 1.2) + jquery-rails (4.3.3) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + json (1.8.6) + loofah (2.2.2) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.0) + mini_mime (>= 0.1.1) + mini_mime (1.0.0) + mini_portile2 (2.3.0) + minitest (5.11.3) + multi_json (1.13.1) + nokogiri (1.8.4) + mini_portile2 (~> 2.3.0) + public_suffix (3.0.2) + rack (1.6.10) + rack-test (0.6.3) + rack (>= 1.0) + rails (4.2.7) + actionmailer (= 4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + activemodel (= 4.2.7) + activerecord (= 4.2.7) + activesupport (= 4.2.7) + bundler (>= 1.3.0, < 2.0) + railties (= 4.2.7) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.9) + activesupport (>= 4.2.0, < 5.0) + nokogiri (~> 1.6) + rails-deprecated_sanitizer (>= 1.0.1) + rails-html-sanitizer (1.0.4) + loofah (~> 2.2, >= 2.2.2) + railties (4.2.7) + actionpack (= 4.2.7) + activesupport (= 4.2.7) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (12.3.1) + rb-fsevent (0.10.3) + rb-inotify (0.9.10) + ffi (>= 0.5.0, < 2) + rdoc (4.3.0) + rspec-core (3.8.0) + rspec-support (~> 3.8.0) + rspec-expectations (3.8.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.8.0) + rspec-mocks (3.8.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.8.0) + rspec-rails (3.8.0) + actionpack (>= 3.0) + activesupport (>= 3.0) + railties (>= 3.0) + rspec-core (~> 3.8.0) + rspec-expectations (~> 3.8.0) + rspec-mocks (~> 3.8.0) + rspec-support (~> 3.8.0) + rspec-support (3.8.0) + sass (3.5.7) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sass-rails (5.0.7) + railties (>= 4.0.0, < 6) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + sdoc (0.4.2) + json (~> 1.7, >= 1.7.7) + rdoc (~> 4.0) + spring (2.0.2) + activesupport (>= 4.2) + sprockets (3.7.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.2.1) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + sqlite3 (1.3.13) + thor (0.20.0) + thread_safe (0.3.6) + tilt (2.0.8) + turbolinks (5.1.1) + turbolinks-source (~> 5.1) + turbolinks-source (5.1.0) + tzinfo (1.2.5) + thread_safe (~> 0.1) + uglifier (4.1.18) + execjs (>= 0.3.0, < 3) + web-console (2.3.0) + activemodel (>= 4.0) + binding_of_caller (>= 0.7.2) + railties (>= 4.0) + sprockets-rails (>= 2.0, < 4.0) + xpath (3.1.0) + nokogiri (~> 1.8) + +PLATFORMS + ruby + +DEPENDENCIES + bcrypt (~> 3.1.7) + byebug + capybara + coffee-rails (~> 4.1.0) + factory_bot_rails + jbuilder (~> 2.0) + jquery-rails + rails (= 4.2.7) + rspec-rails + sass-rails (~> 5.0) + sdoc (~> 0.4.0) + spring + sqlite3 + turbolinks + uglifier (>= 1.3.0) + web-console (~> 2.0) + +BUNDLED WITH + 1.16.3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/README.rdoc b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/README.rdoc new file mode 100644 index 0000000..dd4e97e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/README.rdoc @@ -0,0 +1,28 @@ +== README + +This README would normally document whatever steps are necessary to get the +application up and running. + +Things you may want to cover: + +* Ruby version + +* System dependencies + +* Configuration + +* Database creation + +* Database initialization + +* How to run the test suite + +* Services (job queues, cache servers, search engines, etc.) + +* Deployment instructions + +* ... + + +Please feel free to use a different markup language if you do not plan to run +rake doc:app. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/Rakefile new file mode 100644 index 0000000..ba6b733 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Rails.application.load_tasks diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/assets/images/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/assets/javascripts/application.js new file mode 100644 index 0000000..e07c5a8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/assets/javascripts/application.js @@ -0,0 +1,16 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require jquery +//= require jquery_ujs +//= require turbolinks +//= require_tree . diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/assets/javascripts/users.coffee b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/assets/javascripts/users.coffee new file mode 100644 index 0000000..24f83d1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/assets/javascripts/users.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/assets/stylesheets/application.css b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/assets/stylesheets/application.css new file mode 100644 index 0000000..f9cd5b3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/assets/stylesheets/application.css @@ -0,0 +1,15 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, + * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the bottom of the + * compiled file so the styles you add here take precedence over styles defined in any styles + * defined in the other CSS/SCSS files in this directory. It is generally better to create a new + * file per style scope. + * + *= require_tree . + *= require_self + */ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/assets/stylesheets/users.scss b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/assets/stylesheets/users.scss new file mode 100644 index 0000000..31a2eac --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/assets/stylesheets/users.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the Users controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/controllers/application_controller.rb new file mode 100644 index 0000000..d83690e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/controllers/application_controller.rb @@ -0,0 +1,5 @@ +class ApplicationController < ActionController::Base + # Prevent CSRF attacks by raising an exception. + # For APIs, you may want to use :null_session instead. + protect_from_forgery with: :exception +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/controllers/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/controllers/users_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/controllers/users_controller.rb new file mode 100644 index 0000000..2ec9ecc --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/controllers/users_controller.rb @@ -0,0 +1,4 @@ +class UsersController < ApplicationController + def new + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/helpers/application_helper.rb new file mode 100644 index 0000000..de6be79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/helpers/users_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/helpers/users_helper.rb new file mode 100644 index 0000000..2310a24 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/helpers/users_helper.rb @@ -0,0 +1,2 @@ +module UsersHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/models/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/models/user.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/models/user.rb new file mode 100644 index 0000000..4a57cf0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/models/user.rb @@ -0,0 +1,2 @@ +class User < ActiveRecord::Base +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/views/layouts/application.html.erb new file mode 100644 index 0000000..5d51362 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/views/layouts/application.html.erb @@ -0,0 +1,14 @@ + + + + TestingFactoryApp + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + + +<%= yield %> + + + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/views/users/new.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/views/users/new.html.erb new file mode 100644 index 0000000..c21a1ad --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/app/views/users/new.html.erb @@ -0,0 +1,2 @@ +

Users#new

+

Find me in app/views/users/new.html.erb

diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/bin/bundle new file mode 100755 index 0000000..66e9889 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/bin/rails new file mode 100755 index 0000000..0138d79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/bin/rails @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +APP_PATH = File.expand_path('../../config/application', __FILE__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/bin/rake new file mode 100755 index 0000000..d87d5f5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/bin/rake @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/bin/setup new file mode 100755 index 0000000..acdb2c1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/bin/setup @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +Dir.chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file: + + puts "== Installing dependencies ==" + system "gem install bundler --conservative" + system "bundle check || bundle install" + + # puts "\n== Copying sample files ==" + # unless File.exist?("config/database.yml") + # system "cp config/database.yml.sample config/database.yml" + # end + + puts "\n== Preparing database ==" + system "bin/rake db:setup" + + puts "\n== Removing old logs and tempfiles ==" + system "rm -f log/*" + system "rm -rf tmp/cache" + + puts "\n== Restarting application server ==" + system "touch tmp/restart.txt" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/bin/spring new file mode 100755 index 0000000..fb2ec2e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/bin/spring @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +# This file loads spring without using Bundler, in order to be fast. +# It gets overwritten when you run the `spring binstub` command. + +unless defined?(Spring) + require 'rubygems' + require 'bundler' + + lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read) + spring = lockfile.specs.detect { |spec| spec.name == "spring" } + if spring + Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path + gem 'spring', spring.version + require 'spring/binstub' + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config.ru new file mode 100644 index 0000000..bd83b25 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Rails.application diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/application.rb new file mode 100644 index 0000000..e999553 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/application.rb @@ -0,0 +1,35 @@ +require File.expand_path('../boot', __FILE__) + +require "rails" +# Pick the frameworks you want: +require "active_model/railtie" +require "active_job/railtie" +require "active_record/railtie" +require "action_controller/railtie" +require "action_mailer/railtie" +require "action_view/railtie" +require "sprockets/railtie" +# require "rails/test_unit/railtie" + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module TestingFactoryApp + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Do not swallow errors in after_commit/after_rollback callbacks. + config.active_record.raise_in_transactional_callbacks = true + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/boot.rb new file mode 100644 index 0000000..6b750f0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/boot.rb @@ -0,0 +1,3 @@ +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) + +require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/database.yml new file mode 100644 index 0000000..1c1a37c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/database.yml @@ -0,0 +1,25 @@ +# SQLite version 3.x +# gem install sqlite3 +# +# Ensure the SQLite 3 gem is defined in your Gemfile +# gem 'sqlite3' +# +default: &default + adapter: sqlite3 + pool: 5 + timeout: 5000 + +development: + <<: *default + database: db/development.sqlite3 + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: db/test.sqlite3 + +production: + <<: *default + database: db/production.sqlite3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/environment.rb new file mode 100644 index 0000000..ee8d90d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require File.expand_path('../application', __FILE__) + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/environments/development.rb new file mode 100644 index 0000000..b55e214 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/environments/development.rb @@ -0,0 +1,41 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # Adds additional error checking when serving assets at runtime. + # Checks for improperly declared sprockets dependencies. + # Raises helpful error messages. + config.assets.raise_runtime_errors = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/environments/production.rb new file mode 100644 index 0000000..5c1b32e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/environments/production.rb @@ -0,0 +1,79 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like + # NGINX, varnish or squid. + # config.action_dispatch.rack_cache = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # 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-Accel-Redirect' # for NGINX + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug + + # Prepend all log lines with the following tags. + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/environments/test.rb new file mode 100644 index 0000000..1c19f08 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/environments/test.rb @@ -0,0 +1,42 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure static file server for tests with Cache-Control for performance. + config.serve_static_files = true + config.static_cache_control = 'public, max-age=3600' + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Randomize the order test cases are executed. + config.active_support.test_order = :random + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/initializers/assets.rb new file mode 100644 index 0000000..01ef3e6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/initializers/assets.rb @@ -0,0 +1,11 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path +# Rails.application.config.assets.paths << Emoji.images_path + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. +# Rails.application.config.assets.precompile += %w( search.js ) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..59385cd --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/initializers/cookies_serializer.rb new file mode 100644 index 0000000..7f70458 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/initializers/cookies_serializer.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000..4a994e1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/initializers/inflections.rb new file mode 100644 index 0000000..ac033bf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/initializers/mime_types.rb new file mode 100644 index 0000000..dc18996 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/initializers/mime_types.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/initializers/session_store.rb new file mode 100644 index 0000000..235f41f --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/initializers/session_store.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.session_store :cookie_store, key: '_TestingFactoryApp_session' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..33725e9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] if respond_to?(:wrap_parameters) +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/locales/en.yml new file mode 100644 index 0000000..0653957 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/locales/en.yml @@ -0,0 +1,23 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/routes.rb new file mode 100644 index 0000000..1f1851d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/routes.rb @@ -0,0 +1,6 @@ +Rails.application.routes.draw do + + # get 'users/new' + resources :users + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/secrets.yml new file mode 100644 index 0000000..fe7398d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/config/secrets.yml @@ -0,0 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rake secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: a4443993792bd3a9bb69b3fc88dddc862d779f6fd58fa5030cff729e127cee4f46ea0f491b049f3d0c1e5343fdbcad22cb70beab21685c79240e90e568ea72ce + +test: + secret_key_base: 8dd0c664e8f269196820d1151b9fcf1311e93421df4fc1a7414054a5160f1c99c0608fec148d20dbbbe7fc6d54f2aaf519e943aedddb58ebffaf23951d9815c4 + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/db/migrate/20180813183509_create_users.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/db/migrate/20180813183509_create_users.rb new file mode 100644 index 0000000..cc285fe --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/db/migrate/20180813183509_create_users.rb @@ -0,0 +1,11 @@ +class CreateUsers < ActiveRecord::Migration + def change + create_table :users do |t| + t.string :first_name + t.string :last_name + t.string :email + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/db/schema.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/db/schema.rb new file mode 100644 index 0000000..0ed6414 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/db/schema.rb @@ -0,0 +1,24 @@ +# encoding: UTF-8 +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 20180813183509) do + + create_table "users", force: :cascade do |t| + t.string "first_name" + t.string "last_name" + t.string "email" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/db/seeds.rb new file mode 100644 index 0000000..4edb1e8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). +# +# Examples: +# +# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) +# Mayor.create(name: 'Emanuel', city: cities.first) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/lib/assets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/lib/tasks/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/log/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/public/404.html new file mode 100644 index 0000000..b612547 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +
+
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/public/422.html new file mode 100644 index 0000000..a21f82b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
+
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/public/500.html new file mode 100644 index 0000000..061abc5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/public/500.html @@ -0,0 +1,66 @@ + + + + We're sorry, but something went wrong (500) + + + + + + +
+
+

We're sorry, but something went wrong.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/public/robots.txt new file mode 100644 index 0000000..3c9c7c0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-agent: * +# Disallow: / diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/spec/controllers/users_controller_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/spec/controllers/users_controller_spec.rb new file mode 100644 index 0000000..0a86999 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/spec/controllers/users_controller_spec.rb @@ -0,0 +1,12 @@ +require 'rails_helper' + +RSpec.describe UsersController, type: :controller do + + describe "GET #new" do + it "returns http success" do + get :new + expect(response).to have_http_status(:success) + end + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/spec/factories/users.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/spec/factories/users.rb new file mode 100644 index 0000000..97e6ecf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/spec/factories/users.rb @@ -0,0 +1,7 @@ +FactoryBot.define do + factory :user do + first_name "Miguel" + last_name "Obiang" + email "mobiang@codingdojo.com" + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/spec/features/register_user_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/spec/features/register_user_spec.rb new file mode 100644 index 0000000..ce5005d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/spec/features/register_user_spec.rb @@ -0,0 +1,47 @@ +require 'rails_helper' + +# ================================================= +# Feature Testing... [ USER Rgistration Work Flow ] +# ================================================= +feature "User creates an account" do + + before(:each) do + visit new_user_path + end + + scenario "successfully creates a new user account" do + fill_in "user_first_name", with: "Michael" + fill_in "user_last_name", with: "jordan" + fill_in "user_email", with: "mjordan@codingdojo.com" + click_button "Create User" + expect(page).to have_content "Welcome, Michael" + # We'll be redirecting to the user show page is user succesfully created + expect(page).to have_current_path(user_path(User.last)) + end + + scenario "unsuccessfully creates a new user account" do + click_button "Create User" + expect(current_path).to eq(new_user_path) + end + + scenario "doesn't fill out first name field" do + fill_in "user_last_name", with: "Jordan" + fill_in "user_email", with: "mjordan@codingdojo.com" + click_button "Create User" + expect(page).to have_content "First name can't be blank" + end + + scenario "doesn't fill out last name field" do + fill_in "user_first_name", with: "Michael" + fill_in "user_email", with: "mjordan@codingdojo.com" + click_button "Create User" + expect(page).to have_content "First name can't be blank" + end + + scenario "doesn't fill out email field" do + fill_in "user_first_name", with: "Michael" + fill_in "user_last_name", with: "Jordan" + click_button "Create User" + expect(page).to have_content "First name can't be blank" + end +end \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/spec/helpers/users_helper_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/spec/helpers/users_helper_spec.rb new file mode 100644 index 0000000..b2e3444 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/spec/helpers/users_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the UsersHelper. For example: +# +# describe UsersHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe UsersHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/spec/models/user_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/spec/models/user_spec.rb new file mode 100644 index 0000000..ef5f364 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/spec/models/user_spec.rb @@ -0,0 +1,47 @@ +require 'rails_helper' + +RSpec.describe User, type: :model do + + # ======================= + # Control [ VALID TEST ] + # ======================= + context "With valid attributes" do + it "should save" do + expect(build(:user)).to be_valid + end + end + + + # ================ + # [ INVALID TEST ] + # ================ + context "With invalid attributes" do + + # TEST #1 => Empty field + it "should not save if first_name field is blank" do + expect(build(:user, first_name: "")).to be_invalid + end + + # TEST #2 => Empty field + it "should not save if last_name field is blank" do + expect(build(:user, last_name: "")).to be_invalid + end + + # TEST #3 => Empty field + it "should not save if email field is blank" do + expect(build(:user, email: "")).to be_invalid + end + + # TEST #4 => Uniqueness field + it "should not save if email already exists" do + create(:user) + expect(build(:user)).to be_invalid + end + + # TEST #5 => correct format + it "should not save if innvalid email format" do + expect(build(:user, email: "invalidEmail")).to be_invalid + end + + end +end \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/spec/rails_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/spec/rails_helper.rb new file mode 100644 index 0000000..d1561b0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/spec/rails_helper.rb @@ -0,0 +1,67 @@ +# This file is copied to spec/ when you run 'rails generate rspec:install' +require 'spec_helper' +ENV['RAILS_ENV'] ||= 'test' +require File.expand_path('../../config/environment', __FILE__) +# Prevent database truncation if the environment is production +abort("The Rails environment is running in production mode!") if Rails.env.production? +require 'rspec/rails' +# Add additional requires below this line. Rails is not loaded until this point! + +# Requires supporting ruby files with custom matchers and macros, etc, in +# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are +# run as spec files by default. This means that files in spec/support that end +# in _spec.rb will both be required and run as specs, causing the specs to be +# run twice. It is recommended that you do not name files matching this glob to +# end with _spec.rb. You can configure this pattern with the --pattern +# option on the command line or in ~/.rspec, .rspec or `.rspec-local`. +# +# The following line is provided for convenience purposes. It has the downside +# of increasing the boot-up time by auto-requiring all files in the support +# directory. Alternatively, in the individual `*_spec.rb` files, manually +# require only the support files necessary. +# +# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f } + +# Checks for pending migrations and applies them before tests are run. +# If you are not using ActiveRecord, you can remove these lines. +begin + ActiveRecord::Migration.maintain_test_schema! +rescue ActiveRecord::PendingMigrationError => e + puts e.to_s.strip + exit 1 +end + +require 'factory_bot_rails' +RSpec.configure do |config| + + # => Added Configuration + config.include FactoryBot::Syntax::Methods + + # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures + config.fixture_path = "#{::Rails.root}/spec/fixtures" + + # If you're not using ActiveRecord, or you'd prefer not to run each of your + # examples within a transaction, remove the following line or assign false + # instead of true. + config.use_transactional_fixtures = true + + # RSpec Rails can automatically mix in different behaviours to your tests + # based on their file location, for example enabling you to call `get` and + # `post` in specs under `spec/controllers`. + # + # You can disable this behaviour by removing the line below, and instead + # explicitly tag your specs with their type, e.g.: + # + # RSpec.describe UsersController, :type => :controller do + # # ... + # end + # + # The different available types are documented in the features, such as in + # https://relishapp.com/rspec/rspec-rails/docs + config.infer_spec_type_from_file_location! + + # Filter lines from Rails gems in backtraces. + config.filter_rails_from_backtrace! + # arbitrary gems may also be filtered via: + # config.filter_gems_from_backtrace("gem name") +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/spec/spec_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/spec/spec_helper.rb new file mode 100644 index 0000000..ce33d66 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/spec/spec_helper.rb @@ -0,0 +1,96 @@ +# This file was generated by the `rails generate rspec:install` command. Conventionally, all +# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. +# The generated `.rspec` file contains `--require spec_helper` which will cause +# this file to always be loaded, without a need to explicitly require it in any +# files. +# +# Given that it is always loaded, you are encouraged to keep this file as +# light-weight as possible. Requiring heavyweight dependencies from this file +# will add to the boot time of your test suite on EVERY test run, even for an +# individual file that may not need all of that loaded. Instead, consider making +# a separate helper file that requires the additional dependencies and performs +# the additional setup, and require it from the spec files that actually need +# it. +# +# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration +RSpec.configure do |config| + # rspec-expectations config goes here. You can use an alternate + # assertion/expectation library such as wrong or the stdlib/minitest + # assertions if you prefer. + config.expect_with :rspec do |expectations| + # This option will default to `true` in RSpec 4. It makes the `description` + # and `failure_message` of custom matchers include text for helper methods + # defined using `chain`, e.g.: + # be_bigger_than(2).and_smaller_than(4).description + # # => "be bigger than 2 and smaller than 4" + # ...rather than: + # # => "be bigger than 2" + expectations.include_chain_clauses_in_custom_matcher_descriptions = true + end + + # rspec-mocks config goes here. You can use an alternate test double + # library (such as bogus or mocha) by changing the `mock_with` option here. + config.mock_with :rspec do |mocks| + # Prevents you from mocking or stubbing a method that does not exist on + # a real object. This is generally recommended, and will default to + # `true` in RSpec 4. + mocks.verify_partial_doubles = true + end + + # This option will default to `:apply_to_host_groups` in RSpec 4 (and will + # have no way to turn it off -- the option exists only for backwards + # compatibility in RSpec 3). It causes shared context metadata to be + # inherited by the metadata hash of host groups and examples, rather than + # triggering implicit auto-inclusion in groups with matching metadata. + config.shared_context_metadata_behavior = :apply_to_host_groups + +# The settings below are suggested to provide a good initial experience +# with RSpec, but feel free to customize to your heart's content. +=begin + # This allows you to limit a spec run to individual examples or groups + # you care about by tagging them with `:focus` metadata. When nothing + # is tagged with `:focus`, all examples get run. RSpec also provides + # aliases for `it`, `describe`, and `context` that include `:focus` + # metadata: `fit`, `fdescribe` and `fcontext`, respectively. + config.filter_run_when_matching :focus + + # Allows RSpec to persist some state between runs in order to support + # the `--only-failures` and `--next-failure` CLI options. We recommend + # you configure your source control system to ignore this file. + config.example_status_persistence_file_path = "spec/examples.txt" + + # Limits the available syntax to the non-monkey patched syntax that is + # recommended. For more details, see: + # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/ + # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/ + # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode + config.disable_monkey_patching! + + # Many RSpec users commonly either run the entire suite or an individual + # file, and it's useful to allow more verbose output when running an + # individual spec file. + if config.files_to_run.one? + # Use the documentation formatter for detailed output, + # unless a formatter has already been configured + # (e.g. via a command-line flag). + config.default_formatter = "doc" + end + + # Print the 10 slowest examples and example groups at the + # end of the spec run, to help surface which specs are running + # particularly slow. + config.profile_examples = 10 + + # Run specs in random order to surface order dependencies. If you find an + # order dependency and want to debug it, you can fix the order by providing + # the seed, which is printed after each run. + # --seed 1234 + config.order = :random + + # Seed global randomization in this process using the `--seed` CLI option. + # Setting this allows you to use `--seed` to deterministically reproduce + # test failures related to randomization by passing the same `--seed` value + # as the one that triggered the failure. + Kernel.srand config.seed +=end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/spec/views/users/new.html.erb_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/spec/views/users/new.html.erb_spec.rb new file mode 100644 index 0000000..47b47d3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/spec/views/users/new.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "users/new.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/vendor/assets/javascripts/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/Capybara/vendor/assets/stylesheets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/.gitignore new file mode 100644 index 0000000..050c9d9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/.gitignore @@ -0,0 +1,17 @@ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore the default SQLite database. +/db/*.sqlite3 +/db/*.sqlite3-journal + +# Ignore all logfiles and tempfiles. +/log/* +!/log/.keep +/tmp diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/Gemfile new file mode 100644 index 0000000..7457464 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/Gemfile @@ -0,0 +1,55 @@ +source 'https://rubygems.org' + + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '4.2.7' +# Use sqlite3 as the database for Active Record +gem 'sqlite3' +# Use SCSS for stylesheets +gem 'sass-rails', '~> 5.0' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# Use CoffeeScript for .coffee assets and views +gem 'coffee-rails', '~> 4.1.0' +# See https://github.com/rails/execjs#readme for more supported runtimes +# gem 'therubyracer', platforms: :ruby + +# Use jquery as the JavaScript library +gem 'jquery-rails' +# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks +gem 'turbolinks' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.0' +# bundle exec rake doc:rails generates the API under doc/api. +gem 'sdoc', '~> 0.4.0', group: :doc + +# Use ActiveModel has_secure_password +gem 'bcrypt', '~> 3.1.7' + +# Use Unicorn as the app server +# gem 'unicorn' + +# Use Capistrano for deployment +# gem 'capistrano-rails', group: :development + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug' +end + +group :development do + # Access an IRB console on exception pages or by using <%= console %> in views + gem 'web-console', '~> 2.0' + + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' +end + + +# ADDITIONAL PAACKAGES +# ==================== +group :development, :test do + gem 'rspec-rails' +end + +gem 'hirb' \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/Gemfile.lock new file mode 100644 index 0000000..28361d6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/Gemfile.lock @@ -0,0 +1,193 @@ +GEM + remote: https://rubygems.org/ + specs: + actionmailer (4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.7) + actionview (= 4.2.7) + activesupport (= 4.2.7) + rack (~> 1.6) + rack-test (~> 0.6.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + activejob (4.2.7) + activesupport (= 4.2.7) + globalid (>= 0.3.0) + activemodel (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + activerecord (4.2.7) + activemodel (= 4.2.7) + activesupport (= 4.2.7) + arel (~> 6.0) + activesupport (4.2.7) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + arel (6.0.4) + bcrypt (3.1.12) + binding_of_caller (0.8.0) + debug_inspector (>= 0.0.1) + builder (3.2.3) + byebug (10.0.2) + coffee-rails (4.1.1) + coffee-script (>= 2.2.0) + railties (>= 4.0.0, < 5.1.x) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + concurrent-ruby (1.0.5) + crass (1.0.4) + debug_inspector (0.0.3) + diff-lcs (1.3) + erubis (2.7.0) + execjs (2.7.0) + ffi (1.9.25) + globalid (0.4.1) + activesupport (>= 4.2.0) + hirb (0.7.3) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jbuilder (2.7.0) + activesupport (>= 4.2.0) + multi_json (>= 1.2) + jquery-rails (4.3.3) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + json (1.8.6) + loofah (2.2.2) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.0) + mini_mime (>= 0.1.1) + mini_mime (1.0.0) + mini_portile2 (2.3.0) + minitest (5.11.3) + multi_json (1.13.1) + nokogiri (1.8.4) + mini_portile2 (~> 2.3.0) + rack (1.6.10) + rack-test (0.6.3) + rack (>= 1.0) + rails (4.2.7) + actionmailer (= 4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + activemodel (= 4.2.7) + activerecord (= 4.2.7) + activesupport (= 4.2.7) + bundler (>= 1.3.0, < 2.0) + railties (= 4.2.7) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.9) + activesupport (>= 4.2.0, < 5.0) + nokogiri (~> 1.6) + rails-deprecated_sanitizer (>= 1.0.1) + rails-html-sanitizer (1.0.4) + loofah (~> 2.2, >= 2.2.2) + railties (4.2.7) + actionpack (= 4.2.7) + activesupport (= 4.2.7) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (12.3.1) + rb-fsevent (0.10.3) + rb-inotify (0.9.10) + ffi (>= 0.5.0, < 2) + rdoc (4.3.0) + rspec-core (3.8.0) + rspec-support (~> 3.8.0) + rspec-expectations (3.8.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.8.0) + rspec-mocks (3.8.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.8.0) + rspec-rails (3.8.0) + actionpack (>= 3.0) + activesupport (>= 3.0) + railties (>= 3.0) + rspec-core (~> 3.8.0) + rspec-expectations (~> 3.8.0) + rspec-mocks (~> 3.8.0) + rspec-support (~> 3.8.0) + rspec-support (3.8.0) + sass (3.5.7) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sass-rails (5.0.7) + railties (>= 4.0.0, < 6) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + sdoc (0.4.2) + json (~> 1.7, >= 1.7.7) + rdoc (~> 4.0) + spring (2.0.2) + activesupport (>= 4.2) + sprockets (3.7.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.2.1) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + sqlite3 (1.3.13) + thor (0.20.0) + thread_safe (0.3.6) + tilt (2.0.8) + turbolinks (5.1.1) + turbolinks-source (~> 5.1) + turbolinks-source (5.1.0) + tzinfo (1.2.5) + thread_safe (~> 0.1) + uglifier (4.1.18) + execjs (>= 0.3.0, < 3) + web-console (2.3.0) + activemodel (>= 4.0) + binding_of_caller (>= 0.7.2) + railties (>= 4.0) + sprockets-rails (>= 2.0, < 4.0) + +PLATFORMS + ruby + +DEPENDENCIES + bcrypt (~> 3.1.7) + byebug + coffee-rails (~> 4.1.0) + hirb + jbuilder (~> 2.0) + jquery-rails + rails (= 4.2.7) + rspec-rails + sass-rails (~> 5.0) + sdoc (~> 0.4.0) + spring + sqlite3 + turbolinks + uglifier (>= 1.3.0) + web-console (~> 2.0) + +BUNDLED WITH + 1.16.3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/README.rdoc b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/README.rdoc new file mode 100644 index 0000000..dd4e97e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/README.rdoc @@ -0,0 +1,28 @@ +== README + +This README would normally document whatever steps are necessary to get the +application up and running. + +Things you may want to cover: + +* Ruby version + +* System dependencies + +* Configuration + +* Database creation + +* Database initialization + +* How to run the test suite + +* Services (job queues, cache servers, search engines, etc.) + +* Deployment instructions + +* ... + + +Please feel free to use a different markup language if you do not plan to run +rake doc:app. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/Rakefile new file mode 100644 index 0000000..ba6b733 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Rails.application.load_tasks diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/assets/images/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/assets/javascripts/application.js new file mode 100644 index 0000000..e07c5a8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/assets/javascripts/application.js @@ -0,0 +1,16 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require jquery +//= require jquery_ujs +//= require turbolinks +//= require_tree . diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/assets/stylesheets/application.css b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/assets/stylesheets/application.css new file mode 100644 index 0000000..f9cd5b3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/assets/stylesheets/application.css @@ -0,0 +1,15 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, + * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the bottom of the + * compiled file so the styles you add here take precedence over styles defined in any styles + * defined in the other CSS/SCSS files in this directory. It is generally better to create a new + * file per style scope. + * + *= require_tree . + *= require_self + */ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/controllers/application_controller.rb new file mode 100644 index 0000000..d83690e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/controllers/application_controller.rb @@ -0,0 +1,5 @@ +class ApplicationController < ActionController::Base + # Prevent CSRF attacks by raising an exception. + # For APIs, you may want to use :null_session instead. + protect_from_forgery with: :exception +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/controllers/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/helpers/application_helper.rb new file mode 100644 index 0000000..de6be79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/models/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/models/user.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/models/user.rb new file mode 100644 index 0000000..dde5d9f --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/models/user.rb @@ -0,0 +1,5 @@ +class User < ActiveRecord::Base + EMAIL_REGEX = /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]+)\z/i + validates :first_name, :last_name, :email, presence: true + validates :email, presence: true, uniqueness: { case_sensitive: false }, format: { with: EMAIL_REGEX } +end \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/views/layouts/application.html.erb new file mode 100644 index 0000000..504d2fe --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/app/views/layouts/application.html.erb @@ -0,0 +1,14 @@ + + + + RspecApp + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + + +<%= yield %> + + + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/bin/bundle new file mode 100755 index 0000000..66e9889 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/bin/rails new file mode 100755 index 0000000..0138d79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/bin/rails @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +APP_PATH = File.expand_path('../../config/application', __FILE__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/bin/rake new file mode 100755 index 0000000..d87d5f5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/bin/rake @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/bin/setup new file mode 100755 index 0000000..acdb2c1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/bin/setup @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +Dir.chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file: + + puts "== Installing dependencies ==" + system "gem install bundler --conservative" + system "bundle check || bundle install" + + # puts "\n== Copying sample files ==" + # unless File.exist?("config/database.yml") + # system "cp config/database.yml.sample config/database.yml" + # end + + puts "\n== Preparing database ==" + system "bin/rake db:setup" + + puts "\n== Removing old logs and tempfiles ==" + system "rm -f log/*" + system "rm -rf tmp/cache" + + puts "\n== Restarting application server ==" + system "touch tmp/restart.txt" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/bin/spring new file mode 100755 index 0000000..fb2ec2e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/bin/spring @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +# This file loads spring without using Bundler, in order to be fast. +# It gets overwritten when you run the `spring binstub` command. + +unless defined?(Spring) + require 'rubygems' + require 'bundler' + + lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read) + spring = lockfile.specs.detect { |spec| spec.name == "spring" } + if spring + Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path + gem 'spring', spring.version + require 'spring/binstub' + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config.ru new file mode 100644 index 0000000..bd83b25 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Rails.application diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/application.rb new file mode 100644 index 0000000..2a601b1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/application.rb @@ -0,0 +1,35 @@ +require File.expand_path('../boot', __FILE__) + +require "rails" +# Pick the frameworks you want: +require "active_model/railtie" +require "active_job/railtie" +require "active_record/railtie" +require "action_controller/railtie" +require "action_mailer/railtie" +require "action_view/railtie" +require "sprockets/railtie" +# require "rails/test_unit/railtie" + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module RspecApp + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Do not swallow errors in after_commit/after_rollback callbacks. + config.active_record.raise_in_transactional_callbacks = true + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/boot.rb new file mode 100644 index 0000000..6b750f0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/boot.rb @@ -0,0 +1,3 @@ +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) + +require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/database.yml new file mode 100644 index 0000000..1c1a37c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/database.yml @@ -0,0 +1,25 @@ +# SQLite version 3.x +# gem install sqlite3 +# +# Ensure the SQLite 3 gem is defined in your Gemfile +# gem 'sqlite3' +# +default: &default + adapter: sqlite3 + pool: 5 + timeout: 5000 + +development: + <<: *default + database: db/development.sqlite3 + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: db/test.sqlite3 + +production: + <<: *default + database: db/production.sqlite3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/environment.rb new file mode 100644 index 0000000..ee8d90d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require File.expand_path('../application', __FILE__) + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/environments/development.rb new file mode 100644 index 0000000..b55e214 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/environments/development.rb @@ -0,0 +1,41 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # Adds additional error checking when serving assets at runtime. + # Checks for improperly declared sprockets dependencies. + # Raises helpful error messages. + config.assets.raise_runtime_errors = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/environments/production.rb new file mode 100644 index 0000000..5c1b32e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/environments/production.rb @@ -0,0 +1,79 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like + # NGINX, varnish or squid. + # config.action_dispatch.rack_cache = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # 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-Accel-Redirect' # for NGINX + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug + + # Prepend all log lines with the following tags. + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/environments/test.rb new file mode 100644 index 0000000..1c19f08 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/environments/test.rb @@ -0,0 +1,42 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure static file server for tests with Cache-Control for performance. + config.serve_static_files = true + config.static_cache_control = 'public, max-age=3600' + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Randomize the order test cases are executed. + config.active_support.test_order = :random + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/initializers/assets.rb new file mode 100644 index 0000000..01ef3e6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/initializers/assets.rb @@ -0,0 +1,11 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path +# Rails.application.config.assets.paths << Emoji.images_path + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. +# Rails.application.config.assets.precompile += %w( search.js ) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..59385cd --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/initializers/cookies_serializer.rb new file mode 100644 index 0000000..7f70458 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/initializers/cookies_serializer.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000..4a994e1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/initializers/inflections.rb new file mode 100644 index 0000000..ac033bf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/initializers/mime_types.rb new file mode 100644 index 0000000..dc18996 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/initializers/mime_types.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/initializers/session_store.rb new file mode 100644 index 0000000..ed9b870 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/initializers/session_store.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.session_store :cookie_store, key: '_rspec-app_session' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..33725e9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] if respond_to?(:wrap_parameters) +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/locales/en.yml new file mode 100644 index 0000000..0653957 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/locales/en.yml @@ -0,0 +1,23 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/routes.rb new file mode 100644 index 0000000..3f66539 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/routes.rb @@ -0,0 +1,56 @@ +Rails.application.routes.draw do + # The priority is based upon order of creation: first created -> highest priority. + # See how all your routes lay out with "rake routes". + + # You can have the root of your site routed with "root" + # root 'welcome#index' + + # Example of regular route: + # get 'products/:id' => 'catalog#view' + + # Example of named route that can be invoked with purchase_url(id: product.id) + # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase + + # Example resource route (maps HTTP verbs to controller actions automatically): + # resources :products + + # Example resource route with options: + # resources :products do + # member do + # get 'short' + # post 'toggle' + # end + # + # collection do + # get 'sold' + # end + # end + + # Example resource route with sub-resources: + # resources :products do + # resources :comments, :sales + # resource :seller + # end + + # Example resource route with more complex sub-resources: + # resources :products do + # resources :comments + # resources :sales do + # get 'recent', on: :collection + # end + # end + + # Example resource route with concerns: + # concern :toggleable do + # post 'toggle' + # end + # resources :posts, concerns: :toggleable + # resources :photos, concerns: :toggleable + + # Example resource route within a namespace: + # namespace :admin do + # # Directs /admin/products/* to Admin::ProductsController + # # (app/controllers/admin/products_controller.rb) + # resources :products + # end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/secrets.yml new file mode 100644 index 0000000..e1c56b7 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/config/secrets.yml @@ -0,0 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rake secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: d179f335f682d329f596ca3ff007527c87183c9fefd6aeaf7985b6be2e8d72b1555a8fd87815e937db132a027f105170cb96a3b61f164e09e52614445faac55c + +test: + secret_key_base: c353924e65b6889a6fab620a77c89733f965ec7e745e39d2524fe37d46b34271d911e640402dceb6018c4447f079e0ebfbc94a7f082bc6f61cdf66b7ea98f4bd + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/db/migrate/20180813160219_create_users.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/db/migrate/20180813160219_create_users.rb new file mode 100644 index 0000000..cc285fe --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/db/migrate/20180813160219_create_users.rb @@ -0,0 +1,11 @@ +class CreateUsers < ActiveRecord::Migration + def change + create_table :users do |t| + t.string :first_name + t.string :last_name + t.string :email + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/db/schema.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/db/schema.rb new file mode 100644 index 0000000..c1f9213 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/db/schema.rb @@ -0,0 +1,24 @@ +# encoding: UTF-8 +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 20180813160219) do + + create_table "users", force: :cascade do |t| + t.string "first_name" + t.string "last_name" + t.string "email" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/db/seeds.rb new file mode 100644 index 0000000..4edb1e8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). +# +# Examples: +# +# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) +# Mayor.create(name: 'Emanuel', city: cities.first) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/lib/assets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/lib/tasks/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/log/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/public/404.html new file mode 100644 index 0000000..b612547 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +
+
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/public/422.html new file mode 100644 index 0000000..a21f82b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
+
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/public/500.html new file mode 100644 index 0000000..061abc5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/public/500.html @@ -0,0 +1,66 @@ + + + + We're sorry, but something went wrong (500) + + + + + + +
+
+

We're sorry, but something went wrong.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/public/robots.txt new file mode 100644 index 0000000..3c9c7c0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-agent: * +# Disallow: / diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/spec/models/user_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/spec/models/user_spec.rb new file mode 100644 index 0000000..96e95f6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/spec/models/user_spec.rb @@ -0,0 +1,55 @@ +require 'rails_helper' + +# RSpec.describe User, type: :model do +# pending "add some examples to (or delete) #{__FILE__}" +# end + +RSpec.describe User do + # ======================= + # Control [ VALID TEST ] + # ======================= + context "With valid attributes" do + it "should save" do + user = User.new(first_name: 'Shane', last_name: 'chang', email: 'schang@codingdojo.com') + expect(user).to be_valid + end + end + + # ================ + # [ INVALID TEST ] + # ================ + context "With invalid attributes" do + + # TEST #1 => Empty field + it "should not save if first_name field is blank" do + user = User.new(first_name: '', last_name: 'Chang', email: 'schang@codingdojo.com') + expect(user).to be_invalid + end + + # TEST #2 => Empty field + it "should not save if last_name field is blank" do + user = User.new(first_name: 'Shane', last_name: '', email: 'schang@codingdojo.com') + expect(user).to be_invalid + end + + # TEST #3 => Empty field + it "should not save if email field is blank" do + user = User.new(first_name: 'Shane', last_name: 'Chang', email: '') + expect(user).to be_invalid + end + + # TEST #4 => Uniqueness field + it "should not save if email already exists" do + User.create(first_name: "Shane", last_name: "Chang", email: "schang@codingdojo.com") + user = User.new(first_name: "Martin", last_name: "Nguema", email: "schang@codingdojo.com") + expect(user).to be_invalid + end + + # TEST #5 => correct format + it "should not save if innvalid email format" do + user = User.new(first_name: 'Arden', last_name: 'Zhan', email: 'invalidemail') + expect(user).to be_invalid + end + + end +end \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/spec/rails_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/spec/rails_helper.rb new file mode 100644 index 0000000..6a500b9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/spec/rails_helper.rb @@ -0,0 +1,62 @@ +# This file is copied to spec/ when you run 'rails generate rspec:install' +require 'spec_helper' +ENV['RAILS_ENV'] ||= 'test' +require File.expand_path('../../config/environment', __FILE__) +# Prevent database truncation if the environment is production +abort("The Rails environment is running in production mode!") if Rails.env.production? +require 'rspec/rails' +# Add additional requires below this line. Rails is not loaded until this point! + +# Requires supporting ruby files with custom matchers and macros, etc, in +# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are +# run as spec files by default. This means that files in spec/support that end +# in _spec.rb will both be required and run as specs, causing the specs to be +# run twice. It is recommended that you do not name files matching this glob to +# end with _spec.rb. You can configure this pattern with the --pattern +# option on the command line or in ~/.rspec, .rspec or `.rspec-local`. +# +# The following line is provided for convenience purposes. It has the downside +# of increasing the boot-up time by auto-requiring all files in the support +# directory. Alternatively, in the individual `*_spec.rb` files, manually +# require only the support files necessary. +# +# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f } + +# Checks for pending migrations and applies them before tests are run. +# If you are not using ActiveRecord, you can remove these lines. +begin + ActiveRecord::Migration.maintain_test_schema! +rescue ActiveRecord::PendingMigrationError => e + puts e.to_s.strip + exit 1 +end + +RSpec.configure do |config| + # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures + config.fixture_path = "#{::Rails.root}/spec/fixtures" + + # If you're not using ActiveRecord, or you'd prefer not to run each of your + # examples within a transaction, remove the following line or assign false + # instead of true. + config.use_transactional_fixtures = true + + # RSpec Rails can automatically mix in different behaviours to your tests + # based on their file location, for example enabling you to call `get` and + # `post` in specs under `spec/controllers`. + # + # You can disable this behaviour by removing the line below, and instead + # explicitly tag your specs with their type, e.g.: + # + # RSpec.describe UsersController, :type => :controller do + # # ... + # end + # + # The different available types are documented in the features, such as in + # https://relishapp.com/rspec/rspec-rails/docs + config.infer_spec_type_from_file_location! + + # Filter lines from Rails gems in backtraces. + config.filter_rails_from_backtrace! + # arbitrary gems may also be filtered via: + # config.filter_gems_from_backtrace("gem name") +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/spec/spec_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/spec/spec_helper.rb new file mode 100644 index 0000000..ce33d66 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/spec/spec_helper.rb @@ -0,0 +1,96 @@ +# This file was generated by the `rails generate rspec:install` command. Conventionally, all +# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. +# The generated `.rspec` file contains `--require spec_helper` which will cause +# this file to always be loaded, without a need to explicitly require it in any +# files. +# +# Given that it is always loaded, you are encouraged to keep this file as +# light-weight as possible. Requiring heavyweight dependencies from this file +# will add to the boot time of your test suite on EVERY test run, even for an +# individual file that may not need all of that loaded. Instead, consider making +# a separate helper file that requires the additional dependencies and performs +# the additional setup, and require it from the spec files that actually need +# it. +# +# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration +RSpec.configure do |config| + # rspec-expectations config goes here. You can use an alternate + # assertion/expectation library such as wrong or the stdlib/minitest + # assertions if you prefer. + config.expect_with :rspec do |expectations| + # This option will default to `true` in RSpec 4. It makes the `description` + # and `failure_message` of custom matchers include text for helper methods + # defined using `chain`, e.g.: + # be_bigger_than(2).and_smaller_than(4).description + # # => "be bigger than 2 and smaller than 4" + # ...rather than: + # # => "be bigger than 2" + expectations.include_chain_clauses_in_custom_matcher_descriptions = true + end + + # rspec-mocks config goes here. You can use an alternate test double + # library (such as bogus or mocha) by changing the `mock_with` option here. + config.mock_with :rspec do |mocks| + # Prevents you from mocking or stubbing a method that does not exist on + # a real object. This is generally recommended, and will default to + # `true` in RSpec 4. + mocks.verify_partial_doubles = true + end + + # This option will default to `:apply_to_host_groups` in RSpec 4 (and will + # have no way to turn it off -- the option exists only for backwards + # compatibility in RSpec 3). It causes shared context metadata to be + # inherited by the metadata hash of host groups and examples, rather than + # triggering implicit auto-inclusion in groups with matching metadata. + config.shared_context_metadata_behavior = :apply_to_host_groups + +# The settings below are suggested to provide a good initial experience +# with RSpec, but feel free to customize to your heart's content. +=begin + # This allows you to limit a spec run to individual examples or groups + # you care about by tagging them with `:focus` metadata. When nothing + # is tagged with `:focus`, all examples get run. RSpec also provides + # aliases for `it`, `describe`, and `context` that include `:focus` + # metadata: `fit`, `fdescribe` and `fcontext`, respectively. + config.filter_run_when_matching :focus + + # Allows RSpec to persist some state between runs in order to support + # the `--only-failures` and `--next-failure` CLI options. We recommend + # you configure your source control system to ignore this file. + config.example_status_persistence_file_path = "spec/examples.txt" + + # Limits the available syntax to the non-monkey patched syntax that is + # recommended. For more details, see: + # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/ + # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/ + # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode + config.disable_monkey_patching! + + # Many RSpec users commonly either run the entire suite or an individual + # file, and it's useful to allow more verbose output when running an + # individual spec file. + if config.files_to_run.one? + # Use the documentation formatter for detailed output, + # unless a formatter has already been configured + # (e.g. via a command-line flag). + config.default_formatter = "doc" + end + + # Print the 10 slowest examples and example groups at the + # end of the spec run, to help surface which specs are running + # particularly slow. + config.profile_examples = 10 + + # Run specs in random order to surface order dependencies. If you find an + # order dependency and want to debug it, you can fix the order by providing + # the seed, which is printed after each run. + # --seed 1234 + config.order = :random + + # Seed global randomization in this process using the `--seed` CLI option. + # Setting this allows you to use `--seed` to deterministically reproduce + # test failures related to randomization by passing the same `--seed` value + # as the one that triggered the failure. + Kernel.srand config.seed +=end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/vendor/assets/javascripts/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/ModelSpec/vendor/assets/stylesheets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/.gitignore new file mode 100644 index 0000000..050c9d9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/.gitignore @@ -0,0 +1,17 @@ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore the default SQLite database. +/db/*.sqlite3 +/db/*.sqlite3-journal + +# Ignore all logfiles and tempfiles. +/log/* +!/log/.keep +/tmp diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/Gemfile new file mode 100644 index 0000000..a2726be --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/Gemfile @@ -0,0 +1,55 @@ +source 'https://rubygems.org' + + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '4.2.7' +# Use sqlite3 as the database for Active Record +gem 'sqlite3' +# Use SCSS for stylesheets +gem 'sass-rails', '~> 5.0' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# Use CoffeeScript for .coffee assets and views +gem 'coffee-rails', '~> 4.1.0' +# See https://github.com/rails/execjs#readme for more supported runtimes +# gem 'therubyracer', platforms: :ruby + +# Use jquery as the JavaScript library +gem 'jquery-rails' +# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks +gem 'turbolinks' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.0' +# bundle exec rake doc:rails generates the API under doc/api. +gem 'sdoc', '~> 0.4.0', group: :doc + +# Use ActiveModel has_secure_password +gem 'bcrypt', '~> 3.1.7' + +# Use Unicorn as the app server +# gem 'unicorn' + +# Use Capistrano for deployment +# gem 'capistrano-rails', group: :development + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug' +end + +group :development do + # Access an IRB console on exception pages or by using <%= console %> in views + gem 'web-console', '~> 2.0' + + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' +end + +gem 'hirb' + +group :development, :test do + gem 'capybara' + # gem 'percy-capybara' + gem 'rspec-rails' + gem 'factory_bot_rails' +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/Gemfile.lock new file mode 100644 index 0000000..665f83c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/Gemfile.lock @@ -0,0 +1,212 @@ +GEM + remote: https://rubygems.org/ + specs: + actionmailer (4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.7) + actionview (= 4.2.7) + activesupport (= 4.2.7) + rack (~> 1.6) + rack-test (~> 0.6.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + activejob (4.2.7) + activesupport (= 4.2.7) + globalid (>= 0.3.0) + activemodel (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + activerecord (4.2.7) + activemodel (= 4.2.7) + activesupport (= 4.2.7) + arel (~> 6.0) + activesupport (4.2.7) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + addressable (2.5.2) + public_suffix (>= 2.0.2, < 4.0) + arel (6.0.4) + bcrypt (3.1.12) + binding_of_caller (0.8.0) + debug_inspector (>= 0.0.1) + builder (3.2.3) + byebug (10.0.2) + capybara (3.5.1) + addressable + mini_mime (>= 0.1.3) + nokogiri (~> 1.8) + rack (>= 1.6.0) + rack-test (>= 0.6.3) + xpath (~> 3.1) + coffee-rails (4.1.1) + coffee-script (>= 2.2.0) + railties (>= 4.0.0, < 5.1.x) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + concurrent-ruby (1.0.5) + crass (1.0.4) + debug_inspector (0.0.3) + diff-lcs (1.3) + erubis (2.7.0) + execjs (2.7.0) + factory_bot (4.10.0) + activesupport (>= 3.0.0) + factory_bot_rails (4.10.0) + factory_bot (~> 4.10.0) + railties (>= 3.0.0) + ffi (1.9.25) + globalid (0.4.1) + activesupport (>= 4.2.0) + hirb (0.7.3) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jbuilder (2.7.0) + activesupport (>= 4.2.0) + multi_json (>= 1.2) + jquery-rails (4.3.3) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + json (1.8.6) + loofah (2.2.2) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.0) + mini_mime (>= 0.1.1) + mini_mime (1.0.0) + mini_portile2 (2.3.0) + minitest (5.11.3) + multi_json (1.13.1) + nokogiri (1.8.4) + mini_portile2 (~> 2.3.0) + public_suffix (3.0.2) + rack (1.6.10) + rack-test (0.6.3) + rack (>= 1.0) + rails (4.2.7) + actionmailer (= 4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + activemodel (= 4.2.7) + activerecord (= 4.2.7) + activesupport (= 4.2.7) + bundler (>= 1.3.0, < 2.0) + railties (= 4.2.7) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.9) + activesupport (>= 4.2.0, < 5.0) + nokogiri (~> 1.6) + rails-deprecated_sanitizer (>= 1.0.1) + rails-html-sanitizer (1.0.4) + loofah (~> 2.2, >= 2.2.2) + railties (4.2.7) + actionpack (= 4.2.7) + activesupport (= 4.2.7) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (12.3.1) + rb-fsevent (0.10.3) + rb-inotify (0.9.10) + ffi (>= 0.5.0, < 2) + rdoc (4.3.0) + rspec-core (3.8.0) + rspec-support (~> 3.8.0) + rspec-expectations (3.8.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.8.0) + rspec-mocks (3.8.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.8.0) + rspec-rails (3.8.0) + actionpack (>= 3.0) + activesupport (>= 3.0) + railties (>= 3.0) + rspec-core (~> 3.8.0) + rspec-expectations (~> 3.8.0) + rspec-mocks (~> 3.8.0) + rspec-support (~> 3.8.0) + rspec-support (3.8.0) + sass (3.5.7) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sass-rails (5.0.7) + railties (>= 4.0.0, < 6) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + sdoc (0.4.2) + json (~> 1.7, >= 1.7.7) + rdoc (~> 4.0) + spring (2.0.2) + activesupport (>= 4.2) + sprockets (3.7.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.2.1) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + sqlite3 (1.3.13) + thor (0.20.0) + thread_safe (0.3.6) + tilt (2.0.8) + turbolinks (5.1.1) + turbolinks-source (~> 5.1) + turbolinks-source (5.1.0) + tzinfo (1.2.5) + thread_safe (~> 0.1) + uglifier (4.1.18) + execjs (>= 0.3.0, < 3) + web-console (2.3.0) + activemodel (>= 4.0) + binding_of_caller (>= 0.7.2) + railties (>= 4.0) + sprockets-rails (>= 2.0, < 4.0) + xpath (3.1.0) + nokogiri (~> 1.8) + +PLATFORMS + ruby + +DEPENDENCIES + bcrypt (~> 3.1.7) + byebug + capybara + coffee-rails (~> 4.1.0) + factory_bot_rails + hirb + jbuilder (~> 2.0) + jquery-rails + rails (= 4.2.7) + rspec-rails + sass-rails (~> 5.0) + sdoc (~> 0.4.0) + spring + sqlite3 + turbolinks + uglifier (>= 1.3.0) + web-console (~> 2.0) + +BUNDLED WITH + 1.16.3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/README.rdoc b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/README.rdoc new file mode 100644 index 0000000..dd4e97e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/README.rdoc @@ -0,0 +1,28 @@ +== README + +This README would normally document whatever steps are necessary to get the +application up and running. + +Things you may want to cover: + +* Ruby version + +* System dependencies + +* Configuration + +* Database creation + +* Database initialization + +* How to run the test suite + +* Services (job queues, cache servers, search engines, etc.) + +* Deployment instructions + +* ... + + +Please feel free to use a different markup language if you do not plan to run +rake doc:app. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/Rakefile new file mode 100644 index 0000000..ba6b733 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Rails.application.load_tasks diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/assets/images/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/assets/javascripts/application.js new file mode 100644 index 0000000..e07c5a8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/assets/javascripts/application.js @@ -0,0 +1,16 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require jquery +//= require jquery_ujs +//= require turbolinks +//= require_tree . diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/assets/javascripts/bootstrap.min.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/assets/javascripts/bootstrap.min.js new file mode 100644 index 0000000..00c895f --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/assets/javascripts/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v4.1.3 (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e(t.bootstrap={},t.jQuery,t.Popper)}(this,function(t,e,h){"use strict";function i(t,e){for(var n=0;nthis._items.length-1||t<0))if(this._isSliding)P(this._element).one(Q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=ndocument.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right
',trigger:"hover focus",title:"",delay:0,html:!(Ie={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"}),selector:!(Se={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)"}),placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent"},we="out",Ne={HIDE:"hide"+Ee,HIDDEN:"hidden"+Ee,SHOW:(De="show")+Ee,SHOWN:"shown"+Ee,INSERTED:"inserted"+Ee,CLICK:"click"+Ee,FOCUSIN:"focusin"+Ee,FOCUSOUT:"focusout"+Ee,MOUSEENTER:"mouseenter"+Ee,MOUSELEAVE:"mouseleave"+Ee},Oe="fade",ke="show",Pe=".tooltip-inner",je=".arrow",He="hover",Le="focus",Re="click",xe="manual",We=function(){function i(t,e){if("undefined"==typeof h)throw new TypeError("Bootstrap tooltips require Popper.js (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=pe(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(pe(this.getTipElement()).hasClass(ke))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),pe.removeData(this.element,this.constructor.DATA_KEY),pe(this.element).off(this.constructor.EVENT_KEY),pe(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&pe(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===pe(this.element).css("display"))throw new Error("Please use show on visible elements");var t=pe.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){pe(this.element).trigger(t);var n=pe.contains(this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!n)return;var i=this.getTipElement(),r=Fn.getUID(this.constructor.NAME);i.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&pe(i).addClass(Oe);var o="function"==typeof this.config.placement?this.config.placement.call(this,i,this.element):this.config.placement,s=this._getAttachment(o);this.addAttachmentClass(s);var a=!1===this.config.container?document.body:pe(document).find(this.config.container);pe(i).data(this.constructor.DATA_KEY,this),pe.contains(this.element.ownerDocument.documentElement,this.tip)||pe(i).appendTo(a),pe(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new h(this.element,i,{placement:s,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:je},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){e._handlePopperPlacementChange(t)}}),pe(i).addClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().on("mouseover",null,pe.noop);var l=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,pe(e.element).trigger(e.constructor.Event.SHOWN),t===we&&e._leave(null,e)};if(pe(this.tip).hasClass(Oe)){var c=Fn.getTransitionDurationFromElement(this.tip);pe(this.tip).one(Fn.TRANSITION_END,l).emulateTransitionEnd(c)}else l()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=pe.Event(this.constructor.Event.HIDE),r=function(){e._hoverState!==De&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),pe(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(pe(this.element).trigger(i),!i.isDefaultPrevented()){if(pe(n).removeClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().off("mouseover",null,pe.noop),this._activeTrigger[Re]=!1,this._activeTrigger[Le]=!1,this._activeTrigger[He]=!1,pe(this.tip).hasClass(Oe)){var o=Fn.getTransitionDurationFromElement(n);pe(n).one(Fn.TRANSITION_END,r).emulateTransitionEnd(o)}else r();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){pe(this.getTipElement()).addClass(Te+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||pe(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(pe(t.querySelectorAll(Pe)),this.getTitle()),pe(t).removeClass(Oe+" "+ke)},t.setElementContent=function(t,e){var n=this.config.html;"object"==typeof e&&(e.nodeType||e.jquery)?n?pe(e).parent().is(t)||t.empty().append(e):t.text(pe(e).text()):t[n?"html":"text"](e)},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getAttachment=function(t){return Ie[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)pe(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==xe){var e=t===He?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===He?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;pe(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}pe(i.element).closest(".modal").on("hide.bs.modal",function(){return i.hide()})}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Le:He]=!0),pe(e.getTipElement()).hasClass(ke)||e._hoverState===De?e._hoverState=De:(clearTimeout(e._timeout),e._hoverState=De,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===De&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Le:He]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=we,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===we&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){return"number"==typeof(t=l({},this.constructor.Default,pe(this.element).data(),"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),Fn.typeCheckConfig(ve,t,this.constructor.DefaultType),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=pe(this.getTipElement()),e=t.attr("class").match(be);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(pe(t).removeClass(Oe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=pe(this).data(ye),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),pe(this).data(ye,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return Ae}},{key:"NAME",get:function(){return ve}},{key:"DATA_KEY",get:function(){return ye}},{key:"Event",get:function(){return Ne}},{key:"EVENT_KEY",get:function(){return Ee}},{key:"DefaultType",get:function(){return Se}}]),i}(),pe.fn[ve]=We._jQueryInterface,pe.fn[ve].Constructor=We,pe.fn[ve].noConflict=function(){return pe.fn[ve]=Ce,We._jQueryInterface},We),Jn=(qe="popover",Ke="."+(Fe="bs.popover"),Me=(Ue=e).fn[qe],Qe="bs-popover",Be=new RegExp("(^|\\s)"+Qe+"\\S+","g"),Ve=l({},zn.Default,{placement:"right",trigger:"click",content:"",template:''}),Ye=l({},zn.DefaultType,{content:"(string|element|function)"}),ze="fade",Ze=".popover-header",Ge=".popover-body",$e={HIDE:"hide"+Ke,HIDDEN:"hidden"+Ke,SHOW:(Je="show")+Ke,SHOWN:"shown"+Ke,INSERTED:"inserted"+Ke,CLICK:"click"+Ke,FOCUSIN:"focusin"+Ke,FOCUSOUT:"focusout"+Ke,MOUSEENTER:"mouseenter"+Ke,MOUSELEAVE:"mouseleave"+Ke},Xe=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var r=i.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){Ue(this.getTipElement()).addClass(Qe+"-"+t)},r.getTipElement=function(){return this.tip=this.tip||Ue(this.config.template)[0],this.tip},r.setContent=function(){var t=Ue(this.getTipElement());this.setElementContent(t.find(Ze),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(Ge),e),t.removeClass(ze+" "+Je)},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=Ue(this.getTipElement()),e=t.attr("class").match(Be);null!==e&&0=this._offsets[r]&&("undefined"==typeof this._offsets[r+1]||tcode{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(2.25rem + 2px);padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::after,.was-validated .custom-file-input:valid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::after,.was-validated .custom-file-input:invalid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media screen and (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media screen and (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-right{right:0;left:auto}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-label::after{border-color:#80bdff}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:2.25rem;padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;padding-left:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion .card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media screen and (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:not(:disabled):not(.disabled){cursor:pointer}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{color:#000;text-decoration:none;opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}@media screen and (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-dialog-centered::before{display:block;height:calc(100vh - (.5rem * 2));content:""}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-dialog-centered::before{height:calc(100vh - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-ms-flex-align:center;align-items:center;width:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease}@media screen and (prefers-reduced-motion:reduce){.carousel-item-next,.carousel-item-prev,.carousel-item.active{transition:none}}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-fade .carousel-item{opacity:0;transition-duration:.6s;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/assets/stylesheets/content.scss b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/assets/stylesheets/content.scss new file mode 100644 index 0000000..5aafac0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/assets/stylesheets/content.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the Content controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/assets/stylesheets/messages.scss b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/assets/stylesheets/messages.scss new file mode 100644 index 0000000..492f0fa --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/assets/stylesheets/messages.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the Messages controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/controllers/application_controller.rb new file mode 100644 index 0000000..d83690e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/controllers/application_controller.rb @@ -0,0 +1,5 @@ +class ApplicationController < ActionController::Base + # Prevent CSRF attacks by raising an exception. + # For APIs, you may want to use :null_session instead. + protect_from_forgery with: :exception +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/controllers/comments_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/controllers/comments_controller.rb new file mode 100644 index 0000000..01fd4b7 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/controllers/comments_controller.rb @@ -0,0 +1,19 @@ +class CommentsController < ApplicationController + def create + @user = User.find(session[:user_id]) + @comment = @user.comments.new(validate_params) + + if @comment.save + redirect_to :back + else + flash[:errors] = @comment.errors.full_messages + redirect_to :back + end + + end + + private + def validate_params + params.require(:comment).permit(:content, :message_id) + end + end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/controllers/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/controllers/messages_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/controllers/messages_controller.rb new file mode 100644 index 0000000..90a61f6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/controllers/messages_controller.rb @@ -0,0 +1,23 @@ +class MessagesController < ApplicationController + def index + @user = User.find(session[:user_id]) + @messages = Message.includes(:user) + end + + def create + @user = User.find(session[:user_id]) + @message = @user.messages.new(message_params) + + if @message.save + redirect_to :back + else + flash[:errors] = @message.errors.full_messages + redirect_to :back + end + end + + private + def message_params + params.require(:message).permit(:message) + end + end \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/controllers/users_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/controllers/users_controller.rb new file mode 100644 index 0000000..7ed7847 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/controllers/users_controller.rb @@ -0,0 +1,29 @@ +class UsersController < ApplicationController + def new + if session[:user_id] + redirect_to messages_path + end + end + + def signin + @user = User.find_by(validate_params) + if @user + session[:user_id] = @user.id + session[:username] = @user.username + redirect_to messages_path + else + flash[:errors] = ["Could not find username"] + redirect_to :back + end + end + + def logout + reset_session + redirect_to new_user_path + end + + private + def validate_params + params.require(:user).permit(:username) + end +end \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/helpers/application_helper.rb new file mode 100644 index 0000000..de6be79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/helpers/content_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/helpers/content_helper.rb new file mode 100644 index 0000000..3199604 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/helpers/content_helper.rb @@ -0,0 +1,2 @@ +module ContentHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/helpers/messages_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/helpers/messages_helper.rb new file mode 100644 index 0000000..f1bca9f --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/helpers/messages_helper.rb @@ -0,0 +1,2 @@ +module MessagesHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/models/comment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/models/comment.rb new file mode 100644 index 0000000..45fe411 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/models/comment.rb @@ -0,0 +1,12 @@ +class Comment < ActiveRecord::Base + belongs_to :user + belongs_to :message + #----------------------------------- [ Validation ] + validates :content, :user, :message, presence: true + validates :content, length: { minimum: 10 } + # ------------------------------------------------- + + def self.with_users message_id + Comment.joins(:user).where("message_id = ?", message_id).select(:id, :content, :created_at, :username) + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/models/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/models/message.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/models/message.rb new file mode 100644 index 0000000..7ab4371 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/models/message.rb @@ -0,0 +1,18 @@ +class Message < ActiveRecord::Base + belongs_to :user + has_many :messages + has_many :comments + #------------------------------[ Validation ] + validates :message, :user, presence: true + validates :message, length: { minimum: 10 } + # ------------------------------------------ + + def self.with_comments + everything = [] + messages = Message.joins(:user).select(:id, :message, :created_at, :username) + messages.each do |msg| + everything << { message: msg, comments: Comment.with_users(msg.id) } + end + # everything + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/models/user.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/models/user.rb new file mode 100644 index 0000000..e62f1af --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/models/user.rb @@ -0,0 +1,5 @@ +class User < ActiveRecord::Base + validates :username, uniqueness: true, presence: true, length: { minimum: 5 } + has_many :comments + has_many :messages +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/views/Messages/index.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/views/Messages/index.html.erb new file mode 100644 index 0000000..a97b63b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/views/Messages/index.html.erb @@ -0,0 +1,37 @@ +
+ + <% if flash[:errors] %> + <% flash[:errors].each do |e| %> +

<%= e %>

+ <% end %> + <% end %> + +

Post a message

+ +
+
+ + +
+ +
+ + <% @messages.each do |elem| %> +

<%= "#{elem.user.username} - #{elem.created_at.strftime("%B #{elem.created_at.day.ordinalize}, %Y")}" %>

+

<%= elem.message %>

+ +

Comments

+ + <% elem.comments.each do |comment| %> +

<%= "#{comment.user.username} - #{comment.created_at.strftime("%B #{comment.created_at.day.ordinalize}, %Y")}" %>

+

<%= comment.content %>

+ <% end %> + +
+ + +
+ +
+ <% end %> +
\ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/views/layouts/application.html.erb new file mode 100644 index 0000000..d878b15 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/views/layouts/application.html.erb @@ -0,0 +1,27 @@ + + + + TheWall + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + + + + <% if session["user_id"]%> + + <% end %> + + <%= yield %> +
+ + + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/views/users/new.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/views/users/new.html.erb new file mode 100644 index 0000000..9f6a5a4 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/app/views/users/new.html.erb @@ -0,0 +1,23 @@ +
+
+ +

Sign In

+ +
+ +
+ + + + <% if flash[:errors] %><% flash[:errors].each do |err_msg| %> + <%= err_msg %> + <% end %><% end %> + +
+ +
+ +
+
+
+
\ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/bin/bundle new file mode 100755 index 0000000..66e9889 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/bin/rails new file mode 100755 index 0000000..0138d79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/bin/rails @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +APP_PATH = File.expand_path('../../config/application', __FILE__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/bin/rake new file mode 100755 index 0000000..d87d5f5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/bin/rake @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/bin/setup new file mode 100755 index 0000000..acdb2c1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/bin/setup @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +Dir.chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file: + + puts "== Installing dependencies ==" + system "gem install bundler --conservative" + system "bundle check || bundle install" + + # puts "\n== Copying sample files ==" + # unless File.exist?("config/database.yml") + # system "cp config/database.yml.sample config/database.yml" + # end + + puts "\n== Preparing database ==" + system "bin/rake db:setup" + + puts "\n== Removing old logs and tempfiles ==" + system "rm -f log/*" + system "rm -rf tmp/cache" + + puts "\n== Restarting application server ==" + system "touch tmp/restart.txt" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/bin/spring new file mode 100755 index 0000000..fb2ec2e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/bin/spring @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +# This file loads spring without using Bundler, in order to be fast. +# It gets overwritten when you run the `spring binstub` command. + +unless defined?(Spring) + require 'rubygems' + require 'bundler' + + lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read) + spring = lockfile.specs.detect { |spec| spec.name == "spring" } + if spring + Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path + gem 'spring', spring.version + require 'spring/binstub' + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config.ru new file mode 100644 index 0000000..bd83b25 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Rails.application diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/application.rb new file mode 100644 index 0000000..47431c6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/application.rb @@ -0,0 +1,35 @@ +require File.expand_path('../boot', __FILE__) + +require "rails" +# Pick the frameworks you want: +require "active_model/railtie" +require "active_job/railtie" +require "active_record/railtie" +require "action_controller/railtie" +require "action_mailer/railtie" +require "action_view/railtie" +require "sprockets/railtie" +# require "rails/test_unit/railtie" + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module TheWall + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Do not swallow errors in after_commit/after_rollback callbacks. + config.active_record.raise_in_transactional_callbacks = true + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/boot.rb new file mode 100644 index 0000000..6b750f0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/boot.rb @@ -0,0 +1,3 @@ +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) + +require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/database.yml new file mode 100644 index 0000000..1c1a37c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/database.yml @@ -0,0 +1,25 @@ +# SQLite version 3.x +# gem install sqlite3 +# +# Ensure the SQLite 3 gem is defined in your Gemfile +# gem 'sqlite3' +# +default: &default + adapter: sqlite3 + pool: 5 + timeout: 5000 + +development: + <<: *default + database: db/development.sqlite3 + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: db/test.sqlite3 + +production: + <<: *default + database: db/production.sqlite3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/environment.rb new file mode 100644 index 0000000..ee8d90d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require File.expand_path('../application', __FILE__) + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/environments/development.rb new file mode 100644 index 0000000..b55e214 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/environments/development.rb @@ -0,0 +1,41 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # Adds additional error checking when serving assets at runtime. + # Checks for improperly declared sprockets dependencies. + # Raises helpful error messages. + config.assets.raise_runtime_errors = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/environments/production.rb new file mode 100644 index 0000000..5c1b32e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/environments/production.rb @@ -0,0 +1,79 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like + # NGINX, varnish or squid. + # config.action_dispatch.rack_cache = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # 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-Accel-Redirect' # for NGINX + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug + + # Prepend all log lines with the following tags. + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/environments/test.rb new file mode 100644 index 0000000..1c19f08 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/environments/test.rb @@ -0,0 +1,42 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure static file server for tests with Cache-Control for performance. + config.serve_static_files = true + config.static_cache_control = 'public, max-age=3600' + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Randomize the order test cases are executed. + config.active_support.test_order = :random + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/initializers/assets.rb new file mode 100644 index 0000000..01ef3e6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/initializers/assets.rb @@ -0,0 +1,11 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path +# Rails.application.config.assets.paths << Emoji.images_path + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. +# Rails.application.config.assets.precompile += %w( search.js ) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..59385cd --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/initializers/cookies_serializer.rb new file mode 100644 index 0000000..7f70458 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/initializers/cookies_serializer.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000..4a994e1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/initializers/inflections.rb new file mode 100644 index 0000000..ac033bf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/initializers/mime_types.rb new file mode 100644 index 0000000..dc18996 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/initializers/mime_types.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/initializers/session_store.rb new file mode 100644 index 0000000..c37744d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/initializers/session_store.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.session_store :cookie_store, key: '_TheWall_session' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..33725e9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] if respond_to?(:wrap_parameters) +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/locales/en.yml new file mode 100644 index 0000000..0653957 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/locales/en.yml @@ -0,0 +1,23 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/routes.rb new file mode 100644 index 0000000..f83171c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/routes.rb @@ -0,0 +1,22 @@ +Rails.application.routes.draw do + root "users#new" + resources :users, only: [:new] + resources :messages, only: [:index, :create] + resources :comments, only: [:create] + post "signin" => "users#signin" + delete "logout" => "users#logout" +end + +# vagrant 😎 @ TheWall +# =========================================================== +# Prefix Verb URI Pattern Controller#Action +# =========================================================== +# root GET / users#new +# new_user GET /users/new(.:format) users#new +# messages GET /messages(.:format) messages#index +# POST /messages(.:format) messages#create +# comments POST /comments(.:format) comments#create +# signin POST /signin(.:format) users#signin +# logout DELETE /logout(.:format) users#logout +# =========================================================== + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/secrets.yml new file mode 100644 index 0000000..92609c3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/config/secrets.yml @@ -0,0 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rake secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: 9da833b77b40fd0aaa8c293099540e088cb1ba999992713c2f49ce96afe744e727140f39030bd2b24fb4754c9fc1e0ecd91a940fbf38006cf4ad29d329247464 + +test: + secret_key_base: 296df2ed7e96b27352a8a9b09e70af042173e0b84676d1ac4a10d0beeb95c4d9e17d98bb96f61d4ae1d75f6240e6ea4daae022ac945a881e48764bcfe0dbb66b + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/db/migrate/20180813224006_create_users.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/db/migrate/20180813224006_create_users.rb new file mode 100644 index 0000000..78f2820 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/db/migrate/20180813224006_create_users.rb @@ -0,0 +1,9 @@ +class CreateUsers < ActiveRecord::Migration + def change + create_table :users do |t| + t.string :username + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/db/migrate/20180813225157_create_messages.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/db/migrate/20180813225157_create_messages.rb new file mode 100644 index 0000000..f9b75a9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/db/migrate/20180813225157_create_messages.rb @@ -0,0 +1,10 @@ +class CreateMessages < ActiveRecord::Migration + def change + create_table :messages do |t| + t.string :message + t.integer :user_id + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/db/migrate/20180813231929_create_comments.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/db/migrate/20180813231929_create_comments.rb new file mode 100644 index 0000000..fa12d43 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/db/migrate/20180813231929_create_comments.rb @@ -0,0 +1,11 @@ +class CreateComments < ActiveRecord::Migration + def change + create_table :comments do |t| + t.text :content + t.integer :user_id + t.integer :message_id + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/db/schema.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/db/schema.rb new file mode 100644 index 0000000..1dd3267 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/db/schema.rb @@ -0,0 +1,37 @@ +# encoding: UTF-8 +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 20180813231929) do + + create_table "comments", force: :cascade do |t| + t.text "content" + t.integer "user_id" + t.integer "message_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "messages", force: :cascade do |t| + t.string "message" + t.integer "user_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "users", force: :cascade do |t| + t.string "username" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/db/seeds.rb new file mode 100644 index 0000000..4edb1e8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). +# +# Examples: +# +# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) +# Mayor.create(name: 'Emanuel', city: cities.first) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/lib/assets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/lib/tasks/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/log/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/public/404.html new file mode 100644 index 0000000..b612547 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +
+
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/public/422.html new file mode 100644 index 0000000..a21f82b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
+
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/public/500.html new file mode 100644 index 0000000..061abc5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/public/500.html @@ -0,0 +1,66 @@ + + + + We're sorry, but something went wrong (500) + + + + + + +
+
+

We're sorry, but something went wrong.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/public/robots.txt new file mode 100644 index 0000000..3c9c7c0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-agent: * +# Disallow: / diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/controllers/content_controller_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/controllers/content_controller_spec.rb new file mode 100644 index 0000000..ebb867f --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/controllers/content_controller_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe CommentsController, type: :controller do + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/controllers/messages_controller_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/controllers/messages_controller_spec.rb new file mode 100644 index 0000000..ddafb67 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/controllers/messages_controller_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe MessagesController, type: :controller do + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/factories/comments.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/factories/comments.rb new file mode 100644 index 0000000..fafa2ac --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/factories/comments.rb @@ -0,0 +1,7 @@ +FactoryBot.define do + factory :comment do + content "MyText" + user_id 1 + message_id 1 + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/factories/messages.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/factories/messages.rb new file mode 100644 index 0000000..a1731c3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/factories/messages.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :message do + message "MyString" + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/factories/users.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/factories/users.rb new file mode 100644 index 0000000..59f1a52 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/factories/users.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :user do + username "MyString" + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/features/after_register_user_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/features/after_register_user_spec.rb new file mode 100644 index 0000000..5659498 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/features/after_register_user_spec.rb @@ -0,0 +1,27 @@ +require "rails_helper" + +feature "after registering user" do + before(:each) do + @user = create(:user) + @comment = create(:message, user: @user) + visit root_path + fill_in "username", with: "codingdojo" + click_button "Sign In" + end + + scenario "there should be a logout feature" do + expect(page).to have_link("Log out") + click_link("Log out") + expect(current_path).to eq(new_user_path) + end + + scenario "there should be a form to create a message" do + expect(page).to have_field("message") + expect(page).to have_button("Post a Message") + end + + scenario "there should be a form to create a comment if there's a message" do + expect(page).to have_field("comment") + expect(page).to have_button("Post a Comment") + end +end \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/features/create_comment_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/features/create_comment_spec.rb new file mode 100644 index 0000000..0a771a9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/features/create_comment_spec.rb @@ -0,0 +1,37 @@ +require "rails_helper" + +feature "creating a comment" do + before(:each) do + @user = create(:user) + @message = create(:message, user: @user) + visit root_path + fill_in "username", with: "MJ" + click_button "Sign In" + end + + # [ PASSED TEST VALIDATION ] + scenario "successfully creating a comment" do + fill_in "comment", with: "This is a really cool comment" + click_button "Post a Comment" + expect(current_path).to eq(messages_path) + comment = Comment.first + date = comment.created_at.strftime("%B #{comment.created_at.day.ordinalize}, %Y") + expect(page).to have_content("#{User.first.username} - #{date}") + expect(page).to have_content(Comment.first.content) + end + + # [ FAILD TO PASS TEST VALIDATION ] + scenario "unsuccessfully creating a comment when is blank" do + fill_in "comment", with: "" + click_button "Post a Comment" + expect(current_path).to eq(messages_path) + expect(page).to have_content("Content can't be blank") + end + + scenario "unsuccessfully creating a message when is shorter than 10 character" do + fill_in "comment", with: "hello" + click_button "Post a Comment" + expect(current_path).to eq(messages_path) + expect(page).to have_content("Content is too short (minimum is 10 characters)") + end +end \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/features/create_msg_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/features/create_msg_spec.rb new file mode 100644 index 0000000..683d073 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/features/create_msg_spec.rb @@ -0,0 +1,37 @@ +require "rails_helper" + +feature "creating a message" do + before(:each) do + @user = create(:user) + visit root_path + fill_in "username", with: "codingdojo" + click_button "Sign In" + end + + # [ PASS TEST VALIDATION ] + # => CONTROL + scenario "successfully creating a message" do + fill_in "message", with: "This is my cool message" + click_button "Post a Message" + expect(current_path).to eq(messages_path) + message = Message.first + date = message.created_at.strftime("%B #{message.created_at.day.ordinalize}, %Y") + expect(page).to have_content("#{User.first.username} - #{date}") + expect(page).to have_content(Message.first.message) + end + + # [ FAIL TO PASS TEST VALIDATION ] + scenario "unsuccessfully creating a message when is blank" do + fill_in "message", with: "" + click_button "Post a Message" + expect(current_path).to eq(messages_path) + expect(page).to have_content("Message can't be blank") + end + + scenario "unsuccessfully creating a message when is shorter than 10 character" do + fill_in "message", with: "hello" + click_button "Post a Message" + expect(current_path).to eq(messages_path) + expect(page).to have_content("Message is too short (minimum is 10 characters)") + end +end \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/features/register_user_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/features/register_user_spec.rb new file mode 100644 index 0000000..8e771cf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/features/register_user_spec.rb @@ -0,0 +1,26 @@ +require 'rails_helper' + +# ================================================= +# Feature Testing... [ USER Rgistration Work Flow ] +# ================================================= +feature "registering user" do + + # [ Valid REGISTRATION ] + scenario "successfully signs in an user" do + create(:user) + visit root_path + fill_in "username", with: "MJ" + click_button "Sign In" + expect(page).to have_content("Welcome #{User.first.username}") + expect(current_path).to eq(messages_path) + end + + # [ Invalid REGISTRATION ] + scenario "unsuccessfully sign in a user" do + visit root_path + fill_in "username", with: "no one" + click_button "Sign In" + expect(page).to have_content("Could not find username") + expect(current_path).to eq(root_path) + end +end \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/helpers/content_helper_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/helpers/content_helper_spec.rb new file mode 100644 index 0000000..8902e0f --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/helpers/content_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the ContentHelper. For example: +# +# describe ContentHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe ContentHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/helpers/messages_helper_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/helpers/messages_helper_spec.rb new file mode 100644 index 0000000..e465f36 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/helpers/messages_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the MessagesHelper. For example: +# +# describe MessagesHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe MessagesHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/models/comment_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/models/comment_spec.rb new file mode 100644 index 0000000..a60cbff --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/models/comment_spec.rb @@ -0,0 +1,39 @@ +require 'rails_helper' + +RSpec.describe Comment, type: :model do + + before(:each) do + @user = build(:user) + @message = build(:message, user: @user) + end + + # ====================== + # Control [ VALID Test ] + # ====================== + context "With valid attributes" do + it "should save" do + expect(build(:comment, user: @user, message: @message)).to be_valid + end + end + + # ========================= + # Other [ INVALID TEST ] + # ========================= + context "With invalid attributes" do + it "should not save if content field is blank" do + expect(build(:comment, content: "", user: @user, message: @message)).to be_invalid + end + + it "should not save if content field is less than 10 characters" do + expect(build(:comment, content: "hello", user: @user, message: @message)).to be_invalid + end + + it "should not save if there is no user references" do + expect(build(:comment, message: @message)).to be_invalid + end + it "should not save if there is no message references" do + expect(build(:comment, user: @user)).to be_invalid + end + end + +end \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/models/message_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/models/message_spec.rb new file mode 100644 index 0000000..ff77fe2 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/models/message_spec.rb @@ -0,0 +1,25 @@ +require 'rails_helper' + +RSpec.describe User, type: :model do + + context "With valid attributes" do + it "should save" do + expect(build(:user)).to be_valid + end + end + + context "With invalid attributes" do + it "should not save if username field is blank" do + expect(build(:user, username: "")).to be_invalid + end + + it "should not save if username is less that 5 characters" do + expect(build(:user, username: "12345")).to be_invalid + end + + it "should be a unique username" do + userq = create(:user, username: "dojomaster") + expect(build(:user, username: "dojomaster")).to be_invalid + end + end +end \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/models/user_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/models/user_spec.rb new file mode 100644 index 0000000..1f70a19 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/models/user_spec.rb @@ -0,0 +1,37 @@ +require 'rails_helper' + +RSpec.describe User, type: :model do + + # ======================= + # Control [ VALID TEST ] + # ======================= + context "With valid attributes" do + it "should save" do + expect(build(:user)).to be_valid + end + end + + + # ================ + # [ INVALID TEST ] + # ================ + context "With invalid attributes" do + + # TEST #1 => Empty field + it "should not save if field is blank" do + expect(build(:user, username: "")).to be_invalid + end + + # TEST #1 => field is at least 5 characters long + it "should not save if field is blank" do + expect(build(:user, username: "12345")).to be_invalid + end + + # TEST #4 => Uniqueness field + it "should not save if email already exists" do + create(:user) + expect(build(:user)).to be_invalid + end + + end +end \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/rails_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/rails_helper.rb new file mode 100644 index 0000000..51d6b4d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/rails_helper.rb @@ -0,0 +1,69 @@ +# This file is copied to spec/ when you run 'rails generate rspec:install' +require 'spec_helper' +ENV['RAILS_ENV'] ||= 'test' +require File.expand_path('../../config/environment', __FILE__) +# Prevent database truncation if the environment is production +abort("The Rails environment is running in production mode!") if Rails.env.production? +require 'rspec/rails' +# Add additional requires below this line. Rails is not loaded until this point! + +# Requires supporting ruby files with custom matchers and macros, etc, in +# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are +# run as spec files by default. This means that files in spec/support that end +# in _spec.rb will both be required and run as specs, causing the specs to be +# run twice. It is recommended that you do not name files matching this glob to +# end with _spec.rb. You can configure this pattern with the --pattern +# option on the command line or in ~/.rspec, .rspec or `.rspec-local`. +# +# The following line is provided for convenience purposes. It has the downside +# of increasing the boot-up time by auto-requiring all files in the support +# directory. Alternatively, in the individual `*_spec.rb` files, manually +# require only the support files necessary. +# +# Uncommented line below: +Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f } + +# Checks for pending migrations and applies them before tests are run. +# If you are not using ActiveRecord, you can remove these lines. +begin + ActiveRecord::Migration.maintain_test_schema! +rescue ActiveRecord::PendingMigrationError => e + puts e.to_s.strip + exit 1 +end + +require 'factory_bot_rails' +RSpec.configure do |config| + + # ==> Added Configuration + config.include FactoryBot::Syntax::Methods + config.include CapybaraHelpers + + # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures + config.fixture_path = "#{::Rails.root}/spec/fixtures" + + # If you're not using ActiveRecord, or you'd prefer not to run each of your + # examples within a transaction, remove the following line or assign false + # instead of true. + config.use_transactional_fixtures = true + + # RSpec Rails can automatically mix in different behaviours to your tests + # based on their file location, for example enabling you to call `get` and + # `post` in specs under `spec/controllers`. + # + # You can disable this behaviour by removing the line below, and instead + # explicitly tag your specs with their type, e.g.: + # + # RSpec.describe UsersController, :type => :controller do + # # ... + # end + # + # The different available types are documented in the features, such as in + # https://relishapp.com/rspec/rspec-rails/docs + config.infer_spec_type_from_file_location! + + # Filter lines from Rails gems in backtraces. + config.filter_rails_from_backtrace! + # arbitrary gems may also be filtered via: + # config.filter_gems_from_backtrace("gem name") +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/spec_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/spec_helper.rb new file mode 100644 index 0000000..ce33d66 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/spec_helper.rb @@ -0,0 +1,96 @@ +# This file was generated by the `rails generate rspec:install` command. Conventionally, all +# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. +# The generated `.rspec` file contains `--require spec_helper` which will cause +# this file to always be loaded, without a need to explicitly require it in any +# files. +# +# Given that it is always loaded, you are encouraged to keep this file as +# light-weight as possible. Requiring heavyweight dependencies from this file +# will add to the boot time of your test suite on EVERY test run, even for an +# individual file that may not need all of that loaded. Instead, consider making +# a separate helper file that requires the additional dependencies and performs +# the additional setup, and require it from the spec files that actually need +# it. +# +# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration +RSpec.configure do |config| + # rspec-expectations config goes here. You can use an alternate + # assertion/expectation library such as wrong or the stdlib/minitest + # assertions if you prefer. + config.expect_with :rspec do |expectations| + # This option will default to `true` in RSpec 4. It makes the `description` + # and `failure_message` of custom matchers include text for helper methods + # defined using `chain`, e.g.: + # be_bigger_than(2).and_smaller_than(4).description + # # => "be bigger than 2 and smaller than 4" + # ...rather than: + # # => "be bigger than 2" + expectations.include_chain_clauses_in_custom_matcher_descriptions = true + end + + # rspec-mocks config goes here. You can use an alternate test double + # library (such as bogus or mocha) by changing the `mock_with` option here. + config.mock_with :rspec do |mocks| + # Prevents you from mocking or stubbing a method that does not exist on + # a real object. This is generally recommended, and will default to + # `true` in RSpec 4. + mocks.verify_partial_doubles = true + end + + # This option will default to `:apply_to_host_groups` in RSpec 4 (and will + # have no way to turn it off -- the option exists only for backwards + # compatibility in RSpec 3). It causes shared context metadata to be + # inherited by the metadata hash of host groups and examples, rather than + # triggering implicit auto-inclusion in groups with matching metadata. + config.shared_context_metadata_behavior = :apply_to_host_groups + +# The settings below are suggested to provide a good initial experience +# with RSpec, but feel free to customize to your heart's content. +=begin + # This allows you to limit a spec run to individual examples or groups + # you care about by tagging them with `:focus` metadata. When nothing + # is tagged with `:focus`, all examples get run. RSpec also provides + # aliases for `it`, `describe`, and `context` that include `:focus` + # metadata: `fit`, `fdescribe` and `fcontext`, respectively. + config.filter_run_when_matching :focus + + # Allows RSpec to persist some state between runs in order to support + # the `--only-failures` and `--next-failure` CLI options. We recommend + # you configure your source control system to ignore this file. + config.example_status_persistence_file_path = "spec/examples.txt" + + # Limits the available syntax to the non-monkey patched syntax that is + # recommended. For more details, see: + # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/ + # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/ + # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode + config.disable_monkey_patching! + + # Many RSpec users commonly either run the entire suite or an individual + # file, and it's useful to allow more verbose output when running an + # individual spec file. + if config.files_to_run.one? + # Use the documentation formatter for detailed output, + # unless a formatter has already been configured + # (e.g. via a command-line flag). + config.default_formatter = "doc" + end + + # Print the 10 slowest examples and example groups at the + # end of the spec run, to help surface which specs are running + # particularly slow. + config.profile_examples = 10 + + # Run specs in random order to surface order dependencies. If you find an + # order dependency and want to debug it, you can fix the order by providing + # the seed, which is printed after each run. + # --seed 1234 + config.order = :random + + # Seed global randomization in this process using the `--seed` CLI option. + # Setting this allows you to use `--seed` to deterministically reproduce + # test failures related to randomization by passing the same `--seed` value + # as the one that triggered the failure. + Kernel.srand config.seed +=end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/support/user_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/support/user_helper.rb new file mode 100644 index 0000000..b889183 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/spec/support/user_helper.rb @@ -0,0 +1,10 @@ +require "rails_helper" +module CapybaraHelpers + def register_user(first_name: 'shane', last_name: "chang", email: "schang@codingdojo.com") + visit new_user_path unless current_path == new_user_path + fill_in "user_first_name", with: first_name + fill_in "user_last_name", with: last_name + fill_in "user_email", with: email + click_button "Create User" + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/vendor/assets/javascripts/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RailsTDD/TheWall/vendor/assets/stylesheets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/Restore.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/Restore.rb new file mode 100644 index 0000000..b76b0c3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/Restore.rb @@ -0,0 +1,119 @@ +class SessionsController < ApplicationController + + skip_before_action :require_login, only: [:new] + + def new + end + + # ==================== + # POST Request [.html] + # POST Request [.json] + # ==================== + def login + @user = User.find_by(email: params[:email]) + if @user && @user.authenticate(params[:password]) + session[:user_id] = @user.id + redirect_to "/users/#{@user.id}" + else + flash[:errors] = "Incorrect login information!" + redirect_to :back + end + end + + # ====================== + # DELETE /user/:id + # DELETE /user/:id.json + # ====================== + def logout + reset_session + redirect_to new_session_path + end + + private + # Sanatizes/Validates Form Parameters... + def form_params + params.require(:user_form).permit(:name, :email, :password) + end + end +end + + +========================== +Main ApplicationController +========================== +class ApplicationController < ActionController::Base + # Prevent CSRF attacks by raising an exception. + # For APIs, you may want to use :null_session instead. + protect_from_forgery with: :exception + + def current_user + User.find(session[:user_id]) if session[:user_id] + end + helper_method :current_user +end + + + +========== +USER MODEL +========== + +class User < ActiveRecord::Base + has_secure_password + + EMAIL_REGEX = /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]+)\z/i + validates :name, presence: true, length: { in: 2..40 } + validates :email, presence: true, uniqueness: { case_sensitive: false }, format: { with: EMAIL_REGEX } + + before_save { self.email.downcase! unless self.email.blank? } + + has_many :secrets + has_many :likes, dependent: :destroy + has_many :secrets_liked, through: :likes, source: :secret +end + +# u = User.new(name: 'oscar', email: 'o@gmail.com', password: '', password_confirmation: 'nomatch') +# u.save # => false, password required +# u.password = 'password' +# u.save # => false, confirmation doesn't match +# u.password_confirmation = 'password' +# u.save # => true +# u.authenticate('not password') # => false +# u.authenticate('password') # => user instance +# ## putting it all together +# User.find_by_email('o@gmail.com').try(:authenticate, 'password') # => user instance +# User.find_by_email('o@gmail.com').try(:authenticate, 'not') # => false +# User.find_by_email('not@il.com').try(:authenticate, 'password') # => false + + + +====== +Routes +====== +Rails.application.routes.draw do + root 'sessions#new' + post 'sessions/login' => 'sessions#login' + get 'sessions/logout' => 'sessions#logout' +--------------------------------- + # Users Routes + root 'users#new' + get 'users/new' => 'users#new' + get 'users/profile' => 'users#profile' + post 'users/' => 'users#register' + get 'users/:id/edit' => 'users#edit' + patch 'users/update' => 'users#update' + + # Sessions Routes + get 'sessions/new' => 'sessions#new' + post 'sessions/' => 'sessions#login' + delete'sessions/:id/logout' => 'sessions#logout' + + # Secret Routes + get 'secrets' => 'secrets#index' + post 'secrets' => 'secrets#post' + delete'secrets/:id' => 'secrets#delete' + post 'secrets/like' => 'likes#like' # Likes Rout for + post 'secrets/dislike' => 'likes#dislike' # Likes Rout for + get 'secrets/destroy' => 'secrets#destroy' + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/.gitignore new file mode 100644 index 0000000..5b61ab0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/.gitignore @@ -0,0 +1,13 @@ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore all logfiles and tempfiles. +/log/* +!/log/.keep +/tmp diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/Gemfile new file mode 100644 index 0000000..5e575de --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/Gemfile @@ -0,0 +1,54 @@ +source 'https://rubygems.org' + + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '4.2.7' +# Use postgresql as the database for Active Record +gem 'pg', '~> 0.15' +# Use SCSS for stylesheets +gem 'sass-rails', '~> 5.0' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# Use CoffeeScript for .coffee assets and views +gem 'coffee-rails', '~> 4.1.0' +# See https://github.com/rails/execjs#readme for more supported runtimes +# gem 'therubyracer', platforms: :ruby + +# Use jquery as the JavaScript library +gem 'jquery-rails' +# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks +gem 'turbolinks' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.0' +# bundle exec rake doc:rails generates the API under doc/api. +gem 'sdoc', '~> 0.4.0', group: :doc + +# Use ActiveModel has_secure_password +gem 'bcrypt', '~> 3.1.7' + +# Use Unicorn as the app server +# gem 'unicorn' + +# Use Capistrano for deployment +# gem 'capistrano-rails', group: :development + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug' +end + +group :development do + # Access an IRB console on exception pages or by using <%= console %> in views + gem 'web-console', '~> 2.0' + + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' +end + +gem 'hirb' + +group :development, :test do + gem 'rspec-rails' + gem 'factory_bot_rails' + gem 'capybara' +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/Gemfile.lock new file mode 100644 index 0000000..f574dda --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/Gemfile.lock @@ -0,0 +1,212 @@ +GEM + remote: https://rubygems.org/ + specs: + actionmailer (4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.7) + actionview (= 4.2.7) + activesupport (= 4.2.7) + rack (~> 1.6) + rack-test (~> 0.6.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + activejob (4.2.7) + activesupport (= 4.2.7) + globalid (>= 0.3.0) + activemodel (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + activerecord (4.2.7) + activemodel (= 4.2.7) + activesupport (= 4.2.7) + arel (~> 6.0) + activesupport (4.2.7) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + addressable (2.5.2) + public_suffix (>= 2.0.2, < 4.0) + arel (6.0.4) + bcrypt (3.1.12) + binding_of_caller (0.8.0) + debug_inspector (>= 0.0.1) + builder (3.2.3) + byebug (10.0.2) + capybara (3.6.0) + addressable + mini_mime (>= 0.1.3) + nokogiri (~> 1.8) + rack (>= 1.6.0) + rack-test (>= 0.6.3) + xpath (~> 3.1) + coffee-rails (4.1.1) + coffee-script (>= 2.2.0) + railties (>= 4.0.0, < 5.1.x) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + concurrent-ruby (1.0.5) + crass (1.0.4) + debug_inspector (0.0.3) + diff-lcs (1.3) + erubis (2.7.0) + execjs (2.7.0) + factory_bot (4.10.0) + activesupport (>= 3.0.0) + factory_bot_rails (4.10.0) + factory_bot (~> 4.10.0) + railties (>= 3.0.0) + ffi (1.9.25) + globalid (0.4.1) + activesupport (>= 4.2.0) + hirb (0.7.3) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jbuilder (2.7.0) + activesupport (>= 4.2.0) + multi_json (>= 1.2) + jquery-rails (4.3.3) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + json (1.8.6) + loofah (2.2.2) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.0) + mini_mime (>= 0.1.1) + mini_mime (1.0.1) + mini_portile2 (2.3.0) + minitest (5.11.3) + multi_json (1.13.1) + nokogiri (1.8.4) + mini_portile2 (~> 2.3.0) + pg (0.21.0) + public_suffix (3.0.3) + rack (1.6.10) + rack-test (0.6.3) + rack (>= 1.0) + rails (4.2.7) + actionmailer (= 4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + activemodel (= 4.2.7) + activerecord (= 4.2.7) + activesupport (= 4.2.7) + bundler (>= 1.3.0, < 2.0) + railties (= 4.2.7) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.9) + activesupport (>= 4.2.0, < 5.0) + nokogiri (~> 1.6) + rails-deprecated_sanitizer (>= 1.0.1) + rails-html-sanitizer (1.0.4) + loofah (~> 2.2, >= 2.2.2) + railties (4.2.7) + actionpack (= 4.2.7) + activesupport (= 4.2.7) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (12.3.1) + rb-fsevent (0.10.3) + rb-inotify (0.9.10) + ffi (>= 0.5.0, < 2) + rdoc (4.3.0) + rspec-core (3.8.0) + rspec-support (~> 3.8.0) + rspec-expectations (3.8.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.8.0) + rspec-mocks (3.8.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.8.0) + rspec-rails (3.8.0) + actionpack (>= 3.0) + activesupport (>= 3.0) + railties (>= 3.0) + rspec-core (~> 3.8.0) + rspec-expectations (~> 3.8.0) + rspec-mocks (~> 3.8.0) + rspec-support (~> 3.8.0) + rspec-support (3.8.0) + sass (3.5.7) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sass-rails (5.0.7) + railties (>= 4.0.0, < 6) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + sdoc (0.4.2) + json (~> 1.7, >= 1.7.7) + rdoc (~> 4.0) + spring (2.0.2) + activesupport (>= 4.2) + sprockets (3.7.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.2.1) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + thor (0.20.0) + thread_safe (0.3.6) + tilt (2.0.8) + turbolinks (5.1.1) + turbolinks-source (~> 5.1) + turbolinks-source (5.1.0) + tzinfo (1.2.5) + thread_safe (~> 0.1) + uglifier (4.1.18) + execjs (>= 0.3.0, < 3) + web-console (2.3.0) + activemodel (>= 4.0) + binding_of_caller (>= 0.7.2) + railties (>= 4.0) + sprockets-rails (>= 2.0, < 4.0) + xpath (3.1.0) + nokogiri (~> 1.8) + +PLATFORMS + ruby + +DEPENDENCIES + bcrypt (~> 3.1.7) + byebug + capybara + coffee-rails (~> 4.1.0) + factory_bot_rails + hirb + jbuilder (~> 2.0) + jquery-rails + pg (~> 0.15) + rails (= 4.2.7) + rspec-rails + sass-rails (~> 5.0) + sdoc (~> 0.4.0) + spring + turbolinks + uglifier (>= 1.3.0) + web-console (~> 2.0) + +BUNDLED WITH + 1.16.3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/README.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/README.txt new file mode 100644 index 0000000..fc1e6b5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/README.txt @@ -0,0 +1,63 @@ +== README + +[ First Test ]: user_spec + +=============================================== +BEFORE satisfying the test requirements +=============================================== + +| => rspec spec/ + +Failures: + + 1) User with valid attributes email as lowercase + Failure/Error: expect(create(:user, email: 'EMAIL@GMAIL.COM').email).to eq('email@gmail.com') + + expected: "email@gmail.com" + got: "EMAIL@GMAIL.COM" + + (compared using ==) + # ./spec/models/user_spec.rb:16:in `block (3 levels) in ' + + 2) User with invalid attributes should not save if name is blank + Failure/Error: expect(build(:user, name: '')).to be_invalid + expected `#.invalid?` to return true, got false + # ./spec/models/user_spec.rb:27:in `block (3 levels) in ' + + 3) User with invalid attributes should not save if email is blank + Failure/Error: expect(build(:user, email: '')).to be_invalid + expected `#.invalid?` to return true, got false + # ./spec/models/user_spec.rb:32:in `block (3 levels) in ' + + 4) User with invalid attributes should not save if email format is wrong + Failure/Error: expect(build(:user, email: email)).to be_invalid + expected `#.invalid?` to return true, got false + # ./spec/models/user_spec.rb:39:in `block (4 levels) in ' + # ./spec/models/user_spec.rb:38:in `each' + # ./spec/models/user_spec.rb:38:in `block (3 levels) in ' + + 5) User with invalid attributes should not save if email is not unique + Failure/Error: expect(build(:user)).to be_invalid + expected `#.invalid?` to return true, got false + # ./spec/models/user_spec.rb:46:in `block (3 levels) in ' + +Finished in 0.28542 seconds (files took 8.93 seconds to load) +9 examples, 5 failures + +Failed examples: + +rspec ./spec/models/user_spec.rb:15 # User with valid attributes email as lowercase +rspec ./spec/models/user_spec.rb:26 # User with invalid attributes should not save if name is blank +rspec ./spec/models/user_spec.rb:31 # User with invalid attributes should not save if email is blank +rspec ./spec/models/user_spec.rb:36 # User with invalid attributes should not save if email format is wrong +rspec ./spec/models/user_spec.rb:44 # User with invalid attributes should not save if email is not unique + + +============================================== +AFTER satisfying the test requirements +============================================== +| => rspec spec/ +......... + +Finished in 0.21777 seconds (files took 9.19 seconds to load) +9 examples, 0 failures diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/Rakefile new file mode 100644 index 0000000..ba6b733 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Rails.application.load_tasks diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/assets/images/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/assets/images/codingdojo.png b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/assets/images/codingdojo.png new file mode 100644 index 0000000..5c82e33 Binary files /dev/null and b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/assets/images/codingdojo.png differ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/assets/javascripts/application.js new file mode 100644 index 0000000..e07c5a8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/assets/javascripts/application.js @@ -0,0 +1,16 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require jquery +//= require jquery_ujs +//= require turbolinks +//= require_tree . diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/assets/javascripts/main.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/assets/javascripts/main.js new file mode 100644 index 0000000..125462e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/assets/javascripts/main.js @@ -0,0 +1,11 @@ +document.addEventListener('DOMContentLoaded', function() { + var elems = document.querySelectorAll('select'); + var instances = M.FormSelect.init(elems, options); + }); + + // Or with jQuery + + $(document).ready(function(){ + // alert("Well passed....!") + $('select').formSelect(); + }); \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/assets/javascripts/sessions.coffee b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/assets/javascripts/sessions.coffee new file mode 100644 index 0000000..24f83d1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/assets/javascripts/sessions.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/assets/stylesheets/application.css b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/assets/stylesheets/application.css new file mode 100644 index 0000000..f9cd5b3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/assets/stylesheets/application.css @@ -0,0 +1,15 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, + * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the bottom of the + * compiled file so the styles you add here take precedence over styles defined in any styles + * defined in the other CSS/SCSS files in this directory. It is generally better to create a new + * file per style scope. + * + *= require_tree . + *= require_self + */ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/assets/stylesheets/sessions.scss b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/assets/stylesheets/sessions.scss new file mode 100644 index 0000000..ee4f4c7 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/assets/stylesheets/sessions.scss @@ -0,0 +1,199 @@ +// Navbar section +nav { + background-color:#000; + padding: 0 4rem; + a:hover { color: tan; } +} + +body { + width: 100%; + height: 100vh; + // position: static; + background-position: center; + background-repeat: no-repeat; + background-size: cover; + background-image: url('https://cdn-images-1.medium.com/max/1600/0*zfW13Mn8_fvEKcU7.jpg') +} + +nav a { color: white; } +nav a img { + width: 100px; + height: 40px; + margin: 0.5rem 0; + border-style: none; +} + +nav a:hover { color: #06a9e2; cursor: pointer; } + +h1, h2, .student_header { + font-family: 'Fredoka One', cursive; + text-align: center; + color: #06a9e2; + margin: 4rem 0 2rem; + position: relative; +} +h1 span { color: #06a9e2; font-family: 'Poiret One', cursive; } + +#notice { + padding: 0.5rem 2rem; + border-radius: 1rem; + border: 2px solid #06a9e2; + background: lightslategrey; +} + +// Form Components [ Add and Edit ] Section +form { padding: 0 15rem; } +ul .form-row { padding-left: 4rem !important; } +.form-row { line-height: 0rem; } + + +// Table Section +.theader { color: #06a9e2; font-family: 'Poiret One', cursive; } +.trbody { font-family: 'Poiret One', cursive; } +.trbody > td { padding: 0; } +.trbody > td:last-child > a { margin: 0.1rem auto; width: 5rem; } +.trbody > td:last-child > form { + input { margin: 0; } + width: 5rem; + margin: 0rem auto; + display: inline-table !important; +} +.trbody:hover { color: #06a9e2; background-color: #0000006b !important; } +.scrolling-wrapper { + -webkit-overflow-scrolling: touch; + padding-bottom: 12rem; + overflow-y: scroll; + position:relative; + opacity: 0.8; + height: 50px !important; + width: 100%; + // z-index: -1; + } + ::-webkit-scrollbar { width: 12px; } + ::-webkit-scrollbar-track { display: none; } + + +// Container section +.container { min-height: 70% !important; width: 58%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +.container-min { height: 550px; min-height: 70%; width: 50%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +.container-max { height: 600px; min-height: 70%; width: 50%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +// .container h1 { margin-top: 2rem; } + +.flxend { display: flex; justify-content: end; } // div container requiring flex +.flexed { display: flex; justify-content: space-between; } // div container requiring flex +.grided { display: grid; grid-template-columns: 1fr 1fr; grid-gap: 2rem; } // div container requiring grid +.inline { display: inline-block; margin: 1rem auto; } // div container requiring grid +.grided input { min-width: 100%; margin-top: 2rem; } +.text-warning { color: #fba153fa; } + +// Custom Margin +// =========================== [ 1rem ] +.right-margin1 { margin-right : 1rem !important; } +.left-margin1 { margin-left : 1rem !important; } +.top-margin1 { margin-top : 1rem !important; } +.bottom-margin1 { margin-bottom: 1rem !important; } +// =========================== [ 2rem ] +.right-margin2 { margin-right : 2rem !important; } +.left-margin2 { margin-left : 2rem !important; } +.top-margin2 { margin-top : 2rem !important; } +.bottom-margin2 { margin-bottom: 2rem !important; } +// =========================== [ 4rem ] +.right-margin4 { margin-right : 4rem !important; } +.left-margin4 { margin-left : 4rem !important; } +.top-margin4 { margin-top : 4rem !important; } +.bottom-margin4 { margin-bottom: 4rem !important; } +// =========================== [ 6rem ] +.right-margin6 { margin-right : 6rem !important; } +.left-margin6 { margin-left : 6rem !important; } +.top-margin6 { margin-top : 6rem !important; } +.bottom-margin6 { margin-bottom: 6rem !important; } + +.separator-bar{ margin: 0 1rem; } +.sn { + color: white; + // margin-top: 2rem; + border-radius: .2rem; + background-color: #111; + border: 1px solid #f5f5f5; + // background-color: #357ae8; + transition: all .3s ease-in-out; + box-shadow: 1px 2px 2px 0px #444 !important; +} +.sn:hover { + color: #06a9e2; + transition: all .3s ease-in-out; + background-color: #000 !important; + box-shadow: 0px 0px 0px 0px #222 !important; +} +.show { + border-radius: 1rem; + font-size: 10px; + color: #06a9e2; + &:hover { + color: white !important; + background-color: #357ae8 !important; + } +} +.edit { + border-radius: 1rem; + font-size: 10px; + color: lime; + &:hover { + color: white !important; + background-color: green !important; + } +} +.delete { + border-radius: 1rem; + font-size: 10px; + color: #f44336; + &:hover { + color: white !important; + background-color: red !important; + } +} +.brand-logo { + font-family: 'Days One', sans-serif; +} + +input.valid:not([type]), input.valid:not([type]):focus, input.valid[type=text]:not(.browser-default), input.valid[type=text]:not(.browser-default):focus, input.valid[type=password]:not(.browser-default), input.valid[type=password]:not(.browser-default):focus, input.valid[type=email]:not(.browser-default), input.valid[type=email]:not(.browser-default):focus, input.valid[type=url]:not(.browser-default), input.valid[type=url]:not(.browser-default):focus, input.valid[type=time]:not(.browser-default), input.valid[type=time]:not(.browser-default):focus, input.valid[type=date]:not(.browser-default), input.valid[type=date]:not(.browser-default):focus, input.valid[type=datetime]:not(.browser-default), input.valid[type=datetime]:not(.browser-default):focus, input.valid[type=datetime-local]:not(.browser-default), input.valid[type=datetime-local]:not(.browser-default):focus, input.valid[type=tel]:not(.browser-default), input.valid[type=tel]:not(.browser-default):focus, input.valid[type=number]:not(.browser-default), input.valid[type=number]:not(.browser-default):focus, input.valid[type=search]:not(.browser-default), input.valid[type=search]:not(.browser-default):focus, textarea.materialize-textarea.valid, textarea.materialize-textarea.valid:focus, .select-wrapper.valid>input.select-dropdown { + border-bottom: 1px solid #06a9e2 !important; + -webkit-box-shadow: 0 1px 0 0 #06a9e2 !important; + box-shadow: 0 1px 0 0 #06a9e2 !important; +} +input:not([type]):focus:not([readonly]), input[type=text]:not(.browser-default):focus:not([readonly]), input[type=password]:not(.browser-default):focus:not([readonly]), input[type=email]:not(.browser-default):focus:not([readonly]), input[type=url]:not(.browser-default):focus:not([readonly]), input[type=time]:not(.browser-default):focus:not([readonly]), input[type=date]:not(.browser-default):focus:not([readonly]), input[type=datetime]:not(.browser-default):focus:not([readonly]), input[type=datetime-local]:not(.browser-default):focus:not([readonly]), input[type=tel]:not(.browser-default):focus:not([readonly]), input[type=number]:not(.browser-default):focus:not([readonly]), input[type=search]:not(.browser-default):focus:not([readonly]), textarea.materialize-textarea:focus:not([readonly]) { + border-bottom: 1px solid #06a9e2; + -webkit-box-shadow: 0 1px 0 0 #06a9e2; + box-shadow: 0 1px 0 0 #06a9e2; +} +.dropdown-content li>a, .dropdown-content li>span { + font-size: 16px; + background-color: #020000; + color: #9e9e9edb; + display: block; + line-height: 22px; + padding: 14px 16px; +} +.dropdown-content li>a:hover, .dropdown-content li>span:hover { + background-color: #06a9e2; + color: white; +} + + +.select-wrapper input.select-dropdown { + color: #06a9e2; +} +input:not([type]):focus:not([readonly])+label,.form-wrap input[type=text]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=password]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=email]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=url]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=time]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=date]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=datetime]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=datetime-local]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=tel]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=number]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=search]:not(.browser-default):focus:not([readonly])+label,.form-wrap textarea.materialize-textarea:focus:not([readonly])+label { + color: #06a9e2; +} +input:not([type]):focus:not([readonly])+label, input[type=text]:not(.browser-default):focus:not([readonly])+label, input[type=password]:not(.browser-default):focus:not([readonly])+label, input[type=email]:not(.browser-default):focus:not([readonly])+label, input[type=url]:not(.browser-default):focus:not([readonly])+label, input[type=time]:not(.browser-default):focus:not([readonly])+label, input[type=date]:not(.browser-default):focus:not([readonly])+label, input[type=datetime]:not(.browser-default):focus:not([readonly])+label, input[type=datetime-local]:not(.browser-default):focus:not([readonly])+label, input[type=tel]:not(.browser-default):focus:not([readonly])+label, input[type=number]:not(.browser-default):focus:not([readonly])+label, input[type=search]:not(.browser-default):focus:not([readonly])+label, textarea.materialize-textarea:focus:not([readonly])+label { + color: #06a9e2; +} +.select-wrapper input.select-dropdown { color: #06a9e2 !important; } +.select-wrapper input.select-dropdown:focus { + border-bottom: 2px solid #06a9e2 !important; +} +// label:active { +// font-size: .8rem; +// color: #06a9e2 !important; +// } diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/controllers/application_controller.rb new file mode 100644 index 0000000..a79f0c8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/controllers/application_controller.rb @@ -0,0 +1,10 @@ +class ApplicationController < ActionController::Base + # Prevent CSRF attacks by raising an exception. + # For APIs, you may want to use :null_session instead. + protect_from_forgery with: :exception + + def current_user + User.find(session[:user_id]) if session[:user_id] + end + helper_method :current_user +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/controllers/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/controllers/sessions_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/controllers/sessions_controller.rb new file mode 100644 index 0000000..ec614ba --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/controllers/sessions_controller.rb @@ -0,0 +1,37 @@ +class SessionsController < ApplicationController + + skip_before_action :require_login, only: [:new] + + def new + end + + # ==================== + # POST Request [.html] + # POST Request [.json] + # ==================== + def login + @user = User.find_by(email: params[:email]) + if @user && @user.authenticate(params[:password]) + session[:user_id] = @user.id + redirect_to "/users/#{@user.id}" + else + flash[:errors] = "Incorrect login information!" + redirect_to :back + end + end + + # ====================== + # DELETE /user/:id + # DELETE /user/:id.json + # ====================== + def logout + reset_session + redirect_to new_session_path + end + + private + # Sanatizes/Validates Form Parameters... + def form_params + params.require(:user_form).permit(:name, :email, :password) + end + end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/helpers/application_helper.rb new file mode 100644 index 0000000..de6be79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/helpers/sessions_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/helpers/sessions_helper.rb new file mode 100644 index 0000000..309f8b2 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/helpers/sessions_helper.rb @@ -0,0 +1,2 @@ +module SessionsHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/models/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/models/user.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/models/user.rb new file mode 100644 index 0000000..e32ee0a --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/models/user.rb @@ -0,0 +1,13 @@ +class User < ActiveRecord::Base + has_secure_password + + EMAIL_REGEX = /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]+)\z/i + validates :name, presence: true, length: { in: 2..40 } + validates :email, presence: true, uniqueness: { case_sensitive: false }, format: { with: EMAIL_REGEX } + + before_save { self.email.downcase! unless self.email.blank? } + + # has_many :secrets + # has_many :likes, dependent: :destroy + # has_many :secrets_liked, through: :likes, source: :secret +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/views/layouts/application.html.erb new file mode 100644 index 0000000..3701a23 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/views/layouts/application.html.erb @@ -0,0 +1,44 @@ + + + + DojoSecrets + + + + + + + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= javascript_include_tag 'application', 'main.js', 'data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + + + + + <%= yield %> + + + + + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/views/sessions/new.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/views/sessions/new.html.erb new file mode 100644 index 0000000..b39a3bc --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/app/views/sessions/new.html.erb @@ -0,0 +1,2 @@ +

Sessions#new

+

Find me in app/views/sessions/new.html.erb

diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/bin/bundle new file mode 100755 index 0000000..66e9889 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/bin/rails new file mode 100755 index 0000000..0138d79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/bin/rails @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +APP_PATH = File.expand_path('../../config/application', __FILE__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/bin/rake new file mode 100755 index 0000000..d87d5f5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/bin/rake @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/bin/setup new file mode 100755 index 0000000..acdb2c1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/bin/setup @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +Dir.chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file: + + puts "== Installing dependencies ==" + system "gem install bundler --conservative" + system "bundle check || bundle install" + + # puts "\n== Copying sample files ==" + # unless File.exist?("config/database.yml") + # system "cp config/database.yml.sample config/database.yml" + # end + + puts "\n== Preparing database ==" + system "bin/rake db:setup" + + puts "\n== Removing old logs and tempfiles ==" + system "rm -f log/*" + system "rm -rf tmp/cache" + + puts "\n== Restarting application server ==" + system "touch tmp/restart.txt" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/bin/spring new file mode 100755 index 0000000..fb2ec2e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/bin/spring @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +# This file loads spring without using Bundler, in order to be fast. +# It gets overwritten when you run the `spring binstub` command. + +unless defined?(Spring) + require 'rubygems' + require 'bundler' + + lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read) + spring = lockfile.specs.detect { |spec| spec.name == "spring" } + if spring + Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path + gem 'spring', spring.version + require 'spring/binstub' + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config.ru new file mode 100644 index 0000000..bd83b25 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Rails.application diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/application.rb new file mode 100644 index 0000000..7b88c7a --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/application.rb @@ -0,0 +1,35 @@ +require File.expand_path('../boot', __FILE__) + +require "rails" +# Pick the frameworks you want: +require "active_model/railtie" +require "active_job/railtie" +require "active_record/railtie" +require "action_controller/railtie" +require "action_mailer/railtie" +require "action_view/railtie" +require "sprockets/railtie" +# require "rails/test_unit/railtie" + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module DojoSecrets + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Do not swallow errors in after_commit/after_rollback callbacks. + config.active_record.raise_in_transactional_callbacks = true + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/boot.rb new file mode 100644 index 0000000..6b750f0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/boot.rb @@ -0,0 +1,3 @@ +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) + +require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/database.yml new file mode 100644 index 0000000..d6af69f --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/database.yml @@ -0,0 +1,85 @@ +# PostgreSQL. Versions 8.2 and up are supported. +# +# Install the pg driver: +# gem install pg +# On OS X with Homebrew: +# gem install pg -- --with-pg-config=/usr/local/bin/pg_config +# On OS X with MacPorts: +# gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config +# On Windows: +# gem install pg +# Choose the win32 build. +# Install PostgreSQL and put its /bin directory on your path. +# +# Configure Using Gemfile +# gem 'pg' +# +default: &default + adapter: postgresql + encoding: unicode + # For details on connection pooling, see rails configuration guide + # http://guides.rubyonrails.org/configuring.html#database-pooling + pool: 5 + +development: + <<: *default + database: DSecrets_development + + # The specified database role being used to connect to postgres. + # To create additional roles in postgres see `$ createuser --help`. + # When left blank, postgres will use the default role. This is + # the same name as the operating system user that initialized the database. + #username: DojoSecrets + + # The password associated with the postgres role (username). + #password: + + # Connect on a TCP socket. Omitted by default since the client uses a + # domain socket that doesn't need configuration. Windows does not have + # domain sockets, so uncomment these lines. + #host: localhost + + # The TCP port the server listens on. Defaults to 5432. + # If your server runs on a different port number, change accordingly. + #port: 5432 + + # Schema search path. The server defaults to $user,public + #schema_search_path: myapp,sharedapp,public + + # Minimum log levels, in increasing order: + # debug5, debug4, debug3, debug2, debug1, + # log, notice, warning, error, fatal, and panic + # Defaults to warning. + #min_messages: notice + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: DSecrets_test + +# As with config/secrets.yml, you never want to store sensitive information, +# like your database password, in your source code. If your source code is +# ever seen by anyone, they now have access to your database. +# +# Instead, provide the password as a unix environment variable when you boot +# the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database +# for a full rundown on how to provide these environment variables in a +# production deployment. +# +# On Heroku and other platform providers, you may have a full connection URL +# available as an environment variable. For example: +# +# DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase" +# +# You can use this database configuration with: +# +# production: +# url: <%= ENV['DATABASE_URL'] %> +# +production: + <<: *default + database: DojoSecrets_production + username: DojoSecrets + password: <%= ENV['DOJOSECRETS_DATABASE_PASSWORD'] %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/environment.rb new file mode 100644 index 0000000..ee8d90d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require File.expand_path('../application', __FILE__) + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/environments/development.rb new file mode 100644 index 0000000..b55e214 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/environments/development.rb @@ -0,0 +1,41 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # Adds additional error checking when serving assets at runtime. + # Checks for improperly declared sprockets dependencies. + # Raises helpful error messages. + config.assets.raise_runtime_errors = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/environments/production.rb new file mode 100644 index 0000000..5c1b32e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/environments/production.rb @@ -0,0 +1,79 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like + # NGINX, varnish or squid. + # config.action_dispatch.rack_cache = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # 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-Accel-Redirect' # for NGINX + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug + + # Prepend all log lines with the following tags. + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/environments/test.rb new file mode 100644 index 0000000..1c19f08 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/environments/test.rb @@ -0,0 +1,42 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure static file server for tests with Cache-Control for performance. + config.serve_static_files = true + config.static_cache_control = 'public, max-age=3600' + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Randomize the order test cases are executed. + config.active_support.test_order = :random + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/initializers/assets.rb new file mode 100644 index 0000000..70f4c58 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/initializers/assets.rb @@ -0,0 +1,11 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path +# Rails.application.config.assets.paths << Emoji.images_path + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. +Rails.application.config.assets.precompile += %w( main.js ) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..59385cd --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/initializers/cookies_serializer.rb new file mode 100644 index 0000000..7f70458 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/initializers/cookies_serializer.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000..4a994e1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/initializers/inflections.rb new file mode 100644 index 0000000..ac033bf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/initializers/mime_types.rb new file mode 100644 index 0000000..dc18996 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/initializers/mime_types.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/initializers/session_store.rb new file mode 100644 index 0000000..745fa7c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/initializers/session_store.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.session_store :cookie_store, key: '_DojoSecrets_session' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..33725e9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] if respond_to?(:wrap_parameters) +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/locales/en.yml new file mode 100644 index 0000000..0653957 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/locales/en.yml @@ -0,0 +1,23 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/routes.rb new file mode 100644 index 0000000..3ae112d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/routes.rb @@ -0,0 +1,60 @@ +Rails.application.routes.draw do + root 'sessions#new' + post 'sessions/login' => 'sessions#login' + get 'sessions/logout' => 'sessions#logout' + + # The priority is based upon order of creation: first created -> highest priority. + # See how all your routes lay out with "rake routes". + + # You can have the root of your site routed with "root" + # root 'welcome#index' + + # Example of regular route: + # get 'products/:id' => 'catalog#view' + + # Example of named route that can be invoked with purchase_url(id: product.id) + # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase + + # Example resource route (maps HTTP verbs to controller actions automatically): + # resources :products + + # Example resource route with options: + # resources :products do + # member do + # get 'short' + # post 'toggle' + # end + # + # collection do + # get 'sold' + # end + # end + + # Example resource route with sub-resources: + # resources :products do + # resources :comments, :sales + # resource :seller + # end + + # Example resource route with more complex sub-resources: + # resources :products do + # resources :comments + # resources :sales do + # get 'recent', on: :collection + # end + # end + + # Example resource route with concerns: + # concern :toggleable do + # post 'toggle' + # end + # resources :posts, concerns: :toggleable + # resources :photos, concerns: :toggleable + + # Example resource route within a namespace: + # namespace :admin do + # # Directs /admin/products/* to Admin::ProductsController + # # (app/controllers/admin/products_controller.rb) + # resources :products + # end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/secrets.yml new file mode 100644 index 0000000..7df7aba --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/config/secrets.yml @@ -0,0 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rake secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: 3204f4d57d46dfaa6a93587e07c03528d342a085923acd7890541abb03e99889a1c8f5b436ac6b651546fc266d20923a533a93bc6894e101c209dbb32eb33966 + +test: + secret_key_base: f6bb8f2cb55ddc4e89aa62b7bbff7a37f1dff56a0ceedba29636cabdd21f3ed28459f27be00fa5497661aaa5391d74304bbb1c9ca911be130b93b87d36dc3d3f + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/db/migrate/20180815181313_create_users.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/db/migrate/20180815181313_create_users.rb new file mode 100644 index 0000000..c9fe2c1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/db/migrate/20180815181313_create_users.rb @@ -0,0 +1,11 @@ +class CreateUsers < ActiveRecord::Migration + def change + create_table :users do |t| + t.string :name + t.string :email + t.string :password_digest + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/db/schema.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/db/schema.rb new file mode 100644 index 0000000..4c55fb2 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/db/schema.rb @@ -0,0 +1,27 @@ +# encoding: UTF-8 +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 20180815181313) do + + # These are extensions that must be enabled in order to support this database + enable_extension "plpgsql" + + create_table "users", force: :cascade do |t| + t.string "name" + t.string "email" + t.string "password_digest" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/db/seeds.rb new file mode 100644 index 0000000..4edb1e8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). +# +# Examples: +# +# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) +# Mayor.create(name: 'Emanuel', city: cities.first) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/lib/assets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/lib/tasks/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/log/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/public/404.html new file mode 100644 index 0000000..b612547 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +
+
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/public/422.html new file mode 100644 index 0000000..a21f82b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
+
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/public/500.html new file mode 100644 index 0000000..061abc5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/public/500.html @@ -0,0 +1,66 @@ + + + + We're sorry, but something went wrong (500) + + + + + + +
+
+

We're sorry, but something went wrong.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/public/robots.txt new file mode 100644 index 0000000..3c9c7c0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-agent: * +# Disallow: / diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/spec/factories/users.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/spec/factories/users.rb new file mode 100644 index 0000000..914cf3c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/spec/factories/users.rb @@ -0,0 +1,8 @@ +FactoryBot.define do + factory :user do + name "Miguel Obiang" + email "miguel.obiang@codingdojo.com" + password "password" + password_confirmation "password" + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/spec/helpers/sessions_helper_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/spec/helpers/sessions_helper_spec.rb new file mode 100644 index 0000000..9484198 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/spec/helpers/sessions_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the SessionsHelper. For example: +# +# describe SessionsHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe SessionsHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/spec/models/user_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/spec/models/user_spec.rb new file mode 100644 index 0000000..0147f20 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/spec/models/user_spec.rb @@ -0,0 +1,59 @@ +require 'rails_helper' + +RSpec.describe User, type: :model do + + # ========================= + # TEST FOR VALID ATTRIBUTES + # ========================= + context "with valid attributes" do + it "should save" do + expect(build(:user)).to be_valid + end + it 'automatically encrypts the password into the password_digest attribute' do + expect(build(:user).password_digest.present?).to eq(true) + end + it 'email as lowercase' do + expect(create(:user, email: 'EMAIL@GMAIL.COM').email).to eq('email@gmail.com') + end + end + + # =========================== + # TEST FOR INVALID ATTRIBUTES + # =========================== + context "with invalid attributes should not save if" do + + # Empty field + it 'name is blank' do + expect(build(:user, name: '')).to be_invalid + end + + # Empty field + it 'email is blank' do + expect(build(:user, email: '')).to be_invalid + end + + # Incorrect format [EMAIL_REGEX] + it 'email format is wrong' do + emails = ["@user", "@example.com"] + emails.each do |email| + expect(build(:user, email: email)).to be_invalid + end + end + + # Fail to provide a unique + it 'email is not unique' do + create(:user) + expect(build(:user)).to be_invalid + end + + # Empty field + it 'password is blank' do + expect(build(:user, password: '')).to be_invalid + end + + # and don't match + it "password doesn't match password_confirmation" do + expect(build(:user, password_confirmation: 'notpassword')).to be_invalid + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/spec/rails_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/spec/rails_helper.rb new file mode 100644 index 0000000..5ecea25 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/spec/rails_helper.rb @@ -0,0 +1,67 @@ +# This file is copied to spec/ when you run 'rails generate rspec:install' +require 'spec_helper' +ENV['RAILS_ENV'] ||= 'test' +require File.expand_path('../../config/environment', __FILE__) +# Prevent database truncation if the environment is production +abort("The Rails environment is running in production mode!") if Rails.env.production? +require 'rspec/rails' +# Add additional requires below this line. Rails is not loaded until this point! + +# Requires supporting ruby files with custom matchers and macros, etc, in +# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are +# run as spec files by default. This means that files in spec/support that end +# in _spec.rb will both be required and run as specs, causing the specs to be +# run twice. It is recommended that you do not name files matching this glob to +# end with _spec.rb. You can configure this pattern with the --pattern +# option on the command line or in ~/.rspec, .rspec or `.rspec-local`. +# +# The following line is provided for convenience purposes. It has the downside +# of increasing the boot-up time by auto-requiring all files in the support +# directory. Alternatively, in the individual `*_spec.rb` files, manually +# require only the support files necessary. +# +# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f } + +# Checks for pending migrations and applies them before tests are run. +# If you are not using ActiveRecord, you can remove these lines. +begin + ActiveRecord::Migration.maintain_test_schema! +rescue ActiveRecord::PendingMigrationError => e + puts e.to_s.strip + exit 1 +end + +require 'rails_helper' +RSpec.configure do |config| + + # => Added Configurations + config.include FactoryBot::Syntax::Methods + + # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures + config.fixture_path = "#{::Rails.root}/spec/fixtures" + + # If you're not using ActiveRecord, or you'd prefer not to run each of your + # examples within a transaction, remove the following line or assign false + # instead of true. + config.use_transactional_fixtures = true + + # RSpec Rails can automatically mix in different behaviours to your tests + # based on their file location, for example enabling you to call `get` and + # `post` in specs under `spec/controllers`. + # + # You can disable this behaviour by removing the line below, and instead + # explicitly tag your specs with their type, e.g.: + # + # RSpec.describe UsersController, :type => :controller do + # # ... + # end + # + # The different available types are documented in the features, such as in + # https://relishapp.com/rspec/rspec-rails/docs + config.infer_spec_type_from_file_location! + + # Filter lines from Rails gems in backtraces. + config.filter_rails_from_backtrace! + # arbitrary gems may also be filtered via: + # config.filter_gems_from_backtrace("gem name") +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/spec/spec_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/spec/spec_helper.rb new file mode 100644 index 0000000..a66a725 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/spec/spec_helper.rb @@ -0,0 +1,104 @@ +# This file was generated by the `rails generate rspec:install` command. Conventionally, all +# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. +# The generated `.rspec` file contains `--require spec_helper` which will cause +# this file to always be loaded, without a need to explicitly require it in any +# files. +# +# Given that it is always loaded, you are encouraged to keep this file as +# light-weight as possible. Requiring heavyweight dependencies from this file +# will add to the boot time of your test suite on EVERY test run, even for an +# individual file that may not need all of that loaded. Instead, consider making +# a separate helper file that requires the additional dependencies and performs +# the additional setup, and require it from the spec files that actually need +# it. +# +# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration + +def log_in email: "miguel.obiang@codingdojo.com", password: "password" + visit '/sessions/new' unless current_path == "/sessions/new" + fill_in 'Email', with: email + fill_in 'Password', with: password + click_button 'Log In' +end + +RSpec.configure do |config| + # rspec-expectations config goes here. You can use an alternate + # assertion/expectation library such as wrong or the stdlib/minitest + # assertions if you prefer. + config.expect_with :rspec do |expectations| + # This option will default to `true` in RSpec 4. It makes the `description` + # and `failure_message` of custom matchers include text for helper methods + # defined using `chain`, e.g.: + # be_bigger_than(2).and_smaller_than(4).description + # # => "be bigger than 2 and smaller than 4" + # ...rather than: + # # => "be bigger than 2" + expectations.include_chain_clauses_in_custom_matcher_descriptions = true + end + + # rspec-mocks config goes here. You can use an alternate test double + # library (such as bogus or mocha) by changing the `mock_with` option here. + config.mock_with :rspec do |mocks| + # Prevents you from mocking or stubbing a method that does not exist on + # a real object. This is generally recommended, and will default to + # `true` in RSpec 4. + mocks.verify_partial_doubles = true + end + + # This option will default to `:apply_to_host_groups` in RSpec 4 (and will + # have no way to turn it off -- the option exists only for backwards + # compatibility in RSpec 3). It causes shared context metadata to be + # inherited by the metadata hash of host groups and examples, rather than + # triggering implicit auto-inclusion in groups with matching metadata. + config.shared_context_metadata_behavior = :apply_to_host_groups + +# The settings below are suggested to provide a good initial experience +# with RSpec, but feel free to customize to your heart's content. +=begin + # This allows you to limit a spec run to individual examples or groups + # you care about by tagging them with `:focus` metadata. When nothing + # is tagged with `:focus`, all examples get run. RSpec also provides + # aliases for `it`, `describe`, and `context` that include `:focus` + # metadata: `fit`, `fdescribe` and `fcontext`, respectively. + config.filter_run_when_matching :focus + + # Allows RSpec to persist some state between runs in order to support + # the `--only-failures` and `--next-failure` CLI options. We recommend + # you configure your source control system to ignore this file. + config.example_status_persistence_file_path = "spec/examples.txt" + + # Limits the available syntax to the non-monkey patched syntax that is + # recommended. For more details, see: + # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/ + # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/ + # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode + config.disable_monkey_patching! + + # Many RSpec users commonly either run the entire suite or an individual + # file, and it's useful to allow more verbose output when running an + # individual spec file. + if config.files_to_run.one? + # Use the documentation formatter for detailed output, + # unless a formatter has already been configured + # (e.g. via a command-line flag). + config.default_formatter = "doc" + end + + # Print the 10 slowest examples and example groups at the + # end of the spec run, to help surface which specs are running + # particularly slow. + config.profile_examples = 10 + + # Run specs in random order to surface order dependencies. If you find an + # order dependency and want to debug it, you can fix the order by providing + # the seed, which is printed after each run. + # --seed 1234 + config.order = :random + + # Seed global randomization in this process using the `--seed` CLI option. + # Setting this allows you to use `--seed` to deterministically reproduce + # test failures related to randomization by passing the same `--seed` value + # as the one that triggered the failure. + Kernel.srand config.seed +=end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/vendor/assets/javascripts/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/TDD/RubyTDD/DojoSecrets/vendor/assets/stylesheets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/.gitignore new file mode 100644 index 0000000..050c9d9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/.gitignore @@ -0,0 +1,17 @@ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore the default SQLite database. +/db/*.sqlite3 +/db/*.sqlite3-journal + +# Ignore all logfiles and tempfiles. +/log/* +!/log/.keep +/tmp diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/Gemfile new file mode 100644 index 0000000..9fd1046 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/Gemfile @@ -0,0 +1,54 @@ +source 'https://rubygems.org' + + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '4.2.7' +# Use sqlite3 as the database for Active Record +gem 'sqlite3' +# Use SCSS for stylesheets +gem 'sass-rails', '~> 5.0' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# Use CoffeeScript for .coffee assets and views +gem 'coffee-rails', '~> 4.1.0' +# See https://github.com/rails/execjs#readme for more supported runtimes +# gem 'therubyracer', platforms: :ruby + +# Use jquery as the JavaScript library +gem 'jquery-rails' +# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks +gem 'turbolinks' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.0' +# bundle exec rake doc:rails generates the API under doc/api. +gem 'sdoc', '~> 0.4.0', group: :doc + +# Use ActiveModel has_secure_password +gem 'bcrypt', '~> 3.1.7' + +# Use Unicorn as the app server +# gem 'unicorn' + +# Use Capistrano for deployment +# gem 'capistrano-rails', group: :development + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug' +end + +group :development do + # Access an IRB console on exception pages or by using <%= console %> in views + gem 'web-console', '~> 2.0' + + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' +end + +gem 'hirb' + +group :development, :test do + gem 'capybara' + gem 'rspec-rails' + gem 'factory_bot_rails' +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/Gemfile.lock new file mode 100644 index 0000000..89dae8d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/Gemfile.lock @@ -0,0 +1,212 @@ +GEM + remote: https://rubygems.org/ + specs: + actionmailer (4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.7) + actionview (= 4.2.7) + activesupport (= 4.2.7) + rack (~> 1.6) + rack-test (~> 0.6.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + activejob (4.2.7) + activesupport (= 4.2.7) + globalid (>= 0.3.0) + activemodel (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + activerecord (4.2.7) + activemodel (= 4.2.7) + activesupport (= 4.2.7) + arel (~> 6.0) + activesupport (4.2.7) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + addressable (2.5.2) + public_suffix (>= 2.0.2, < 4.0) + arel (6.0.4) + bcrypt (3.1.12) + binding_of_caller (0.8.0) + debug_inspector (>= 0.0.1) + builder (3.2.3) + byebug (10.0.2) + capybara (3.6.0) + addressable + mini_mime (>= 0.1.3) + nokogiri (~> 1.8) + rack (>= 1.6.0) + rack-test (>= 0.6.3) + xpath (~> 3.1) + coffee-rails (4.1.1) + coffee-script (>= 2.2.0) + railties (>= 4.0.0, < 5.1.x) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + concurrent-ruby (1.0.5) + crass (1.0.4) + debug_inspector (0.0.3) + diff-lcs (1.3) + erubis (2.7.0) + execjs (2.7.0) + factory_bot (4.10.0) + activesupport (>= 3.0.0) + factory_bot_rails (4.10.0) + factory_bot (~> 4.10.0) + railties (>= 3.0.0) + ffi (1.9.25) + globalid (0.4.1) + activesupport (>= 4.2.0) + hirb (0.7.3) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jbuilder (2.7.0) + activesupport (>= 4.2.0) + multi_json (>= 1.2) + jquery-rails (4.3.3) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + json (1.8.6) + loofah (2.2.2) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.0) + mini_mime (>= 0.1.1) + mini_mime (1.0.1) + mini_portile2 (2.3.0) + minitest (5.11.3) + multi_json (1.13.1) + nokogiri (1.8.4) + mini_portile2 (~> 2.3.0) + public_suffix (3.0.2) + rack (1.6.10) + rack-test (0.6.3) + rack (>= 1.0) + rails (4.2.7) + actionmailer (= 4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + activemodel (= 4.2.7) + activerecord (= 4.2.7) + activesupport (= 4.2.7) + bundler (>= 1.3.0, < 2.0) + railties (= 4.2.7) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.9) + activesupport (>= 4.2.0, < 5.0) + nokogiri (~> 1.6) + rails-deprecated_sanitizer (>= 1.0.1) + rails-html-sanitizer (1.0.4) + loofah (~> 2.2, >= 2.2.2) + railties (4.2.7) + actionpack (= 4.2.7) + activesupport (= 4.2.7) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (12.3.1) + rb-fsevent (0.10.3) + rb-inotify (0.9.10) + ffi (>= 0.5.0, < 2) + rdoc (4.3.0) + rspec-core (3.8.0) + rspec-support (~> 3.8.0) + rspec-expectations (3.8.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.8.0) + rspec-mocks (3.8.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.8.0) + rspec-rails (3.8.0) + actionpack (>= 3.0) + activesupport (>= 3.0) + railties (>= 3.0) + rspec-core (~> 3.8.0) + rspec-expectations (~> 3.8.0) + rspec-mocks (~> 3.8.0) + rspec-support (~> 3.8.0) + rspec-support (3.8.0) + sass (3.5.7) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sass-rails (5.0.7) + railties (>= 4.0.0, < 6) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + sdoc (0.4.2) + json (~> 1.7, >= 1.7.7) + rdoc (~> 4.0) + spring (2.0.2) + activesupport (>= 4.2) + sprockets (3.7.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.2.1) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + sqlite3 (1.3.13) + thor (0.20.0) + thread_safe (0.3.6) + tilt (2.0.8) + turbolinks (5.1.1) + turbolinks-source (~> 5.1) + turbolinks-source (5.1.0) + tzinfo (1.2.5) + thread_safe (~> 0.1) + uglifier (4.1.18) + execjs (>= 0.3.0, < 3) + web-console (2.3.0) + activemodel (>= 4.0) + binding_of_caller (>= 0.7.2) + railties (>= 4.0) + sprockets-rails (>= 2.0, < 4.0) + xpath (3.1.0) + nokogiri (~> 1.8) + +PLATFORMS + ruby + +DEPENDENCIES + bcrypt (~> 3.1.7) + byebug + capybara + coffee-rails (~> 4.1.0) + factory_bot_rails + hirb + jbuilder (~> 2.0) + jquery-rails + rails (= 4.2.7) + rspec-rails + sass-rails (~> 5.0) + sdoc (~> 0.4.0) + spring + sqlite3 + turbolinks + uglifier (>= 1.3.0) + web-console (~> 2.0) + +BUNDLED WITH + 1.16.3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/README.rdoc b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/README.rdoc new file mode 100644 index 0000000..dd4e97e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/README.rdoc @@ -0,0 +1,28 @@ +== README + +This README would normally document whatever steps are necessary to get the +application up and running. + +Things you may want to cover: + +* Ruby version + +* System dependencies + +* Configuration + +* Database creation + +* Database initialization + +* How to run the test suite + +* Services (job queues, cache servers, search engines, etc.) + +* Deployment instructions + +* ... + + +Please feel free to use a different markup language if you do not plan to run +rake doc:app. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/Rakefile new file mode 100644 index 0000000..ba6b733 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Rails.application.load_tasks diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/assets/images/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/assets/javascripts/animes.coffee b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/assets/javascripts/animes.coffee new file mode 100644 index 0000000..24f83d1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/assets/javascripts/animes.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/assets/javascripts/application.js new file mode 100644 index 0000000..e07c5a8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/assets/javascripts/application.js @@ -0,0 +1,16 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require jquery +//= require jquery_ujs +//= require turbolinks +//= require_tree . diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/assets/stylesheets/animes.scss b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/assets/stylesheets/animes.scss new file mode 100644 index 0000000..a25310a --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/assets/stylesheets/animes.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the Animes controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/assets/stylesheets/application.css b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/assets/stylesheets/application.css new file mode 100644 index 0000000..f9cd5b3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/assets/stylesheets/application.css @@ -0,0 +1,15 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, + * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the bottom of the + * compiled file so the styles you add here take precedence over styles defined in any styles + * defined in the other CSS/SCSS files in this directory. It is generally better to create a new + * file per style scope. + * + *= require_tree . + *= require_self + */ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/controllers/animes_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/controllers/animes_controller.rb new file mode 100644 index 0000000..412f99b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/controllers/animes_controller.rb @@ -0,0 +1,20 @@ +class AnimesController < ApplicationController + + def index + @animes = Anime.all + end + + def new + Anime.new + end + + def create + @anime = Anime.create(validate_params) + redirect_to "/animes" + end + + private + def validate_params + params.require(:anime).permit(:title) + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/controllers/application_controller.rb new file mode 100644 index 0000000..d83690e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/controllers/application_controller.rb @@ -0,0 +1,5 @@ +class ApplicationController < ActionController::Base + # Prevent CSRF attacks by raising an exception. + # For APIs, you may want to use :null_session instead. + protect_from_forgery with: :exception +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/controllers/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/helpers/animes_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/helpers/animes_helper.rb new file mode 100644 index 0000000..b5ff033 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/helpers/animes_helper.rb @@ -0,0 +1,2 @@ +module AnimesHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/helpers/application_helper.rb new file mode 100644 index 0000000..de6be79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/models/anime.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/models/anime.rb new file mode 100644 index 0000000..52e635d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/models/anime.rb @@ -0,0 +1,2 @@ +class Anime < ActiveRecord::Base +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/models/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/views/animes/index.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/views/animes/index.html.erb new file mode 100644 index 0000000..0ff7f62 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/views/animes/index.html.erb @@ -0,0 +1,10 @@ +
+

Animes

+
+
+ <% if @animes %><% @animes.each do |anime| %> +

@ <%= anime.title %>

+ <% end %><% end %> +
+
+
diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/views/animes/new.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/views/animes/new.html.erb new file mode 100644 index 0000000..b583b5c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/views/animes/new.html.erb @@ -0,0 +1,15 @@ +
+
+ +

New Anime

+ +
+
+ + +
+
+ + +
+
diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/views/layouts/application.html.erb new file mode 100644 index 0000000..9159bdf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/app/views/layouts/application.html.erb @@ -0,0 +1,35 @@ + + + + Animes + + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + + + <%= yield %> + + + + + + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/bin/bundle new file mode 100755 index 0000000..66e9889 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/bin/rails new file mode 100755 index 0000000..0138d79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/bin/rails @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +APP_PATH = File.expand_path('../../config/application', __FILE__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/bin/rake new file mode 100755 index 0000000..d87d5f5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/bin/rake @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/bin/setup new file mode 100755 index 0000000..acdb2c1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/bin/setup @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +Dir.chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file: + + puts "== Installing dependencies ==" + system "gem install bundler --conservative" + system "bundle check || bundle install" + + # puts "\n== Copying sample files ==" + # unless File.exist?("config/database.yml") + # system "cp config/database.yml.sample config/database.yml" + # end + + puts "\n== Preparing database ==" + system "bin/rake db:setup" + + puts "\n== Removing old logs and tempfiles ==" + system "rm -f log/*" + system "rm -rf tmp/cache" + + puts "\n== Restarting application server ==" + system "touch tmp/restart.txt" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/bin/spring new file mode 100755 index 0000000..fb2ec2e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/bin/spring @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +# This file loads spring without using Bundler, in order to be fast. +# It gets overwritten when you run the `spring binstub` command. + +unless defined?(Spring) + require 'rubygems' + require 'bundler' + + lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read) + spring = lockfile.specs.detect { |spec| spec.name == "spring" } + if spring + Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path + gem 'spring', spring.version + require 'spring/binstub' + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config.ru new file mode 100644 index 0000000..bd83b25 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Rails.application diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/application.rb new file mode 100644 index 0000000..4b902ea --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/application.rb @@ -0,0 +1,35 @@ +require File.expand_path('../boot', __FILE__) + +require "rails" +# Pick the frameworks you want: +require "active_model/railtie" +require "active_job/railtie" +require "active_record/railtie" +require "action_controller/railtie" +require "action_mailer/railtie" +require "action_view/railtie" +require "sprockets/railtie" +# require "rails/test_unit/railtie" + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module Animes + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Do not swallow errors in after_commit/after_rollback callbacks. + config.active_record.raise_in_transactional_callbacks = true + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/boot.rb new file mode 100644 index 0000000..6b750f0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/boot.rb @@ -0,0 +1,3 @@ +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) + +require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/database.yml new file mode 100644 index 0000000..1c1a37c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/database.yml @@ -0,0 +1,25 @@ +# SQLite version 3.x +# gem install sqlite3 +# +# Ensure the SQLite 3 gem is defined in your Gemfile +# gem 'sqlite3' +# +default: &default + adapter: sqlite3 + pool: 5 + timeout: 5000 + +development: + <<: *default + database: db/development.sqlite3 + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: db/test.sqlite3 + +production: + <<: *default + database: db/production.sqlite3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/environment.rb new file mode 100644 index 0000000..ee8d90d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require File.expand_path('../application', __FILE__) + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/environments/development.rb new file mode 100644 index 0000000..b55e214 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/environments/development.rb @@ -0,0 +1,41 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # Adds additional error checking when serving assets at runtime. + # Checks for improperly declared sprockets dependencies. + # Raises helpful error messages. + config.assets.raise_runtime_errors = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/environments/production.rb new file mode 100644 index 0000000..5c1b32e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/environments/production.rb @@ -0,0 +1,79 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like + # NGINX, varnish or squid. + # config.action_dispatch.rack_cache = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # 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-Accel-Redirect' # for NGINX + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug + + # Prepend all log lines with the following tags. + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/environments/test.rb new file mode 100644 index 0000000..1c19f08 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/environments/test.rb @@ -0,0 +1,42 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure static file server for tests with Cache-Control for performance. + config.serve_static_files = true + config.static_cache_control = 'public, max-age=3600' + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Randomize the order test cases are executed. + config.active_support.test_order = :random + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/initializers/assets.rb new file mode 100644 index 0000000..01ef3e6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/initializers/assets.rb @@ -0,0 +1,11 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path +# Rails.application.config.assets.paths << Emoji.images_path + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. +# Rails.application.config.assets.precompile += %w( search.js ) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..59385cd --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/initializers/cookies_serializer.rb new file mode 100644 index 0000000..7f70458 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/initializers/cookies_serializer.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000..4a994e1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/initializers/inflections.rb new file mode 100644 index 0000000..ac033bf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/initializers/mime_types.rb new file mode 100644 index 0000000..dc18996 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/initializers/mime_types.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/initializers/session_store.rb new file mode 100644 index 0000000..a1c7e6e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/initializers/session_store.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.session_store :cookie_store, key: '_Animes_session' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..33725e9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] if respond_to?(:wrap_parameters) +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/locales/en.yml new file mode 100644 index 0000000..0653957 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/locales/en.yml @@ -0,0 +1,23 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/routes.rb new file mode 100644 index 0000000..22f8100 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/routes.rb @@ -0,0 +1,61 @@ +Rails.application.routes.draw do + root 'animes#new' + get 'animes' => 'animes#index' + get 'animes/new' => 'animes#new' + post 'animes' => 'animes#create' + + # The priority is based upon order of creation: first created -> highest priority. + # See how all your routes lay out with "rake routes". + + # You can have the root of your site routed with "root" + # root 'welcome#index' + + # Example of regular route: + # get 'products/:id' => 'catalog#view' + + # Example of named route that can be invoked with purchase_url(id: product.id) + # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase + + # Example resource route (maps HTTP verbs to controller actions automatically): + # resources :products + + # Example resource route with options: + # resources :products do + # member do + # get 'short' + # post 'toggle' + # end + # + # collection do + # get 'sold' + # end + # end + + # Example resource route with sub-resources: + # resources :products do + # resources :comments, :sales + # resource :seller + # end + + # Example resource route with more complex sub-resources: + # resources :products do + # resources :comments + # resources :sales do + # get 'recent', on: :collection + # end + # end + + # Example resource route with concerns: + # concern :toggleable do + # post 'toggle' + # end + # resources :posts, concerns: :toggleable + # resources :photos, concerns: :toggleable + + # Example resource route within a namespace: + # namespace :admin do + # # Directs /admin/products/* to Admin::ProductsController + # # (app/controllers/admin/products_controller.rb) + # resources :products + # end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/secrets.yml new file mode 100644 index 0000000..ff837a0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/config/secrets.yml @@ -0,0 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rake secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: a01a6d9f27e8c387b74138b0eb64e4d459307d33214921c11329ab207fe5109815014630206c1bfd9986b1da97a24648ddf1f1e8fab1043e8ded40c2317cb3e9 + +test: + secret_key_base: fb9dc310e833dd23658ea90e394c56cc71ef3f015d2c6fdbc08b2ad15b62264b50d6a528e087f8c355ffddd9a96c50f45db0b91ec5de2eea91467264b17fea3e + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/db/migrate/20180814231729_create_animes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/db/migrate/20180814231729_create_animes.rb new file mode 100644 index 0000000..3c0799a --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/db/migrate/20180814231729_create_animes.rb @@ -0,0 +1,9 @@ +class CreateAnimes < ActiveRecord::Migration + def change + create_table :animes do |t| + t.string :title + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/db/schema.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/db/schema.rb new file mode 100644 index 0000000..a174048 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/db/schema.rb @@ -0,0 +1,22 @@ +# encoding: UTF-8 +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 20180814231729) do + + create_table "animes", force: :cascade do |t| + t.string "title" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/db/seeds.rb new file mode 100644 index 0000000..4edb1e8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). +# +# Examples: +# +# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) +# Mayor.create(name: 'Emanuel', city: cities.first) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/lib/assets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/lib/tasks/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/log/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/public/404.html new file mode 100644 index 0000000..b612547 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +
+
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/public/422.html new file mode 100644 index 0000000..a21f82b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
+
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/public/500.html new file mode 100644 index 0000000..061abc5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/public/500.html @@ -0,0 +1,66 @@ + + + + We're sorry, but something went wrong (500) + + + + + + +
+
+

We're sorry, but something went wrong.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/public/robots.txt new file mode 100644 index 0000000..3c9c7c0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-agent: * +# Disallow: / diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/controllers/animes_controller_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/controllers/animes_controller_spec.rb new file mode 100644 index 0000000..f99fd4f --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/controllers/animes_controller_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe AnimesController, type: :controller do + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/factories/animes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/factories/animes.rb new file mode 100644 index 0000000..a459809 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/factories/animes.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :anime do + + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/features/create_anime_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/features/create_anime_spec.rb new file mode 100644 index 0000000..16c3106 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/features/create_anime_spec.rb @@ -0,0 +1,10 @@ +RSpec.describe 'creating anime' do + it 'create an anime and redirect to new page' do + visit '/animes/new' + fill_in 'Title', with: 'Naruto' # Fields to fill + click_button 'Create Anime' + + expect(current_path).to eq('/animes') + expect(page).to have_text('Naruto') + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/features/list_animes_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/features/list_animes_spec.rb new file mode 100644 index 0000000..167cc48 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/features/list_animes_spec.rb @@ -0,0 +1,13 @@ +require 'rails_helper' + +RSpec.describe 'listing animes' do + it 'displays list of all animes' do + anime_1 = Anime.create(title: 'Naruto') + anime_2 = Anime.create(title: 'Dragon Ball Z') + + visit '/animes' + + expect(page).to have_text(anime_1.title) + expect(page).to have_text(anime_2.title) + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/features/new_anime_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/features/new_anime_spec.rb new file mode 100644 index 0000000..c009db1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/features/new_anime_spec.rb @@ -0,0 +1,10 @@ +require 'rails_helper' + +RSpec.describe 'create new anime' do + it 'displays correct fields (form) to create new anime' do + + visit '/animes/new' + + expect(page).to have_text('Title') + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/features/show_anime_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/features/show_anime_spec.rb new file mode 100644 index 0000000..65749e3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/features/show_anime_spec.rb @@ -0,0 +1,10 @@ +require 'rails_helper' + +RSpec.describe "showing single anime's details page..." do + it "shall display information about a single anime" do + single_anime = Anime.create(title: "Naruto") + + visit "/animes/#{single_anime.id}" + expect(page).to have_text(single_anime.title) + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/helpers/animes_helper_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/helpers/animes_helper_spec.rb new file mode 100644 index 0000000..c39fc3e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/helpers/animes_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the AnimesHelper. For example: +# +# describe AnimesHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe AnimesHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/models/anime_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/models/anime_spec.rb new file mode 100644 index 0000000..0d09604 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/models/anime_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Anime, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/rails_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/rails_helper.rb new file mode 100644 index 0000000..5b1259f --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/rails_helper.rb @@ -0,0 +1,68 @@ +# This file is copied to spec/ when you run 'rails generate rspec:install' +require 'spec_helper' +ENV['RAILS_ENV'] ||= 'test' +require File.expand_path('../../config/environment', __FILE__) +# Prevent database truncation if the environment is production +abort("The Rails environment is running in production mode!") if Rails.env.production? +require 'rspec/rails' +# Add additional requires below this line. Rails is not loaded until this point! + +# Requires supporting ruby files with custom matchers and macros, etc, in +# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are +# run as spec files by default. This means that files in spec/support that end +# in _spec.rb will both be required and run as specs, causing the specs to be +# run twice. It is recommended that you do not name files matching this glob to +# end with _spec.rb. You can configure this pattern with the --pattern +# option on the command line or in ~/.rspec, .rspec or `.rspec-local`. +# +# The following line is provided for convenience purposes. It has the downside +# of increasing the boot-up time by auto-requiring all files in the support +# directory. Alternatively, in the individual `*_spec.rb` files, manually +# require only the support files necessary. +# +# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f } + +# Checks for pending migrations and applies them before tests are run. +# If you are not using ActiveRecord, you can remove these lines. +begin + ActiveRecord::Migration.maintain_test_schema! +rescue ActiveRecord::PendingMigrationError => e + puts e.to_s.strip + exit 1 +end + +require 'factory_bot_rails' +RSpec.configure do |config| + + # => Added Configuration + config.include FactoryBot::Syntax::Methods + + + # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures + config.fixture_path = "#{::Rails.root}/spec/fixtures" + + # If you're not using ActiveRecord, or you'd prefer not to run each of your + # examples within a transaction, remove the following line or assign false + # instead of true. + config.use_transactional_fixtures = true + + # RSpec Rails can automatically mix in different behaviours to your tests + # based on their file location, for example enabling you to call `get` and + # `post` in specs under `spec/controllers`. + # + # You can disable this behaviour by removing the line below, and instead + # explicitly tag your specs with their type, e.g.: + # + # RSpec.describe UsersController, :type => :controller do + # # ... + # end + # + # The different available types are documented in the features, such as in + # https://relishapp.com/rspec/rspec-rails/docs + config.infer_spec_type_from_file_location! + + # Filter lines from Rails gems in backtraces. + config.filter_rails_from_backtrace! + # arbitrary gems may also be filtered via: + # config.filter_gems_from_backtrace("gem name") +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/spec_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/spec_helper.rb new file mode 100644 index 0000000..ce33d66 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/spec/spec_helper.rb @@ -0,0 +1,96 @@ +# This file was generated by the `rails generate rspec:install` command. Conventionally, all +# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. +# The generated `.rspec` file contains `--require spec_helper` which will cause +# this file to always be loaded, without a need to explicitly require it in any +# files. +# +# Given that it is always loaded, you are encouraged to keep this file as +# light-weight as possible. Requiring heavyweight dependencies from this file +# will add to the boot time of your test suite on EVERY test run, even for an +# individual file that may not need all of that loaded. Instead, consider making +# a separate helper file that requires the additional dependencies and performs +# the additional setup, and require it from the spec files that actually need +# it. +# +# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration +RSpec.configure do |config| + # rspec-expectations config goes here. You can use an alternate + # assertion/expectation library such as wrong or the stdlib/minitest + # assertions if you prefer. + config.expect_with :rspec do |expectations| + # This option will default to `true` in RSpec 4. It makes the `description` + # and `failure_message` of custom matchers include text for helper methods + # defined using `chain`, e.g.: + # be_bigger_than(2).and_smaller_than(4).description + # # => "be bigger than 2 and smaller than 4" + # ...rather than: + # # => "be bigger than 2" + expectations.include_chain_clauses_in_custom_matcher_descriptions = true + end + + # rspec-mocks config goes here. You can use an alternate test double + # library (such as bogus or mocha) by changing the `mock_with` option here. + config.mock_with :rspec do |mocks| + # Prevents you from mocking or stubbing a method that does not exist on + # a real object. This is generally recommended, and will default to + # `true` in RSpec 4. + mocks.verify_partial_doubles = true + end + + # This option will default to `:apply_to_host_groups` in RSpec 4 (and will + # have no way to turn it off -- the option exists only for backwards + # compatibility in RSpec 3). It causes shared context metadata to be + # inherited by the metadata hash of host groups and examples, rather than + # triggering implicit auto-inclusion in groups with matching metadata. + config.shared_context_metadata_behavior = :apply_to_host_groups + +# The settings below are suggested to provide a good initial experience +# with RSpec, but feel free to customize to your heart's content. +=begin + # This allows you to limit a spec run to individual examples or groups + # you care about by tagging them with `:focus` metadata. When nothing + # is tagged with `:focus`, all examples get run. RSpec also provides + # aliases for `it`, `describe`, and `context` that include `:focus` + # metadata: `fit`, `fdescribe` and `fcontext`, respectively. + config.filter_run_when_matching :focus + + # Allows RSpec to persist some state between runs in order to support + # the `--only-failures` and `--next-failure` CLI options. We recommend + # you configure your source control system to ignore this file. + config.example_status_persistence_file_path = "spec/examples.txt" + + # Limits the available syntax to the non-monkey patched syntax that is + # recommended. For more details, see: + # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/ + # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/ + # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode + config.disable_monkey_patching! + + # Many RSpec users commonly either run the entire suite or an individual + # file, and it's useful to allow more verbose output when running an + # individual spec file. + if config.files_to_run.one? + # Use the documentation formatter for detailed output, + # unless a formatter has already been configured + # (e.g. via a command-line flag). + config.default_formatter = "doc" + end + + # Print the 10 slowest examples and example groups at the + # end of the spec run, to help surface which specs are running + # particularly slow. + config.profile_examples = 10 + + # Run specs in random order to surface order dependencies. If you find an + # order dependency and want to debug it, you can fix the order by providing + # the seed, which is printed after each run. + # --seed 1234 + config.order = :random + + # Seed global randomization in this process using the `--seed` CLI option. + # Setting this allows you to use `--seed` to deterministically reproduce + # test failures related to randomization by passing the same `--seed` value + # as the one that triggered the failure. + Kernel.srand config.seed +=end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/vendor/assets/javascripts/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Animes/vendor/assets/stylesheets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/.gitignore new file mode 100644 index 0000000..050c9d9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/.gitignore @@ -0,0 +1,17 @@ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore the default SQLite database. +/db/*.sqlite3 +/db/*.sqlite3-journal + +# Ignore all logfiles and tempfiles. +/log/* +!/log/.keep +/tmp diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/Gemfile new file mode 100644 index 0000000..af8810e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/Gemfile @@ -0,0 +1,48 @@ +source 'https://rubygems.org' + + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '4.2.7' +# Use sqlite3 as the database for Active Record +gem 'sqlite3' +# Use SCSS for stylesheets +gem 'sass-rails', '~> 5.0' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# Use CoffeeScript for .coffee assets and views +gem 'coffee-rails', '~> 4.1.0' +# See https://github.com/rails/execjs#readme for more supported runtimes +# gem 'therubyracer', platforms: :ruby + +# Use jquery as the JavaScript library +gem 'jquery-rails' +# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks +gem 'turbolinks' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.0' +# bundle exec rake doc:rails generates the API under doc/api. +gem 'sdoc', '~> 0.4.0', group: :doc + +# Use ActiveModel has_secure_password +# gem 'bcrypt', '~> 3.1.7' + +# Use Unicorn as the app server +# gem 'unicorn' + +# Use Capistrano for deployment +# gem 'capistrano-rails', group: :development + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug' +end + +group :development do + # Access an IRB console on exception pages or by using <%= console %> in views + gem 'web-console', '~> 2.0' + + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' +end + +gem 'hirb' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/Gemfile.lock new file mode 100644 index 0000000..ffc0ab5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/Gemfile.lock @@ -0,0 +1,172 @@ +GEM + remote: https://rubygems.org/ + specs: + actionmailer (4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.7) + actionview (= 4.2.7) + activesupport (= 4.2.7) + rack (~> 1.6) + rack-test (~> 0.6.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + activejob (4.2.7) + activesupport (= 4.2.7) + globalid (>= 0.3.0) + activemodel (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + activerecord (4.2.7) + activemodel (= 4.2.7) + activesupport (= 4.2.7) + arel (~> 6.0) + activesupport (4.2.7) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + arel (6.0.4) + binding_of_caller (0.8.0) + debug_inspector (>= 0.0.1) + builder (3.2.3) + byebug (10.0.2) + coffee-rails (4.1.1) + coffee-script (>= 2.2.0) + railties (>= 4.0.0, < 5.1.x) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + concurrent-ruby (1.0.5) + crass (1.0.4) + debug_inspector (0.0.3) + erubis (2.7.0) + execjs (2.7.0) + ffi (1.9.25) + globalid (0.4.1) + activesupport (>= 4.2.0) + hirb (0.7.3) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jbuilder (2.7.0) + activesupport (>= 4.2.0) + multi_json (>= 1.2) + jquery-rails (4.3.3) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + json (1.8.6) + loofah (2.2.2) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.0) + mini_mime (>= 0.1.1) + mini_mime (1.0.0) + mini_portile2 (2.3.0) + minitest (5.11.3) + multi_json (1.13.1) + nokogiri (1.8.4) + mini_portile2 (~> 2.3.0) + rack (1.6.10) + rack-test (0.6.3) + rack (>= 1.0) + rails (4.2.7) + actionmailer (= 4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + activemodel (= 4.2.7) + activerecord (= 4.2.7) + activesupport (= 4.2.7) + bundler (>= 1.3.0, < 2.0) + railties (= 4.2.7) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.9) + activesupport (>= 4.2.0, < 5.0) + nokogiri (~> 1.6) + rails-deprecated_sanitizer (>= 1.0.1) + rails-html-sanitizer (1.0.4) + loofah (~> 2.2, >= 2.2.2) + railties (4.2.7) + actionpack (= 4.2.7) + activesupport (= 4.2.7) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (12.3.1) + rb-fsevent (0.10.3) + rb-inotify (0.9.10) + ffi (>= 0.5.0, < 2) + rdoc (4.3.0) + sass (3.5.7) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sass-rails (5.0.7) + railties (>= 4.0.0, < 6) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + sdoc (0.4.2) + json (~> 1.7, >= 1.7.7) + rdoc (~> 4.0) + spring (2.0.2) + activesupport (>= 4.2) + sprockets (3.7.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.2.1) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + sqlite3 (1.3.13) + thor (0.20.0) + thread_safe (0.3.6) + tilt (2.0.8) + turbolinks (5.1.1) + turbolinks-source (~> 5.1) + turbolinks-source (5.1.0) + tzinfo (1.2.5) + thread_safe (~> 0.1) + uglifier (4.1.17) + execjs (>= 0.3.0, < 3) + web-console (2.3.0) + activemodel (>= 4.0) + binding_of_caller (>= 0.7.2) + railties (>= 4.0) + sprockets-rails (>= 2.0, < 4.0) + +PLATFORMS + ruby + +DEPENDENCIES + byebug + coffee-rails (~> 4.1.0) + hirb + jbuilder (~> 2.0) + jquery-rails + rails (= 4.2.7) + sass-rails (~> 5.0) + sdoc (~> 0.4.0) + spring + sqlite3 + turbolinks + uglifier (>= 1.3.0) + web-console (~> 2.0) + +BUNDLED WITH + 1.16.3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/README.rdoc b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/README.rdoc new file mode 100644 index 0000000..dd4e97e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/README.rdoc @@ -0,0 +1,28 @@ +== README + +This README would normally document whatever steps are necessary to get the +application up and running. + +Things you may want to cover: + +* Ruby version + +* System dependencies + +* Configuration + +* Database creation + +* Database initialization + +* How to run the test suite + +* Services (job queues, cache servers, search engines, etc.) + +* Deployment instructions + +* ... + + +Please feel free to use a different markup language if you do not plan to run +rake doc:app. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/Rakefile new file mode 100644 index 0000000..ba6b733 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Rails.application.load_tasks diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/assets/images/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/assets/javascripts/application.js new file mode 100644 index 0000000..e07c5a8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/assets/javascripts/application.js @@ -0,0 +1,16 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require jquery +//= require jquery_ujs +//= require turbolinks +//= require_tree . diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/assets/javascripts/users.coffee b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/assets/javascripts/users.coffee new file mode 100644 index 0000000..24f83d1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/assets/javascripts/users.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/assets/stylesheets/application.css b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/assets/stylesheets/application.css new file mode 100644 index 0000000..f9cd5b3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/assets/stylesheets/application.css @@ -0,0 +1,15 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, + * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the bottom of the + * compiled file so the styles you add here take precedence over styles defined in any styles + * defined in the other CSS/SCSS files in this directory. It is generally better to create a new + * file per style scope. + * + *= require_tree . + *= require_self + */ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/assets/stylesheets/scaffolds.scss b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/assets/stylesheets/scaffolds.scss new file mode 100644 index 0000000..ed7a765 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/assets/stylesheets/scaffolds.scss @@ -0,0 +1,73 @@ +body { + background-color: #fff; + color: #333; + font-family: verdana, arial, helvetica, sans-serif; + font-size: 13px; + line-height: 18px; +} + +p, ol, ul, td { + font-family: verdana, arial, helvetica, sans-serif; + font-size: 13px; + line-height: 18px; +} + +pre { + background-color: #eee; + padding: 10px; + font-size: 11px; +} + +a { + color: #000; + + &:visited { + color: #666; + } + + &:hover { + color: #fff; + background-color: #000; + } +} + +div { + &.field, &.actions { + margin-bottom: 10px; + } +} + +#notice { + color: green; +} + +.field_with_errors { + padding: 2px; + background-color: red; + display: table; +} + +#error_explanation { + width: 450px; + border: 2px solid red; + padding: 7px; + padding-bottom: 0; + margin-bottom: 20px; + background-color: #f0f0f0; + + h2 { + text-align: left; + font-weight: bold; + padding: 5px 5px 5px 15px; + font-size: 12px; + margin: -7px; + margin-bottom: 0px; + background-color: #c00; + color: #fff; + } + + ul li { + font-size: 12px; + list-style: square; + } +} diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/assets/stylesheets/users.scss b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/assets/stylesheets/users.scss new file mode 100644 index 0000000..31a2eac --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/assets/stylesheets/users.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the Users controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/controllers/application_controller.rb new file mode 100644 index 0000000..d83690e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/controllers/application_controller.rb @@ -0,0 +1,5 @@ +class ApplicationController < ActionController::Base + # Prevent CSRF attacks by raising an exception. + # For APIs, you may want to use :null_session instead. + protect_from_forgery with: :exception +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/controllers/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/controllers/users_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/controllers/users_controller.rb new file mode 100644 index 0000000..0fdcb12 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/controllers/users_controller.rb @@ -0,0 +1,74 @@ +class UsersController < ApplicationController + before_action :set_user, only: [:show, :edit, :update, :destroy] + + # GET /users + # GET /users.json + def index + @users = User.all + end + + # GET /users/1 + # GET /users/1.json + def show + end + + # GET /users/new + def new + @user = User.new + end + + # GET /users/1/edit + def edit + end + + # POST /users + # POST /users.json + def create + @user = User.new(user_params) + + respond_to do |format| + if @user.save + format.html { redirect_to @user, notice: 'User was successfully created.' } + format.json { render :show, status: :created, location: @user } + else + format.html { render :new } + format.json { render json: @user.errors, status: :unprocessable_entity } + end + end + end + + # PATCH/PUT /users/1 + # PATCH/PUT /users/1.json + def update + respond_to do |format| + if @user.update(user_params) + format.html { redirect_to @user, notice: 'User was successfully updated.' } + format.json { render :show, status: :ok, location: @user } + else + format.html { render :edit } + format.json { render json: @user.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /users/1 + # DELETE /users/1.json + def destroy + @user.destroy + respond_to do |format| + format.html { redirect_to users_url, notice: 'User was successfully destroyed.' } + format.json { head :no_content } + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_user + @user = User.find(params[:id]) + end + + # Never trust parameters from the scary internet, only allow the white list through. + def user_params + params.require(:user).permit(:first_name, :last_name, :email, :age) + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/helpers/application_helper.rb new file mode 100644 index 0000000..de6be79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/helpers/users_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/helpers/users_helper.rb new file mode 100644 index 0000000..2310a24 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/helpers/users_helper.rb @@ -0,0 +1,2 @@ +module UsersHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/models/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/models/user.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/models/user.rb new file mode 100644 index 0000000..4a57cf0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/models/user.rb @@ -0,0 +1,2 @@ +class User < ActiveRecord::Base +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/layouts/application.html.erb new file mode 100644 index 0000000..b4805ab --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/layouts/application.html.erb @@ -0,0 +1,14 @@ + + + + Scaffolding + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + + +<%= yield %> + + + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/users/_form.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/users/_form.html.erb new file mode 100644 index 0000000..049a44a --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/users/_form.html.erb @@ -0,0 +1,33 @@ +<%= form_for(@user) do |f| %> + <% if @user.errors.any? %> +
+

<%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:

+ +
    + <% @user.errors.full_messages.each do |message| %> +
  • <%= message %>
  • + <% end %> +
+
+ <% end %> + +
+ <%= f.label :first_name %>
+ <%= f.text_field :first_name %> +
+
+ <%= f.label :last_name %>
+ <%= f.text_field :last_name %> +
+
+ <%= f.label :email %>
+ <%= f.text_field :email %> +
+
+ <%= f.label :age %>
+ <%= f.number_field :age %> +
+
+ <%= f.submit %> +
+<% end %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/users/_user.json.jbuilder b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/users/_user.json.jbuilder new file mode 100644 index 0000000..5a322cd --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/users/_user.json.jbuilder @@ -0,0 +1,2 @@ +json.extract! user, :id, :first_name, :last_name, :email, :age, :created_at, :updated_at +json.url user_url(user, format: :json) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/users/edit.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/users/edit.html.erb new file mode 100644 index 0000000..d87b2f5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/users/edit.html.erb @@ -0,0 +1,6 @@ +

Editing User

+ +<%= render 'form' %> + +<%= link_to 'Show', @user %> | +<%= link_to 'Back', users_path %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/users/index.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/users/index.html.erb new file mode 100644 index 0000000..accebc1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/users/index.html.erb @@ -0,0 +1,33 @@ +

<%= notice %>

+ +

Listing Users

+ + + + + + + + + + + + + + <% @users.each do |user| %> + + + + + + + + + + <% end %> + +
First nameLast nameEmailAge
<%= user.first_name %><%= user.last_name %><%= user.email %><%= user.age %><%= link_to 'Show', user %><%= link_to 'Edit', edit_user_path(user) %><%= link_to 'Destroy', user, method: :delete, data: { confirm: 'Are you sure?' } %>
+ +
+ +<%= link_to 'New User', new_user_path %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/users/index.json.jbuilder b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/users/index.json.jbuilder new file mode 100644 index 0000000..2faf5af --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/users/index.json.jbuilder @@ -0,0 +1 @@ +json.array! @users, partial: 'users/user', as: :user diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/users/new.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/users/new.html.erb new file mode 100644 index 0000000..4854d9e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/users/new.html.erb @@ -0,0 +1,5 @@ +

New User

+ +<%= render 'form' %> + +<%= link_to 'Back', users_path %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/users/show.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/users/show.html.erb new file mode 100644 index 0000000..1a3ab97 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/users/show.html.erb @@ -0,0 +1,24 @@ +

<%= notice %>

+ +

+ First name: + <%= @user.first_name %> +

+ +

+ Last name: + <%= @user.last_name %> +

+ +

+ Email: + <%= @user.email %> +

+ +

+ Age: + <%= @user.age %> +

+ +<%= link_to 'Edit', edit_user_path(@user) %> | +<%= link_to 'Back', users_path %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/users/show.json.jbuilder b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/users/show.json.jbuilder new file mode 100644 index 0000000..ff40bb9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/app/views/users/show.json.jbuilder @@ -0,0 +1 @@ +json.partial! "users/user", user: @user diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/bin/bundle new file mode 100755 index 0000000..66e9889 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/bin/rails new file mode 100755 index 0000000..0138d79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/bin/rails @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +APP_PATH = File.expand_path('../../config/application', __FILE__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/bin/rake new file mode 100755 index 0000000..d87d5f5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/bin/rake @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/bin/setup new file mode 100755 index 0000000..acdb2c1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/bin/setup @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +Dir.chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file: + + puts "== Installing dependencies ==" + system "gem install bundler --conservative" + system "bundle check || bundle install" + + # puts "\n== Copying sample files ==" + # unless File.exist?("config/database.yml") + # system "cp config/database.yml.sample config/database.yml" + # end + + puts "\n== Preparing database ==" + system "bin/rake db:setup" + + puts "\n== Removing old logs and tempfiles ==" + system "rm -f log/*" + system "rm -rf tmp/cache" + + puts "\n== Restarting application server ==" + system "touch tmp/restart.txt" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/bin/spring new file mode 100755 index 0000000..fb2ec2e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/bin/spring @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +# This file loads spring without using Bundler, in order to be fast. +# It gets overwritten when you run the `spring binstub` command. + +unless defined?(Spring) + require 'rubygems' + require 'bundler' + + lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read) + spring = lockfile.specs.detect { |spec| spec.name == "spring" } + if spring + Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path + gem 'spring', spring.version + require 'spring/binstub' + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config.ru new file mode 100644 index 0000000..bd83b25 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Rails.application diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/application.rb new file mode 100644 index 0000000..b90f059 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/application.rb @@ -0,0 +1,26 @@ +require File.expand_path('../boot', __FILE__) + +require 'rails/all' + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module Scaffolding + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Do not swallow errors in after_commit/after_rollback callbacks. + config.active_record.raise_in_transactional_callbacks = true + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/boot.rb new file mode 100644 index 0000000..6b750f0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/boot.rb @@ -0,0 +1,3 @@ +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) + +require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/database.yml new file mode 100644 index 0000000..1c1a37c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/database.yml @@ -0,0 +1,25 @@ +# SQLite version 3.x +# gem install sqlite3 +# +# Ensure the SQLite 3 gem is defined in your Gemfile +# gem 'sqlite3' +# +default: &default + adapter: sqlite3 + pool: 5 + timeout: 5000 + +development: + <<: *default + database: db/development.sqlite3 + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: db/test.sqlite3 + +production: + <<: *default + database: db/production.sqlite3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/environment.rb new file mode 100644 index 0000000..ee8d90d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require File.expand_path('../application', __FILE__) + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/environments/development.rb new file mode 100644 index 0000000..b55e214 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/environments/development.rb @@ -0,0 +1,41 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # Adds additional error checking when serving assets at runtime. + # Checks for improperly declared sprockets dependencies. + # Raises helpful error messages. + config.assets.raise_runtime_errors = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/environments/production.rb new file mode 100644 index 0000000..5c1b32e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/environments/production.rb @@ -0,0 +1,79 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like + # NGINX, varnish or squid. + # config.action_dispatch.rack_cache = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # 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-Accel-Redirect' # for NGINX + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug + + # Prepend all log lines with the following tags. + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/environments/test.rb new file mode 100644 index 0000000..1c19f08 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/environments/test.rb @@ -0,0 +1,42 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure static file server for tests with Cache-Control for performance. + config.serve_static_files = true + config.static_cache_control = 'public, max-age=3600' + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Randomize the order test cases are executed. + config.active_support.test_order = :random + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/initializers/assets.rb new file mode 100644 index 0000000..01ef3e6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/initializers/assets.rb @@ -0,0 +1,11 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path +# Rails.application.config.assets.paths << Emoji.images_path + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. +# Rails.application.config.assets.precompile += %w( search.js ) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..59385cd --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/initializers/cookies_serializer.rb new file mode 100644 index 0000000..7f70458 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/initializers/cookies_serializer.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000..4a994e1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/initializers/inflections.rb new file mode 100644 index 0000000..ac033bf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/initializers/mime_types.rb new file mode 100644 index 0000000..dc18996 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/initializers/mime_types.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/initializers/session_store.rb new file mode 100644 index 0000000..f55da0d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/initializers/session_store.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.session_store :cookie_store, key: '_Scaffolding_session' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..33725e9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] if respond_to?(:wrap_parameters) +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/locales/en.yml new file mode 100644 index 0000000..0653957 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/locales/en.yml @@ -0,0 +1,23 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/routes.rb new file mode 100644 index 0000000..3cfaf1c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/routes.rb @@ -0,0 +1,57 @@ +Rails.application.routes.draw do + resources :users + # The priority is based upon order of creation: first created -> highest priority. + # See how all your routes lay out with "rake routes". + + # You can have the root of your site routed with "root" + # root 'welcome#index' + + # Example of regular route: + # get 'products/:id' => 'catalog#view' + + # Example of named route that can be invoked with purchase_url(id: product.id) + # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase + + # Example resource route (maps HTTP verbs to controller actions automatically): + # resources :products + + # Example resource route with options: + # resources :products do + # member do + # get 'short' + # post 'toggle' + # end + # + # collection do + # get 'sold' + # end + # end + + # Example resource route with sub-resources: + # resources :products do + # resources :comments, :sales + # resource :seller + # end + + # Example resource route with more complex sub-resources: + # resources :products do + # resources :comments + # resources :sales do + # get 'recent', on: :collection + # end + # end + + # Example resource route with concerns: + # concern :toggleable do + # post 'toggle' + # end + # resources :posts, concerns: :toggleable + # resources :photos, concerns: :toggleable + + # Example resource route within a namespace: + # namespace :admin do + # # Directs /admin/products/* to Admin::ProductsController + # # (app/controllers/admin/products_controller.rb) + # resources :products + # end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/secrets.yml new file mode 100644 index 0000000..e8c956d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/config/secrets.yml @@ -0,0 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rake secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: 16cea39ced3a7e700ed5287fd17f5a4ea9e9bbe4e6ff982f100b10435bd5b043c5c32d939c51be202b2ba99f7571aa0be4c5d6f0af6ce8af9b4cfc623465e394 + +test: + secret_key_base: 4863fd78afe13f793d9980b6e3779fcc9b6326460f87dd0f95547c8f4aa65645a539c946e33ca7590e3326385dce8147fa90005288080dcba095ac2c1d122a79 + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/db/migrate/20180808175623_create_users.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/db/migrate/20180808175623_create_users.rb new file mode 100644 index 0000000..648f540 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/db/migrate/20180808175623_create_users.rb @@ -0,0 +1,12 @@ +class CreateUsers < ActiveRecord::Migration + def change + create_table :users do |t| + t.string :first_name + t.string :last_name + t.string :email + t.integer :age + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/db/schema.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/db/schema.rb new file mode 100644 index 0000000..94e93ed --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/db/schema.rb @@ -0,0 +1,25 @@ +# encoding: UTF-8 +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 20180808175623) do + + create_table "users", force: :cascade do |t| + t.string "first_name" + t.string "last_name" + t.string "email" + t.integer "age" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/db/seeds.rb new file mode 100644 index 0000000..4edb1e8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). +# +# Examples: +# +# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) +# Mayor.create(name: 'Emanuel', city: cities.first) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/lib/assets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/lib/tasks/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/log/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/public/404.html new file mode 100644 index 0000000..b612547 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +
+
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/public/422.html new file mode 100644 index 0000000..a21f82b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
+
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/public/500.html new file mode 100644 index 0000000..061abc5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/public/500.html @@ -0,0 +1,66 @@ + + + + We're sorry, but something went wrong (500) + + + + + + +
+
+

We're sorry, but something went wrong.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/public/robots.txt new file mode 100644 index 0000000..3c9c7c0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-agent: * +# Disallow: / diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/test/controllers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/test/controllers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/test/controllers/users_controller_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/test/controllers/users_controller_test.rb new file mode 100644 index 0000000..648d709 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/test/controllers/users_controller_test.rb @@ -0,0 +1,49 @@ +require 'test_helper' + +class UsersControllerTest < ActionController::TestCase + setup do + @user = users(:one) + end + + test "should get index" do + get :index + assert_response :success + assert_not_nil assigns(:users) + end + + test "should get new" do + get :new + assert_response :success + end + + test "should create user" do + assert_difference('User.count') do + post :create, user: { age: @user.age, email: @user.email, first_name: @user.first_name, last_name: @user.last_name } + end + + assert_redirected_to user_path(assigns(:user)) + end + + test "should show user" do + get :show, id: @user + assert_response :success + end + + test "should get edit" do + get :edit, id: @user + assert_response :success + end + + test "should update user" do + patch :update, id: @user, user: { age: @user.age, email: @user.email, first_name: @user.first_name, last_name: @user.last_name } + assert_redirected_to user_path(assigns(:user)) + end + + test "should destroy user" do + assert_difference('User.count', -1) do + delete :destroy, id: @user + end + + assert_redirected_to users_path + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/test/fixtures/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/test/fixtures/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/test/fixtures/users.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/test/fixtures/users.yml new file mode 100644 index 0000000..2b033cb --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/test/fixtures/users.yml @@ -0,0 +1,13 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + first_name: MyString + last_name: MyString + email: MyString + age: 1 + +two: + first_name: MyString + last_name: MyString + email: MyString + age: 1 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/test/helpers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/test/helpers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/test/integration/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/test/integration/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/test/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/test/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/test/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/test/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/test/models/user_test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/test/models/user_test.rb new file mode 100644 index 0000000..82f61e0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/test/models/user_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class UserTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/test/test_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/test/test_helper.rb new file mode 100644 index 0000000..92e39b2 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/test/test_helper.rb @@ -0,0 +1,10 @@ +ENV['RAILS_ENV'] ||= 'test' +require File.expand_path('../../config/environment', __FILE__) +require 'rails/test_help' + +class ActiveSupport::TestCase + # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. + fixtures :all + + # Add more helper methods to be used by all tests here... +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/vendor/assets/javascripts/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/Scaffolding/vendor/assets/stylesheets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/.gitignore new file mode 100644 index 0000000..050c9d9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/.gitignore @@ -0,0 +1,17 @@ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore the default SQLite database. +/db/*.sqlite3 +/db/*.sqlite3-journal + +# Ignore all logfiles and tempfiles. +/log/* +!/log/.keep +/tmp diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/Gemfile new file mode 100644 index 0000000..f815234 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/Gemfile @@ -0,0 +1,52 @@ +source 'https://rubygems.org' + + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '4.2.7' +# Use sqlite3 as the database for Active Record +gem 'sqlite3' +# Use SCSS for stylesheets +gem 'sass-rails', '~> 5.0' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# Use CoffeeScript for .coffee assets and views +gem 'coffee-rails', '~> 4.1.0' +# See https://github.com/rails/execjs#readme for more supported runtimes +# gem 'therubyracer', platforms: :ruby + +# Use jquery as the JavaScript library +gem 'jquery-rails' +# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks +gem 'turbolinks' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.0' +# bundle exec rake doc:rails generates the API under doc/api. +gem 'sdoc', '~> 0.4.0', group: :doc + +# Use ActiveModel has_secure_password +gem 'bcrypt', '~> 3.1.7' + +# Use Unicorn as the app server +# gem 'unicorn' + +# Use Capistrano for deployment +# gem 'capistrano-rails', group: :development + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug' +end + +group :development do + # Access an IRB console on exception pages or by using <%= console %> in views + gem 'web-console', '~> 2.0' + + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' +end + +group :development, :test do + gem 'capybara' + gem 'rspec-rails' + gem 'factory_bot_rails' +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/Gemfile.lock new file mode 100644 index 0000000..5997193 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/Gemfile.lock @@ -0,0 +1,210 @@ +GEM + remote: https://rubygems.org/ + specs: + actionmailer (4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.7) + actionview (= 4.2.7) + activesupport (= 4.2.7) + rack (~> 1.6) + rack-test (~> 0.6.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + activejob (4.2.7) + activesupport (= 4.2.7) + globalid (>= 0.3.0) + activemodel (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + activerecord (4.2.7) + activemodel (= 4.2.7) + activesupport (= 4.2.7) + arel (~> 6.0) + activesupport (4.2.7) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + addressable (2.5.2) + public_suffix (>= 2.0.2, < 4.0) + arel (6.0.4) + bcrypt (3.1.12) + binding_of_caller (0.8.0) + debug_inspector (>= 0.0.1) + builder (3.2.3) + byebug (10.0.2) + capybara (3.5.1) + addressable + mini_mime (>= 0.1.3) + nokogiri (~> 1.8) + rack (>= 1.6.0) + rack-test (>= 0.6.3) + xpath (~> 3.1) + coffee-rails (4.1.1) + coffee-script (>= 2.2.0) + railties (>= 4.0.0, < 5.1.x) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + concurrent-ruby (1.0.5) + crass (1.0.4) + debug_inspector (0.0.3) + diff-lcs (1.3) + erubis (2.7.0) + execjs (2.7.0) + factory_bot (4.10.0) + activesupport (>= 3.0.0) + factory_bot_rails (4.10.0) + factory_bot (~> 4.10.0) + railties (>= 3.0.0) + ffi (1.9.25) + globalid (0.4.1) + activesupport (>= 4.2.0) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jbuilder (2.7.0) + activesupport (>= 4.2.0) + multi_json (>= 1.2) + jquery-rails (4.3.3) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + json (1.8.6) + loofah (2.2.2) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.0) + mini_mime (>= 0.1.1) + mini_mime (1.0.0) + mini_portile2 (2.3.0) + minitest (5.11.3) + multi_json (1.13.1) + nokogiri (1.8.4) + mini_portile2 (~> 2.3.0) + public_suffix (3.0.2) + rack (1.6.10) + rack-test (0.6.3) + rack (>= 1.0) + rails (4.2.7) + actionmailer (= 4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + activemodel (= 4.2.7) + activerecord (= 4.2.7) + activesupport (= 4.2.7) + bundler (>= 1.3.0, < 2.0) + railties (= 4.2.7) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.9) + activesupport (>= 4.2.0, < 5.0) + nokogiri (~> 1.6) + rails-deprecated_sanitizer (>= 1.0.1) + rails-html-sanitizer (1.0.4) + loofah (~> 2.2, >= 2.2.2) + railties (4.2.7) + actionpack (= 4.2.7) + activesupport (= 4.2.7) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (12.3.1) + rb-fsevent (0.10.3) + rb-inotify (0.9.10) + ffi (>= 0.5.0, < 2) + rdoc (4.3.0) + rspec-core (3.8.0) + rspec-support (~> 3.8.0) + rspec-expectations (3.8.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.8.0) + rspec-mocks (3.8.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.8.0) + rspec-rails (3.8.0) + actionpack (>= 3.0) + activesupport (>= 3.0) + railties (>= 3.0) + rspec-core (~> 3.8.0) + rspec-expectations (~> 3.8.0) + rspec-mocks (~> 3.8.0) + rspec-support (~> 3.8.0) + rspec-support (3.8.0) + sass (3.5.7) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sass-rails (5.0.7) + railties (>= 4.0.0, < 6) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + sdoc (0.4.2) + json (~> 1.7, >= 1.7.7) + rdoc (~> 4.0) + spring (2.0.2) + activesupport (>= 4.2) + sprockets (3.7.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.2.1) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + sqlite3 (1.3.13) + thor (0.20.0) + thread_safe (0.3.6) + tilt (2.0.8) + turbolinks (5.1.1) + turbolinks-source (~> 5.1) + turbolinks-source (5.1.0) + tzinfo (1.2.5) + thread_safe (~> 0.1) + uglifier (4.1.18) + execjs (>= 0.3.0, < 3) + web-console (2.3.0) + activemodel (>= 4.0) + binding_of_caller (>= 0.7.2) + railties (>= 4.0) + sprockets-rails (>= 2.0, < 4.0) + xpath (3.1.0) + nokogiri (~> 1.8) + +PLATFORMS + ruby + +DEPENDENCIES + bcrypt (~> 3.1.7) + byebug + capybara + coffee-rails (~> 4.1.0) + factory_bot_rails + jbuilder (~> 2.0) + jquery-rails + rails (= 4.2.7) + rspec-rails + sass-rails (~> 5.0) + sdoc (~> 0.4.0) + spring + sqlite3 + turbolinks + uglifier (>= 1.3.0) + web-console (~> 2.0) + +BUNDLED WITH + 1.16.3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/README.rdoc b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/README.rdoc new file mode 100644 index 0000000..dd4e97e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/README.rdoc @@ -0,0 +1,28 @@ +== README + +This README would normally document whatever steps are necessary to get the +application up and running. + +Things you may want to cover: + +* Ruby version + +* System dependencies + +* Configuration + +* Database creation + +* Database initialization + +* How to run the test suite + +* Services (job queues, cache servers, search engines, etc.) + +* Deployment instructions + +* ... + + +Please feel free to use a different markup language if you do not plan to run +rake doc:app. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/Rakefile new file mode 100644 index 0000000..ba6b733 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Rails.application.load_tasks diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/assets/images/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/assets/javascripts/application.js new file mode 100644 index 0000000..e07c5a8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/assets/javascripts/application.js @@ -0,0 +1,16 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require jquery +//= require jquery_ujs +//= require turbolinks +//= require_tree . diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/assets/javascripts/users.coffee b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/assets/javascripts/users.coffee new file mode 100644 index 0000000..24f83d1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/assets/javascripts/users.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/assets/stylesheets/application.css b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/assets/stylesheets/application.css new file mode 100644 index 0000000..f9cd5b3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/assets/stylesheets/application.css @@ -0,0 +1,15 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, + * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the bottom of the + * compiled file so the styles you add here take precedence over styles defined in any styles + * defined in the other CSS/SCSS files in this directory. It is generally better to create a new + * file per style scope. + * + *= require_tree . + *= require_self + */ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/assets/stylesheets/users.scss b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/assets/stylesheets/users.scss new file mode 100644 index 0000000..31a2eac --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/assets/stylesheets/users.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the Users controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/controllers/application_controller.rb new file mode 100644 index 0000000..d83690e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/controllers/application_controller.rb @@ -0,0 +1,5 @@ +class ApplicationController < ActionController::Base + # Prevent CSRF attacks by raising an exception. + # For APIs, you may want to use :null_session instead. + protect_from_forgery with: :exception +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/controllers/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/controllers/users_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/controllers/users_controller.rb new file mode 100644 index 0000000..a2de8b6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/controllers/users_controller.rb @@ -0,0 +1,6 @@ +class UsersController < ApplicationController + + def new + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/helpers/application_helper.rb new file mode 100644 index 0000000..de6be79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/helpers/users_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/helpers/users_helper.rb new file mode 100644 index 0000000..2310a24 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/helpers/users_helper.rb @@ -0,0 +1,2 @@ +module UsersHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/models/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/models/user.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/models/user.rb new file mode 100644 index 0000000..4a57cf0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/models/user.rb @@ -0,0 +1,2 @@ +class User < ActiveRecord::Base +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/views/layouts/application.html.erb new file mode 100644 index 0000000..5d51362 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/views/layouts/application.html.erb @@ -0,0 +1,14 @@ + + + + TestingFactoryApp + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + + +<%= yield %> + + + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/views/users/new.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/views/users/new.html.erb new file mode 100644 index 0000000..c21a1ad --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/app/views/users/new.html.erb @@ -0,0 +1,2 @@ +

Users#new

+

Find me in app/views/users/new.html.erb

diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/bin/bundle new file mode 100755 index 0000000..66e9889 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/bin/rails new file mode 100755 index 0000000..0138d79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/bin/rails @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +APP_PATH = File.expand_path('../../config/application', __FILE__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/bin/rake new file mode 100755 index 0000000..d87d5f5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/bin/rake @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/bin/setup new file mode 100755 index 0000000..acdb2c1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/bin/setup @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +Dir.chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file: + + puts "== Installing dependencies ==" + system "gem install bundler --conservative" + system "bundle check || bundle install" + + # puts "\n== Copying sample files ==" + # unless File.exist?("config/database.yml") + # system "cp config/database.yml.sample config/database.yml" + # end + + puts "\n== Preparing database ==" + system "bin/rake db:setup" + + puts "\n== Removing old logs and tempfiles ==" + system "rm -f log/*" + system "rm -rf tmp/cache" + + puts "\n== Restarting application server ==" + system "touch tmp/restart.txt" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/bin/spring new file mode 100755 index 0000000..fb2ec2e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/bin/spring @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +# This file loads spring without using Bundler, in order to be fast. +# It gets overwritten when you run the `spring binstub` command. + +unless defined?(Spring) + require 'rubygems' + require 'bundler' + + lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read) + spring = lockfile.specs.detect { |spec| spec.name == "spring" } + if spring + Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path + gem 'spring', spring.version + require 'spring/binstub' + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config.ru new file mode 100644 index 0000000..bd83b25 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Rails.application diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/application.rb new file mode 100644 index 0000000..e999553 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/application.rb @@ -0,0 +1,35 @@ +require File.expand_path('../boot', __FILE__) + +require "rails" +# Pick the frameworks you want: +require "active_model/railtie" +require "active_job/railtie" +require "active_record/railtie" +require "action_controller/railtie" +require "action_mailer/railtie" +require "action_view/railtie" +require "sprockets/railtie" +# require "rails/test_unit/railtie" + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module TestingFactoryApp + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Do not swallow errors in after_commit/after_rollback callbacks. + config.active_record.raise_in_transactional_callbacks = true + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/boot.rb new file mode 100644 index 0000000..6b750f0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/boot.rb @@ -0,0 +1,3 @@ +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) + +require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/database.yml new file mode 100644 index 0000000..1c1a37c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/database.yml @@ -0,0 +1,25 @@ +# SQLite version 3.x +# gem install sqlite3 +# +# Ensure the SQLite 3 gem is defined in your Gemfile +# gem 'sqlite3' +# +default: &default + adapter: sqlite3 + pool: 5 + timeout: 5000 + +development: + <<: *default + database: db/development.sqlite3 + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: db/test.sqlite3 + +production: + <<: *default + database: db/production.sqlite3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/environment.rb new file mode 100644 index 0000000..ee8d90d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require File.expand_path('../application', __FILE__) + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/environments/development.rb new file mode 100644 index 0000000..b55e214 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/environments/development.rb @@ -0,0 +1,41 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # Adds additional error checking when serving assets at runtime. + # Checks for improperly declared sprockets dependencies. + # Raises helpful error messages. + config.assets.raise_runtime_errors = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/environments/production.rb new file mode 100644 index 0000000..5c1b32e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/environments/production.rb @@ -0,0 +1,79 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like + # NGINX, varnish or squid. + # config.action_dispatch.rack_cache = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # 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-Accel-Redirect' # for NGINX + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug + + # Prepend all log lines with the following tags. + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/environments/test.rb new file mode 100644 index 0000000..1c19f08 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/environments/test.rb @@ -0,0 +1,42 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure static file server for tests with Cache-Control for performance. + config.serve_static_files = true + config.static_cache_control = 'public, max-age=3600' + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Randomize the order test cases are executed. + config.active_support.test_order = :random + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/initializers/assets.rb new file mode 100644 index 0000000..01ef3e6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/initializers/assets.rb @@ -0,0 +1,11 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path +# Rails.application.config.assets.paths << Emoji.images_path + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. +# Rails.application.config.assets.precompile += %w( search.js ) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..59385cd --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/initializers/cookies_serializer.rb new file mode 100644 index 0000000..7f70458 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/initializers/cookies_serializer.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000..4a994e1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/initializers/inflections.rb new file mode 100644 index 0000000..ac033bf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/initializers/mime_types.rb new file mode 100644 index 0000000..dc18996 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/initializers/mime_types.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/initializers/session_store.rb new file mode 100644 index 0000000..235f41f --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/initializers/session_store.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.session_store :cookie_store, key: '_TestingFactoryApp_session' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..33725e9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] if respond_to?(:wrap_parameters) +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/locales/en.yml new file mode 100644 index 0000000..0653957 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/locales/en.yml @@ -0,0 +1,23 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/routes.rb new file mode 100644 index 0000000..c73057e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/routes.rb @@ -0,0 +1,60 @@ +Rails.application.routes.draw do + + # get 'users/new' + resources :users + + # The priority is based upon order of creation: first created -> highest priority. + # See how all your routes lay out with "rake routes". + + # You can have the root of your site routed with "root" + # root 'welcome#index' + + # Example of regular route: + # get 'products/:id' => 'catalog#view' + + # Example of named route that can be invoked with purchase_url(id: product.id) + # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase + + # Example resource route (maps HTTP verbs to controller actions automatically): + # resources :products + + # Example resource route with options: + # resources :products do + # member do + # get 'short' + # post 'toggle' + # end + # + # collection do + # get 'sold' + # end + # end + + # Example resource route with sub-resources: + # resources :products do + # resources :comments, :sales + # resource :seller + # end + + # Example resource route with more complex sub-resources: + # resources :products do + # resources :comments + # resources :sales do + # get 'recent', on: :collection + # end + # end + + # Example resource route with concerns: + # concern :toggleable do + # post 'toggle' + # end + # resources :posts, concerns: :toggleable + # resources :photos, concerns: :toggleable + + # Example resource route within a namespace: + # namespace :admin do + # # Directs /admin/products/* to Admin::ProductsController + # # (app/controllers/admin/products_controller.rb) + # resources :products + # end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/secrets.yml new file mode 100644 index 0000000..fe7398d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/config/secrets.yml @@ -0,0 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rake secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: a4443993792bd3a9bb69b3fc88dddc862d779f6fd58fa5030cff729e127cee4f46ea0f491b049f3d0c1e5343fdbcad22cb70beab21685c79240e90e568ea72ce + +test: + secret_key_base: 8dd0c664e8f269196820d1151b9fcf1311e93421df4fc1a7414054a5160f1c99c0608fec148d20dbbbe7fc6d54f2aaf519e943aedddb58ebffaf23951d9815c4 + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/db/migrate/20180813183509_create_users.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/db/migrate/20180813183509_create_users.rb new file mode 100644 index 0000000..cc285fe --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/db/migrate/20180813183509_create_users.rb @@ -0,0 +1,11 @@ +class CreateUsers < ActiveRecord::Migration + def change + create_table :users do |t| + t.string :first_name + t.string :last_name + t.string :email + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/db/schema.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/db/schema.rb new file mode 100644 index 0000000..0ed6414 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/db/schema.rb @@ -0,0 +1,24 @@ +# encoding: UTF-8 +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 20180813183509) do + + create_table "users", force: :cascade do |t| + t.string "first_name" + t.string "last_name" + t.string "email" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/db/seeds.rb new file mode 100644 index 0000000..4edb1e8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). +# +# Examples: +# +# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) +# Mayor.create(name: 'Emanuel', city: cities.first) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/lib/assets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/lib/tasks/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/log/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/public/404.html new file mode 100644 index 0000000..b612547 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +
+
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/public/422.html new file mode 100644 index 0000000..a21f82b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
+
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/public/500.html new file mode 100644 index 0000000..061abc5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/public/500.html @@ -0,0 +1,66 @@ + + + + We're sorry, but something went wrong (500) + + + + + + +
+
+

We're sorry, but something went wrong.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/public/robots.txt new file mode 100644 index 0000000..3c9c7c0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-agent: * +# Disallow: / diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/spec/controllers/users_controller_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/spec/controllers/users_controller_spec.rb new file mode 100644 index 0000000..0a86999 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/spec/controllers/users_controller_spec.rb @@ -0,0 +1,12 @@ +require 'rails_helper' + +RSpec.describe UsersController, type: :controller do + + describe "GET #new" do + it "returns http success" do + get :new + expect(response).to have_http_status(:success) + end + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/spec/factories/users.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/spec/factories/users.rb new file mode 100644 index 0000000..97e6ecf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/spec/factories/users.rb @@ -0,0 +1,7 @@ +FactoryBot.define do + factory :user do + first_name "Miguel" + last_name "Obiang" + email "mobiang@codingdojo.com" + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/spec/features/register_user_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/spec/features/register_user_spec.rb new file mode 100644 index 0000000..f4f1522 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/spec/features/register_user_spec.rb @@ -0,0 +1,11 @@ +require 'rails_helper' +feature "guest user creates an account" do + scenario "successfully creates a new user account" do + visit new_user_path + fill_in "user_first_name", with: "shane" + fill_in "user_last_name", with: "chang" + fill_in "user_email", with: "schang@codingdojo.com" + click_button "Create User" + expect(page).to have_content "User successfully created" + end +end \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/spec/helpers/users_helper_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/spec/helpers/users_helper_spec.rb new file mode 100644 index 0000000..b2e3444 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/spec/helpers/users_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the UsersHelper. For example: +# +# describe UsersHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe UsersHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/spec/models/user_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/spec/models/user_spec.rb new file mode 100644 index 0000000..ef5f364 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/spec/models/user_spec.rb @@ -0,0 +1,47 @@ +require 'rails_helper' + +RSpec.describe User, type: :model do + + # ======================= + # Control [ VALID TEST ] + # ======================= + context "With valid attributes" do + it "should save" do + expect(build(:user)).to be_valid + end + end + + + # ================ + # [ INVALID TEST ] + # ================ + context "With invalid attributes" do + + # TEST #1 => Empty field + it "should not save if first_name field is blank" do + expect(build(:user, first_name: "")).to be_invalid + end + + # TEST #2 => Empty field + it "should not save if last_name field is blank" do + expect(build(:user, last_name: "")).to be_invalid + end + + # TEST #3 => Empty field + it "should not save if email field is blank" do + expect(build(:user, email: "")).to be_invalid + end + + # TEST #4 => Uniqueness field + it "should not save if email already exists" do + create(:user) + expect(build(:user)).to be_invalid + end + + # TEST #5 => correct format + it "should not save if innvalid email format" do + expect(build(:user, email: "invalidEmail")).to be_invalid + end + + end +end \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/spec/rails_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/spec/rails_helper.rb new file mode 100644 index 0000000..d1561b0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/spec/rails_helper.rb @@ -0,0 +1,67 @@ +# This file is copied to spec/ when you run 'rails generate rspec:install' +require 'spec_helper' +ENV['RAILS_ENV'] ||= 'test' +require File.expand_path('../../config/environment', __FILE__) +# Prevent database truncation if the environment is production +abort("The Rails environment is running in production mode!") if Rails.env.production? +require 'rspec/rails' +# Add additional requires below this line. Rails is not loaded until this point! + +# Requires supporting ruby files with custom matchers and macros, etc, in +# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are +# run as spec files by default. This means that files in spec/support that end +# in _spec.rb will both be required and run as specs, causing the specs to be +# run twice. It is recommended that you do not name files matching this glob to +# end with _spec.rb. You can configure this pattern with the --pattern +# option on the command line or in ~/.rspec, .rspec or `.rspec-local`. +# +# The following line is provided for convenience purposes. It has the downside +# of increasing the boot-up time by auto-requiring all files in the support +# directory. Alternatively, in the individual `*_spec.rb` files, manually +# require only the support files necessary. +# +# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f } + +# Checks for pending migrations and applies them before tests are run. +# If you are not using ActiveRecord, you can remove these lines. +begin + ActiveRecord::Migration.maintain_test_schema! +rescue ActiveRecord::PendingMigrationError => e + puts e.to_s.strip + exit 1 +end + +require 'factory_bot_rails' +RSpec.configure do |config| + + # => Added Configuration + config.include FactoryBot::Syntax::Methods + + # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures + config.fixture_path = "#{::Rails.root}/spec/fixtures" + + # If you're not using ActiveRecord, or you'd prefer not to run each of your + # examples within a transaction, remove the following line or assign false + # instead of true. + config.use_transactional_fixtures = true + + # RSpec Rails can automatically mix in different behaviours to your tests + # based on their file location, for example enabling you to call `get` and + # `post` in specs under `spec/controllers`. + # + # You can disable this behaviour by removing the line below, and instead + # explicitly tag your specs with their type, e.g.: + # + # RSpec.describe UsersController, :type => :controller do + # # ... + # end + # + # The different available types are documented in the features, such as in + # https://relishapp.com/rspec/rspec-rails/docs + config.infer_spec_type_from_file_location! + + # Filter lines from Rails gems in backtraces. + config.filter_rails_from_backtrace! + # arbitrary gems may also be filtered via: + # config.filter_gems_from_backtrace("gem name") +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/spec/spec_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/spec/spec_helper.rb new file mode 100644 index 0000000..ce33d66 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/spec/spec_helper.rb @@ -0,0 +1,96 @@ +# This file was generated by the `rails generate rspec:install` command. Conventionally, all +# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. +# The generated `.rspec` file contains `--require spec_helper` which will cause +# this file to always be loaded, without a need to explicitly require it in any +# files. +# +# Given that it is always loaded, you are encouraged to keep this file as +# light-weight as possible. Requiring heavyweight dependencies from this file +# will add to the boot time of your test suite on EVERY test run, even for an +# individual file that may not need all of that loaded. Instead, consider making +# a separate helper file that requires the additional dependencies and performs +# the additional setup, and require it from the spec files that actually need +# it. +# +# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration +RSpec.configure do |config| + # rspec-expectations config goes here. You can use an alternate + # assertion/expectation library such as wrong or the stdlib/minitest + # assertions if you prefer. + config.expect_with :rspec do |expectations| + # This option will default to `true` in RSpec 4. It makes the `description` + # and `failure_message` of custom matchers include text for helper methods + # defined using `chain`, e.g.: + # be_bigger_than(2).and_smaller_than(4).description + # # => "be bigger than 2 and smaller than 4" + # ...rather than: + # # => "be bigger than 2" + expectations.include_chain_clauses_in_custom_matcher_descriptions = true + end + + # rspec-mocks config goes here. You can use an alternate test double + # library (such as bogus or mocha) by changing the `mock_with` option here. + config.mock_with :rspec do |mocks| + # Prevents you from mocking or stubbing a method that does not exist on + # a real object. This is generally recommended, and will default to + # `true` in RSpec 4. + mocks.verify_partial_doubles = true + end + + # This option will default to `:apply_to_host_groups` in RSpec 4 (and will + # have no way to turn it off -- the option exists only for backwards + # compatibility in RSpec 3). It causes shared context metadata to be + # inherited by the metadata hash of host groups and examples, rather than + # triggering implicit auto-inclusion in groups with matching metadata. + config.shared_context_metadata_behavior = :apply_to_host_groups + +# The settings below are suggested to provide a good initial experience +# with RSpec, but feel free to customize to your heart's content. +=begin + # This allows you to limit a spec run to individual examples or groups + # you care about by tagging them with `:focus` metadata. When nothing + # is tagged with `:focus`, all examples get run. RSpec also provides + # aliases for `it`, `describe`, and `context` that include `:focus` + # metadata: `fit`, `fdescribe` and `fcontext`, respectively. + config.filter_run_when_matching :focus + + # Allows RSpec to persist some state between runs in order to support + # the `--only-failures` and `--next-failure` CLI options. We recommend + # you configure your source control system to ignore this file. + config.example_status_persistence_file_path = "spec/examples.txt" + + # Limits the available syntax to the non-monkey patched syntax that is + # recommended. For more details, see: + # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/ + # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/ + # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode + config.disable_monkey_patching! + + # Many RSpec users commonly either run the entire suite or an individual + # file, and it's useful to allow more verbose output when running an + # individual spec file. + if config.files_to_run.one? + # Use the documentation formatter for detailed output, + # unless a formatter has already been configured + # (e.g. via a command-line flag). + config.default_formatter = "doc" + end + + # Print the 10 slowest examples and example groups at the + # end of the spec run, to help surface which specs are running + # particularly slow. + config.profile_examples = 10 + + # Run specs in random order to surface order dependencies. If you find an + # order dependency and want to debug it, you can fix the order by providing + # the seed, which is printed after each run. + # --seed 1234 + config.order = :random + + # Seed global randomization in this process using the `--seed` CLI option. + # Setting this allows you to use `--seed` to deterministically reproduce + # test failures related to randomization by passing the same `--seed` value + # as the one that triggered the failure. + Kernel.srand config.seed +=end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/spec/views/users/new.html.erb_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/spec/views/users/new.html.erb_spec.rb new file mode 100644 index 0000000..47b47d3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/spec/views/users/new.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "users/new.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/vendor/assets/javascripts/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/TestingFactoryApp/vendor/assets/stylesheets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/.gitignore new file mode 100644 index 0000000..050c9d9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/.gitignore @@ -0,0 +1,17 @@ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore the default SQLite database. +/db/*.sqlite3 +/db/*.sqlite3-journal + +# Ignore all logfiles and tempfiles. +/log/* +!/log/.keep +/tmp diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/Gemfile new file mode 100644 index 0000000..e87fad5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/Gemfile @@ -0,0 +1,47 @@ +source 'https://rubygems.org' + + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '4.2.7' +# Use sqlite3 as the database for Active Record +gem 'sqlite3' +# Use SCSS for stylesheets +gem 'sass-rails', '~> 5.0' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# Use CoffeeScript for .coffee assets and views +gem 'coffee-rails', '~> 4.1.0' +# See https://github.com/rails/execjs#readme for more supported runtimes +# gem 'therubyracer', platforms: :ruby + +# Use jquery as the JavaScript library +gem 'jquery-rails' +# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks +gem 'turbolinks' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.0' +# bundle exec rake doc:rails generates the API under doc/api. +gem 'sdoc', '~> 0.4.0', group: :doc + +# Use ActiveModel has_secure_password +# gem 'bcrypt', '~> 3.1.7' + +# Use Unicorn as the app server +# gem 'unicorn' + +# Use Capistrano for deployment +# gem 'capistrano-rails', group: :development + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug' +end + +group :development do + # Access an IRB console on exception pages or by using <%= console %> in views + gem 'web-console', '~> 2.0' + + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' +end + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/Gemfile.lock new file mode 100644 index 0000000..0a99b3c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/Gemfile.lock @@ -0,0 +1,170 @@ +GEM + remote: https://rubygems.org/ + specs: + actionmailer (4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.7) + actionview (= 4.2.7) + activesupport (= 4.2.7) + rack (~> 1.6) + rack-test (~> 0.6.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + activejob (4.2.7) + activesupport (= 4.2.7) + globalid (>= 0.3.0) + activemodel (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + activerecord (4.2.7) + activemodel (= 4.2.7) + activesupport (= 4.2.7) + arel (~> 6.0) + activesupport (4.2.7) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + arel (6.0.4) + binding_of_caller (0.8.0) + debug_inspector (>= 0.0.1) + builder (3.2.3) + byebug (10.0.2) + coffee-rails (4.1.1) + coffee-script (>= 2.2.0) + railties (>= 4.0.0, < 5.1.x) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + concurrent-ruby (1.0.5) + crass (1.0.4) + debug_inspector (0.0.3) + erubis (2.7.0) + execjs (2.7.0) + ffi (1.9.25) + globalid (0.4.1) + activesupport (>= 4.2.0) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jbuilder (2.7.0) + activesupport (>= 4.2.0) + multi_json (>= 1.2) + jquery-rails (4.3.3) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + json (1.8.6) + loofah (2.2.2) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.0) + mini_mime (>= 0.1.1) + mini_mime (1.0.1) + mini_portile2 (2.3.0) + minitest (5.11.3) + multi_json (1.13.1) + nokogiri (1.8.4) + mini_portile2 (~> 2.3.0) + rack (1.6.10) + rack-test (0.6.3) + rack (>= 1.0) + rails (4.2.7) + actionmailer (= 4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + activemodel (= 4.2.7) + activerecord (= 4.2.7) + activesupport (= 4.2.7) + bundler (>= 1.3.0, < 2.0) + railties (= 4.2.7) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.9) + activesupport (>= 4.2.0, < 5.0) + nokogiri (~> 1.6) + rails-deprecated_sanitizer (>= 1.0.1) + rails-html-sanitizer (1.0.4) + loofah (~> 2.2, >= 2.2.2) + railties (4.2.7) + actionpack (= 4.2.7) + activesupport (= 4.2.7) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (12.3.1) + rb-fsevent (0.10.3) + rb-inotify (0.9.10) + ffi (>= 0.5.0, < 2) + rdoc (4.3.0) + sass (3.5.7) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sass-rails (5.0.7) + railties (>= 4.0.0, < 6) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + sdoc (0.4.2) + json (~> 1.7, >= 1.7.7) + rdoc (~> 4.0) + spring (2.0.2) + activesupport (>= 4.2) + sprockets (3.7.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.2.1) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + sqlite3 (1.3.13) + thor (0.20.0) + thread_safe (0.3.6) + tilt (2.0.8) + turbolinks (5.1.1) + turbolinks-source (~> 5.1) + turbolinks-source (5.1.0) + tzinfo (1.2.5) + thread_safe (~> 0.1) + uglifier (4.1.18) + execjs (>= 0.3.0, < 3) + web-console (2.3.0) + activemodel (>= 4.0) + binding_of_caller (>= 0.7.2) + railties (>= 4.0) + sprockets-rails (>= 2.0, < 4.0) + +PLATFORMS + ruby + +DEPENDENCIES + byebug + coffee-rails (~> 4.1.0) + jbuilder (~> 2.0) + jquery-rails + rails (= 4.2.7) + sass-rails (~> 5.0) + sdoc (~> 0.4.0) + spring + sqlite3 + turbolinks + uglifier (>= 1.3.0) + web-console (~> 2.0) + +BUNDLED WITH + 1.16.3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/README.rdoc b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/README.rdoc new file mode 100644 index 0000000..dd4e97e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/README.rdoc @@ -0,0 +1,28 @@ +== README + +This README would normally document whatever steps are necessary to get the +application up and running. + +Things you may want to cover: + +* Ruby version + +* System dependencies + +* Configuration + +* Database creation + +* Database initialization + +* How to run the test suite + +* Services (job queues, cache servers, search engines, etc.) + +* Deployment instructions + +* ... + + +Please feel free to use a different markup language if you do not plan to run +rake doc:app. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/Rakefile new file mode 100644 index 0000000..ba6b733 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Rails.application.load_tasks diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/app/assets/images/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/app/assets/javascripts/application.js new file mode 100644 index 0000000..e07c5a8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/app/assets/javascripts/application.js @@ -0,0 +1,16 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require jquery +//= require jquery_ujs +//= require turbolinks +//= require_tree . diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/app/assets/stylesheets/application.css b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/app/assets/stylesheets/application.css new file mode 100644 index 0000000..f9cd5b3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/app/assets/stylesheets/application.css @@ -0,0 +1,15 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, + * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the bottom of the + * compiled file so the styles you add here take precedence over styles defined in any styles + * defined in the other CSS/SCSS files in this directory. It is generally better to create a new + * file per style scope. + * + *= require_tree . + *= require_self + */ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/app/controllers/application_controller.rb new file mode 100644 index 0000000..d83690e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/app/controllers/application_controller.rb @@ -0,0 +1,5 @@ +class ApplicationController < ActionController::Base + # Prevent CSRF attacks by raising an exception. + # For APIs, you may want to use :null_session instead. + protect_from_forgery with: :exception +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/app/controllers/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/app/helpers/application_helper.rb new file mode 100644 index 0000000..de6be79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/app/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/app/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/app/models/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/app/views/layouts/application.html.erb new file mode 100644 index 0000000..d0ba841 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/app/views/layouts/application.html.erb @@ -0,0 +1,14 @@ + + + + Blog + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + + +<%= yield %> + + + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/bin/bundle new file mode 100755 index 0000000..66e9889 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/bin/rails new file mode 100755 index 0000000..0138d79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/bin/rails @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +APP_PATH = File.expand_path('../../config/application', __FILE__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/bin/rake new file mode 100755 index 0000000..d87d5f5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/bin/rake @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/bin/setup new file mode 100755 index 0000000..acdb2c1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/bin/setup @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +Dir.chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file: + + puts "== Installing dependencies ==" + system "gem install bundler --conservative" + system "bundle check || bundle install" + + # puts "\n== Copying sample files ==" + # unless File.exist?("config/database.yml") + # system "cp config/database.yml.sample config/database.yml" + # end + + puts "\n== Preparing database ==" + system "bin/rake db:setup" + + puts "\n== Removing old logs and tempfiles ==" + system "rm -f log/*" + system "rm -rf tmp/cache" + + puts "\n== Restarting application server ==" + system "touch tmp/restart.txt" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/bin/spring new file mode 100755 index 0000000..fb2ec2e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/bin/spring @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +# This file loads spring without using Bundler, in order to be fast. +# It gets overwritten when you run the `spring binstub` command. + +unless defined?(Spring) + require 'rubygems' + require 'bundler' + + lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read) + spring = lockfile.specs.detect { |spec| spec.name == "spring" } + if spring + Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path + gem 'spring', spring.version + require 'spring/binstub' + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config.ru new file mode 100644 index 0000000..bd83b25 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Rails.application diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/application.rb new file mode 100644 index 0000000..ecd54d7 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/application.rb @@ -0,0 +1,26 @@ +require File.expand_path('../boot', __FILE__) + +require 'rails/all' + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module Blog + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Do not swallow errors in after_commit/after_rollback callbacks. + config.active_record.raise_in_transactional_callbacks = true + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/boot.rb new file mode 100644 index 0000000..6b750f0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/boot.rb @@ -0,0 +1,3 @@ +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) + +require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/database.yml new file mode 100644 index 0000000..1c1a37c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/database.yml @@ -0,0 +1,25 @@ +# SQLite version 3.x +# gem install sqlite3 +# +# Ensure the SQLite 3 gem is defined in your Gemfile +# gem 'sqlite3' +# +default: &default + adapter: sqlite3 + pool: 5 + timeout: 5000 + +development: + <<: *default + database: db/development.sqlite3 + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: db/test.sqlite3 + +production: + <<: *default + database: db/production.sqlite3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/environment.rb new file mode 100644 index 0000000..ee8d90d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require File.expand_path('../application', __FILE__) + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/environments/development.rb new file mode 100644 index 0000000..b55e214 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/environments/development.rb @@ -0,0 +1,41 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # Adds additional error checking when serving assets at runtime. + # Checks for improperly declared sprockets dependencies. + # Raises helpful error messages. + config.assets.raise_runtime_errors = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/environments/production.rb new file mode 100644 index 0000000..5c1b32e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/environments/production.rb @@ -0,0 +1,79 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like + # NGINX, varnish or squid. + # config.action_dispatch.rack_cache = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # 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-Accel-Redirect' # for NGINX + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug + + # Prepend all log lines with the following tags. + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/environments/test.rb new file mode 100644 index 0000000..1c19f08 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/environments/test.rb @@ -0,0 +1,42 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure static file server for tests with Cache-Control for performance. + config.serve_static_files = true + config.static_cache_control = 'public, max-age=3600' + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Randomize the order test cases are executed. + config.active_support.test_order = :random + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/initializers/assets.rb new file mode 100644 index 0000000..01ef3e6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/initializers/assets.rb @@ -0,0 +1,11 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path +# Rails.application.config.assets.paths << Emoji.images_path + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. +# Rails.application.config.assets.precompile += %w( search.js ) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..59385cd --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/initializers/cookies_serializer.rb new file mode 100644 index 0000000..7f70458 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/initializers/cookies_serializer.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000..4a994e1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/initializers/inflections.rb new file mode 100644 index 0000000..ac033bf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/initializers/mime_types.rb new file mode 100644 index 0000000..dc18996 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/initializers/mime_types.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/initializers/session_store.rb new file mode 100644 index 0000000..1b9fa32 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/initializers/session_store.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.session_store :cookie_store, key: '_blog_session' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..33725e9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] if respond_to?(:wrap_parameters) +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/locales/en.yml new file mode 100644 index 0000000..0653957 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/locales/en.yml @@ -0,0 +1,23 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/routes.rb new file mode 100644 index 0000000..3f66539 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/routes.rb @@ -0,0 +1,56 @@ +Rails.application.routes.draw do + # The priority is based upon order of creation: first created -> highest priority. + # See how all your routes lay out with "rake routes". + + # You can have the root of your site routed with "root" + # root 'welcome#index' + + # Example of regular route: + # get 'products/:id' => 'catalog#view' + + # Example of named route that can be invoked with purchase_url(id: product.id) + # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase + + # Example resource route (maps HTTP verbs to controller actions automatically): + # resources :products + + # Example resource route with options: + # resources :products do + # member do + # get 'short' + # post 'toggle' + # end + # + # collection do + # get 'sold' + # end + # end + + # Example resource route with sub-resources: + # resources :products do + # resources :comments, :sales + # resource :seller + # end + + # Example resource route with more complex sub-resources: + # resources :products do + # resources :comments + # resources :sales do + # get 'recent', on: :collection + # end + # end + + # Example resource route with concerns: + # concern :toggleable do + # post 'toggle' + # end + # resources :posts, concerns: :toggleable + # resources :photos, concerns: :toggleable + + # Example resource route within a namespace: + # namespace :admin do + # # Directs /admin/products/* to Admin::ProductsController + # # (app/controllers/admin/products_controller.rb) + # resources :products + # end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/secrets.yml new file mode 100644 index 0000000..4c17c28 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/config/secrets.yml @@ -0,0 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rake secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: f0f382de631f4baeba810e68e0a9d50a0d09193026648c56e26b3dab3b730562b83662ccf1f6884ce4d091ec6753e5d3eb34b4d197866e71d55aefa51df0c043 + +test: + secret_key_base: ff06889d57112f8120ea0bc8d8b1c7232d5aea08c56eb83e6ba1d93fed4f0531013bbb45cd6198ad0f98e802e5f2fdddcabe82f67af7b0b3eae91674975ec5e0 + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/db/seeds.rb new file mode 100644 index 0000000..4edb1e8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). +# +# Examples: +# +# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) +# Mayor.create(name: 'Emanuel', city: cities.first) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/lib/assets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/lib/tasks/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/log/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/public/404.html new file mode 100644 index 0000000..b612547 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +
+
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/public/422.html new file mode 100644 index 0000000..a21f82b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
+
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/public/500.html new file mode 100644 index 0000000..061abc5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/public/500.html @@ -0,0 +1,66 @@ + + + + We're sorry, but something went wrong (500) + + + + + + +
+
+

We're sorry, but something went wrong.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/public/robots.txt new file mode 100644 index 0000000..3c9c7c0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-agent: * +# Disallow: / diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/test/controllers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/test/controllers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/test/fixtures/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/test/fixtures/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/test/helpers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/test/helpers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/test/integration/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/test/integration/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/test/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/test/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/test/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/test/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/test/test_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/test/test_helper.rb new file mode 100644 index 0000000..92e39b2 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/test/test_helper.rb @@ -0,0 +1,10 @@ +ENV['RAILS_ENV'] ||= 'test' +require File.expand_path('../../config/environment', __FILE__) +require 'rails/test_help' + +class ActiveSupport::TestCase + # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. + fixtures :all + + # Add more helper methods to be used by all tests here... +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/vendor/assets/javascripts/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/blog/vendor/assets/stylesheets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/.gitignore new file mode 100644 index 0000000..050c9d9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/.gitignore @@ -0,0 +1,17 @@ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore the default SQLite database. +/db/*.sqlite3 +/db/*.sqlite3-journal + +# Ignore all logfiles and tempfiles. +/log/* +!/log/.keep +/tmp diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/Gemfile new file mode 100644 index 0000000..7457464 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/Gemfile @@ -0,0 +1,55 @@ +source 'https://rubygems.org' + + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '4.2.7' +# Use sqlite3 as the database for Active Record +gem 'sqlite3' +# Use SCSS for stylesheets +gem 'sass-rails', '~> 5.0' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# Use CoffeeScript for .coffee assets and views +gem 'coffee-rails', '~> 4.1.0' +# See https://github.com/rails/execjs#readme for more supported runtimes +# gem 'therubyracer', platforms: :ruby + +# Use jquery as the JavaScript library +gem 'jquery-rails' +# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks +gem 'turbolinks' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.0' +# bundle exec rake doc:rails generates the API under doc/api. +gem 'sdoc', '~> 0.4.0', group: :doc + +# Use ActiveModel has_secure_password +gem 'bcrypt', '~> 3.1.7' + +# Use Unicorn as the app server +# gem 'unicorn' + +# Use Capistrano for deployment +# gem 'capistrano-rails', group: :development + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug' +end + +group :development do + # Access an IRB console on exception pages or by using <%= console %> in views + gem 'web-console', '~> 2.0' + + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' +end + + +# ADDITIONAL PAACKAGES +# ==================== +group :development, :test do + gem 'rspec-rails' +end + +gem 'hirb' \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/Gemfile.lock new file mode 100644 index 0000000..28361d6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/Gemfile.lock @@ -0,0 +1,193 @@ +GEM + remote: https://rubygems.org/ + specs: + actionmailer (4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.7) + actionview (= 4.2.7) + activesupport (= 4.2.7) + rack (~> 1.6) + rack-test (~> 0.6.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + activejob (4.2.7) + activesupport (= 4.2.7) + globalid (>= 0.3.0) + activemodel (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + activerecord (4.2.7) + activemodel (= 4.2.7) + activesupport (= 4.2.7) + arel (~> 6.0) + activesupport (4.2.7) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + arel (6.0.4) + bcrypt (3.1.12) + binding_of_caller (0.8.0) + debug_inspector (>= 0.0.1) + builder (3.2.3) + byebug (10.0.2) + coffee-rails (4.1.1) + coffee-script (>= 2.2.0) + railties (>= 4.0.0, < 5.1.x) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + concurrent-ruby (1.0.5) + crass (1.0.4) + debug_inspector (0.0.3) + diff-lcs (1.3) + erubis (2.7.0) + execjs (2.7.0) + ffi (1.9.25) + globalid (0.4.1) + activesupport (>= 4.2.0) + hirb (0.7.3) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jbuilder (2.7.0) + activesupport (>= 4.2.0) + multi_json (>= 1.2) + jquery-rails (4.3.3) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + json (1.8.6) + loofah (2.2.2) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.0) + mini_mime (>= 0.1.1) + mini_mime (1.0.0) + mini_portile2 (2.3.0) + minitest (5.11.3) + multi_json (1.13.1) + nokogiri (1.8.4) + mini_portile2 (~> 2.3.0) + rack (1.6.10) + rack-test (0.6.3) + rack (>= 1.0) + rails (4.2.7) + actionmailer (= 4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + activemodel (= 4.2.7) + activerecord (= 4.2.7) + activesupport (= 4.2.7) + bundler (>= 1.3.0, < 2.0) + railties (= 4.2.7) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.9) + activesupport (>= 4.2.0, < 5.0) + nokogiri (~> 1.6) + rails-deprecated_sanitizer (>= 1.0.1) + rails-html-sanitizer (1.0.4) + loofah (~> 2.2, >= 2.2.2) + railties (4.2.7) + actionpack (= 4.2.7) + activesupport (= 4.2.7) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (12.3.1) + rb-fsevent (0.10.3) + rb-inotify (0.9.10) + ffi (>= 0.5.0, < 2) + rdoc (4.3.0) + rspec-core (3.8.0) + rspec-support (~> 3.8.0) + rspec-expectations (3.8.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.8.0) + rspec-mocks (3.8.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.8.0) + rspec-rails (3.8.0) + actionpack (>= 3.0) + activesupport (>= 3.0) + railties (>= 3.0) + rspec-core (~> 3.8.0) + rspec-expectations (~> 3.8.0) + rspec-mocks (~> 3.8.0) + rspec-support (~> 3.8.0) + rspec-support (3.8.0) + sass (3.5.7) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sass-rails (5.0.7) + railties (>= 4.0.0, < 6) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + sdoc (0.4.2) + json (~> 1.7, >= 1.7.7) + rdoc (~> 4.0) + spring (2.0.2) + activesupport (>= 4.2) + sprockets (3.7.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.2.1) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + sqlite3 (1.3.13) + thor (0.20.0) + thread_safe (0.3.6) + tilt (2.0.8) + turbolinks (5.1.1) + turbolinks-source (~> 5.1) + turbolinks-source (5.1.0) + tzinfo (1.2.5) + thread_safe (~> 0.1) + uglifier (4.1.18) + execjs (>= 0.3.0, < 3) + web-console (2.3.0) + activemodel (>= 4.0) + binding_of_caller (>= 0.7.2) + railties (>= 4.0) + sprockets-rails (>= 2.0, < 4.0) + +PLATFORMS + ruby + +DEPENDENCIES + bcrypt (~> 3.1.7) + byebug + coffee-rails (~> 4.1.0) + hirb + jbuilder (~> 2.0) + jquery-rails + rails (= 4.2.7) + rspec-rails + sass-rails (~> 5.0) + sdoc (~> 0.4.0) + spring + sqlite3 + turbolinks + uglifier (>= 1.3.0) + web-console (~> 2.0) + +BUNDLED WITH + 1.16.3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/README.rdoc b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/README.rdoc new file mode 100644 index 0000000..dd4e97e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/README.rdoc @@ -0,0 +1,28 @@ +== README + +This README would normally document whatever steps are necessary to get the +application up and running. + +Things you may want to cover: + +* Ruby version + +* System dependencies + +* Configuration + +* Database creation + +* Database initialization + +* How to run the test suite + +* Services (job queues, cache servers, search engines, etc.) + +* Deployment instructions + +* ... + + +Please feel free to use a different markup language if you do not plan to run +rake doc:app. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/Rakefile new file mode 100644 index 0000000..ba6b733 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Rails.application.load_tasks diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/assets/images/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/assets/javascripts/application.js new file mode 100644 index 0000000..e07c5a8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/assets/javascripts/application.js @@ -0,0 +1,16 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require jquery +//= require jquery_ujs +//= require turbolinks +//= require_tree . diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/assets/stylesheets/application.css b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/assets/stylesheets/application.css new file mode 100644 index 0000000..f9cd5b3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/assets/stylesheets/application.css @@ -0,0 +1,15 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, + * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the bottom of the + * compiled file so the styles you add here take precedence over styles defined in any styles + * defined in the other CSS/SCSS files in this directory. It is generally better to create a new + * file per style scope. + * + *= require_tree . + *= require_self + */ diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/controllers/application_controller.rb new file mode 100644 index 0000000..d83690e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/controllers/application_controller.rb @@ -0,0 +1,5 @@ +class ApplicationController < ActionController::Base + # Prevent CSRF attacks by raising an exception. + # For APIs, you may want to use :null_session instead. + protect_from_forgery with: :exception +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/controllers/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/helpers/application_helper.rb new file mode 100644 index 0000000..de6be79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/models/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/models/user.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/models/user.rb new file mode 100644 index 0000000..dde5d9f --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/models/user.rb @@ -0,0 +1,5 @@ +class User < ActiveRecord::Base + EMAIL_REGEX = /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]+)\z/i + validates :first_name, :last_name, :email, presence: true + validates :email, presence: true, uniqueness: { case_sensitive: false }, format: { with: EMAIL_REGEX } +end \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/views/layouts/application.html.erb new file mode 100644 index 0000000..504d2fe --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/app/views/layouts/application.html.erb @@ -0,0 +1,14 @@ + + + + RspecApp + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + + +<%= yield %> + + + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/bin/bundle new file mode 100755 index 0000000..66e9889 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/bin/rails new file mode 100755 index 0000000..0138d79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/bin/rails @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +APP_PATH = File.expand_path('../../config/application', __FILE__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/bin/rake new file mode 100755 index 0000000..d87d5f5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/bin/rake @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/bin/setup new file mode 100755 index 0000000..acdb2c1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/bin/setup @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +Dir.chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file: + + puts "== Installing dependencies ==" + system "gem install bundler --conservative" + system "bundle check || bundle install" + + # puts "\n== Copying sample files ==" + # unless File.exist?("config/database.yml") + # system "cp config/database.yml.sample config/database.yml" + # end + + puts "\n== Preparing database ==" + system "bin/rake db:setup" + + puts "\n== Removing old logs and tempfiles ==" + system "rm -f log/*" + system "rm -rf tmp/cache" + + puts "\n== Restarting application server ==" + system "touch tmp/restart.txt" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/bin/spring new file mode 100755 index 0000000..fb2ec2e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/bin/spring @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +# This file loads spring without using Bundler, in order to be fast. +# It gets overwritten when you run the `spring binstub` command. + +unless defined?(Spring) + require 'rubygems' + require 'bundler' + + lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read) + spring = lockfile.specs.detect { |spec| spec.name == "spring" } + if spring + Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path + gem 'spring', spring.version + require 'spring/binstub' + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config.ru b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config.ru new file mode 100644 index 0000000..bd83b25 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Rails.application diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/application.rb new file mode 100644 index 0000000..2a601b1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/application.rb @@ -0,0 +1,35 @@ +require File.expand_path('../boot', __FILE__) + +require "rails" +# Pick the frameworks you want: +require "active_model/railtie" +require "active_job/railtie" +require "active_record/railtie" +require "action_controller/railtie" +require "action_mailer/railtie" +require "action_view/railtie" +require "sprockets/railtie" +# require "rails/test_unit/railtie" + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module RspecApp + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Do not swallow errors in after_commit/after_rollback callbacks. + config.active_record.raise_in_transactional_callbacks = true + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/boot.rb new file mode 100644 index 0000000..6b750f0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/boot.rb @@ -0,0 +1,3 @@ +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) + +require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/database.yml new file mode 100644 index 0000000..1c1a37c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/database.yml @@ -0,0 +1,25 @@ +# SQLite version 3.x +# gem install sqlite3 +# +# Ensure the SQLite 3 gem is defined in your Gemfile +# gem 'sqlite3' +# +default: &default + adapter: sqlite3 + pool: 5 + timeout: 5000 + +development: + <<: *default + database: db/development.sqlite3 + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: db/test.sqlite3 + +production: + <<: *default + database: db/production.sqlite3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/environment.rb new file mode 100644 index 0000000..ee8d90d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require File.expand_path('../application', __FILE__) + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/environments/development.rb new file mode 100644 index 0000000..b55e214 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/environments/development.rb @@ -0,0 +1,41 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # Adds additional error checking when serving assets at runtime. + # Checks for improperly declared sprockets dependencies. + # Raises helpful error messages. + config.assets.raise_runtime_errors = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/environments/production.rb new file mode 100644 index 0000000..5c1b32e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/environments/production.rb @@ -0,0 +1,79 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like + # NGINX, varnish or squid. + # config.action_dispatch.rack_cache = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # 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-Accel-Redirect' # for NGINX + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug + + # Prepend all log lines with the following tags. + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/environments/test.rb new file mode 100644 index 0000000..1c19f08 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/environments/test.rb @@ -0,0 +1,42 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure static file server for tests with Cache-Control for performance. + config.serve_static_files = true + config.static_cache_control = 'public, max-age=3600' + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Randomize the order test cases are executed. + config.active_support.test_order = :random + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/initializers/assets.rb new file mode 100644 index 0000000..01ef3e6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/initializers/assets.rb @@ -0,0 +1,11 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path +# Rails.application.config.assets.paths << Emoji.images_path + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. +# Rails.application.config.assets.precompile += %w( search.js ) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..59385cd --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/initializers/cookies_serializer.rb new file mode 100644 index 0000000..7f70458 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/initializers/cookies_serializer.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000..4a994e1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/initializers/inflections.rb new file mode 100644 index 0000000..ac033bf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/initializers/mime_types.rb new file mode 100644 index 0000000..dc18996 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/initializers/mime_types.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/initializers/session_store.rb new file mode 100644 index 0000000..ed9b870 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/initializers/session_store.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.session_store :cookie_store, key: '_rspec-app_session' diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..33725e9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] if respond_to?(:wrap_parameters) +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/locales/en.yml new file mode 100644 index 0000000..0653957 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/locales/en.yml @@ -0,0 +1,23 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/routes.rb new file mode 100644 index 0000000..3f66539 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/routes.rb @@ -0,0 +1,56 @@ +Rails.application.routes.draw do + # The priority is based upon order of creation: first created -> highest priority. + # See how all your routes lay out with "rake routes". + + # You can have the root of your site routed with "root" + # root 'welcome#index' + + # Example of regular route: + # get 'products/:id' => 'catalog#view' + + # Example of named route that can be invoked with purchase_url(id: product.id) + # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase + + # Example resource route (maps HTTP verbs to controller actions automatically): + # resources :products + + # Example resource route with options: + # resources :products do + # member do + # get 'short' + # post 'toggle' + # end + # + # collection do + # get 'sold' + # end + # end + + # Example resource route with sub-resources: + # resources :products do + # resources :comments, :sales + # resource :seller + # end + + # Example resource route with more complex sub-resources: + # resources :products do + # resources :comments + # resources :sales do + # get 'recent', on: :collection + # end + # end + + # Example resource route with concerns: + # concern :toggleable do + # post 'toggle' + # end + # resources :posts, concerns: :toggleable + # resources :photos, concerns: :toggleable + + # Example resource route within a namespace: + # namespace :admin do + # # Directs /admin/products/* to Admin::ProductsController + # # (app/controllers/admin/products_controller.rb) + # resources :products + # end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/secrets.yml new file mode 100644 index 0000000..e1c56b7 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/config/secrets.yml @@ -0,0 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rake secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: d179f335f682d329f596ca3ff007527c87183c9fefd6aeaf7985b6be2e8d72b1555a8fd87815e937db132a027f105170cb96a3b61f164e09e52614445faac55c + +test: + secret_key_base: c353924e65b6889a6fab620a77c89733f965ec7e745e39d2524fe37d46b34271d911e640402dceb6018c4447f079e0ebfbc94a7f082bc6f61cdf66b7ea98f4bd + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/db/migrate/20180813160219_create_users.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/db/migrate/20180813160219_create_users.rb new file mode 100644 index 0000000..cc285fe --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/db/migrate/20180813160219_create_users.rb @@ -0,0 +1,11 @@ +class CreateUsers < ActiveRecord::Migration + def change + create_table :users do |t| + t.string :first_name + t.string :last_name + t.string :email + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/db/schema.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/db/schema.rb new file mode 100644 index 0000000..c1f9213 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/db/schema.rb @@ -0,0 +1,24 @@ +# encoding: UTF-8 +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 20180813160219) do + + create_table "users", force: :cascade do |t| + t.string "first_name" + t.string "last_name" + t.string "email" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/db/seeds.rb new file mode 100644 index 0000000..4edb1e8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). +# +# Examples: +# +# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) +# Mayor.create(name: 'Emanuel', city: cities.first) diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/lib/assets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/lib/tasks/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/log/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/public/404.html new file mode 100644 index 0000000..b612547 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +
+
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/public/422.html new file mode 100644 index 0000000..a21f82b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
+
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/public/500.html new file mode 100644 index 0000000..061abc5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/public/500.html @@ -0,0 +1,66 @@ + + + + We're sorry, but something went wrong (500) + + + + + + +
+
+

We're sorry, but something went wrong.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/public/robots.txt new file mode 100644 index 0000000..3c9c7c0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-agent: * +# Disallow: / diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/spec/models/user_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/spec/models/user_spec.rb new file mode 100644 index 0000000..1215c16 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/spec/models/user_spec.rb @@ -0,0 +1,59 @@ +require 'rails_helper' + +# RSpec.describe User, type: :model do +# pending "add some examples to (or delete) #{__FILE__}" +# end + +RSpec.describe User do + # ======================= + # Control [ VALID TEST ] + # ======================= + context "With valid attributes" do + it "should save" do + user = User.new(first_name: 'Shane', last_name: 'chang', email: 'schang@codingdojo.com') + expect(user).to be_valid + end + end + + # ================ + # [ INVALID TEST ] + # ================ + context "With invalid attributes" do + + # TEST #1 => Empty field + it "should not save if first_name field is blank" do + user = User.new(first_name: '', last_name: 'Chang', email: 'schang@codingdojo.com') + expect(user).to be_invalid + end + + # TEST #2 => Empty field + it "should not save if last_name field is blank" do + user = User.new(first_name: 'Shane', last_name: '', email: 'schang@codingdojo.com') + expect(user).to be_invalid + end + + # TEST #3 => Empty field + it "should not save if email field is blank" do + user = User.new(first_name: 'Shane', last_name: 'Chang', email: '') + expect(user).to be_invalid + end + + # TEST #4 => Uniqueness field + it "should not save if email already exists" do + User.create(first_name: "Shane", last_name: "Chang", email: "schang@codingdojo.com") + user = User.new(first_name: "Shane", last_name: "Chang", email: "schang@codingdojo.com") + expect(user).to be_invalid + end + + # TEST #5 => correct format + it "should contain a valid email" do + user = User.new(first_name: 'Arden', last_name: 'Zhan', email: 'invalidemail') + expect(user).to be_invalid + end + + it "should not save if last_name field is blank" + it "should not save if email already exists" + it "should not save if invalid email format" + end + +end \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/spec/rails_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/spec/rails_helper.rb new file mode 100644 index 0000000..d73d80b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/spec/rails_helper.rb @@ -0,0 +1,61 @@ +# This file is copied to spec/ when you run 'rails generate rspec:install' +require 'spec_helper' +ENV['RAILS_ENV'] ||= 'test' +require File.expand_path('../../config/environment', __FILE__) +# Prevent database truncation if the environment is production +abort("The Rails environment is running in production mode!") if Rails.env.production? +require 'rspec/rails' +# Add additional requires below this line. Rails is not loaded until this point! + +# Requires supporting ruby files with custom matchers and macros, etc, in +# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are +# run as spec files by default. This means that files in spec/support that end +# in _spec.rb will both be required and run as specs, causing the specs to be +# run twice. It is recommended that you do not name files matching this glob to +# end with _spec.rb. You can configure this pattern with the --pattern +# option on the command line or in ~/.rspec, .rspec or `.rspec-local`. +# +# The following line is provided for convenience purposes. It has the downside +# of increasing the boot-up time by auto-requiring all files in the support +# directory. Alternatively, in the individual `*_spec.rb` files, manually +# require only the support files necessary. +# +# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f } + +# Checks for pending migrations and applies them before tests are run. +# If you are not using ActiveRecord, you can remove these lines. +begin + ActiveRecord::Migration.maintain_test_schema! +rescue ActiveRecord::PendingMigrationError => e + puts e.to_s.strip + exit 1 +end +RSpec.configure do |config| + # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures + config.fixture_path = "#{::Rails.root}/spec/fixtures" + + # If you're not using ActiveRecord, or you'd prefer not to run each of your + # examples within a transaction, remove the following line or assign false + # instead of true. + config.use_transactional_fixtures = true + + # RSpec Rails can automatically mix in different behaviours to your tests + # based on their file location, for example enabling you to call `get` and + # `post` in specs under `spec/controllers`. + # + # You can disable this behaviour by removing the line below, and instead + # explicitly tag your specs with their type, e.g.: + # + # RSpec.describe UsersController, :type => :controller do + # # ... + # end + # + # The different available types are documented in the features, such as in + # https://relishapp.com/rspec/rspec-rails/docs + config.infer_spec_type_from_file_location! + + # Filter lines from Rails gems in backtraces. + config.filter_rails_from_backtrace! + # arbitrary gems may also be filtered via: + # config.filter_gems_from_backtrace("gem name") +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/spec/spec_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/spec/spec_helper.rb new file mode 100644 index 0000000..ce33d66 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/spec/spec_helper.rb @@ -0,0 +1,96 @@ +# This file was generated by the `rails generate rspec:install` command. Conventionally, all +# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. +# The generated `.rspec` file contains `--require spec_helper` which will cause +# this file to always be loaded, without a need to explicitly require it in any +# files. +# +# Given that it is always loaded, you are encouraged to keep this file as +# light-weight as possible. Requiring heavyweight dependencies from this file +# will add to the boot time of your test suite on EVERY test run, even for an +# individual file that may not need all of that loaded. Instead, consider making +# a separate helper file that requires the additional dependencies and performs +# the additional setup, and require it from the spec files that actually need +# it. +# +# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration +RSpec.configure do |config| + # rspec-expectations config goes here. You can use an alternate + # assertion/expectation library such as wrong or the stdlib/minitest + # assertions if you prefer. + config.expect_with :rspec do |expectations| + # This option will default to `true` in RSpec 4. It makes the `description` + # and `failure_message` of custom matchers include text for helper methods + # defined using `chain`, e.g.: + # be_bigger_than(2).and_smaller_than(4).description + # # => "be bigger than 2 and smaller than 4" + # ...rather than: + # # => "be bigger than 2" + expectations.include_chain_clauses_in_custom_matcher_descriptions = true + end + + # rspec-mocks config goes here. You can use an alternate test double + # library (such as bogus or mocha) by changing the `mock_with` option here. + config.mock_with :rspec do |mocks| + # Prevents you from mocking or stubbing a method that does not exist on + # a real object. This is generally recommended, and will default to + # `true` in RSpec 4. + mocks.verify_partial_doubles = true + end + + # This option will default to `:apply_to_host_groups` in RSpec 4 (and will + # have no way to turn it off -- the option exists only for backwards + # compatibility in RSpec 3). It causes shared context metadata to be + # inherited by the metadata hash of host groups and examples, rather than + # triggering implicit auto-inclusion in groups with matching metadata. + config.shared_context_metadata_behavior = :apply_to_host_groups + +# The settings below are suggested to provide a good initial experience +# with RSpec, but feel free to customize to your heart's content. +=begin + # This allows you to limit a spec run to individual examples or groups + # you care about by tagging them with `:focus` metadata. When nothing + # is tagged with `:focus`, all examples get run. RSpec also provides + # aliases for `it`, `describe`, and `context` that include `:focus` + # metadata: `fit`, `fdescribe` and `fcontext`, respectively. + config.filter_run_when_matching :focus + + # Allows RSpec to persist some state between runs in order to support + # the `--only-failures` and `--next-failure` CLI options. We recommend + # you configure your source control system to ignore this file. + config.example_status_persistence_file_path = "spec/examples.txt" + + # Limits the available syntax to the non-monkey patched syntax that is + # recommended. For more details, see: + # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/ + # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/ + # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode + config.disable_monkey_patching! + + # Many RSpec users commonly either run the entire suite or an individual + # file, and it's useful to allow more verbose output when running an + # individual spec file. + if config.files_to_run.one? + # Use the documentation formatter for detailed output, + # unless a formatter has already been configured + # (e.g. via a command-line flag). + config.default_formatter = "doc" + end + + # Print the 10 slowest examples and example groups at the + # end of the spec run, to help surface which specs are running + # particularly slow. + config.profile_examples = 10 + + # Run specs in random order to surface order dependencies. If you find an + # order dependency and want to debug it, you can fix the order by providing + # the seed, which is printed after each run. + # --seed 1234 + config.order = :random + + # Seed global randomization in this process using the `--seed` CLI option. + # Setting this allows you to use `--seed` to deterministically reproduce + # test failures related to randomization by passing the same `--seed` value + # as the one that triggered the failure. + Kernel.srand config.seed +=end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/vendor/assets/javascripts/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/Rails/platform-sample-assign/rspec_app/vendor/assets/stylesheets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt.zip b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt.zip new file mode 100644 index 0000000..ac9892a Binary files /dev/null and b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt.zip differ diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/.gitignore b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/.gitignore new file mode 100644 index 0000000..5b61ab0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/.gitignore @@ -0,0 +1,13 @@ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore all logfiles and tempfiles. +/log/* +!/log/.keep +/tmp diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/Gemfile b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/Gemfile new file mode 100644 index 0000000..b5096e6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/Gemfile @@ -0,0 +1,57 @@ +source 'https://rubygems.org' + + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '4.2.7' + +# Use SCSS for stylesheets +gem 'sass-rails', '~> 5.0' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# Use CoffeeScript for .coffee assets and views +gem 'coffee-rails', '~> 4.1.0' +# See https://github.com/rails/execjs#readme for more supported runtimes +# gem 'therubyracer', platforms: :ruby + +# Use jquery as the JavaScript library +gem 'jquery-rails' +# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks +gem 'turbolinks' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.0' +# bundle exec rake doc:rails generates the API under doc/api. +gem 'sdoc', '~> 0.4.0', group: :doc + +# Use ActiveModel has_secure_password +gem 'bcrypt', '~> 3.1.7' + +# Use Unicorn as the app server +# gem 'unicorn' + +# Use Capistrano for deployment +# gem 'capistrano-rails', group: :development + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug' + gem 'rspec-rails' + gem 'factory_bot_rails' + gem 'capybara' +end + +group :development do + gem 'sqlite3' + + # Access an IRB console on exception pages or by using <%= console %> in views + gem 'web-console', '~> 2.0' + + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' +end + +gem 'hirb' +gem "heroku" + +# Use postgresql as the database for Active Record +gem 'pg', '~> 0.15' +gem 'rails_12factor' diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/Gemfile.lock b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/Gemfile.lock new file mode 100644 index 0000000..a45c157 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/Gemfile.lock @@ -0,0 +1,222 @@ +GEM + remote: https://rubygems.org/ + specs: + actionmailer (4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.7) + actionview (= 4.2.7) + activesupport (= 4.2.7) + rack (~> 1.6) + rack-test (~> 0.6.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + activejob (4.2.7) + activesupport (= 4.2.7) + globalid (>= 0.3.0) + activemodel (4.2.7) + activesupport (= 4.2.7) + builder (~> 3.1) + activerecord (4.2.7) + activemodel (= 4.2.7) + activesupport (= 4.2.7) + arel (~> 6.0) + activesupport (4.2.7) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + addressable (2.5.2) + public_suffix (>= 2.0.2, < 4.0) + arel (6.0.4) + bcrypt (3.1.12) + binding_of_caller (0.8.0) + debug_inspector (>= 0.0.1) + builder (3.2.3) + byebug (10.0.2) + capybara (3.6.0) + addressable + mini_mime (>= 0.1.3) + nokogiri (~> 1.8) + rack (>= 1.6.0) + rack-test (>= 0.6.3) + xpath (~> 3.1) + coffee-rails (4.1.1) + coffee-script (>= 2.2.0) + railties (>= 4.0.0, < 5.1.x) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + concurrent-ruby (1.0.5) + crass (1.0.4) + debug_inspector (0.0.3) + diff-lcs (1.3) + erubis (2.7.0) + execjs (2.7.0) + factory_bot (4.11.0) + activesupport (>= 3.0.0) + factory_bot_rails (4.11.0) + factory_bot (~> 4.11.0) + railties (>= 3.0.0) + ffi (1.9.25) + globalid (0.4.1) + activesupport (>= 4.2.0) + heroku (3.99.3) + hirb (0.7.3) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jbuilder (2.7.0) + activesupport (>= 4.2.0) + multi_json (>= 1.2) + jquery-rails (4.3.3) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + json (1.8.6) + loofah (2.2.2) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.0) + mini_mime (>= 0.1.1) + mini_mime (1.0.1) + mini_portile2 (2.3.0) + minitest (5.11.3) + multi_json (1.13.1) + nokogiri (1.8.4) + mini_portile2 (~> 2.3.0) + pg (0.21.0) + public_suffix (3.0.3) + rack (1.6.10) + rack-test (0.6.3) + rack (>= 1.0) + rails (4.2.7) + actionmailer (= 4.2.7) + actionpack (= 4.2.7) + actionview (= 4.2.7) + activejob (= 4.2.7) + activemodel (= 4.2.7) + activerecord (= 4.2.7) + activesupport (= 4.2.7) + bundler (>= 1.3.0, < 2.0) + railties (= 4.2.7) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.9) + activesupport (>= 4.2.0, < 5.0) + nokogiri (~> 1.6) + rails-deprecated_sanitizer (>= 1.0.1) + rails-html-sanitizer (1.0.4) + loofah (~> 2.2, >= 2.2.2) + rails_12factor (0.0.3) + rails_serve_static_assets + rails_stdout_logging + rails_serve_static_assets (0.0.5) + rails_stdout_logging (0.0.5) + railties (4.2.7) + actionpack (= 4.2.7) + activesupport (= 4.2.7) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (12.3.1) + rb-fsevent (0.10.3) + rb-inotify (0.9.10) + ffi (>= 0.5.0, < 2) + rdoc (4.3.0) + rspec-core (3.8.0) + rspec-support (~> 3.8.0) + rspec-expectations (3.8.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.8.0) + rspec-mocks (3.8.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.8.0) + rspec-rails (3.8.0) + actionpack (>= 3.0) + activesupport (>= 3.0) + railties (>= 3.0) + rspec-core (~> 3.8.0) + rspec-expectations (~> 3.8.0) + rspec-mocks (~> 3.8.0) + rspec-support (~> 3.8.0) + rspec-support (3.8.0) + sass (3.5.7) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sass-rails (5.0.7) + railties (>= 4.0.0, < 6) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + sdoc (0.4.2) + json (~> 1.7, >= 1.7.7) + rdoc (~> 4.0) + spring (2.0.2) + activesupport (>= 4.2) + sprockets (3.7.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.2.1) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + sqlite3 (1.3.13) + thor (0.20.0) + thread_safe (0.3.6) + tilt (2.0.8) + turbolinks (5.1.1) + turbolinks-source (~> 5.1) + turbolinks-source (5.1.0) + tzinfo (1.2.5) + thread_safe (~> 0.1) + uglifier (4.1.18) + execjs (>= 0.3.0, < 3) + web-console (2.3.0) + activemodel (>= 4.0) + binding_of_caller (>= 0.7.2) + railties (>= 4.0) + sprockets-rails (>= 2.0, < 4.0) + xpath (3.1.0) + nokogiri (~> 1.8) + +PLATFORMS + ruby + +DEPENDENCIES + bcrypt (~> 3.1.7) + byebug + capybara + coffee-rails (~> 4.1.0) + factory_bot_rails + heroku + hirb + jbuilder (~> 2.0) + jquery-rails + pg (~> 0.15) + rails (= 4.2.7) + rails_12factor + rspec-rails + sass-rails (~> 5.0) + sdoc (~> 0.4.0) + spring + sqlite3 + turbolinks + uglifier (>= 1.3.0) + web-console (~> 2.0) + +BUNDLED WITH + 1.16.3 diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/README.rdoc b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/README.rdoc new file mode 100644 index 0000000..dd4e97e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/README.rdoc @@ -0,0 +1,28 @@ +== README + +This README would normally document whatever steps are necessary to get the +application up and running. + +Things you may want to cover: + +* Ruby version + +* System dependencies + +* Configuration + +* Database creation + +* Database initialization + +* How to run the test suite + +* Services (job queues, cache servers, search engines, etc.) + +* Deployment instructions + +* ... + + +Please feel free to use a different markup language if you do not plan to run +rake doc:app. diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/Rakefile b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/Rakefile new file mode 100644 index 0000000..ba6b733 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Rails.application.load_tasks diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/images/.keep b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/images/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/images/codingdojo.png b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/images/codingdojo.png new file mode 100644 index 0000000..5c82e33 Binary files /dev/null and b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/images/codingdojo.png differ diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/javascripts/application.js b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/javascripts/application.js new file mode 100644 index 0000000..e07c5a8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/javascripts/application.js @@ -0,0 +1,16 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require jquery +//= require jquery_ujs +//= require turbolinks +//= require_tree . diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/javascripts/main.coffee b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/javascripts/main.coffee new file mode 100644 index 0000000..24f83d1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/javascripts/main.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/javascripts/main.js b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/javascripts/main.js new file mode 100644 index 0000000..e4a70c5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/javascripts/main.js @@ -0,0 +1,14 @@ +document.addEventListener('DOMContentLoaded', function() { + var elems = document.querySelectorAll('select'); + var instances = M.FormSelect.init(elems, options); + }); + + // Or with jQuery + + $(document).ready(function(){ + // alert("Well passed....!") + $('select').formSelect(); + }); + $(document).ready(function(){ + $('.datepicker').datepicker(); + }); diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/javascripts/playlists.coffee b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/javascripts/playlists.coffee new file mode 100644 index 0000000..24f83d1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/javascripts/playlists.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/javascripts/songs.coffee b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/javascripts/songs.coffee new file mode 100644 index 0000000..24f83d1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/javascripts/songs.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/javascripts/users.coffee b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/javascripts/users.coffee new file mode 100644 index 0000000..24f83d1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/javascripts/users.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/stylesheets/application.css b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/stylesheets/application.css new file mode 100644 index 0000000..f9cd5b3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/stylesheets/application.css @@ -0,0 +1,15 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, + * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the bottom of the + * compiled file so the styles you add here take precedence over styles defined in any styles + * defined in the other CSS/SCSS files in this directory. It is generally better to create a new + * file per style scope. + * + *= require_tree . + *= require_self + */ diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/stylesheets/bootstrap.min.css b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/stylesheets/bootstrap.min.css new file mode 100644 index 0000000..8826912 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/stylesheets/bootstrap.min.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap v4.1.3 (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014 \00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(2.25rem + 2px);padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::after,.was-validated .custom-file-input:valid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::after,.was-validated .custom-file-input:invalid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media screen and (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media screen and (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-right{right:0;left:auto}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-label::after{border-color:#80bdff}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:2.25rem;padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;padding-left:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion .card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media screen and (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:not(:disabled):not(.disabled){cursor:pointer}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{color:#000;text-decoration:none;opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}@media screen and (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-dialog-centered::before{display:block;height:calc(100vh - (.5rem * 2));content:""}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-dialog-centered::before{height:calc(100vh - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-ms-flex-align:center;align-items:center;width:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease}@media screen and (prefers-reduced-motion:reduce){.carousel-item-next,.carousel-item-prev,.carousel-item.active{transition:none}}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-fade .carousel-item{opacity:0;transition-duration:.6s;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/stylesheets/main.scss b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/stylesheets/main.scss new file mode 100644 index 0000000..201c26b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/stylesheets/main.scss @@ -0,0 +1,198 @@ +// Navbar section +nav { + background-color:#000; + padding: 0 4rem; + a:hover { color: tan; } +} +html,body { width: auto; height: auto;} +body { + // position: static; + background-position: center; + background-repeat: no-repeat; + // background-size: cover; + background-image: url('http://getwallpapers.com/wallpaper/full/8/4/d/427490.jpg') +} + +nav a { color: white; } +nav a img { + width: 100px; + height: 40px; + margin: 0.5rem 0; + border-style: none; +} + +nav a:hover { color: #06a9e2; cursor: pointer; } + +h1, h2, ._header { + font-family: 'Fredoka One', cursive; + text-align: center; + color: #06a9e2; + margin: 4rem 0 2rem; + position: relative; +} +h1 span { color: #06a9e2; font-family: 'Poiret One', cursive; } + +#notice { + padding: 0.5rem 2rem; + border-radius: 1rem; + border: 2px solid #06a9e2; + background: lightslategrey; +} + +// Form Components [ Add and Edit ] Section +form { padding: 0 15rem; } +ul .form-row { padding-left: 4rem !important; } +.form-row { line-height: 0rem; } + + +// Table Section +.theader { color: #06a9e2; font-family: 'Poiret One', cursive; } +.trbody { font-family: 'Poiret One', cursive; } +.trbody > td { padding: 0.2rem; } +.trbody > td:last-child > a { margin: 0.1rem auto; width: 5rem; } +.trbody > td:last-child > form { + input { margin: 0; } + width: 5rem; + margin: 0rem auto; + display: inline-table !important; +} +.trbody:hover { color: #06a9e2; background-color: #0000006b !important; } +.scrolling-wrapper { + -webkit-overflow-scrolling: touch; + padding-bottom: 12rem; + overflow-y: scroll; + position:relative; + opacity: 0.8; + height: 300px !important; + width: 100%; + // z-index: -1; + } + ::-webkit-scrollbar { width: 12px; } + ::-webkit-scrollbar-track { display: none; } + + +// Container section +.container { min-height: 60% !important; width: 60%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +.container-min { height: 400px; width: 58%; background-color: #171414e3; color: #f5f5f5; padding: 1rem 2rem; margin: 1rem auto !important; position: relative;} +.container-max { height: 600px; min-height: 70%; width: 50%; background-color: #171414e3; color: #f5f5f5; padding: 4rem 2rem; margin: 0rem auto; position: relative;} +// .container h1 { margin-top: 2rem; } + +.flxend { display: flex; justify-content: end; } // div container requiring flex +.flexed { display: flex; justify-content: space-between; } // div container requiring flex +.grided { display: grid; grid-template-columns: 1fr 1fr; grid-gap: 2rem; } // div container requiring grid +.inline { display: inline-block; margin: 1rem auto; } // div container requiring grid +.grided input { min-width: 100%; margin-top: 2rem; } +.text-warning { color: #fba153fa; } + +// Custom Margin +// =========================== [ 1rem ] +.right-margin1 { margin-right : 1rem !important; } +.left-margin1 { margin-left : 1rem !important; } +.top-margin1 { margin-top : 1rem !important; } +.bottom-margin1 { margin-bottom: 1rem !important; } +// =========================== [ 2rem ] +.right-margin2 { margin-right : 2rem !important; } +.left-margin2 { margin-left : 2rem !important; } +.top-margin2 { margin-top : 2rem !important; } +.bottom-margin2 { margin-bottom: 2rem !important; } +// =========================== [ 4rem ] +.right-margin4 { margin-right : 4rem !important; } +.left-margin4 { margin-left : 4rem !important; } +.top-margin4 { margin-top : 4rem !important; } +.bottom-margin4 { margin-bottom: 4rem !important; } +// =========================== [ 6rem ] +.right-margin6 { margin-right : 6rem !important; } +.left-margin6 { margin-left : 6rem !important; } +.top-margin6 { margin-top : 6rem !important; } +.bottom-margin6 { margin-bottom: 6rem !important; } + +.separator-bar{ margin: 0 1rem; } +.sn { + color: white; + // margin-top: 2rem; + border-radius: .2rem; + background-color: #111; + border: 1px solid #f5f5f5; + // background-color: #357ae8; + transition: all .3s ease-in-out; + box-shadow: 1px 2px 2px 0px #444 !important; +} +.sn:hover { + color: #06a9e2; + transition: all .3s ease-in-out; + background-color: #000 !important; + box-shadow: 0px 0px 0px 0px #222 !important; +} +.show { + border-radius: 1rem; + font-size: 10px; + width: 4rem; + color: #06a9e2; + &:hover { + color: white !important; + background-color: #357ae8 !important; + } +} +.edit { + border-radius: 1rem; + font-size: 10px; + color: lime; + &:hover { + color: white !important; + background-color: green !important; + } +} +.delete { + border-radius: 1rem; + font-size: 10px; + color: #f44336; + &:hover { + color: white !important; + background-color: red !important; + } +} +.brand-logo { + font-family: 'Days One', sans-serif; +} + +input.valid:not([type]), input.valid:not([type]):focus, input.valid[type=text]:not(.browser-default), input.valid[type=text]:not(.browser-default):focus, input.valid[type=password]:not(.browser-default), input.valid[type=password]:not(.browser-default):focus, input.valid[type=email]:not(.browser-default), input.valid[type=email]:not(.browser-default):focus, input.valid[type=url]:not(.browser-default), input.valid[type=url]:not(.browser-default):focus, input.valid[type=time]:not(.browser-default), input.valid[type=time]:not(.browser-default):focus, input.valid[type=date]:not(.browser-default), input.valid[type=date]:not(.browser-default):focus, input.valid[type=datetime]:not(.browser-default), input.valid[type=datetime]:not(.browser-default):focus, input.valid[type=datetime-local]:not(.browser-default), input.valid[type=datetime-local]:not(.browser-default):focus, input.valid[type=tel]:not(.browser-default), input.valid[type=tel]:not(.browser-default):focus, input.valid[type=number]:not(.browser-default), input.valid[type=number]:not(.browser-default):focus, input.valid[type=search]:not(.browser-default), input.valid[type=search]:not(.browser-default):focus, textarea.materialize-textarea.valid, textarea.materialize-textarea.valid:focus, .select-wrapper.valid>input.select-dropdown { + border-bottom: 1px solid #06a9e2 !important; + -webkit-box-shadow: 0 1px 0 0 #06a9e2 !important; + box-shadow: 0 1px 0 0 #06a9e2 !important; +} +input:not([type]):focus:not([readonly]), input[type=text]:not(.browser-default):focus:not([readonly]), input[type=password]:not(.browser-default):focus:not([readonly]), input[type=email]:not(.browser-default):focus:not([readonly]), input[type=url]:not(.browser-default):focus:not([readonly]), input[type=time]:not(.browser-default):focus:not([readonly]), input[type=date]:not(.browser-default):focus:not([readonly]), input[type=datetime]:not(.browser-default):focus:not([readonly]), input[type=datetime-local]:not(.browser-default):focus:not([readonly]), input[type=tel]:not(.browser-default):focus:not([readonly]), input[type=number]:not(.browser-default):focus:not([readonly]), input[type=search]:not(.browser-default):focus:not([readonly]), textarea.materialize-textarea:focus:not([readonly]) { + border-bottom: 1px solid #06a9e2; + -webkit-box-shadow: 0 1px 0 0 #06a9e2; + box-shadow: 0 1px 0 0 #06a9e2; +} +.dropdown-content li>a, .dropdown-content li>span { + font-size: 16px; + background-color: #020000; + color: #9e9e9edb; + display: block; + line-height: 22px; + padding: 14px 16px; +} +.dropdown-content li>a:hover, .dropdown-content li>span:hover { + background-color: #06a9e2; + color: white; +} + + +.select-wrapper input.select-dropdown { + color: #06a9e2; +} +input:not([type]):focus:not([readonly])+label,.form-wrap input[type=text]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=password]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=email]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=url]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=time]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=date]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=datetime]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=datetime-local]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=tel]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=number]:not(.browser-default):focus:not([readonly])+label,.form-wrap input[type=search]:not(.browser-default):focus:not([readonly])+label,.form-wrap textarea.materialize-textarea:focus:not([readonly])+label { + color: #06a9e2; +} +input:not([type]):focus:not([readonly])+label, input[type=text]:not(.browser-default):focus:not([readonly])+label, input[type=password]:not(.browser-default):focus:not([readonly])+label, input[type=email]:not(.browser-default):focus:not([readonly])+label, input[type=url]:not(.browser-default):focus:not([readonly])+label, input[type=time]:not(.browser-default):focus:not([readonly])+label, input[type=date]:not(.browser-default):focus:not([readonly])+label, input[type=datetime]:not(.browser-default):focus:not([readonly])+label, input[type=datetime-local]:not(.browser-default):focus:not([readonly])+label, input[type=tel]:not(.browser-default):focus:not([readonly])+label, input[type=number]:not(.browser-default):focus:not([readonly])+label, input[type=search]:not(.browser-default):focus:not([readonly])+label, textarea.materialize-textarea:focus:not([readonly])+label { + color: #06a9e2; +} +.select-wrapper input.select-dropdown { color: #06a9e2 !important; } +.select-wrapper input.select-dropdown:focus { + border-bottom: 2px solid #06a9e2 !important; +} +// label:active { +// font-size: .8rem; +// color: #06a9e2 !important; +// } diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/stylesheets/playlists.scss b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/stylesheets/playlists.scss new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/stylesheets/songs.scss b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/stylesheets/songs.scss new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/stylesheets/users.scss b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/assets/stylesheets/users.scss new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/controllers/application_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/controllers/application_controller.rb new file mode 100644 index 0000000..c02b617 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/controllers/application_controller.rb @@ -0,0 +1,12 @@ +class ApplicationController < ActionController::Base + # Prevent CSRF attacks by raising an exception. + # For APIs, you may want to use :null_session instead. + protect_from_forgery with: :exception + + # before_action :require_login + def current_user + User.find(session[:user_id]) if session[:user_id] + end + + helper_method :current_user +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/controllers/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/controllers/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/controllers/main_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/controllers/main_controller.rb new file mode 100644 index 0000000..8ba6114 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/controllers/main_controller.rb @@ -0,0 +1,176 @@ +class MainController < ApplicationController + + before_action :set_user, only: [:first_name, :last_name, :email, :password, :password_confirmation] + + def index + if current_user + redirect_to songs_path + end + User.new + @errors = [] + end + + # ============================= + # Switch Controller for Log/Reg + # ============================= + def switch + if session[:form] === "login" + session[:form] = "register" + else + session[:form] = "login" + end + redirect_to "/" + end + + + # ===================================== + # Handles User Login form + # ===================================== + def login + @user = User.find_by_email(params[:email]) + if @user and @user.authenticate(params[:password]) + session["user_id"] = @user.id + redirect_to songs_path + else + flash[:errors] = ["Invalid login information!"] + redirect_to :back + end + end + + + # =============================================== + # Handles User Registration form + # =============================================== + def register + @user = User.create(user_params) + unless @user.valid? + flash[:errors] = @user.errors.full_messages + redirect_to :back + else + # @errors = flash@user.errors.full_messages + # notice: 'User was successfully created.' + session["user_id"] = @user.id + redirect_to "/events" + end + end + + + # ============================= + # GET Request - Renders [.html] + # ============================= + def new + @user = User.new + end + + + # ==================== + # POST Request [.html] + # POST Request [.json] + # ==================== + def create + @user = User.create(validate_params) + respond_to do |format| + if @user.valid? + format.html { redirect_to "/", notice: 'User was successfully created.' } + format.json { redirect_to :back, status: :created, location: @user } + else + format.html { redirect_to :back } + format.json { render json: @user.errors, status: :unprocessable_entity } + end + end + end + + + # # ============================= + # # GET Request - Renders [.html] + # # ============================= + # def show + # @user = User.find(params[:id]) + # @this_song = Dojo.find(params[:dojo_id]) + # @this_user = "#{@user.first_name} #{@user.last_name}" + # + # # ----------- [ Put in Session ] + # session[:page] = "user" + # session[:song_id] = @this_song.id + # # ------------------------------ + # # print "\n\n\n=========\n", @dojo + # # print "\n\n\n=========\n", @user + # end + + + # ============================= + # GET Request - Renders [.html] + # ============================= + # def edit + # @allsongs = Song.all + # @edit_dojo = User.find(params[:dojo_id]) + # @user = User.find(params[:id]) + # @this_user = "#{@user.first_name} #{@user.last_name}" + # + # # -------------------------------- [ Put in Session ] + # session[:page] = "user" + # session[:user_id] = params[:dojo_id] + # session[:user_id] = params[:id] + # session[:branch] = Dojo.find(params[:dojo_id]).branch + # # --------------------------------------------------- + # render "edit" + # end + + + # ========================= + # PATCH/PUT Request [.html] + # PATCH/PUT Request [.json] + # ========================= + # def update + # @user = User.find(params[:id]) + # respond_to do |format| + # if @user.update(validate_params) + # # format.html { redirect_to dojo_user_url, notice: 'User was successfully updated.' } + # format.html { redirect_to "/users/#{params[:user_id]}/users/#{params[:id]}", notice: 'User was successfully updated.' } + # format.json { render :show, status: :ok, location: @user } + # else + # format.html { render :edit } + # format.json { render json: @user.errors, status: :unprocessable_entity } + # end + # end + # end + + + # =============================== + # DELETE request for + # >> This shall terminate session + # =============================== + def logout + reset_session + respond_to do |format| + format.html { redirect_to '/', notice: 'User was successfully logged out.' } + format.json { head :no_content } + end + end + + + # =================== + # DELETE /user/1 + # DELETE /user/1.json + # =================== + def destroy + User.find(params[:id]).destroy + respond_to do |format| + # format.html { redirect_to '/', notice: 'User was successfully destroyed.' } + format.html { redirect_to "/users/#{params[:user_id]}", notice: 'User was successfully deleted.' } + format.json { head :no_content } + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_user + @user = User.find(params[:id]) + end + + # Sanatizing/Validating Form Parameters... + private + def user_params + params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation) + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/controllers/playlists_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/controllers/playlists_controller.rb new file mode 100644 index 0000000..8a74f3b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/controllers/playlists_controller.rb @@ -0,0 +1,22 @@ +class PlaylistsController < ApplicationController + + def add_to_playlist + Playlist.create(song_id: params[:id], user_id: current_user.id) + redirect_to songs_path + end + + + # ====================== + # DELETE Request [.html] + # DELETE Request [.json] + # ====================== + def remove_from_playlist + current_user.playlists.where(song_id: params[:id]).delete + redirect_to "/songs" + end + + private + def song_params + params.require(:song).permit(:title, :artist) + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/controllers/songs_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/controllers/songs_controller.rb new file mode 100644 index 0000000..1b1a346 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/controllers/songs_controller.rb @@ -0,0 +1,45 @@ +class SongsController < ApplicationController + + def index + @allsongs = Song.all + # @allsongs = Song.where(state: current_user.playlists) + @othersongs = Song.where.not(state: current_user.playlists) + @songs_added_by = Playlist.where(user_id: current_user.id) + end + + def create + @new_song = Song.create(song_params) + unless @new_song.valid? + flash[:errors] = @new_song.errors + end + redirect_to "/songs" + end + + # =================== + # GET Request [.html] + # GET Request [.json] + # =================== + def show + print "\n\n===============================\n\n" + puts "BEFORE" + print "\n\n===============================\n\n" + @this_song = Song.find(params[:id]) + @playlist = @this_song.playlists + # session[:song_id] = @this_song.id + end + + + # ====================== + # DELETE Request [.html] + # DELETE Request [.json] + # ====================== + def destroy + Song.find(params[:id]).delete + redirect_to "/songs" + end + + private + def song_params + params.require(:song).permit(:title, :artist) + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/controllers/users_controller.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/controllers/users_controller.rb new file mode 100644 index 0000000..3c77e77 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/controllers/users_controller.rb @@ -0,0 +1,141 @@ +class UsersController < ApplicationController + + before_action :set_user, only: [:first_name, :last_name, :email, :password, :password_confirmation] + + # ============================= + # Switch Controller for Log/Reg + # ============================= + def switch + if session[:form] === "login" + session[:form] = "register" + else + session[:form] = "login" + end + redirect_to "/" + end + + + # ===================================== + # Handles User Login form + # ===================================== + def login + @user = User.find_by_email(params[:email]) + if @user and @user.authenticate(params[:password]) + session["user_id"] = @user.id + redirect_to "/events" + else + flash[:errors] = ["Invalid login information!"] + redirect_to :back + end + end + + + # =============================================== + # Handles User Registration form + # =============================================== + def register + @user = User.create(user_params) + unless @user.valid? + flash[:errors] = @user.errors.full_messages + redirect_to :back + else + # @errors = flash@user.errors.full_messages + session["user_id"] = @user.id + redirect_to "/events" + end + end + + + # ============================= + # GET Request - Renders [.html] + # ============================= + def new + @user = User.new + end + + + # ==================== + # POST Request [.html] + # POST Request [.json] + # ==================== + def create + @user = User.create(validate_params) + respond_to do |format| + if @user.valid? + format.html { redirect_to "/", notice: 'User was successfully created.' } + format.json { redirect_to :back, status: :created, location: @user } + else + format.html { redirect_to :back } + format.json { render json: @user.errors, status: :unprocessable_entity } + end + end + end + + + # ============================= + # GET Request - Renders [.html] + # ============================= + def show + @user = User.find(params[:id]) + @playlist = @user.playlists + @this_user = "#{@user.first_name} #{@user.last_name}" + end + + + # ========================= + # PATCH/PUT Request [.html] + # PATCH/PUT Request [.json] + # ========================= + # def update + # @user = User.find(params[:id]) + # respond_to do |format| + # if @user.update(validate_params) + # # format.html { redirect_to dojo_user_url, notice: 'User was successfully updated.' } + # format.html { redirect_to "/users/#{params[:user_id]}/users/#{params[:id]}", notice: 'User was successfully updated.' } + # format.json { render :show, status: :ok, location: @user } + # else + # format.html { render :edit } + # format.json { render json: @user.errors, status: :unprocessable_entity } + # end + # end + # end + + + # =============================== + # DELETE request for + # >> This shall terminate session + # =============================== + def logout + reset_session + respond_to do |format| + format.html { redirect_to '/', notice: 'User was successfully logged out.' } + format.json { head :no_content } + end + end + + + # =================== + # DELETE /user/1 + # DELETE /user/1.json + # =================== + def destroy + User.find(params[:id]).destroy + respond_to do |format| + # format.html { redirect_to '/', notice: 'User was successfully destroyed.' } + format.html { redirect_to "/users/#{params[:user_id]}", notice: 'User was successfully deleted.' } + format.json { head :no_content } + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_user + @user = User.find(params[:id]) + end + + # Sanatizing/Validating Form Parameters... + private + def user_params + params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation) + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/helpers/application_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/helpers/application_helper.rb new file mode 100644 index 0000000..de6be79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/helpers/main_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/helpers/main_helper.rb new file mode 100644 index 0000000..826effe --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/helpers/main_helper.rb @@ -0,0 +1,2 @@ +module MainHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/helpers/playlists_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/helpers/playlists_helper.rb new file mode 100644 index 0000000..5c69b75 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/helpers/playlists_helper.rb @@ -0,0 +1,2 @@ +module PlaylistsHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/helpers/songs_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/helpers/songs_helper.rb new file mode 100644 index 0000000..75baad2 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/helpers/songs_helper.rb @@ -0,0 +1,2 @@ +module SongsHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/helpers/users_helper.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/helpers/users_helper.rb new file mode 100644 index 0000000..2310a24 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/helpers/users_helper.rb @@ -0,0 +1,2 @@ +module UsersHelper +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/mailers/.keep b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/models/.keep b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/models/concerns/.keep b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/models/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/models/playlist.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/models/playlist.rb new file mode 100644 index 0000000..016faa0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/models/playlist.rb @@ -0,0 +1,5 @@ +class Playlist < ActiveRecord::Base + belongs_to :song + belongs_to :user + # has_many :users_added, through: :songs, source: :user +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/models/song.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/models/song.rb new file mode 100644 index 0000000..059087f --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/models/song.rb @@ -0,0 +1,5 @@ +class Song < ActiveRecord::Base + has_many :playlists, dependent: :destroy + has_many :users, through: :playlists, dependent: :destroy # all the users that added on a specific song + validates :title, :artist, presence: true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/models/user.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/models/user.rb new file mode 100644 index 0000000..dfb36b6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/models/user.rb @@ -0,0 +1,18 @@ +class User < ActiveRecord::Base + has_secure_password + has_many :songs + has_many :playlists, dependent: :destroy + has_many :songs_added, through: :songs, source: :playlists # songs user added + + EMAIL_REGEX = /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]+)\z/i + before_validation :downcase_fields + + validates :first_name, :last_name, :email, presence: true + validates :email, uniqueness: { case_sensitive: false }, format: { with: EMAIL_REGEX } + validates :password, length: { minimum: 8, maximum: 15 }, on: :create + # before_save { |user| user.email = user.email.downcase } + private + def downcase_fields + self.email.downcase! + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/views/layouts/application.html.erb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/views/layouts/application.html.erb new file mode 100644 index 0000000..e651619 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/views/layouts/application.html.erb @@ -0,0 +1,51 @@ + + + + RubyBelt + + + + + + + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= javascript_include_tag 'application', 'main.js', 'data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + + + + + + <% if flash[:errors] %> +
+
+ <%= pluralize(flash[:errors].count, "error") %> + prohibited this user from being saved: +
+
    + <% flash[:errors].each do |message| %> +
  • »<%= message %>
  • + <% end %> +
+
+ <% end %> + + + <%= yield %> + + + + + diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/views/main/_login_form.html.erb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/views/main/_login_form.html.erb new file mode 100644 index 0000000..4a97ba3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/views/main/_login_form.html.erb @@ -0,0 +1,30 @@ +

LOGIN

+ +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ +
+ +
+

+ Don't have an account yet? + Create one now! +

+
+
diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/views/main/_register_form.html.erb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/views/main/_register_form.html.erb new file mode 100644 index 0000000..bc6dfe8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/views/main/_register_form.html.erb @@ -0,0 +1,45 @@ +

REGISTRATION

+ +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ + +
+ +
+

+ Already have an account? + Login now! +

+
+
diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/views/main/index.html.erb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/views/main/index.html.erb new file mode 100644 index 0000000..9423895 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/views/main/index.html.erb @@ -0,0 +1,8 @@ + + +
+ <% if notice %>

<%= notice %>

<% end %> + <% if session['form'] == 'login' %><%= render "login_form" %> + <% else %> <%= render "register_form" %> + <% end %> +
diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/views/songs/index.html.erb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/views/songs/index.html.erb new file mode 100644 index 0000000..5b3a989 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/views/songs/index.html.erb @@ -0,0 +1,101 @@ + + + +<% if flash[:errors] %> +
+
+ <%= pluralize(flash[:errors].count, "error") %> + prohibited this user from being saved: +
+
    + <% flash[:errors].each do |message| %> +
  • »<%= message %>
  • + <% end %> +
+
+<% end %> + + +
+
+ <% if notice %> +

<%= notice %>

+ <% end %> +
+

All the songs in our hub.

+
+ + + + + + + + + + +
+ <% @allsongs.each do |song| %> +
+ + + + + + <% end %> + + +
Artist Title No. of Time This Song Has Been AddedActions
<%= song.artist %><%= song.title %><%= song.users.count %> +
+ + +
+
+
+
+ +
+ +
+ +

ADD SONG

+ +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+ +
+
+
diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/views/songs/show.html.erb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/views/songs/show.html.erb new file mode 100644 index 0000000..841d791 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/views/songs/show.html.erb @@ -0,0 +1,60 @@ + + + +<% if flash[:errors] %> +
+
+ <%= pluralize(flash[:errors].count, "error") %> + prohibited this user from being saved: +
+
    + <% flash[:errors].each do |message| %> +
  • »<%= message %>
  • + <% end %> +
+
+<% end %> + + +
+
+

Others Who Added + <%= @this_song.artist %> - + <%= @this_song.title %> +

+ + + + + + + + + + <% @playlist.each do |song| %> + + + + + <% end %> + + +
Name Times Added
+ + <%= User.find(song.user_id).first_name %> + <%= User.find(song.user_id).last_name %> + + <%= Playlist.where(user_id: song.user_id).where(song_id: song.song_id).count%>
+
diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/views/users/show.html.erb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/views/users/show.html.erb new file mode 100644 index 0000000..db23af5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/app/views/users/show.html.erb @@ -0,0 +1,47 @@ + + +
+
+ <% if notice %> +

<%= notice %>

+ <% end %> +
+ +

<%= @this_user %>'s Playlist

+ +
+ + + + + + + + + +
+ <% @playlist.each do |song| %> +
+ + + + + <% end %> + + +
Artist Title Times Added
<%= Song.find(song.song_id).artist %><%= Song.find(song.song_id).title %><%= Playlist.where(user_id: song.user_id).where(song_id: song.song_id).count%>
+
+
diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/bin/bundle b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/bin/bundle new file mode 100755 index 0000000..66e9889 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/bin/rails b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/bin/rails new file mode 100755 index 0000000..0138d79 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/bin/rails @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +APP_PATH = File.expand_path('../../config/application', __FILE__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/bin/rake b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/bin/rake new file mode 100755 index 0000000..d87d5f5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/bin/rake @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/bin/setup b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/bin/setup new file mode 100755 index 0000000..acdb2c1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/bin/setup @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +Dir.chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file: + + puts "== Installing dependencies ==" + system "gem install bundler --conservative" + system "bundle check || bundle install" + + # puts "\n== Copying sample files ==" + # unless File.exist?("config/database.yml") + # system "cp config/database.yml.sample config/database.yml" + # end + + puts "\n== Preparing database ==" + system "bin/rake db:setup" + + puts "\n== Removing old logs and tempfiles ==" + system "rm -f log/*" + system "rm -rf tmp/cache" + + puts "\n== Restarting application server ==" + system "touch tmp/restart.txt" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/bin/spring b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/bin/spring new file mode 100755 index 0000000..fb2ec2e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/bin/spring @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +# This file loads spring without using Bundler, in order to be fast. +# It gets overwritten when you run the `spring binstub` command. + +unless defined?(Spring) + require 'rubygems' + require 'bundler' + + lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read) + spring = lockfile.specs.detect { |spec| spec.name == "spring" } + if spring + Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path + gem 'spring', spring.version + require 'spring/binstub' + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config.ru b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config.ru new file mode 100644 index 0000000..bd83b25 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Rails.application diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/application.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/application.rb new file mode 100644 index 0000000..de2fe78 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/application.rb @@ -0,0 +1,35 @@ +require File.expand_path('../boot', __FILE__) + +require "rails" +# Pick the frameworks you want: +require "active_model/railtie" +require "active_job/railtie" +require "active_record/railtie" +require "action_controller/railtie" +require "action_mailer/railtie" +require "action_view/railtie" +require "sprockets/railtie" +# require "rails/test_unit/railtie" + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module RubyBelt + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Do not swallow errors in after_commit/after_rollback callbacks. + config.active_record.raise_in_transactional_callbacks = true + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/boot.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/boot.rb new file mode 100644 index 0000000..6b750f0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/boot.rb @@ -0,0 +1,3 @@ +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) + +require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/database.yml b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/database.yml new file mode 100644 index 0000000..d068e34 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/database.yml @@ -0,0 +1,85 @@ +# PostgreSQL. Versions 8.2 and up are supported. +# +# Install the pg driver: +# gem install pg +# On OS X with Homebrew: +# gem install pg -- --with-pg-config=/usr/local/bin/pg_config +# On OS X with MacPorts: +# gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config +# On Windows: +# gem install pg +# Choose the win32 build. +# Install PostgreSQL and put its /bin directory on your path. +# +# Configure Using Gemfile +# gem 'pg' +# +default: &default + adapter: postgresql + encoding: unicode + # For details on connection pooling, see rails configuration guide + # http://guides.rubyonrails.org/configuring.html#database-pooling + pool: 5 + +development: + <<: *default + database: RubyBelt_development + + # The specified database role being used to connect to postgres. + # To create additional roles in postgres see `$ createuser --help`. + # When left blank, postgres will use the default role. This is + # the same name as the operating system user that initialized the database. + #username: RubyBelt + + # The password associated with the postgres role (username). + #password: + + # Connect on a TCP socket. Omitted by default since the client uses a + # domain socket that doesn't need configuration. Windows does not have + # domain sockets, so uncomment these lines. + #host: localhost + + # The TCP port the server listens on. Defaults to 5432. + # If your server runs on a different port number, change accordingly. + #port: 5432 + + # Schema search path. The server defaults to $user,public + #schema_search_path: myapp,sharedapp,public + + # Minimum log levels, in increasing order: + # debug5, debug4, debug3, debug2, debug1, + # log, notice, warning, error, fatal, and panic + # Defaults to warning. + #min_messages: notice + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: RubyBelt_test + +# As with config/secrets.yml, you never want to store sensitive information, +# like your database password, in your source code. If your source code is +# ever seen by anyone, they now have access to your database. +# +# Instead, provide the password as a unix environment variable when you boot +# the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database +# for a full rundown on how to provide these environment variables in a +# production deployment. +# +# On Heroku and other platform providers, you may have a full connection URL +# available as an environment variable. For example: +# +# DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase" +# +# You can use this database configuration with: +# +# production: +# url: <%= ENV['DATABASE_URL'] %> +# +production: + <<: *default + database: RubyBelt_production + username: obifenix + password: <%= ENV['RUBYBELT_DATABASE_PASSWORD'] %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/environment.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/environment.rb new file mode 100644 index 0000000..ee8d90d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require File.expand_path('../application', __FILE__) + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/environments/development.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/environments/development.rb new file mode 100644 index 0000000..b55e214 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/environments/development.rb @@ -0,0 +1,41 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # Adds additional error checking when serving assets at runtime. + # Checks for improperly declared sprockets dependencies. + # Raises helpful error messages. + config.assets.raise_runtime_errors = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/environments/production.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/environments/production.rb new file mode 100644 index 0000000..5c1b32e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/environments/production.rb @@ -0,0 +1,79 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like + # NGINX, varnish or squid. + # config.action_dispatch.rack_cache = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # 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-Accel-Redirect' # for NGINX + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug + + # Prepend all log lines with the following tags. + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/environments/test.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/environments/test.rb new file mode 100644 index 0000000..1c19f08 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/environments/test.rb @@ -0,0 +1,42 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure static file server for tests with Cache-Control for performance. + config.serve_static_files = true + config.static_cache_control = 'public, max-age=3600' + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Randomize the order test cases are executed. + config.active_support.test_order = :random + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/initializers/assets.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/initializers/assets.rb new file mode 100644 index 0000000..70f4c58 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/initializers/assets.rb @@ -0,0 +1,11 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path +# Rails.application.config.assets.paths << Emoji.images_path + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. +Rails.application.config.assets.precompile += %w( main.js ) diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/initializers/backtrace_silencers.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..59385cd --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/initializers/cookies_serializer.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/initializers/cookies_serializer.rb new file mode 100644 index 0000000..7f70458 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/initializers/cookies_serializer.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/initializers/filter_parameter_logging.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000..4a994e1 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/initializers/inflections.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/initializers/inflections.rb new file mode 100644 index 0000000..ac033bf --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/initializers/mime_types.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/initializers/mime_types.rb new file mode 100644 index 0000000..dc18996 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/initializers/mime_types.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/initializers/session_store.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/initializers/session_store.rb new file mode 100644 index 0000000..c06f11f --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/initializers/session_store.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.session_store :cookie_store, key: '_RubyBelt_session' diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/initializers/wrap_parameters.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..33725e9 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] if respond_to?(:wrap_parameters) +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/locales/en.yml b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/locales/en.yml new file mode 100644 index 0000000..0653957 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/locales/en.yml @@ -0,0 +1,23 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/routes.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/routes.rb new file mode 100644 index 0000000..75afed2 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/routes.rb @@ -0,0 +1,60 @@ +Rails.application.routes.draw do + root 'main#index' + get 'main/sw' => 'main#switch' + post 'main/register' => 'main#register' + post 'main/login' => 'main#login' + delete 'logout' => 'main#logout' + # delete '' + + post 'playlist/:id' => 'playlists#add_to_playlist' + delete 'playlist/:id' => 'playlists#add_to_playlist' + + + resources :main + resources :users + resources :songs + + + # Prefix Verb URI Pattern Controller#Action + # ====================================================================== [ Main Routs ] + # root GET / main#index | + # main_sw GET /main/sw(.:format) main#switch <---- + # main_register POST /main/register(.:format) main#register + # main_login POST /main/login(.:format) main#login + # logout DELETE /logout(.:format) main#logout + # main_index GET /main(.:format) main#index + # POST /main(.:format) main#create + # new_main GET /main/new(.:format) main#new + # edit_main GET /main/:id/edit(.:format) main#edit + # main GET /main/:id(.:format) main#show + # PATCH /main/:id(.:format) main#update + # PUT /main/:id(.:format) main#update + # DELETE /main/:id(.:format) main#destroy + # ====================================================================== [ Users Routes ] + # users GET /users(.:format) users#index | + # POST /users(.:format) users#create <---- + # new_user GET /users/new(.:format) users#new + # edit_user GET /users/:id/edit(.:format) users#edit + # user GET /users/:id(.:format) users#show + # PATCH /users/:id(.:format) users#update + # PUT /users/:id(.:format) users#update + # DELETE /users/:id(.:format) users#destroy + # ====================================================================== [ Songs Routs ] + # songs GET /songs(.:format) songs#index | + # POST /songs(.:format) songs#create <---- + # new_song GET /songs/new(.:format) songs#new + # edit_song GET /songs/:id/edit(.:format) songs#edit + # song GET /songs/:id(.:format) songs#show + # PATCH /songs/:id(.:format) songs#update + # PUT /songs/:id(.:format) songs#update + # DELETE /songs/:id(.:format) songs#destroy + # ====================================================================== [ Playlist Routs ] + # playlist_index GET /playlist(.:format) playlist#index | + # POST /playlist(.:format) playlist#create <---- + # new_playlist GET /playlist/new(.:format) playlist#new + # edit_playlist GET /playlist/:id/edit(.:format) playlist#edit + # playlist GET /playlist/:id(.:format) playlist#show + # PATCH /playlist/:id(.:format) playlist#update + # PUT /playlist/:id(.:format) playlist#update + # DELETE /playlist/:id(.:format) playlist#destroy +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/secrets.yml b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/secrets.yml new file mode 100644 index 0000000..d8b4b61 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/config/secrets.yml @@ -0,0 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rake secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: d96711869702f2976357f32717ca68d41e9e02e97c4fd7f4bf5ade1917d5c18cd0232a905a5b7e2b09ae1fc8be8debf2352a89140b60ece402be886c5835494b + +test: + secret_key_base: d9589ac86b3991af22681059ac86b6572790f686ddb7d0a3c798abcd6e98bb6add7348c2f7cc17c90dd773872e48c2588ff26a6942479672f604f8e7db84bfcc + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/db/migrate/20180817183037_create_users.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/db/migrate/20180817183037_create_users.rb new file mode 100644 index 0000000..e22193e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/db/migrate/20180817183037_create_users.rb @@ -0,0 +1,12 @@ +class CreateUsers < ActiveRecord::Migration + def change + create_table :users do |t| + t.string :first_name + t.string :last_name + t.string :email + t.string :password_digest + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/db/migrate/20180817183944_create_songs.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/db/migrate/20180817183944_create_songs.rb new file mode 100644 index 0000000..7a4c376 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/db/migrate/20180817183944_create_songs.rb @@ -0,0 +1,10 @@ +class CreateSongs < ActiveRecord::Migration + def change + create_table :songs do |t| + t.string :title + t.string :artist + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/db/migrate/20180817184058_create_playlists.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/db/migrate/20180817184058_create_playlists.rb new file mode 100644 index 0000000..a68f55e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/db/migrate/20180817184058_create_playlists.rb @@ -0,0 +1,10 @@ +class CreatePlaylists < ActiveRecord::Migration + def change + create_table :playlists do |t| + t.integer :user_id + t.integer :song_id + + t.timestamps null: false + end + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/db/schema.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/db/schema.rb new file mode 100644 index 0000000..3a4828e --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/db/schema.rb @@ -0,0 +1,42 @@ +# encoding: UTF-8 +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 20180817184058) do + + # These are extensions that must be enabled in order to support this database + enable_extension "plpgsql" + + create_table "playlists", force: :cascade do |t| + t.integer "user_id" + t.integer "song_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "songs", force: :cascade do |t| + t.string "title" + t.string "artist" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "users", force: :cascade do |t| + t.string "first_name" + t.string "last_name" + t.string "email" + t.string "password_digest" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/db/seeds.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/db/seeds.rb new file mode 100644 index 0000000..4edb1e8 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). +# +# Examples: +# +# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) +# Mayor.create(name: 'Emanuel', city: cities.first) diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/lib/assets/.keep b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/lib/assets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/lib/tasks/.keep b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/lib/tasks/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/log/.keep b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/log/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/public/404.html b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/public/404.html new file mode 100644 index 0000000..b612547 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +
+
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/public/422.html b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/public/422.html new file mode 100644 index 0000000..a21f82b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
+
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/public/500.html b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/public/500.html new file mode 100644 index 0000000..061abc5 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/public/500.html @@ -0,0 +1,66 @@ + + + + We're sorry, but something went wrong (500) + + + + + + +
+
+

We're sorry, but something went wrong.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/public/favicon.ico b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/public/robots.txt b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/public/robots.txt new file mode 100644 index 0000000..3c9c7c0 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-agent: * +# Disallow: / diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/controllers/main_controller_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/controllers/main_controller_spec.rb new file mode 100644 index 0000000..bb4c3f6 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/controllers/main_controller_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe MainController, type: :controller do + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/controllers/playlists_controller_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/controllers/playlists_controller_spec.rb new file mode 100644 index 0000000..b71e874 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/controllers/playlists_controller_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe PlaylistsController, type: :controller do + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/controllers/songs_controller_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/controllers/songs_controller_spec.rb new file mode 100644 index 0000000..55c2e54 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/controllers/songs_controller_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe SongsController, type: :controller do + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/controllers/users_controller_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/controllers/users_controller_spec.rb new file mode 100644 index 0000000..e2c3d3b --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/controllers/users_controller_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe UsersController, type: :controller do + +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/factories/playlists.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/factories/playlists.rb new file mode 100644 index 0000000..f57fe66 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/factories/playlists.rb @@ -0,0 +1,6 @@ +FactoryBot.define do + factory :playlist do + user_id 1 + song_id 1 + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/factories/songs.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/factories/songs.rb new file mode 100644 index 0000000..fe3c36c --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/factories/songs.rb @@ -0,0 +1,7 @@ +FactoryBot.define do + factory :song do + title "MyString" + artist "MyString" + user_id 1 + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/factories/users.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/factories/users.rb new file mode 100644 index 0000000..4824d8d --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/factories/users.rb @@ -0,0 +1,8 @@ +FactoryBot.define do + factory :user do + first_name "MyString" + last_name "MyString" + email "MyString" + password "" + end +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/helpers/main_helper_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/helpers/main_helper_spec.rb new file mode 100644 index 0000000..f83664a --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/helpers/main_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the MainHelper. For example: +# +# describe MainHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe MainHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/helpers/playlists_helper_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/helpers/playlists_helper_spec.rb new file mode 100644 index 0000000..d326459 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/helpers/playlists_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the PlaylistsHelper. For example: +# +# describe PlaylistsHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe PlaylistsHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/helpers/songs_helper_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/helpers/songs_helper_spec.rb new file mode 100644 index 0000000..967abb3 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/helpers/songs_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the SongsHelper. For example: +# +# describe SongsHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe SongsHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/helpers/users_helper_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/helpers/users_helper_spec.rb new file mode 100644 index 0000000..b2e3444 --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/helpers/users_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the UsersHelper. For example: +# +# describe UsersHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe UsersHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/models/playlist_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/models/playlist_spec.rb new file mode 100644 index 0000000..b48498a --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/models/playlist_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Playlist, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/models/song_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/models/song_spec.rb new file mode 100644 index 0000000..0d0000f --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/models/song_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Song, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/models/user_spec.rb b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/models/user_spec.rb new file mode 100644 index 0000000..47a31bb --- /dev/null +++ b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/spec/models/user_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe User, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/vendor/assets/javascripts/.keep b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/vendor/assets/javascripts/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/vendor/assets/stylesheets/.keep b/ObiFenix-RubyStack/Ruby-Stack/RubyBelt/vendor/assets/stylesheets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/ObiFenix-RubyStack/Vagrantfile b/ObiFenix-RubyStack/Vagrantfile index c19eae2..058cf3a 100644 --- a/ObiFenix-RubyStack/Vagrantfile +++ b/ObiFenix-RubyStack/Vagrantfile @@ -67,14 +67,16 @@ Vagrant.configure("2") do |config| # apt-get update # apt-get install -y apache2 # SHELL -end -Vagrant.configure("2") do |config| config.vm.box = "ubuntu/trusty64" - config.vm.network "forwarded_port", guest: 8000, host: 8000, host_ip: "127.0.0.1" + config.vm.network "forwarded_port", guest: 3000, host: 3000, host_ip: "127.0.0.1" config.vm.provision :shell, path: "bootstrap.sh", privileged: false config.vm.provider "virtualbox" do |vb| vb.customize ["modifyvm", :id, "--memory", "2048"] vb.customize ["modifyvm", :id, "--cpus", "2"] end + +# config.push.define "heroku" do |push| +# push.app = "my_application" +# end end