├── .gitignore ├── Gemfile ├── Gemfile.lock ├── README.md ├── Rakefile ├── app ├── assets │ ├── config │ │ └── manifest.js │ ├── images │ │ └── .keep │ ├── javascripts │ │ ├── application.js │ │ ├── cable.js │ │ └── channels │ │ │ └── .keep │ └── stylesheets │ │ └── application.css ├── channels │ └── application_cable │ │ ├── channel.rb │ │ └── connection.rb ├── controllers │ ├── application_controller.rb │ └── concerns │ │ └── .keep ├── helpers │ └── application_helper.rb ├── jobs │ └── application_job.rb ├── mailers │ └── application_mailer.rb ├── models │ ├── application_record.rb │ └── concerns │ │ └── .keep └── views │ └── layouts │ ├── application.html.erb │ ├── mailer.html.erb │ └── mailer.text.erb ├── bin ├── bundle ├── rails ├── rake ├── setup ├── spring ├── update └── yarn ├── config.ru ├── config ├── application.rb ├── boot.rb ├── cable.yml ├── database.yml ├── environment.rb ├── environments │ ├── development.rb │ ├── production.rb │ └── test.rb ├── initializers │ ├── application_controller_renderer.rb │ ├── assets.rb │ ├── backtrace_silencers.rb │ ├── cookies_serializer.rb │ ├── ember.rb │ ├── filter_parameter_logging.rb │ ├── inflections.rb │ ├── mime_types.rb │ └── wrap_parameters.rb ├── locales │ └── en.yml ├── puma.rb ├── routes.rb ├── secrets.yml └── spring.rb ├── db └── seeds.rb ├── frontend ├── .editorconfig ├── .ember-cli ├── .eslintrc.js ├── .gitignore ├── .travis.yml ├── .watchmanconfig ├── README.md ├── app │ ├── adapters │ │ └── application.js │ ├── app.js │ ├── components │ │ ├── .gitkeep │ │ ├── flashcard-listing.js │ │ ├── list-filter.js │ │ ├── pack-listing.js │ │ ├── question-filter.js │ │ ├── question-list.js │ │ └── rental-listing.js │ ├── controllers │ │ ├── .gitkeep │ │ ├── create.js │ │ ├── flashcard.js │ │ ├── packs.js │ │ ├── questions.js │ │ ├── rentals.js │ │ └── user.js │ ├── helpers │ │ ├── .gitkeep │ │ ├── pack-property-type.js │ │ └── rental-property-type.js │ ├── index.html │ ├── models │ │ ├── .gitkeep │ │ ├── create.js │ │ ├── flashcard.js │ │ ├── pack.js │ │ └── rental.js │ ├── resolver.js │ ├── router.js │ ├── routes │ │ ├── .gitkeep │ │ ├── create.js │ │ ├── flashcard.js │ │ ├── index.js │ │ ├── packs.js │ │ ├── rentals.js │ │ └── start.js │ ├── styles │ │ └── app.css │ └── templates │ │ ├── application.hbs │ │ ├── components │ │ ├── .gitkeep │ │ ├── flashcard-listing.hbs │ │ ├── list-filter.hbs │ │ ├── pack-listing.hbs │ │ ├── question-filter.hbs │ │ ├── question-list.hbs │ │ └── rental-listing.hbs │ │ ├── create.hbs │ │ ├── flashcard.hbs │ │ ├── index.hbs │ │ ├── packs.hbs │ │ ├── rentals.hbs │ │ └── start.hbs ├── bower.json ├── config │ ├── environment.js │ └── targets.js ├── ember-cli-build.js ├── mirage │ ├── config.js │ ├── scenarios │ │ └── default.js │ └── serializers │ │ └── application.js ├── package-lock.json ├── package.json ├── public │ ├── assets │ │ └── images │ │ │ └── teaching.png │ ├── public │ │ └── assets │ │ │ └── image │ │ │ ├── discourse.png │ │ │ ├── image.png │ │ │ ├── introduction.png │ │ │ └── splash-laptop-desktop.BwuW.jpg │ └── robots.txt ├── testem.js ├── tests │ ├── acceptance │ │ └── list-packs-test.js │ ├── helpers │ │ └── .gitkeep │ ├── index.html │ ├── integration │ │ ├── .gitkeep │ │ ├── components │ │ │ ├── flashcard-listing-test.js │ │ │ ├── list-filter-test.js │ │ │ ├── pack-listing-test.js │ │ │ ├── question-filter-test.js │ │ │ ├── question-list-test.js │ │ │ └── rental-listing-test.js │ │ └── helpers │ │ │ ├── pack-property-type-test.js │ │ │ └── rental-property-type-test.js │ ├── test-helper.js │ └── unit │ │ ├── .gitkeep │ │ ├── adapters │ │ └── application-test.js │ │ ├── controllers │ │ ├── create-test.js │ │ ├── flashcard-test.js │ │ ├── packs-test.js │ │ ├── questions-test.js │ │ ├── rentals-test.js │ │ ├── user-select-test.js │ │ └── user-test.js │ │ ├── models │ │ ├── create-test.js │ │ ├── flashcard-test.js │ │ ├── pack-test.js │ │ └── rental-test.js │ │ └── routes │ │ ├── create-test.js │ │ ├── flashcard-test.js │ │ ├── index-test.js │ │ ├── packs-test.js │ │ ├── rentals-test.js │ │ └── start-test.js └── vendor │ ├── .gitkeep │ └── ember-tutorial.css ├── lib ├── assets │ └── .keep └── tasks │ └── .keep ├── log └── .keep ├── package.json ├── public ├── 404.html ├── 422.html ├── 500.html ├── apple-touch-icon-precomposed.png ├── apple-touch-icon.png ├── favicon.ico └── robots.txt ├── test ├── application_system_test_case.rb ├── controllers │ └── .keep ├── fixtures │ ├── .keep │ └── files │ │ └── .keep ├── helpers │ └── .keep ├── integration │ └── .keep ├── mailers │ └── .keep ├── models │ └── .keep ├── system │ └── .keep └── test_helper.rb ├── tmp └── .keep └── vendor └── .keep /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files for more about ignoring files. 2 | # 3 | # If you find yourself ignoring temporary files generated by your text editor 4 | # or operating system, you probably want to add a global ignore instead: 5 | # git config --global core.excludesfile '~/.gitignore_global' 6 | 7 | # Ignore bundler config. 8 | /.bundle 9 | 10 | # Ignore all logfiles and tempfiles. 11 | /log/* 12 | /tmp/* 13 | !/log/.keep 14 | !/tmp/.keep 15 | 16 | /node_modules 17 | /yarn-error.log 18 | 19 | .byebug_history 20 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | git_source(:github) do |repo_name| 4 | repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/") 5 | "https://github.com/#{repo_name}.git" 6 | end 7 | 8 | 9 | # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' 10 | gem 'rails', '~> 5.1.6' 11 | # Use postgresql as the database for Active Record 12 | gem 'pg', '>= 0.18', '< 2.0' 13 | # Use Puma as the app server 14 | gem 'puma', '~> 3.7' 15 | # Use SCSS for stylesheets 16 | gem 'sass-rails', '~> 5.0' 17 | # Use Uglifier as compressor for JavaScript assets 18 | gem 'uglifier', '>= 1.3.0' 19 | # See https://github.com/rails/execjs#readme for more supported runtimes 20 | # gem 'therubyracer', platforms: :ruby 21 | 22 | # Use CoffeeScript for .coffee assets and views 23 | gem 'coffee-rails', '~> 4.2' 24 | # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks 25 | gem 'turbolinks', '~> 5' 26 | # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder 27 | gem 'jbuilder', '~> 2.5' 28 | # Use Redis adapter to run Action Cable in production 29 | # gem 'redis', '~> 4.0' 30 | # Use ActiveModel has_secure_password 31 | # gem 'bcrypt', '~> 3.1.7' 32 | 33 | # Use Capistrano for deployment 34 | # gem 'capistrano-rails', group: :development 35 | 36 | gem "ember-cli-rails" 37 | 38 | group :development, :test do 39 | # Call 'byebug' anywhere in the code to stop execution and get a debugger console 40 | gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] 41 | # Adds support for Capybara system testing and selenium driver 42 | gem 'capybara', '~> 2.13' 43 | gem 'selenium-webdriver' 44 | end 45 | 46 | group :development do 47 | # Access an IRB console on exception pages or by using <%= console %> anywhere in the code. 48 | gem 'web-console', '>= 3.3.0' 49 | gem 'listen', '>= 3.0.5', '< 3.2' 50 | # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring 51 | gem 'spring' 52 | gem 'spring-watcher-listen', '~> 2.0.0' 53 | end 54 | 55 | # Windows does not include zoneinfo files, so bundle the tzinfo-data gem 56 | gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] 57 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | actioncable (5.1.6) 5 | actionpack (= 5.1.6) 6 | nio4r (~> 2.0) 7 | websocket-driver (~> 0.6.1) 8 | actionmailer (5.1.6) 9 | actionpack (= 5.1.6) 10 | actionview (= 5.1.6) 11 | activejob (= 5.1.6) 12 | mail (~> 2.5, >= 2.5.4) 13 | rails-dom-testing (~> 2.0) 14 | actionpack (5.1.6) 15 | actionview (= 5.1.6) 16 | activesupport (= 5.1.6) 17 | rack (~> 2.0) 18 | rack-test (>= 0.6.3) 19 | rails-dom-testing (~> 2.0) 20 | rails-html-sanitizer (~> 1.0, >= 1.0.2) 21 | actionview (5.1.6) 22 | activesupport (= 5.1.6) 23 | builder (~> 3.1) 24 | erubi (~> 1.4) 25 | rails-dom-testing (~> 2.0) 26 | rails-html-sanitizer (~> 1.0, >= 1.0.3) 27 | activejob (5.1.6) 28 | activesupport (= 5.1.6) 29 | globalid (>= 0.3.6) 30 | activemodel (5.1.6) 31 | activesupport (= 5.1.6) 32 | activerecord (5.1.6) 33 | activemodel (= 5.1.6) 34 | activesupport (= 5.1.6) 35 | arel (~> 8.0) 36 | activesupport (5.1.6) 37 | concurrent-ruby (~> 1.0, >= 1.0.2) 38 | i18n (>= 0.7, < 2) 39 | minitest (~> 5.1) 40 | tzinfo (~> 1.1) 41 | addressable (2.5.2) 42 | public_suffix (>= 2.0.2, < 4.0) 43 | arel (8.0.0) 44 | bindex (0.5.0) 45 | builder (3.2.3) 46 | byebug (10.0.2) 47 | capybara (2.18.0) 48 | addressable 49 | mini_mime (>= 0.1.3) 50 | nokogiri (>= 1.3.3) 51 | rack (>= 1.0.0) 52 | rack-test (>= 0.5.4) 53 | xpath (>= 2.0, < 4.0) 54 | childprocess (0.9.0) 55 | ffi (~> 1.0, >= 1.0.11) 56 | climate_control (0.2.0) 57 | cocaine (0.5.8) 58 | climate_control (>= 0.0.3, < 1.0) 59 | coffee-rails (4.2.2) 60 | coffee-script (>= 2.2.0) 61 | railties (>= 4.0.0) 62 | coffee-script (2.4.1) 63 | coffee-script-source 64 | execjs 65 | coffee-script-source (1.12.2) 66 | concurrent-ruby (1.0.5) 67 | crass (1.0.4) 68 | ember-cli-rails (0.10.0) 69 | cocaine (~> 0.5.8) 70 | ember-cli-rails-assets (~> 0.6.2) 71 | html_page (~> 0.1.0) 72 | railties (>= 3.2) 73 | ember-cli-rails-assets (0.6.2) 74 | erubi (1.7.1) 75 | execjs (2.7.0) 76 | ffi (1.9.23) 77 | globalid (0.4.1) 78 | activesupport (>= 4.2.0) 79 | html_page (0.1.0) 80 | i18n (1.0.1) 81 | concurrent-ruby (~> 1.0) 82 | jbuilder (2.7.0) 83 | activesupport (>= 4.2.0) 84 | multi_json (>= 1.2) 85 | listen (3.1.5) 86 | rb-fsevent (~> 0.9, >= 0.9.4) 87 | rb-inotify (~> 0.9, >= 0.9.7) 88 | ruby_dep (~> 1.2) 89 | loofah (2.2.2) 90 | crass (~> 1.0.2) 91 | nokogiri (>= 1.5.9) 92 | mail (2.7.0) 93 | mini_mime (>= 0.1.1) 94 | method_source (0.9.0) 95 | mini_mime (1.0.0) 96 | mini_portile2 (2.3.0) 97 | minitest (5.11.3) 98 | multi_json (1.13.1) 99 | nio4r (2.3.0) 100 | nokogiri (1.8.2) 101 | mini_portile2 (~> 2.3.0) 102 | pg (1.0.0) 103 | public_suffix (3.0.2) 104 | puma (3.11.4) 105 | rack (2.0.4) 106 | rack-test (1.0.0) 107 | rack (>= 1.0, < 3) 108 | rails (5.1.6) 109 | actioncable (= 5.1.6) 110 | actionmailer (= 5.1.6) 111 | actionpack (= 5.1.6) 112 | actionview (= 5.1.6) 113 | activejob (= 5.1.6) 114 | activemodel (= 5.1.6) 115 | activerecord (= 5.1.6) 116 | activesupport (= 5.1.6) 117 | bundler (>= 1.3.0) 118 | railties (= 5.1.6) 119 | sprockets-rails (>= 2.0.0) 120 | rails-dom-testing (2.0.3) 121 | activesupport (>= 4.2.0) 122 | nokogiri (>= 1.6) 123 | rails-html-sanitizer (1.0.4) 124 | loofah (~> 2.2, >= 2.2.2) 125 | railties (5.1.6) 126 | actionpack (= 5.1.6) 127 | activesupport (= 5.1.6) 128 | method_source 129 | rake (>= 0.8.7) 130 | thor (>= 0.18.1, < 2.0) 131 | rake (12.3.1) 132 | rb-fsevent (0.10.3) 133 | rb-inotify (0.9.10) 134 | ffi (>= 0.5.0, < 2) 135 | ruby_dep (1.5.0) 136 | rubyzip (1.2.1) 137 | sass (3.5.6) 138 | sass-listen (~> 4.0.0) 139 | sass-listen (4.0.0) 140 | rb-fsevent (~> 0.9, >= 0.9.4) 141 | rb-inotify (~> 0.9, >= 0.9.7) 142 | sass-rails (5.0.7) 143 | railties (>= 4.0.0, < 6) 144 | sass (~> 3.1) 145 | sprockets (>= 2.8, < 4.0) 146 | sprockets-rails (>= 2.0, < 4.0) 147 | tilt (>= 1.1, < 3) 148 | selenium-webdriver (3.11.0) 149 | childprocess (~> 0.5) 150 | rubyzip (~> 1.2) 151 | spring (2.0.2) 152 | activesupport (>= 4.2) 153 | spring-watcher-listen (2.0.1) 154 | listen (>= 2.7, < 4.0) 155 | spring (>= 1.2, < 3.0) 156 | sprockets (3.7.1) 157 | concurrent-ruby (~> 1.0) 158 | rack (> 1, < 3) 159 | sprockets-rails (3.2.1) 160 | actionpack (>= 4.0) 161 | activesupport (>= 4.0) 162 | sprockets (>= 3.0.0) 163 | thor (0.20.0) 164 | thread_safe (0.3.6) 165 | tilt (2.0.8) 166 | turbolinks (5.1.1) 167 | turbolinks-source (~> 5.1) 168 | turbolinks-source (5.1.0) 169 | tzinfo (1.2.5) 170 | thread_safe (~> 0.1) 171 | uglifier (4.1.9) 172 | execjs (>= 0.3.0, < 3) 173 | web-console (3.6.0) 174 | actionview (>= 5.0) 175 | activemodel (>= 5.0) 176 | bindex (>= 0.4.0) 177 | railties (>= 5.0) 178 | websocket-driver (0.6.5) 179 | websocket-extensions (>= 0.1.0) 180 | websocket-extensions (0.1.3) 181 | xpath (3.0.0) 182 | nokogiri (~> 1.8) 183 | 184 | PLATFORMS 185 | ruby 186 | 187 | DEPENDENCIES 188 | byebug 189 | capybara (~> 2.13) 190 | coffee-rails (~> 4.2) 191 | ember-cli-rails 192 | jbuilder (~> 2.5) 193 | listen (>= 3.0.5, < 3.2) 194 | pg (>= 0.18, < 2.0) 195 | puma (~> 3.7) 196 | rails (~> 5.1.6) 197 | sass-rails (~> 5.0) 198 | selenium-webdriver 199 | spring 200 | spring-watcher-listen (~> 2.0.0) 201 | turbolinks (~> 5) 202 | tzinfo-data 203 | uglifier (>= 1.3.0) 204 | web-console (>= 3.3.0) 205 | 206 | BUNDLED WITH 207 | 1.16.1 208 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # README 2 | 3 | Front-end: ember.js 4 | Back-end: ruby on rails 5 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | # Add your own tasks in files placed in lib/tasks ending in .rake, 2 | # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. 3 | 4 | require_relative 'config/application' 5 | 6 | Rails.application.load_tasks 7 | -------------------------------------------------------------------------------- /app/assets/config/manifest.js: -------------------------------------------------------------------------------- 1 | //= link_tree ../images 2 | //= link_directory ../javascripts .js 3 | //= link_directory ../stylesheets .css 4 | -------------------------------------------------------------------------------- /app/assets/images/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/app/assets/images/.keep -------------------------------------------------------------------------------- /app/assets/javascripts/application.js: -------------------------------------------------------------------------------- 1 | // This is a manifest file that'll be compiled into application.js, which will include all the files 2 | // listed below. 3 | // 4 | // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, or any plugin's 5 | // vendor/assets/javascripts directory can be referenced here using a relative path. 6 | // 7 | // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the 8 | // compiled file. JavaScript code in this file should be added after the last require_* statement. 9 | // 10 | // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details 11 | // about supported directives. 12 | // 13 | //= require rails-ujs 14 | //= require turbolinks 15 | //= require_tree . 16 | -------------------------------------------------------------------------------- /app/assets/javascripts/cable.js: -------------------------------------------------------------------------------- 1 | // Action Cable provides the framework to deal with WebSockets in Rails. 2 | // You can generate new channels where WebSocket features live using the `rails generate channel` command. 3 | // 4 | //= require action_cable 5 | //= require_self 6 | //= require_tree ./channels 7 | 8 | (function() { 9 | this.App || (this.App = {}); 10 | 11 | App.cable = ActionCable.createConsumer(); 12 | 13 | }).call(this); 14 | -------------------------------------------------------------------------------- /app/assets/javascripts/channels/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/app/assets/javascripts/channels/.keep -------------------------------------------------------------------------------- /app/assets/stylesheets/application.css: -------------------------------------------------------------------------------- 1 | /* 2 | * This is a manifest file that'll be compiled into application.css, which will include all the files 3 | * listed below. 4 | * 5 | * Any CSS and SCSS file within this directory, lib/assets/stylesheets, or any plugin's 6 | * vendor/assets/stylesheets directory can be referenced here using a relative path. 7 | * 8 | * You're free to add application-wide styles to this file and they'll appear at the bottom of the 9 | * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS 10 | * files in this directory. Styles in this file should be added after the last require_* statement. 11 | * It is generally better to create a new file per style scope. 12 | * 13 | *= require_tree . 14 | *= require_self 15 | */ 16 | -------------------------------------------------------------------------------- /app/channels/application_cable/channel.rb: -------------------------------------------------------------------------------- 1 | module ApplicationCable 2 | class Channel < ActionCable::Channel::Base 3 | end 4 | end 5 | -------------------------------------------------------------------------------- /app/channels/application_cable/connection.rb: -------------------------------------------------------------------------------- 1 | module ApplicationCable 2 | class Connection < ActionCable::Connection::Base 3 | end 4 | end 5 | -------------------------------------------------------------------------------- /app/controllers/application_controller.rb: -------------------------------------------------------------------------------- 1 | class ApplicationController < ActionController::Base 2 | protect_from_forgery with: :exception 3 | end 4 | -------------------------------------------------------------------------------- /app/controllers/concerns/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/app/controllers/concerns/.keep -------------------------------------------------------------------------------- /app/helpers/application_helper.rb: -------------------------------------------------------------------------------- 1 | module ApplicationHelper 2 | end 3 | -------------------------------------------------------------------------------- /app/jobs/application_job.rb: -------------------------------------------------------------------------------- 1 | class ApplicationJob < ActiveJob::Base 2 | end 3 | -------------------------------------------------------------------------------- /app/mailers/application_mailer.rb: -------------------------------------------------------------------------------- 1 | class ApplicationMailer < ActionMailer::Base 2 | default from: 'from@example.com' 3 | layout 'mailer' 4 | end 5 | -------------------------------------------------------------------------------- /app/models/application_record.rb: -------------------------------------------------------------------------------- 1 | class ApplicationRecord < ActiveRecord::Base 2 | self.abstract_class = true 3 | end 4 | -------------------------------------------------------------------------------- /app/models/concerns/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/app/models/concerns/.keep -------------------------------------------------------------------------------- /app/views/layouts/application.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | EmberSpin 5 | <%= csrf_meta_tags %> 6 | 7 | <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> 8 | <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> 9 | 10 | 11 | 12 | <%= yield %> 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/views/layouts/mailer.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | 10 | 11 | <%= yield %> 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/views/layouts/mailer.text.erb: -------------------------------------------------------------------------------- 1 | <%= yield %> 2 | -------------------------------------------------------------------------------- /bin/bundle: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) 3 | load Gem.bin_path('bundler', 'bundle') 4 | -------------------------------------------------------------------------------- /bin/rails: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | begin 3 | load File.expand_path('../spring', __FILE__) 4 | rescue LoadError => e 5 | raise unless e.message.include?('spring') 6 | end 7 | APP_PATH = File.expand_path('../config/application', __dir__) 8 | require_relative '../config/boot' 9 | require 'rails/commands' 10 | -------------------------------------------------------------------------------- /bin/rake: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | begin 3 | load File.expand_path('../spring', __FILE__) 4 | rescue LoadError => e 5 | raise unless e.message.include?('spring') 6 | end 7 | require_relative '../config/boot' 8 | require 'rake' 9 | Rake.application.run 10 | -------------------------------------------------------------------------------- /bin/setup: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'pathname' 3 | require 'fileutils' 4 | include FileUtils 5 | 6 | # path to your application root. 7 | APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) 8 | 9 | def system!(*args) 10 | system(*args) || abort("\n== Command #{args} failed ==") 11 | end 12 | 13 | chdir APP_ROOT do 14 | # This script is a starting point to setup your application. 15 | # Add necessary setup steps to this file. 16 | 17 | puts '== Installing dependencies ==' 18 | system! 'gem install bundler --conservative' 19 | system('bundle check') || system!('bundle install') 20 | 21 | # Install JavaScript dependencies if using Yarn 22 | # system('bin/yarn') 23 | 24 | 25 | # puts "\n== Copying sample files ==" 26 | # unless File.exist?('config/database.yml') 27 | # cp 'config/database.yml.sample', 'config/database.yml' 28 | # end 29 | 30 | puts "\n== Preparing database ==" 31 | system! 'bin/rails db:setup' 32 | 33 | puts "\n== Removing old logs and tempfiles ==" 34 | system! 'bin/rails log:clear tmp:clear' 35 | 36 | puts "\n== Restarting application server ==" 37 | system! 'bin/rails restart' 38 | end 39 | -------------------------------------------------------------------------------- /bin/spring: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | # This file loads spring without using Bundler, in order to be fast. 4 | # It gets overwritten when you run the `spring binstub` command. 5 | 6 | unless defined?(Spring) 7 | require 'rubygems' 8 | require 'bundler' 9 | 10 | lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read) 11 | spring = lockfile.specs.detect { |spec| spec.name == "spring" } 12 | if spring 13 | Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path 14 | gem 'spring', spring.version 15 | require 'spring/binstub' 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /bin/update: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'pathname' 3 | require 'fileutils' 4 | include FileUtils 5 | 6 | # path to your application root. 7 | APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) 8 | 9 | def system!(*args) 10 | system(*args) || abort("\n== Command #{args} failed ==") 11 | end 12 | 13 | chdir APP_ROOT do 14 | # This script is a way to update your development environment automatically. 15 | # Add necessary update steps to this file. 16 | 17 | puts '== Installing dependencies ==' 18 | system! 'gem install bundler --conservative' 19 | system('bundle check') || system!('bundle install') 20 | 21 | puts "\n== Updating database ==" 22 | system! 'bin/rails db:migrate' 23 | 24 | puts "\n== Removing old logs and tempfiles ==" 25 | system! 'bin/rails log:clear tmp:clear' 26 | 27 | puts "\n== Restarting application server ==" 28 | system! 'bin/rails restart' 29 | end 30 | -------------------------------------------------------------------------------- /bin/yarn: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | VENDOR_PATH = File.expand_path('..', __dir__) 3 | Dir.chdir(VENDOR_PATH) do 4 | begin 5 | exec "yarnpkg #{ARGV.join(" ")}" 6 | rescue Errno::ENOENT 7 | $stderr.puts "Yarn executable was not detected in the system." 8 | $stderr.puts "Download Yarn at https://yarnpkg.com/en/docs/install" 9 | exit 1 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /config.ru: -------------------------------------------------------------------------------- 1 | # This file is used by Rack-based servers to start the application. 2 | 3 | require_relative 'config/environment' 4 | 5 | run Rails.application 6 | -------------------------------------------------------------------------------- /config/application.rb: -------------------------------------------------------------------------------- 1 | require_relative 'boot' 2 | 3 | require 'rails/all' 4 | 5 | # Require the gems listed in Gemfile, including any gems 6 | # you've limited to :test, :development, or :production. 7 | Bundler.require(*Rails.groups) 8 | 9 | module EmberSpin 10 | class Application < Rails::Application 11 | # Initialize configuration defaults for originally generated Rails version. 12 | config.load_defaults 5.1 13 | 14 | # Settings in config/environments/* take precedence over those specified here. 15 | # Application configuration should go into files in config/initializers 16 | # -- all .rb files in that directory are automatically loaded. 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /config/boot.rb: -------------------------------------------------------------------------------- 1 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) 2 | 3 | require 'bundler/setup' # Set up gems listed in the Gemfile. 4 | -------------------------------------------------------------------------------- /config/cable.yml: -------------------------------------------------------------------------------- 1 | development: 2 | adapter: async 3 | 4 | test: 5 | adapter: async 6 | 7 | production: 8 | adapter: redis 9 | url: redis://localhost:6379/1 10 | channel_prefix: ember-spin_production 11 | -------------------------------------------------------------------------------- /config/database.yml: -------------------------------------------------------------------------------- 1 | # PostgreSQL. Versions 9.1 and up are supported. 2 | # 3 | # Install the pg driver: 4 | # gem install pg 5 | # On OS X with Homebrew: 6 | # gem install pg -- --with-pg-config=/usr/local/bin/pg_config 7 | # On OS X with MacPorts: 8 | # gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config 9 | # On Windows: 10 | # gem install pg 11 | # Choose the win32 build. 12 | # Install PostgreSQL and put its /bin directory on your path. 13 | # 14 | # Configure Using Gemfile 15 | # gem 'pg' 16 | # 17 | default: &default 18 | adapter: postgresql 19 | encoding: unicode 20 | # For details on connection pooling, see Rails configuration guide 21 | # http://guides.rubyonrails.org/configuring.html#database-pooling 22 | pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 23 | 24 | development: 25 | <<: *default 26 | database: ember-spin_development 27 | 28 | # The specified database role being used to connect to postgres. 29 | # To create additional roles in postgres see `$ createuser --help`. 30 | # When left blank, postgres will use the default role. This is 31 | # the same name as the operating system user that initialized the database. 32 | #username: ember-spin 33 | 34 | # The password associated with the postgres role (username). 35 | #password: 36 | 37 | # Connect on a TCP socket. Omitted by default since the client uses a 38 | # domain socket that doesn't need configuration. Windows does not have 39 | # domain sockets, so uncomment these lines. 40 | #host: localhost 41 | 42 | # The TCP port the server listens on. Defaults to 5432. 43 | # If your server runs on a different port number, change accordingly. 44 | #port: 5432 45 | 46 | # Schema search path. The server defaults to $user,public 47 | #schema_search_path: myapp,sharedapp,public 48 | 49 | # Minimum log levels, in increasing order: 50 | # debug5, debug4, debug3, debug2, debug1, 51 | # log, notice, warning, error, fatal, and panic 52 | # Defaults to warning. 53 | #min_messages: notice 54 | 55 | # Warning: The database defined as "test" will be erased and 56 | # re-generated from your development database when you run "rake". 57 | # Do not set this db to the same as development or production. 58 | test: 59 | <<: *default 60 | database: ember-spin_test 61 | 62 | # As with config/secrets.yml, you never want to store sensitive information, 63 | # like your database password, in your source code. If your source code is 64 | # ever seen by anyone, they now have access to your database. 65 | # 66 | # Instead, provide the password as a unix environment variable when you boot 67 | # the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database 68 | # for a full rundown on how to provide these environment variables in a 69 | # production deployment. 70 | # 71 | # On Heroku and other platform providers, you may have a full connection URL 72 | # available as an environment variable. For example: 73 | # 74 | # DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase" 75 | # 76 | # You can use this database configuration with: 77 | # 78 | # production: 79 | # url: <%= ENV['DATABASE_URL'] %> 80 | # 81 | production: 82 | <<: *default 83 | database: ember-spin_production 84 | username: ember-spin 85 | password: <%= ENV['EMBER-SPIN_DATABASE_PASSWORD'] %> 86 | -------------------------------------------------------------------------------- /config/environment.rb: -------------------------------------------------------------------------------- 1 | # Load the Rails application. 2 | require_relative 'application' 3 | 4 | # Initialize the Rails application. 5 | Rails.application.initialize! 6 | -------------------------------------------------------------------------------- /config/environments/development.rb: -------------------------------------------------------------------------------- 1 | Rails.application.configure do 2 | # Settings specified here will take precedence over those in config/application.rb. 3 | 4 | # In the development environment your application's code is reloaded on 5 | # every request. This slows down response time but is perfect for development 6 | # since you don't have to restart the web server when you make code changes. 7 | config.cache_classes = false 8 | 9 | # Do not eager load code on boot. 10 | config.eager_load = false 11 | 12 | # Show full error reports. 13 | config.consider_all_requests_local = true 14 | 15 | # Enable/disable caching. By default caching is disabled. 16 | if Rails.root.join('tmp/caching-dev.txt').exist? 17 | config.action_controller.perform_caching = true 18 | 19 | config.cache_store = :memory_store 20 | config.public_file_server.headers = { 21 | 'Cache-Control' => "public, max-age=#{2.days.seconds.to_i}" 22 | } 23 | else 24 | config.action_controller.perform_caching = false 25 | 26 | config.cache_store = :null_store 27 | end 28 | 29 | # Don't care if the mailer can't send. 30 | config.action_mailer.raise_delivery_errors = false 31 | 32 | config.action_mailer.perform_caching = false 33 | 34 | # Print deprecation notices to the Rails logger. 35 | config.active_support.deprecation = :log 36 | 37 | # Raise an error on page load if there are pending migrations. 38 | config.active_record.migration_error = :page_load 39 | 40 | # Debug mode disables concatenation and preprocessing of assets. 41 | # This option may cause significant delays in view rendering with a large 42 | # number of complex assets. 43 | config.assets.debug = true 44 | 45 | # Suppress logger output for asset requests. 46 | config.assets.quiet = true 47 | 48 | # Raises error for missing translations 49 | # config.action_view.raise_on_missing_translations = true 50 | 51 | # Use an evented file watcher to asynchronously detect changes in source code, 52 | # routes, locales, etc. This feature depends on the listen gem. 53 | config.file_watcher = ActiveSupport::EventedFileUpdateChecker 54 | end 55 | -------------------------------------------------------------------------------- /config/environments/production.rb: -------------------------------------------------------------------------------- 1 | Rails.application.configure do 2 | # Settings specified here will take precedence over those in config/application.rb. 3 | 4 | # Code is not reloaded between requests. 5 | config.cache_classes = true 6 | 7 | # Eager load code on boot. This eager loads most of Rails and 8 | # your application in memory, allowing both threaded web servers 9 | # and those relying on copy on write to perform better. 10 | # Rake tasks automatically ignore this option for performance. 11 | config.eager_load = true 12 | 13 | # Full error reports are disabled and caching is turned on. 14 | config.consider_all_requests_local = false 15 | config.action_controller.perform_caching = true 16 | 17 | # Attempt to read encrypted secrets from `config/secrets.yml.enc`. 18 | # Requires an encryption key in `ENV["RAILS_MASTER_KEY"]` or 19 | # `config/secrets.yml.key`. 20 | config.read_encrypted_secrets = true 21 | 22 | # Disable serving static files from the `/public` folder by default since 23 | # Apache or NGINX already handles this. 24 | config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? 25 | 26 | # Compress JavaScripts and CSS. 27 | config.assets.js_compressor = :uglifier 28 | # config.assets.css_compressor = :sass 29 | 30 | # Do not fallback to assets pipeline if a precompiled asset is missed. 31 | config.assets.compile = false 32 | 33 | # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb 34 | 35 | # Enable serving of images, stylesheets, and JavaScripts from an asset server. 36 | # config.action_controller.asset_host = 'http://assets.example.com' 37 | 38 | # Specifies the header that your server uses for sending files. 39 | # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache 40 | # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX 41 | 42 | # Mount Action Cable outside main process or domain 43 | # config.action_cable.mount_path = nil 44 | # config.action_cable.url = 'wss://example.com/cable' 45 | # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ] 46 | 47 | # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. 48 | # config.force_ssl = true 49 | 50 | # Use the lowest log level to ensure availability of diagnostic information 51 | # when problems arise. 52 | config.log_level = :debug 53 | 54 | # Prepend all log lines with the following tags. 55 | config.log_tags = [ :request_id ] 56 | 57 | # Use a different cache store in production. 58 | # config.cache_store = :mem_cache_store 59 | 60 | # Use a real queuing backend for Active Job (and separate queues per environment) 61 | # config.active_job.queue_adapter = :resque 62 | # config.active_job.queue_name_prefix = "ember-spin_#{Rails.env}" 63 | config.action_mailer.perform_caching = false 64 | 65 | # Ignore bad email addresses and do not raise email delivery errors. 66 | # Set this to true and configure the email server for immediate delivery to raise delivery errors. 67 | # config.action_mailer.raise_delivery_errors = false 68 | 69 | # Enable locale fallbacks for I18n (makes lookups for any locale fall back to 70 | # the I18n.default_locale when a translation cannot be found). 71 | config.i18n.fallbacks = true 72 | 73 | # Send deprecation notices to registered listeners. 74 | config.active_support.deprecation = :notify 75 | 76 | # Use default logging formatter so that PID and timestamp are not suppressed. 77 | config.log_formatter = ::Logger::Formatter.new 78 | 79 | # Use a different logger for distributed setups. 80 | # require 'syslog/logger' 81 | # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name') 82 | 83 | if ENV["RAILS_LOG_TO_STDOUT"].present? 84 | logger = ActiveSupport::Logger.new(STDOUT) 85 | logger.formatter = config.log_formatter 86 | config.logger = ActiveSupport::TaggedLogging.new(logger) 87 | end 88 | 89 | # Do not dump schema after migrations. 90 | config.active_record.dump_schema_after_migration = false 91 | end 92 | -------------------------------------------------------------------------------- /config/environments/test.rb: -------------------------------------------------------------------------------- 1 | Rails.application.configure do 2 | # Settings specified here will take precedence over those in config/application.rb. 3 | 4 | # The test environment is used exclusively to run your application's 5 | # test suite. You never need to work with it otherwise. Remember that 6 | # your test database is "scratch space" for the test suite and is wiped 7 | # and recreated between test runs. Don't rely on the data there! 8 | config.cache_classes = true 9 | 10 | # Do not eager load code on boot. This avoids loading your whole application 11 | # just for the purpose of running a single test. If you are using a tool that 12 | # preloads Rails for running tests, you may have to set it to true. 13 | config.eager_load = false 14 | 15 | # Configure public file server for tests with Cache-Control for performance. 16 | config.public_file_server.enabled = true 17 | config.public_file_server.headers = { 18 | 'Cache-Control' => "public, max-age=#{1.hour.seconds.to_i}" 19 | } 20 | 21 | # Show full error reports and disable caching. 22 | config.consider_all_requests_local = true 23 | config.action_controller.perform_caching = false 24 | 25 | # Raise exceptions instead of rendering exception templates. 26 | config.action_dispatch.show_exceptions = false 27 | 28 | # Disable request forgery protection in test environment. 29 | config.action_controller.allow_forgery_protection = false 30 | config.action_mailer.perform_caching = false 31 | 32 | # Tell Action Mailer not to deliver emails to the real world. 33 | # The :test delivery method accumulates sent emails in the 34 | # ActionMailer::Base.deliveries array. 35 | config.action_mailer.delivery_method = :test 36 | 37 | # Print deprecation notices to the stderr. 38 | config.active_support.deprecation = :stderr 39 | 40 | # Raises error for missing translations 41 | # config.action_view.raise_on_missing_translations = true 42 | end 43 | -------------------------------------------------------------------------------- /config/initializers/application_controller_renderer.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # ActiveSupport::Reloader.to_prepare do 4 | # ApplicationController.renderer.defaults.merge!( 5 | # http_host: 'example.org', 6 | # https: false 7 | # ) 8 | # end 9 | -------------------------------------------------------------------------------- /config/initializers/assets.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Version of your assets, change this if you want to expire all your assets. 4 | Rails.application.config.assets.version = '1.0' 5 | 6 | # Add additional assets to the asset load path. 7 | # Rails.application.config.assets.paths << Emoji.images_path 8 | # Add Yarn node_modules folder to the asset load path. 9 | Rails.application.config.assets.paths << Rails.root.join('node_modules') 10 | 11 | # Precompile additional assets. 12 | # application.js, application.css, and all non-JS/CSS in the app/assets 13 | # folder are already added. 14 | # Rails.application.config.assets.precompile += %w( admin.js admin.css ) 15 | -------------------------------------------------------------------------------- /config/initializers/backtrace_silencers.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. 4 | # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } 5 | 6 | # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. 7 | # Rails.backtrace_cleaner.remove_silencers! 8 | -------------------------------------------------------------------------------- /config/initializers/cookies_serializer.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Specify a serializer for the signed and encrypted cookie jars. 4 | # Valid options are :json, :marshal, and :hybrid. 5 | Rails.application.config.action_dispatch.cookies_serializer = :json 6 | -------------------------------------------------------------------------------- /config/initializers/ember.rb: -------------------------------------------------------------------------------- 1 | EmberCli.configure do |c| 2 | c.app :frontend 3 | end 4 | -------------------------------------------------------------------------------- /config/initializers/filter_parameter_logging.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Configure sensitive parameters which will be filtered from the log file. 4 | Rails.application.config.filter_parameters += [:password] 5 | -------------------------------------------------------------------------------- /config/initializers/inflections.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Add new inflection rules using the following format. Inflections 4 | # are locale specific, and you may define rules for as many different 5 | # locales as you wish. All of these examples are active by default: 6 | # ActiveSupport::Inflector.inflections(:en) do |inflect| 7 | # inflect.plural /^(ox)$/i, '\1en' 8 | # inflect.singular /^(ox)en/i, '\1' 9 | # inflect.irregular 'person', 'people' 10 | # inflect.uncountable %w( fish sheep ) 11 | # end 12 | 13 | # These inflection rules are supported but not enabled by default: 14 | # ActiveSupport::Inflector.inflections(:en) do |inflect| 15 | # inflect.acronym 'RESTful' 16 | # end 17 | -------------------------------------------------------------------------------- /config/initializers/mime_types.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Add new mime types for use in respond_to blocks: 4 | # Mime::Type.register "text/richtext", :rtf 5 | -------------------------------------------------------------------------------- /config/initializers/wrap_parameters.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # This file contains settings for ActionController::ParamsWrapper which 4 | # is enabled by default. 5 | 6 | # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. 7 | ActiveSupport.on_load(:action_controller) do 8 | wrap_parameters format: [:json] 9 | end 10 | 11 | # To enable root element in JSON for ActiveRecord objects. 12 | # ActiveSupport.on_load(:active_record) do 13 | # self.include_root_in_json = true 14 | # end 15 | -------------------------------------------------------------------------------- /config/locales/en.yml: -------------------------------------------------------------------------------- 1 | # Files in the config/locales directory are used for internationalization 2 | # and are automatically loaded by Rails. If you want to use locales other 3 | # than English, add the necessary files in this directory. 4 | # 5 | # To use the locales, use `I18n.t`: 6 | # 7 | # I18n.t 'hello' 8 | # 9 | # In views, this is aliased to just `t`: 10 | # 11 | # <%= t('hello') %> 12 | # 13 | # To use a different locale, set it with `I18n.locale`: 14 | # 15 | # I18n.locale = :es 16 | # 17 | # This would use the information in config/locales/es.yml. 18 | # 19 | # The following keys must be escaped otherwise they will not be retrieved by 20 | # the default I18n backend: 21 | # 22 | # true, false, on, off, yes, no 23 | # 24 | # Instead, surround them with single quotes. 25 | # 26 | # en: 27 | # 'true': 'foo' 28 | # 29 | # To learn more, please read the Rails Internationalization guide 30 | # available at http://guides.rubyonrails.org/i18n.html. 31 | 32 | en: 33 | hello: "Hello world" 34 | -------------------------------------------------------------------------------- /config/puma.rb: -------------------------------------------------------------------------------- 1 | # Puma can serve each request in a thread from an internal thread pool. 2 | # The `threads` method setting takes two numbers: a minimum and maximum. 3 | # Any libraries that use thread pools should be configured to match 4 | # the maximum value specified for Puma. Default is set to 5 threads for minimum 5 | # and maximum; this matches the default thread size of Active Record. 6 | # 7 | threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 } 8 | threads threads_count, threads_count 9 | 10 | # Specifies the `port` that Puma will listen on to receive requests; default is 3000. 11 | # 12 | port ENV.fetch("PORT") { 3000 } 13 | 14 | # Specifies the `environment` that Puma will run in. 15 | # 16 | environment ENV.fetch("RAILS_ENV") { "development" } 17 | 18 | # Specifies the number of `workers` to boot in clustered mode. 19 | # Workers are forked webserver processes. If using threads and workers together 20 | # the concurrency of the application would be max `threads` * `workers`. 21 | # Workers do not work on JRuby or Windows (both of which do not support 22 | # processes). 23 | # 24 | # workers ENV.fetch("WEB_CONCURRENCY") { 2 } 25 | 26 | # Use the `preload_app!` method when specifying a `workers` number. 27 | # This directive tells Puma to first boot the application and load code 28 | # before forking the application. This takes advantage of Copy On Write 29 | # process behavior so workers use less memory. If you use this option 30 | # you need to make sure to reconnect any threads in the `on_worker_boot` 31 | # block. 32 | # 33 | # preload_app! 34 | 35 | # If you are preloading your application and using Active Record, it's 36 | # recommended that you close any connections to the database before workers 37 | # are forked to prevent connection leakage. 38 | # 39 | # before_fork do 40 | # ActiveRecord::Base.connection_pool.disconnect! if defined?(ActiveRecord) 41 | # end 42 | 43 | # The code in the `on_worker_boot` will be called if you are using 44 | # clustered mode by specifying a number of `workers`. After each worker 45 | # process is booted, this block will be run. If you are using the `preload_app!` 46 | # option, you will want to use this block to reconnect to any threads 47 | # or connections that may have been created at application boot, as Ruby 48 | # cannot share connections between processes. 49 | # 50 | # on_worker_boot do 51 | # ActiveRecord::Base.establish_connection if defined?(ActiveRecord) 52 | # end 53 | # 54 | 55 | # Allow puma to be restarted by `rails restart` command. 56 | plugin :tmp_restart 57 | -------------------------------------------------------------------------------- /config/routes.rb: -------------------------------------------------------------------------------- 1 | Rails.application.routes.draw do 2 | mount_ember_app :frontend, to: "/" 3 | # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 4 | end 5 | -------------------------------------------------------------------------------- /config/secrets.yml: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Your secret key is used for verifying the integrity of signed cookies. 4 | # If you change this key, all old signed cookies will become invalid! 5 | 6 | # Make sure the secret is at least 30 characters and all random, 7 | # no regular words or you'll be exposed to dictionary attacks. 8 | # You can use `rails secret` to generate a secure secret key. 9 | 10 | # Make sure the secrets in this file are kept private 11 | # if you're sharing your code publicly. 12 | 13 | # Shared secrets are available across all environments. 14 | 15 | # shared: 16 | # api_key: a1B2c3D4e5F6 17 | 18 | # Environmental secrets are only available for that specific environment. 19 | 20 | development: 21 | secret_key_base: 09064e3c3950093b1d959d4a18c80eae089df2161753186f2726f63f72170e11d31e672f8f4e767bcda549855c72707dde704ad8f4f4a6a62f24ac1256a3fffb 22 | 23 | test: 24 | secret_key_base: b6ac87ea1db4c95cbdf66a8c0fd4f17e8960f609896ed65c69111905c9931c98a4a8117482b695208d6a2683d81710107a94f5f93937ae73c3c21b8181c43b4e 25 | 26 | # Do not keep production secrets in the unencrypted secrets file. 27 | # Instead, either read values from the environment. 28 | # Or, use `bin/rails secrets:setup` to configure encrypted secrets 29 | # and move the `production:` environment over there. 30 | 31 | production: 32 | secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> 33 | -------------------------------------------------------------------------------- /config/spring.rb: -------------------------------------------------------------------------------- 1 | %w( 2 | .ruby-version 3 | .rbenv-vars 4 | tmp/restart.txt 5 | tmp/caching-dev.txt 6 | ).each { |path| Spring.watch(path) } 7 | -------------------------------------------------------------------------------- /db/seeds.rb: -------------------------------------------------------------------------------- 1 | # This file should contain all the record creation needed to seed the database with its default values. 2 | # The data can then be loaded with the rails db:seed command (or created alongside the database with db:setup). 3 | # 4 | # Examples: 5 | # 6 | # movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }]) 7 | # Character.create(name: 'Luke', movie: movies.first) 8 | -------------------------------------------------------------------------------- /frontend/.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig helps developers define and maintain consistent 2 | # coding styles between different editors and IDEs 3 | # editorconfig.org 4 | 5 | root = true 6 | 7 | 8 | [*] 9 | end_of_line = lf 10 | charset = utf-8 11 | trim_trailing_whitespace = true 12 | insert_final_newline = true 13 | indent_style = space 14 | indent_size = 2 15 | 16 | [*.hbs] 17 | insert_final_newline = false 18 | 19 | [*.{diff,md}] 20 | trim_trailing_whitespace = false 21 | -------------------------------------------------------------------------------- /frontend/.ember-cli: -------------------------------------------------------------------------------- 1 | { 2 | /** 3 | Ember CLI sends analytics information by default. The data is completely 4 | anonymous, but there are times when you might want to disable this behavior. 5 | 6 | Setting `disableAnalytics` to true will prevent any data from being sent. 7 | */ 8 | "disableAnalytics": false 9 | } 10 | -------------------------------------------------------------------------------- /frontend/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | globals: { 3 | server: true, 4 | }, 5 | root: true, 6 | parserOptions: { 7 | ecmaVersion: 2017, 8 | sourceType: 'module' 9 | }, 10 | plugins: [ 11 | 'ember' 12 | ], 13 | extends: [ 14 | 'eslint:recommended', 15 | 'plugin:ember/recommended' 16 | ], 17 | env: { 18 | browser: true 19 | }, 20 | rules: { 21 | }, 22 | overrides: [ 23 | // node files 24 | { 25 | files: [ 26 | 'ember-cli-build.js', 27 | 'testem.js', 28 | 'config/**/*.js', 29 | 'lib/*/index.js' 30 | ], 31 | parserOptions: { 32 | sourceType: 'script', 33 | ecmaVersion: 2015 34 | }, 35 | env: { 36 | browser: false, 37 | node: true 38 | } 39 | } 40 | ] 41 | }; 42 | -------------------------------------------------------------------------------- /frontend/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # compiled output 4 | /dist 5 | /tmp 6 | 7 | # dependencies 8 | /node_modules 9 | /bower_components 10 | 11 | # misc 12 | /.sass-cache 13 | /connect.lock 14 | /coverage/* 15 | /libpeerconnection.log 16 | npm-debug.log* 17 | yarn-error.log 18 | testem.log 19 | 20 | # ember-try 21 | .node_modules.ember-try/ 22 | bower.json.ember-try 23 | package.json.ember-try 24 | -------------------------------------------------------------------------------- /frontend/.travis.yml: -------------------------------------------------------------------------------- 1 | --- 2 | language: node_js 3 | node_js: 4 | - "6" 5 | 6 | sudo: false 7 | dist: trusty 8 | 9 | addons: 10 | chrome: stable 11 | 12 | cache: 13 | directories: 14 | - $HOME/.npm 15 | 16 | env: 17 | global: 18 | # See https://git.io/vdao3 for details. 19 | - JOBS=1 20 | 21 | before_install: 22 | - npm config set spin false 23 | 24 | script: 25 | - npm run lint:js 26 | - npm test 27 | -------------------------------------------------------------------------------- /frontend/.watchmanconfig: -------------------------------------------------------------------------------- 1 | { 2 | "ignore_dirs": ["tmp", "dist"] 3 | } 4 | -------------------------------------------------------------------------------- /frontend/README.md: -------------------------------------------------------------------------------- 1 | # frontend 2 | 3 | This README outlines the details of collaborating on this Ember application. 4 | A short introduction of this app could easily go here. 5 | 6 | ## Prerequisites 7 | 8 | You will need the following things properly installed on your computer. 9 | 10 | * [Git](https://git-scm.com/) 11 | * [Node.js](https://nodejs.org/) (with npm) 12 | * [Ember CLI](https://ember-cli.com/) 13 | * [Google Chrome](https://google.com/chrome/) 14 | 15 | ## Installation 16 | 17 | * `git clone ` this repository 18 | * `cd frontend` 19 | * `npm install` 20 | 21 | ## Running / Development 22 | 23 | * `ember serve` 24 | * Visit your app at [http://localhost:4200](http://localhost:4200). 25 | * Visit your tests at [http://localhost:4200/tests](http://localhost:4200/tests). 26 | 27 | ### Code Generators 28 | 29 | Make use of the many generators for code, try `ember help generate` for more details 30 | 31 | ### Running Tests 32 | 33 | * `ember test` 34 | * `ember test --server` 35 | 36 | ### Linting 37 | 38 | * `npm run lint:js` 39 | * `npm run lint:js -- --fix` 40 | 41 | ### Building 42 | 43 | * `ember build` (development) 44 | * `ember build --environment production` (production) 45 | 46 | ### Deploying 47 | 48 | Specify what it takes to deploy your app. 49 | 50 | ## Further Reading / Useful Links 51 | 52 | * [ember.js](https://emberjs.com/) 53 | * [ember-cli](https://ember-cli.com/) 54 | * Development Browser Extensions 55 | * [ember inspector for chrome](https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi) 56 | * [ember inspector for firefox](https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/) 57 | -------------------------------------------------------------------------------- /frontend/app/adapters/application.js: -------------------------------------------------------------------------------- 1 | import DS from 'ember-data'; 2 | 3 | export default DS.JSONAPIAdapter.extend({ 4 | namespace: 'api' 5 | }); 6 | -------------------------------------------------------------------------------- /frontend/app/app.js: -------------------------------------------------------------------------------- 1 | import Application from '@ember/application'; 2 | import Resolver from './resolver'; 3 | import loadInitializers from 'ember-load-initializers'; 4 | import config from './config/environment'; 5 | 6 | const App = Application.extend({ 7 | modulePrefix: config.modulePrefix, 8 | podModulePrefix: config.podModulePrefix, 9 | Resolver 10 | }); 11 | 12 | loadInitializers(App, config.modulePrefix); 13 | 14 | export default App; 15 | -------------------------------------------------------------------------------- /frontend/app/components/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/frontend/app/components/.gitkeep -------------------------------------------------------------------------------- /frontend/app/components/flashcard-listing.js: -------------------------------------------------------------------------------- 1 | import Component from '@ember/component'; 2 | 3 | export default Component.extend({ 4 | }); 5 | -------------------------------------------------------------------------------- /frontend/app/components/list-filter.js: -------------------------------------------------------------------------------- 1 | import Component from '@ember/component'; 2 | 3 | export default Component.extend({ 4 | classNames: ['list-filter'], 5 | value: '', 6 | 7 | init() { 8 | this._super(...arguments); 9 | this.get('filter')('').then((results) => this.set('results', results)); 10 | }, 11 | 12 | actions: { 13 | handleFilterEntry() { 14 | let filterInputValue = this.get('value'); 15 | let filterAction = this.get('filter'); 16 | filterAction(filterInputValue).then((filterResults) => this.set('results', filterResults)); 17 | } 18 | } 19 | 20 | }); 21 | -------------------------------------------------------------------------------- /frontend/app/components/pack-listing.js: -------------------------------------------------------------------------------- 1 | import Component from '@ember/component'; 2 | 3 | export default Component.extend({ 4 | }); 5 | -------------------------------------------------------------------------------- /frontend/app/components/question-filter.js: -------------------------------------------------------------------------------- 1 | import Component from '@ember/component'; 2 | 3 | export default Component.extend({ 4 | className: ['question-filter'], 5 | value: '', 6 | 7 | init() { 8 | this._super(...arguments); 9 | this.get('filter')('').then((allResults) => { 10 | this.set('results', allResults.results); 11 | }); 12 | // this.get('filter')('').then((results) => this.set('results', results)); 13 | }, 14 | 15 | actions: { 16 | handleFilterEntry() { 17 | let filterInputValue = this.get('value'); 18 | let filterAction = this.get('filter'); 19 | filterAction(filterInputValue).then((filterResults) => { 20 | if (filterResults.query === this.get('value')) { 21 | this.set('results', filterResults.results); 22 | } 23 | }); 24 | // filterAction(filterInputValue).then((filterResults) => this.set('results', filterResults)); 25 | } 26 | } 27 | }); 28 | -------------------------------------------------------------------------------- /frontend/app/components/question-list.js: -------------------------------------------------------------------------------- 1 | import Component from '@ember/component'; 2 | 3 | export default Component.extend({ 4 | }); 5 | -------------------------------------------------------------------------------- /frontend/app/components/rental-listing.js: -------------------------------------------------------------------------------- 1 | import Component from '@ember/component'; 2 | 3 | export default Component.extend({ 4 | }); 5 | -------------------------------------------------------------------------------- /frontend/app/controllers/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/frontend/app/controllers/.gitkeep -------------------------------------------------------------------------------- /frontend/app/controllers/create.js: -------------------------------------------------------------------------------- 1 | import Controller from '@ember/controller'; 2 | 3 | export default Controller.extend({ 4 | userOptions: [ 5 | { name: "Ase" }, 6 | { name: "Meggevo" }, 7 | { name: "Mukasa" }, 8 | { name: "Yoshida" }, 9 | { name: "Ase" }, 10 | { name: "Meggevo" }, 11 | { name: "Maxim" } 12 | ], 13 | inviteOptions: [ 14 | { name: "Ase" }, 15 | { name: "Meggevo" }, 16 | { name: "Mukasa" }, 17 | { name: "Yoshida" }, 18 | { name: "Ase" }, 19 | { name: "Meggevo" }, 20 | { name: "Maxim" } 21 | ], 22 | // actions: { 23 | // filterByOwner(param) { 24 | // if(param !== '') { 25 | // return this.get('store') 26 | // .query('pack', { owner: param }).then((results) => { 27 | // return { query: param, results: results }; 28 | // }); 29 | // } else { 30 | // // return this.get('store').findAll('pack'); 31 | // return this.get('store') 32 | // .findAll('pack').then((results) => { 33 | // return { query: param, results: results }; 34 | // }); 35 | // } 36 | // } 37 | // } 38 | }); 39 | -------------------------------------------------------------------------------- /frontend/app/controllers/flashcard.js: -------------------------------------------------------------------------------- 1 | import Controller from '@ember/controller'; 2 | 3 | export default Controller.extend({ 4 | 5 | 'autoplay': true, 6 | breakpoints: [ 7 | { 8 | 'breakpoint': 1024, 9 | 'settings': { 10 | 'slidesToShow': 3, 11 | 'slidesToScroll': 3, 12 | 'infinite': true 13 | } 14 | }, 15 | { 16 | 'breakpoint': 600, 17 | 'settings': { 18 | 'slidesToShow': 2, 19 | 'slidesToScroll': 2 20 | } 21 | }, 22 | { 23 | 'breakpoint': 480, 24 | 'settings': { 25 | 'slidesToShow': 1, 26 | 'slidesToScroll': 1 27 | } 28 | } 29 | ] 30 | }); 31 | -------------------------------------------------------------------------------- /frontend/app/controllers/packs.js: -------------------------------------------------------------------------------- 1 | import Controller from '@ember/controller'; 2 | 3 | export default Controller.extend({ 4 | actions: { 5 | filterByOwner(param) { 6 | if(param !== '') { 7 | return this.get('store') 8 | .query('pack', { owner: param }).then((results) => { 9 | return { query: param, results: results }; 10 | }); 11 | } else { 12 | // return this.get('store').findAll('pack'); 13 | return this.get('store') 14 | .findAll('pack').then((results) => { 15 | return { query: param, results: results }; 16 | }); 17 | } 18 | } 19 | } 20 | }); 21 | -------------------------------------------------------------------------------- /frontend/app/controllers/questions.js: -------------------------------------------------------------------------------- 1 | import Controller from '@ember/controller'; 2 | 3 | export default Controller.extend({ 4 | // actions: { 5 | // filterByOwner(param) { 6 | // if(param !== '') { 7 | // return this.get('store') 8 | // .query('pack', { owner: param }).then((results) => { 9 | // return { query: param, results: results }; 10 | // }); 11 | // } else { 12 | // // return this.get('store').findAll('pack'); 13 | // return this.get('store') 14 | // .findAll('pack').then((results) => { 15 | // return { query: param, results: results }; 16 | // }); 17 | // } 18 | // } 19 | // } 20 | }); 21 | -------------------------------------------------------------------------------- /frontend/app/controllers/rentals.js: -------------------------------------------------------------------------------- 1 | import Controller from '@ember/controller'; 2 | 3 | export default Controller.extend({ 4 | 5 | userOptions: [ 6 | { name: "Ase" }, 7 | { name: "Meggevo" }, 8 | { name: "Mukasa" }, 9 | { name: "Yoshida" }, 10 | { name: "Ase" }, 11 | { name: "Meggevo" }, 12 | { name: "Maxim" } 13 | ], 14 | inviteOptions: [ 15 | { name: "Ase" }, 16 | { name: "Meggevo" }, 17 | { name: "Mukasa" }, 18 | { name: "Yoshida" }, 19 | { name: "Ase" }, 20 | { name: "Meggevo" }, 21 | { name: "Maxim" } 22 | ], 23 | 24 | actions: { 25 | filterByCity(param) { 26 | if (param !== '') { 27 | return this.get('store').query('rental', { question: param }); 28 | } else { 29 | return this.get('store').findAll('rental'); 30 | } 31 | } 32 | } 33 | }); 34 | -------------------------------------------------------------------------------- /frontend/app/controllers/user.js: -------------------------------------------------------------------------------- 1 | import Controller from '@ember/controller'; 2 | 3 | export default Controller.extend({ 4 | filterOptions: [ 5 | { name: "Default filter" }, 6 | { name: "High-Severity Filter" }, 7 | { name: "Today-Only Filter" } 8 | ] 9 | }); 10 | -------------------------------------------------------------------------------- /frontend/app/helpers/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/frontend/app/helpers/.gitkeep -------------------------------------------------------------------------------- /frontend/app/helpers/pack-property-type.js: -------------------------------------------------------------------------------- 1 | import { helper } from '@ember/component/helper'; 2 | 3 | const communityPropertyTypes = [ 4 | 'Condo', 5 | 'Townhouse', 6 | 'Apartment' 7 | ]; 8 | 9 | export function packPropertyType([propertyType]) { 10 | if (communityPropertyTypes.includes(propertyType)) { 11 | return 'Community'; 12 | } 13 | 14 | return 'Standalone'; 15 | } 16 | 17 | export default helper(packPropertyType); 18 | -------------------------------------------------------------------------------- /frontend/app/helpers/rental-property-type.js: -------------------------------------------------------------------------------- 1 | import { helper } from '@ember/component/helper'; 2 | 3 | export function rentalPropertyType(params/*, hash*/) { 4 | return params; 5 | } 6 | 7 | export default helper(rentalPropertyType); 8 | -------------------------------------------------------------------------------- /frontend/app/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Frontend 7 | 8 | 9 | 10 | {{content-for "head"}} 11 | 12 | 13 | 14 | 15 | 16 | <<<<<<< HEAD 17 | 18 | ======= 19 | 20 | 21 | 22 | >>>>>>> 6591a75db84a1ad9c74fad9d851e221967f1215a 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | {{content-for "head-footer"}} 33 | 34 | 35 |
36 | 37 |
38 | 59 |
60 | 61 |
62 | {{content-for "body"}} 63 | 64 | 65 | 66 | 67 | {{content-for "body-footer"}} 68 | 69 | 70 | -------------------------------------------------------------------------------- /frontend/app/models/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/frontend/app/models/.gitkeep -------------------------------------------------------------------------------- /frontend/app/models/create.js: -------------------------------------------------------------------------------- 1 | import DS from 'ember-data'; 2 | 3 | export default DS.Model.extend({ 4 | // title: DS.attr(), 5 | // owner: DS.attr(), 6 | // city: DS.attr(), 7 | // category: DS.attr(), 8 | // image: DS.attr(), 9 | // bedrooms: DS.attr(), 10 | // description: DS.attr() 11 | }); 12 | -------------------------------------------------------------------------------- /frontend/app/models/flashcard.js: -------------------------------------------------------------------------------- 1 | import DS from 'ember-data'; 2 | 3 | export default DS.Model.extend({ 4 | question: DS.attr(), 5 | answer: DS.attr(), 6 | // city: DS.attr(), 7 | // category: DS.attr(), 8 | image: DS.attr() 9 | // bedrooms: DS.attr(), 10 | // description: DS.attr() 11 | }); 12 | -------------------------------------------------------------------------------- /frontend/app/models/pack.js: -------------------------------------------------------------------------------- 1 | import DS from 'ember-data'; 2 | 3 | export default DS.Model.extend({ 4 | title: DS.attr(), 5 | owner: DS.attr(), 6 | city: DS.attr(), 7 | category: DS.attr(), 8 | image: DS.attr(), 9 | terms: DS.attr(), 10 | description: DS.attr(), 11 | userimage: DS.attr() 12 | }); 13 | -------------------------------------------------------------------------------- /frontend/app/models/rental.js: -------------------------------------------------------------------------------- 1 | import DS from 'ember-data'; 2 | 3 | export default DS.Model.extend({ 4 | // title: DS.attr(), 5 | // owner: DS.attr(), 6 | // city: DS.attr(), 7 | // category: DS.attr(), 8 | image: DS.attr(), 9 | // bedrooms: DS.attr(), 10 | // description: DS.attr(), 11 | question: DS.attr(), 12 | answer: DS.attr() 13 | }); 14 | -------------------------------------------------------------------------------- /frontend/app/resolver.js: -------------------------------------------------------------------------------- 1 | import Resolver from 'ember-resolver'; 2 | 3 | export default Resolver; 4 | -------------------------------------------------------------------------------- /frontend/app/router.js: -------------------------------------------------------------------------------- 1 | import EmberRouter from '@ember/routing/router'; 2 | import config from './config/environment'; 3 | 4 | const Router = EmberRouter.extend({ 5 | location: config.locationType, 6 | rootURL: config.rootURL 7 | }); 8 | 9 | Router.map(function() { 10 | this.route('create'); 11 | this.route('start'); 12 | this.route('packs'); 13 | this.route('rentals'); 14 | this.route('flashcard'); 15 | }); 16 | 17 | export default Router; 18 | -------------------------------------------------------------------------------- /frontend/app/routes/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/frontend/app/routes/.gitkeep -------------------------------------------------------------------------------- /frontend/app/routes/create.js: -------------------------------------------------------------------------------- 1 | import Route from '@ember/routing/route'; 2 | 3 | export default Route.extend({ 4 | model() { 5 | // return this.get('store').findAll('create'); 6 | return [{ 7 | id: 'grand-old-mansion', 8 | title: 'Grand Old Mansion', 9 | owner: 'Veruca Salt', 10 | city: 'San Francisco', 11 | category: 'Estate', 12 | bedrooms: 15, 13 | image: 'https://upload.wikimedia.org/wikipedia/commons/c/cb/Crane_estate_(5).jpg', 14 | description: 'This grand old mansion sits on over 100 acres of rolling hills and dense redwood forests.' 15 | }, { 16 | id: 'urban-living', 17 | title: 'Urban Living', 18 | owner: 'Mike TV', 19 | city: 'Seattle', 20 | category: 'Condo', 21 | bedrooms: 1, 22 | image: 'https://upload.wikimedia.org/wikipedia/commons/0/0e/Alfonso_13_Highrise_Tegucigalpa.jpg', 23 | description: 'A commuters dream. This rental is within walking distance of 2 bus stops and the Metro.' 24 | }, { 25 | id: 'downtown-charm', 26 | title: 'Downtown Charm', 27 | owner: 'Violet Beauregarde', 28 | city: 'Portland', 29 | category: 'Apartment', 30 | bedrooms: 3, 31 | image: 'https://upload.wikimedia.org/wikipedia/commons/f/f7/Wheeldon_Apartment_Building_-_Portland_Oregon.jpg', 32 | description: 'Convenience is at your doorstep with this charming downtown rental. Great restaurants and active night life are within a few feet.' 33 | }]; 34 | } 35 | }); 36 | -------------------------------------------------------------------------------- /frontend/app/routes/flashcard.js: -------------------------------------------------------------------------------- 1 | import Route from '@ember/routing/route'; 2 | 3 | export default Route.extend({ 4 | model() { 5 | [ 6 | { url: 'https://placeholdit.imgix.net/~text?txtsize=33&txt=slide 1&w=600&h=400' }, 7 | { url: 'https://placeholdit.imgix.net/~text?txtsize=33&txt=slide 2&w=600&h=400' }, 8 | { url: 'https://placeholdit.imgix.net/~text?txtsize=33&txt=slide 3&w=600&h=400' } 9 | ]; 10 | return this.get('store').findAll('flashcard'); 11 | // return [{ 12 | // id: 'grand-old-mansion', 13 | // title: 'Grand Old Mansion', 14 | // owner: 'Veruca Salt', 15 | // city: 'San Francisco', 16 | // category: 'Estate', 17 | // bedrooms: 15, 18 | // image: 'https://upload.wikimedia.org/wikipedia/commons/c/cb/Crane_estate_(5).jpg', 19 | // description: 'This grand old mansion sits on over 100 acres of rolling hills and dense redwood forests.' 20 | // }, { 21 | // id: 'urban-living', 22 | // title: 'Urban Living', 23 | // owner: 'Mike TV', 24 | // city: 'Seattle', 25 | // category: 'Condo', 26 | // bedrooms: 1, 27 | // image: 'https://upload.wikimedia.org/wikipedia/commons/0/0e/Alfonso_13_Highrise_Tegucigalpa.jpg', 28 | // description: 'A commuters dream. This rental is within walking distance of 2 bus stops and the Metro.' 29 | // }, { 30 | // id: 'downtown-charm', 31 | // title: 'Downtown Charm', 32 | // owner: 'Violet Beauregarde', 33 | // city: 'Portland', 34 | // category: 'Apartment', 35 | // bedrooms: 3, 36 | // image: 'https://upload.wikimedia.org/wikipedia/commons/f/f7/Wheeldon_Apartment_Building_-_Portland_Oregon.jpg', 37 | // description: 'Convenience is at your doorstep with this charming downtown rental. Great restaurants and active night life are within a few feet.' 38 | // }]; 39 | } 40 | }); 41 | -------------------------------------------------------------------------------- /frontend/app/routes/index.js: -------------------------------------------------------------------------------- 1 | import Route from '@ember/routing/route'; 2 | 3 | export default Route.extend({ 4 | beforeModel() { 5 | this.replaceWith('packs'); 6 | } 7 | }); 8 | -------------------------------------------------------------------------------- /frontend/app/routes/packs.js: -------------------------------------------------------------------------------- 1 | import Route from '@ember/routing/route'; 2 | 3 | export default Route.extend({ 4 | model() { 5 | return this.get('store').findAll('pack'); 6 | } 7 | }); 8 | -------------------------------------------------------------------------------- /frontend/app/routes/rentals.js: -------------------------------------------------------------------------------- 1 | import Route from '@ember/routing/route'; 2 | 3 | export default Route.extend({ 4 | model() { 5 | return this.get('store').findAll('rental'); 6 | // return [{ 7 | // id: 'grand-old-mansion', 8 | // title: 'Grand Old Mansion', 9 | // owner: 'Veruca Salt', 10 | // city: 'San Francisco', 11 | // category: 'Estate', 12 | // bedrooms: 15, 13 | // image: 'https://upload.wikimedia.org/wikipedia/commons/c/cb/Crane_estate_(5).jpg', 14 | // description: 'This grand old mansion sits on over 100 acres of rolling hills and dense redwood forests.' 15 | // }, { 16 | // id: 'urban-living', 17 | // title: 'Urban Living', 18 | // owner: 'Mike TV', 19 | // city: 'Seattle', 20 | // category: 'Condo', 21 | // bedrooms: 1, 22 | // image: 'https://upload.wikimedia.org/wikipedia/commons/0/0e/Alfonso_13_Highrise_Tegucigalpa.jpg', 23 | // description: 'A commuters dream. This rental is within walking distance of 2 bus stops and the Metro.' 24 | // }, { 25 | // id: 'downtown-charm', 26 | // title: 'Downtown Charm', 27 | // owner: 'Violet Beauregarde', 28 | // city: 'Portland', 29 | // category: 'Apartment', 30 | // bedrooms: 3, 31 | // image: 'https://upload.wikimedia.org/wikipedia/commons/f/f7/Wheeldon_Apartment_Building_-_Portland_Oregon.jpg', 32 | // description: 'Convenience is at your doorstep with this charming downtown rental. Great restaurants and active night life are within a few feet.' 33 | // }]; 34 | } 35 | }); 36 | -------------------------------------------------------------------------------- /frontend/app/routes/start.js: -------------------------------------------------------------------------------- 1 | import Route from '@ember/routing/route'; 2 | 3 | export default Route.extend({ 4 | }); 5 | -------------------------------------------------------------------------------- /frontend/app/styles/app.css: -------------------------------------------------------------------------------- 1 | .header { 2 | border-bottom-width: 2px; 3 | border-bottom-style: solid; 4 | border-bottom-color: black; 5 | background-color: #4257b2; 6 | } 7 | 8 | .d_logo { 9 | padding: 20px 40px 0px 40px; 10 | } 11 | 12 | .tools { 13 | /*height: 700px;*/ 14 | } 15 | 16 | .widget { 17 | padding-top: 30px; 18 | padding-bottom: 30px; 19 | width: 1300px !important; 20 | max-width: 1300px; 21 | } 22 | 23 | /*.widget>div { 24 | padding: 20px; 25 | }*/ 26 | 27 | .widget>div>div>div { 28 | border-style: dashed; 29 | border-width: 4px; 30 | border-color: #09f6c4; 31 | text-align: center; 32 | padding: 15%; 33 | font-family: Arial, Helvetica, sans-serif; 34 | } 35 | 36 | .create { 37 | font-size: 30px; 38 | color: black; 39 | } 40 | 41 | .edit div { 42 | color: black; 43 | font-size: 20px; 44 | } 45 | 46 | .public { 47 | color: black; 48 | font-size: 20px; 49 | } 50 | 51 | .light { 52 | width: 100%; 53 | } 54 | .introduction { 55 | font-family: hurme_no2-webfont,-apple-system,BlinkMacSystemFont,sans-serif; 56 | width: calc(99.99% * 6/12 - (32px - 32px * 6/12)); 57 | color: #455358; 58 | padding-bottom: 10%; 59 | } 60 | .tools { 61 | text-align: right; 62 | margin-left: calc(99.99% * (-5/12 * -1) - (32px - 32px * (-1/12 * -1)) + 32px) !important; 63 | position: relative; 64 | } 65 | .heading { 66 | font-weight: bolder; 67 | font-size: 5.0rem; 68 | line-height: 65px; 69 | padding-bottom: 30px; 70 | font-family: hurme_no2-webfont; 71 | } 72 | .splash { 73 | padding-top: 30%; 74 | } 75 | .started { 76 | padding: 20px 0px; 77 | margin-top: 30px; 78 | } 79 | .back_image { 80 | height: 20.5rem; 81 | } 82 | .results > div { 83 | margin-top: 5%; 84 | margin-right: 20px; 85 | padding-bottom: 7px; 86 | } 87 | 88 | .listing:hover { 89 | background-color: #42c2f4; 90 | transition: 0.7s; 91 | } 92 | 93 | /*.results > div:hover { 94 | background-color: blue; 95 | transition: 0.7s; 96 | }*/ 97 | .detailed_pack { 98 | padding: 10px; 99 | } 100 | .user_image { 101 | width: 10px; 102 | height: 10px; 103 | } 104 | /*.detailed_pack { 105 | column-count: 3; 106 | }*/ 107 | .results>div { 108 | display: inline-block; 109 | } 110 | .title { 111 | line-height: 20px; 112 | margin-right: 20px; 113 | font-size: 20px; 114 | border: none; 115 | border-bottom: solid; 116 | padding: 10px; 117 | outline: none; 118 | } 119 | .title:hover { 120 | transition: 0.7s; 121 | border-bottom-color: #3ccfcf; 122 | } 123 | .short_description { 124 | padding-bottom: 20px; 125 | padding-top: 20px; 126 | } 127 | .options { 128 | padding: 20px; 129 | } 130 | .toggle { 131 | padding-top: 30px; 132 | } 133 | .search_question { 134 | padding: 10px; 135 | font-size: 20px; 136 | } 137 | .question, .answer { 138 | border-bottom-style: solid; 139 | border-bottom-color: #3ccfcf; 140 | } 141 | .answer_image { 142 | width: 20px; 143 | height: 20px; 144 | border: solid 1px #d7cccc; 145 | float: right; 146 | margin-top: 1%; 147 | box-shadow: 0 0.3125rem 1rem 0 rgba(0,0,0,0.4); 148 | } 149 | .line { 150 | height: 1px; 151 | border-bottom: solid 2px #bdb7b7; 152 | padding-top: 20px; 153 | } 154 | .input_question { 155 | border: none; 156 | outline: none; 157 | } 158 | .input_answer { 159 | border: none; 160 | outline: none; 161 | } 162 | .add_question { 163 | padding-top: 30px; 164 | font-size: 20px; 165 | } 166 | .block1 { 167 | padding-bottom: 30px; 168 | } 169 | .sidebar { 170 | /*height: 800px;*/ 171 | text-align: center; 172 | box-shadow: 0.3125rem 0 1.25rem 0 rgba(0,0,0,0.28); 173 | } 174 | .cards { 175 | margin-top: 30%; 176 | } 177 | #myProgress { 178 | margin-top: 20px; 179 | width: 100%; 180 | background-color: #ddd; 181 | } 182 | 183 | #myBar { 184 | width: 1%; 185 | height: 15px; 186 | background-color: #4CAF50; 187 | } 188 | .button_group { 189 | margin-top: 240%; 190 | margin-bottom: 40%; 191 | /*position: absolute;*/ 192 | /*top: auto !important;*/ 193 | 194 | } 195 | .button_group>div>button { 196 | margin-top: 20px; 197 | width: 100%; 198 | color: #3ccfcf; 199 | font-weight: bolder; 200 | padding: 12px; 201 | border: solid 1px; 202 | border-radius: 0px; 203 | } 204 | .button_group>div>button:focus { 205 | color: #ffcd1f; 206 | } 207 | .flash_header { 208 | text-align: center; 209 | color: black; 210 | } 211 | .flashcard { 212 | font-size: 20px; 213 | } 214 | /*.second_body { 215 | background: url(../public/assets/image/splash-laptop-desktop.BwuW.jpg) no-repeat; 216 | background-size: 100%; 217 | }*/ 218 | #powerselect { 219 | outline: none; 220 | } 221 | 222 | .cls_undernone .cls_underimg { 223 | text-decoration: none !important; 224 | } 225 | .cls_createfont { 226 | font-weight: 700; 227 | font-family: 'hurme_no2-webfont' !important; 228 | } 229 | 230 | .cls_hurmefont { 231 | font-family: 'hurme_no2-webfont' !important; 232 | } 233 | 234 | .cls_fullheight { 235 | height: 85.5vh; 236 | } 237 | 238 | .cls_toggleinput1 { 239 | border: none; 240 | background-color: white; 241 | font-weight: 600; 242 | font-family: 'hurme_no2-webfont' !important; 243 | font-size: 17px; 244 | text-transform: uppercase; 245 | } 246 | 247 | .cls_toggleinput2 { 248 | border: none; 249 | background-color: white; 250 | font-weight: 600; 251 | font-family: 'hurme_no2-webfont' !important; 252 | font-size: 17px; 253 | margin-top: 2%; 254 | text-transform: uppercase; 255 | } 256 | 257 | .cls_createbtn { 258 | font-weight: 600; 259 | font-family: 'hurme_no2-webfont' !important; 260 | } 261 | 262 | .cls_fontfamily { 263 | font-family: 'hurme_no2-webfont' !important; 264 | } 265 | 266 | .cls_flashcardheader { 267 | font-weight: 600; 268 | color: #1d59ea; 269 | } 270 | 271 | .cls_fontweight { 272 | font-weight: 600; 273 | } 274 | 275 | .cls_addquestion { 276 | font-weight: 600; 277 | text-align: center; 278 | padding-bottom: 30px; 279 | } 280 | 281 | .cls_toggle1 { 282 | font-size: 17px; 283 | } 284 | 285 | .cls_toggle2 { 286 | margin-top: 2%; 287 | font-size: 17px; 288 | } 289 | 290 | .cls_question { 291 | text-align: center; 292 | } 293 | 294 | .cls_powerselect { 295 | font-size: 17px !important; 296 | outline: none !important; 297 | } 298 | 299 | .cls_power { 300 | padding-left: 5% !important; 301 | padding-right: 5% !important; 302 | } 303 | 304 | .cls_btncreate { 305 | margin-top: 40px; 306 | float: right; 307 | margin-bottom: 60px; 308 | margin-right: 60px; 309 | outline: none !important; 310 | } 311 | <<<<<<< HEAD 312 | #manual { 313 | display: ; 314 | } 315 | #auto { 316 | /*display: block;*/ 317 | ======= 318 | 319 | .cls_studypackbtn { 320 | font-weight: 800; 321 | } 322 | 323 | .cls_indexbtncolor { 324 | color: #1e8cf1 !important; 325 | font-weight: 600; 326 | } 327 | 328 | .cls_indexpadding { 329 | padding-left: 0px !important; 330 | padding-right: 0px !important; 331 | } 332 | 333 | .cls_cardheight { 334 | height: 84vh; 335 | position: fixed; 336 | } 337 | 338 | .cls_aboutbtn { 339 | outline: none !important; 340 | } 341 | 342 | .cls_fontbold { 343 | font-weight: bolder; 344 | } 345 | 346 | .cls_center { 347 | text-align: center; 348 | } 349 | 350 | .buttons { 351 | position: absolute; 352 | top: 50%; 353 | left: 50%; 354 | width: 500px; 355 | height: 260px; 356 | margin-top: -130px; 357 | margin-left: -250px; 358 | text-align: center; 359 | } 360 | 361 | .btn { 362 | display: inline-block; 363 | min-width: 110px; 364 | margin: 15px 5px; 365 | padding: 10px 15px 12px; 366 | font: 700 12px/1; 367 | border-radius: 3px; 368 | box-shadow: inset 0 -1px 0 1px rgba(0, 0, 0, 0.1), inset 0 -10px 20px rgba(0, 0, 0, 0.1); 369 | cursor: pointer; 370 | } 371 | 372 | .btn.sec { 373 | color: white; 374 | text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); 375 | background: #1e8cf1; 376 | } 377 | 378 | .btn.sec:hover { 379 | background: #1e8cf1; 380 | } 381 | 382 | .btn.pri { 383 | color: #fff; 384 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); 385 | } 386 | 387 | .btn.sec.ico:before 388 | { 389 | position: absolute; 390 | top: 0; 391 | left: 0; 392 | display: block; 393 | width: 30px; 394 | padding: 10px 0 12px; 395 | font-family: 'hurme_no2-webfont' !important; 396 | text-align: center; 397 | border-radius: 3px 0 0 3px; 398 | background: rgba(0, 0, 0, 0.15); 399 | } 400 | 401 | .cls_outline { 402 | outline: none !important; 403 | } 404 | 405 | .cls_imagemargin { 406 | margin-top: 4%; 407 | <<<<<<< HEAD 408 | } 409 | 410 | .cls_sizedire { 411 | font-size: 17px !important; 412 | ======= 413 | >>>>>>> 0b617ffea21e9a9118f83c7a169886ef51fd4531 414 | >>>>>>> 6591a75db84a1ad9c74fad9d851e221967f1215a 415 | } -------------------------------------------------------------------------------- /frontend/app/templates/application.hbs: -------------------------------------------------------------------------------- 1 |
2 | {{outlet}} 3 |
-------------------------------------------------------------------------------- /frontend/app/templates/components/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/frontend/app/templates/components/.gitkeep -------------------------------------------------------------------------------- /frontend/app/templates/components/flashcard-listing.hbs: -------------------------------------------------------------------------------- 1 |
2 |
3 | Question : 4 | {{flashcard.question}} 5 |
6 |
7 | 8 |
9 |
10 | Answer : 11 | {{flashcard.answer}} 12 |
13 |
-------------------------------------------------------------------------------- /frontend/app/templates/components/list-filter.hbs: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | {{input value=value 6 | key-up=(action 'handleFilterEntry') 7 | class="light" 8 | id = "search" 9 | placeholder="Filter By Owner"}} 10 |
11 |
12 | {{yield results}} 13 |
14 | -------------------------------------------------------------------------------- /frontend/app/templates/components/pack-listing.hbs: -------------------------------------------------------------------------------- 1 |
2 | {{#if pack.image}} 3 |
4 |
5 | {{pack.terms}} terms 6 | {{pack.category}} 7 | 8 | 9 | {{pack.owner}} 10 | 11 |
12 |
13 |

{{pack.title}}

14 |
15 | {{else}} 16 |
17 | {{pack.terms}} terms 18 | {{pack.category}} 19 | 20 | 21 | {{pack.owner}} 22 | 23 |
24 |
25 |

{{pack.title}}

26 |
27 | {{/if}} 28 |
-------------------------------------------------------------------------------- /frontend/app/templates/components/question-filter.hbs: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | {{input value=value 6 | key-up=(action 'handleFilterEntry') 7 | class="light" 8 | id = "search" 9 | placeholder="Filter By Owner"}} 10 |
11 |
12 | {{yield results}} 13 |
14 | -------------------------------------------------------------------------------- /frontend/app/templates/components/question-list.hbs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/frontend/app/templates/components/question-list.hbs -------------------------------------------------------------------------------- /frontend/app/templates/components/rental-listing.hbs: -------------------------------------------------------------------------------- 1 |
2 |
3 | Q: 4 |
{{rental.question}}
5 |
6 |
7 | A: 8 |
9 | {{rental.answer}} 10 | 11 |
12 |
13 |
-------------------------------------------------------------------------------- /frontend/app/templates/create.hbs: -------------------------------------------------------------------------------- 1 |
2 |

Create a study pack

3 |
4 | {{input type="text" value=title class="title col-sm-5" placeholder="Title of study pack"}} 5 | {{input type="text" value=description class="title col-sm-5" placeholder="Description of study pack"}} 6 |
7 |
8 |
9 |
10 | {{x-toggle 11 | class="col-sm-7" 12 | offLabel='Public' 13 | onLabel='Private' 14 | showLabels=true 15 | value=actionBound 16 | onToggle=(action (mut actionBound)) 17 | }} 18 | {{input class="col-sm-5" disabled=true value=actionBound}} 19 |
20 |
21 | {{x-toggle 22 | class="col-sm-7" 23 | offLabel='Me' 24 | onLabel='Group' 25 | showLabels=true 26 | value=actionBounds 27 | onToggle=(action (mut actionBounds)) 28 | }} 29 | {{input class="col-sm-5" disabled=true value=actionBounds}} 30 |
31 |
32 |
33 |

Users

34 | {{#power-select 35 | options=userOptions 36 | id="powerselect" 37 | placeholder="Select a user" 38 | selected=selectedFilter 39 | searchEnabled=false 40 | onchange=(action (mut selectedFilter)) 41 | as |filter| }} 42 | {{filter.name}} 43 | {{/power-select}} 44 |
45 |
46 |

Invite

47 | {{#power-select 48 | options=inviteOptions 49 | id="powerselect" 50 | placeholder="Invite a person" 51 | selected=selectFilter 52 | searchEnabled=false 53 | onchange=(action (mut selectFilter)) 54 | as |filter| }} 55 | {{filter.name}} 56 | {{/power-select}} 57 |
58 |
59 |
60 |
61 |

Question and Answer

62 |
63 | {{#question-filter filter=(action 'filterByOwner') as |filteredResults|}} 64 |
65 | {{#each filteredResults as |packUnit|}} 66 |
67 |
68 | {{/each}} 69 |
70 | {{/question-filter}} 71 |
72 | {{#each model as |rental|}} 73 |
74 |

{{rental.title}}

75 |
76 | Owner: {{rental.owner}} 77 |
78 |
79 | Type: {{rental.category}} 80 |
81 |
82 | Location: {{rental.city}} 83 |
84 |
85 | Number of bedrooms: {{rental.bedrooms}} 86 |
87 |
88 | {{/each}} 89 |
-------------------------------------------------------------------------------- /frontend/app/templates/flashcard.hbs: -------------------------------------------------------------------------------- 1 | 4 |
5 |
6 | 26 | <<<<<<< HEAD 27 |
28 |
29 |

My FlashCard

30 | {{#carousel-container transitionInterval=400 as |ui controls|}} 31 | 38 |
39 | 40 | 41 |
42 | {{/carousel-container}} 43 | ======= 44 |
45 |
46 |

My FlashCard

47 |
48 | {{#each model as |flashcardUnit|}} 49 | {{flashcard-listing flashcard=flashcardUnit}} 50 | {{/each}} 51 |
52 |
53 | {{#each model as |flashcardUnit|}} 54 | {{flashcard-listing flashcard=flashcardUnit}} 55 | {{/each}} 56 |
57 | >>>>>>> 6591a75db84a1ad9c74fad9d851e221967f1215a 58 |
59 |
60 |
61 | 62 | -------------------------------------------------------------------------------- /frontend/app/templates/index.hbs: -------------------------------------------------------------------------------- 1 | {{outlet}} -------------------------------------------------------------------------------- /frontend/app/templates/packs.hbs: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

Simple tools for learning anything.

5 |

Search millions of study sets or create your own. Improve your grades by studying with flashcards, games and more

6 |
7 | 8 |
9 |
10 |
11 | Chania 12 |
13 | 14 |
15 |
16 |
17 |
18 | {{#link-to "rentals"}} 19 |
20 | + Create
A Study Pack
21 |
22 | {{/link-to}} 23 |
24 |
25 |
26 |
27 |
28 | {{#link-to "start"}} 29 |
Computer Science
30 | {{/link-to}} 31 | {{#link-to "start"}} 32 |
Maths
33 | {{/link-to}} 34 | {{#link-to "start"}} 35 |
Linguistics
36 | {{/link-to}} 37 |
38 |
39 |
40 |
41 |
42 |
43 | {{#link-to "rentals"}} 44 |
Computer Science
45 | {{/link-to}} 46 | {{#link-to "rentals"}} 47 |
Maths
48 | {{/link-to}} 49 | {{#link-to "rentals"}} 50 |
Linguistics
51 | {{/link-to}} 52 |
53 |
54 |
55 |
56 |
57 | {{#question-filter filter=(action 'filterByOwner') as |filteredResults|}} 58 |
59 | {{#each filteredResults as |packUnit|}} 60 |
61 | {{pack-listing pack=packUnit}} 62 |
63 | {{/each}} 64 |
65 | {{/question-filter}} 66 | -------------------------------------------------------------------------------- /frontend/app/templates/rentals.hbs: -------------------------------------------------------------------------------- 1 |
2 |

Create a study pack

3 |
4 | {{input type="text" value=title class="title col-sm-5" placeholder="Title of study pack"}} 5 | {{input type="text" value=description class="title col-sm-5" placeholder="Description of study pack"}} 6 |
7 |
8 |
9 |
10 | {{x-toggle 11 | class="col-sm-7 cls_toggle1" 12 | offLabel='Public' 13 | onLabel='Private' 14 | showLabels=true 15 | value=actionBound 16 | onToggle=(action (mut actionBound)) 17 | }} 18 | {{input class="col-sm-5 cls_toggleinput1" disabled=true value=actionBound}} 19 |
20 |
21 | {{x-toggle 22 | class="col-sm-7 cls_toggle2" 23 | offLabel='Me' 24 | onLabel='Group' 25 | showLabels=true 26 | value=actionBounds 27 | onToggle=(action (mut actionBounds)) 28 | }} 29 | {{input class="col-sm-5 cls_toggleinput2" disabled=true value=actionBounds}} 30 |
31 |
32 |
33 |

Users

34 | {{#power-select 35 | class="cls_powerselect" 36 | options=userOptions 37 | placeholder="Select a user" 38 | selected=selectedFilter 39 | searchEnabled=false 40 | onchange=(action (mut selectedFilter)) 41 | as |filter| }} 42 | {{filter.name}} 43 | {{/power-select}} 44 |
45 |
46 |

Invite

47 | {{#power-select 48 | class="cls_powerselect" 49 | options=inviteOptions 50 | placeholder="Invite a person" 51 | selected=selectFilter 52 | searchEnabled=false 53 | onchange=(action (mut selectFilter)) 54 | as |filter| }} 55 | {{filter.name}} 56 | {{/power-select}} 57 |
58 |
59 |
60 |

Question and Answer

61 |
62 | {{#list-filter filter=(action 'filterByCity') as |filteredResults|}} 63 |
    64 | {{#each filteredResults as |rentalUnit|}} 65 |
  • {{rental-listing rental=rentalUnit}}
  • 66 | {{/each}} 67 |
68 | {{/list-filter}} 69 |
70 |
71 |

Add your questions

72 |
73 | Q: 74 |
75 | {{input type="text" value=question class="input_question col-sm-12" placeholder="Write your question"}} 76 |
77 |
78 |
79 | A: 80 |
81 | {{input type="text" value=answer class="input_answer col-sm-10" placeholder="Write your answer"}} 82 | 83 |
84 |
85 |
86 |
87 |
88 | Q: 89 |
90 | {{input type="text" value=question class="input_question col-sm-12" placeholder="Write your question"}} 91 |
92 |
93 |
94 | A: 95 |
96 | {{input type="text" value=answer class="input_answer col-sm-10" placeholder="Write your answer"}} 97 | 98 |
99 |
100 |
101 |
102 |
103 | Q: 104 |
105 | {{input type="text" value=question class="input_question col-sm-12" placeholder="Write your question"}} 106 |
107 |
108 |
109 | A: 110 |
111 | {{input type="text" value=answer class="input_answer col-sm-10" placeholder="Write your answer"}} 112 | 113 |
114 |
115 |
116 | 117 |
-------------------------------------------------------------------------------- /frontend/app/templates/start.hbs: -------------------------------------------------------------------------------- 1 |
2 |
3 |

Contact Us

4 |

Super Rentals Representatives would love to help you
choose a destination or answer 5 | any questions you may have.

6 |

7 | Super Rentals HQ 8 |

9 | 1212 Test Address Avenue
10 | Testington, OR 97233 11 |
12 | +1 (503) 555-1212< br> 13 | superrentalsrep@emberjs.com 14 |

15 |
-------------------------------------------------------------------------------- /frontend/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend", 3 | "dependencies": { 4 | "jquery.event.move": "^1.3.6", 5 | "unslider": "https://github.com/idiot/unslider.git#master", 6 | "slick-carousel": "^1.8.1" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /frontend/config/environment.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = function(environment) { 4 | let ENV = { 5 | modulePrefix: 'frontend', 6 | environment, 7 | rootURL: '/', 8 | locationType: 'auto', 9 | EmberENV: { 10 | FEATURES: { 11 | // Here you can enable experimental features on an ember canary build 12 | // e.g. 'with-controller': true 13 | }, 14 | EXTEND_PROTOTYPES: { 15 | // Prevent Ember Data from overriding Date.parse. 16 | Date: false 17 | } 18 | }, 19 | 20 | APP: { 21 | // Here you can pass flags/options to your application instance 22 | // when it is created 23 | } 24 | }; 25 | 26 | if (environment === 'development') { 27 | // ENV.APP.LOG_RESOLVER = true; 28 | // ENV.APP.LOG_ACTIVE_GENERATION = true; 29 | // ENV.APP.LOG_TRANSITIONS = true; 30 | // ENV.APP.LOG_TRANSITIONS_INTERNAL = true; 31 | // ENV.APP.LOG_VIEW_LOOKUPS = true; 32 | } 33 | 34 | if (environment === 'test') { 35 | // Testem prefers this... 36 | ENV.locationType = 'none'; 37 | 38 | // keep test console output quieter 39 | ENV.APP.LOG_ACTIVE_GENERATION = false; 40 | ENV.APP.LOG_VIEW_LOOKUPS = false; 41 | 42 | ENV.APP.rootElement = '#ember-testing'; 43 | ENV.APP.autoboot = false; 44 | } 45 | 46 | if (environment === 'production') { 47 | // here you can enable a production-specific feature 48 | } 49 | 50 | return ENV; 51 | }; 52 | -------------------------------------------------------------------------------- /frontend/config/targets.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const browsers = [ 4 | 'last 1 Chrome versions', 5 | 'last 1 Firefox versions', 6 | 'last 1 Safari versions' 7 | ]; 8 | 9 | const isCI = !!process.env.CI; 10 | const isProduction = process.env.EMBER_ENV === 'production'; 11 | 12 | if (isCI || isProduction) { 13 | browsers.push('ie 11'); 14 | } 15 | 16 | module.exports = { 17 | browsers 18 | }; 19 | -------------------------------------------------------------------------------- /frontend/ember-cli-build.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const EmberApp = require('ember-cli/lib/broccoli/ember-app'); 4 | 5 | module.exports = function(defaults) { 6 | let app = new EmberApp(defaults, { 7 | // Add options here 8 | }); 9 | 10 | // Use `app.import` to add additional libraries to the generated 11 | // output files. 12 | // 13 | // If you need to use different assets in different 14 | // environments, specify an object as the first parameter. That 15 | // object's keys should be the environment name and the values 16 | // should be the asset to use in that environment. 17 | // 18 | // If the library that you are including contains AMD or ES6 19 | // modules that you would like to import into your application 20 | // please specify an object with the list of modules as keys 21 | // along with the exports of each module as its value. 22 | 23 | return app.toTree(); 24 | }; 25 | -------------------------------------------------------------------------------- /frontend/mirage/config.js: -------------------------------------------------------------------------------- 1 | export default function() { 2 | this.namespace = '/api'; 3 | 4 | this.get('/flashcards', function() { 5 | return { 6 | data: [{ 7 | type: 'flashcards', 8 | id: 'grand-old-mansion', 9 | attributes: { 10 | question: 'What is lion', 11 | answer: 'Lion is a agressive and strong animal. King of desert!!!', 12 | image: 'https://upload.wikimedia.org/wikipedia/commons/0/0e/Alfonso_13_Highrise_Tegucigalpa.jpg' 13 | } 14 | }, { 15 | type: 'flashcards', 16 | id: 'urban-living', 17 | attributes: { 18 | question: 'What is lion', 19 | answer: 'Lion is a agressive and strong animal. King of desert!!!', 20 | image: 'https://upload.wikimedia.org/wikipedia/commons/0/0e/Alfonso_13_Highrise_Tegucigalpa.jpg' 21 | } 22 | }, { 23 | type: 'flashcards', 24 | id: 'downtown-charm', 25 | attributes: { 26 | question: 'What is lion', 27 | answer: 'Lion is a agressive and strong animal. King of desert!!!', 28 | image: 'https://upload.wikimedia.org/wikipedia/commons/f/f7/Wheeldon_Apartment_Building_-_Portland_Oregon.jpg' 29 | } 30 | }] 31 | }; 32 | }); 33 | 34 | let rentals = [{ 35 | // this.get('/rentals', function() { 36 | // return { 37 | // data: [{ 38 | type: 'rentals', 39 | id: 'grand-old-mansion', 40 | attributes: { 41 | question: 'What is lion?', 42 | answer: 'Lion is a strong and aggressive animal.', 43 | title: 'Grand Old Mansion', 44 | owner: 'Veruca Salt', 45 | city: 'San Francisco', 46 | category: 'Estate', 47 | bedrooms: 15, 48 | image: 'https://upload.wikimedia.org/wikipedia/commons/c/cb/Crane_estate_(5).jpg' 49 | } 50 | }, { 51 | type: 'rentals', 52 | id: 'urban-living', 53 | attributes: { 54 | question: 'Tell me about biology!', 55 | answer: 'Biology is a one scienc field.', 56 | title: 'Urban Living', 57 | owner: 'Mike Teavee', 58 | city: 'Seattle', 59 | category: 'Condo', 60 | bedrooms: 1, 61 | image: 'https://upload.wikimedia.org/wikipedia/commons/0/0e/Alfonso_13_Highrise_Tegucigalpa.jpg' 62 | } 63 | }, { 64 | type: 'rentals', 65 | id: 'downtown-charm', 66 | attributes: { 67 | question: 'Do you know what love is?', 68 | answer: 'Love is true', 69 | title: 'Downtown Charm', 70 | owner: 'Violet Beauregarde', 71 | city: 'Portland', 72 | category: 'Apartment', 73 | bedrooms: 3, 74 | image: 'https://upload.wikimedia.org/wikipedia/commons/f/f7/Wheeldon_Apartment_Building_-_Portland_Oregon.jpg' 75 | } 76 | }]; 77 | this.get('/rentals', function(db, request) { 78 | if(request.queryParams.question !== undefined) { 79 | let filteredRentals = rentals.filter(function(i) { 80 | return i.attributes.question.toLowerCase().indexOf(request.queryParams.question.toLowerCase()) !== -1; 81 | }); 82 | return { data: filteredRentals }; 83 | } else { 84 | return { data: rentals }; 85 | } 86 | }); 87 | 88 | let packs = [{ 89 | type: 'packs', 90 | id: 'Chemistry', 91 | attributes: { 92 | title: 'Organic Chemistry: Proteins & Nucleic Acids', 93 | owner: 'Veruca Salt', 94 | // city: 'San Francisco', 95 | category: 'TEACHER', 96 | terms: 15, 97 | userimage: 'https://gimg.quizlet.com/-AzVJVfe_TK8/AAAAAAAAAAI/AAAAAAAAABk/zCTl3f4zxNE/photo.jpg?sz=16', 98 | image: 'https://o.quizlet.com/vJB2Em559uWHyrHniwZ-fQ.jpg' 99 | } 100 | }, { 101 | type: 'packs', 102 | id: 'Economics', 103 | attributes: { 104 | title: 'Germany Sentences of the Day', 105 | owner: 'Mike Teavee', 106 | // city: 'Seattle', 107 | category: 'TEACHER', 108 | terms: 2, 109 | image: 'https://o.quizlet.com/X3EV9UITbgLPHW1AQjMjpA.jpg' 110 | } 111 | }, { 112 | type: 'packs', 113 | id: 'downtown-charm', 114 | attributes: { 115 | title: 'Landmark Supreme Court Class', 116 | owner: 'Violet Beauregarde', 117 | // city: 'Portland', 118 | category: '', 119 | terms: 3, 120 | image: '' 121 | } 122 | },{ 123 | type: 'packs', 124 | id: 'urban-living', 125 | attributes: { 126 | title: 'Urban Living', 127 | owner: 'Mike Teavee', 128 | // city: 'Seattle', 129 | category: '', 130 | terms: 1, 131 | image: 'https://o.quizlet.com/DV0cZJx4OONoFVB8KIzIWQ.jpg' 132 | } 133 | },{ 134 | type: 'packs', 135 | id: 'urving', 136 | attributes: { 137 | title: 'Urban Living', 138 | owner: 'Mike Teavee', 139 | // city: 'Seattle', 140 | category: 'Condo', 141 | terms: 1, 142 | image: 'https://upload.wikimedia.org/wikipedia/commons/0/0e/Alfonso_13_Highrise_Tegucigalpa.jpg' 143 | } 144 | },{ 145 | type: 'packs', 146 | id: 'iving', 147 | attributes: { 148 | title: 'Urban Living', 149 | owner: 'Mike Teavee', 150 | // city: 'Seattle', 151 | category: 'Condo', 152 | terms: 1, 153 | image: 'https://upload.wikimedia.org/wikipedia/commons/0/0e/Alfonso_13_Highrise_Tegucigalpa.jpg' 154 | } 155 | },{ 156 | type: 'packs', 157 | id: 'living', 158 | attributes: { 159 | title: 'Urban Living', 160 | owner: 'Mike Teavee', 161 | // city: 'Seattle', 162 | category: 'Condo', 163 | terms: 1, 164 | image: 'https://upload.wikimedia.org/wikipedia/commons/0/0e/Alfonso_13_Highrise_Tegucigalpa.jpg' 165 | } 166 | }] 167 | this.get('/packs', function(db, request) { 168 | if (request.queryParams.owner !== undefined) { 169 | let filteredPacks = packs.filter(function(i) { 170 | return i.attributes.owner.toLowerCase().indexOf(request.queryParams.owner.toLowerCase()) !== -1; 171 | }); 172 | return {data: filteredPacks}; 173 | } else { 174 | return {data:packs}; 175 | } 176 | }); 177 | 178 | // These comments are here to help you get started. Feel free to delete them. 179 | 180 | /* 181 | Config (with defaults). 182 | 183 | Note: these only affect routes defined *after* them! 184 | */ 185 | 186 | // this.urlPrefix = ''; // make this `http://localhost:8080`, for example, if your API is on a different server 187 | // this.namespace = ''; // make this `/api`, for example, if your API is namespaced 188 | // this.timing = 400; // delay for each request, automatically set to 0 during testing 189 | 190 | /* 191 | Shorthand cheatsheet: 192 | 193 | this.get('/posts'); 194 | this.post('/posts'); 195 | this.get('/posts/:id'); 196 | this.put('/posts/:id'); // or this.patch 197 | this.del('/posts/:id'); 198 | 199 | http://www.ember-cli-mirage.com/docs/v0.3.x/shorthands/ 200 | */ 201 | } 202 | -------------------------------------------------------------------------------- /frontend/mirage/scenarios/default.js: -------------------------------------------------------------------------------- 1 | export default function(/* server */) { 2 | 3 | /* 4 | Seed your development database using your factories. 5 | This data will not be loaded in your tests. 6 | */ 7 | 8 | // server.createList('post', 10); 9 | } 10 | -------------------------------------------------------------------------------- /frontend/mirage/serializers/application.js: -------------------------------------------------------------------------------- 1 | import { JSONAPISerializer } from 'ember-cli-mirage'; 2 | 3 | export default JSONAPISerializer.extend({ 4 | }); 5 | -------------------------------------------------------------------------------- /frontend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend", 3 | "version": "0.0.0", 4 | "private": true, 5 | "description": "Small description for frontend goes here", 6 | "license": "MIT", 7 | "author": "", 8 | "directories": { 9 | "doc": "doc", 10 | "test": "tests" 11 | }, 12 | "repository": "", 13 | "scripts": { 14 | "build": "ember build", 15 | "lint:js": "eslint ./*.js app config lib server tests", 16 | "start": "ember serve", 17 | "test": "ember test" 18 | }, 19 | "devDependencies": { 20 | "broccoli-asset-rev": "^2.4.5", 21 | "ember-ajax": "^3.0.0", 22 | "ember-carousel": "^0.1.0", 23 | "ember-cli": "^3.1.3", 24 | "ember-cli-app-version": "^3.0.0", 25 | "ember-cli-babel": "^6.6.0", 26 | "ember-cli-dependency-checker": "^2.0.0", 27 | "ember-cli-eslint": "^4.2.1", 28 | "ember-cli-htmlbars": "^2.0.1", 29 | "ember-cli-htmlbars-inline-precompile": "^1.0.0", 30 | "ember-cli-inject-live-reload": "^1.4.1", 31 | "ember-cli-mirage": "^0.4.3", 32 | "ember-cli-qunit": "^4.1.1", 33 | "ember-cli-rails-addon": "^0.10.0", 34 | "ember-cli-shims": "^1.2.0", 35 | "ember-cli-slick": "^2.0.0", 36 | "ember-cli-sri": "^2.1.0", 37 | "ember-cli-tutorial-style": "^2.0.0", 38 | "ember-cli-uglify": "^2.0.0", 39 | "ember-data": "~3.1.0", 40 | "ember-export-application-global": "^2.0.0", 41 | "ember-load-initializers": "^1.0.0", 42 | "ember-maybe-import-regenerator": "^0.1.6", 43 | "ember-power-select": "^2.0.0-beta.4", 44 | "ember-resolver": "^4.0.0", 45 | "ember-source": "~3.1.0", 46 | "ember-toggle": "^5.2.2", 47 | "ember-welcome-page": "^3.0.0", 48 | "eslint-plugin-ember": "^5.0.0", 49 | "loader.js": "^4.2.3" 50 | }, 51 | "engines": { 52 | "node": "^4.5 || 6.* || >= 7.*" 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /frontend/public/assets/images/teaching.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/frontend/public/assets/images/teaching.png -------------------------------------------------------------------------------- /frontend/public/public/assets/image/discourse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/frontend/public/public/assets/image/discourse.png -------------------------------------------------------------------------------- /frontend/public/public/assets/image/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/frontend/public/public/assets/image/image.png -------------------------------------------------------------------------------- /frontend/public/public/assets/image/introduction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/frontend/public/public/assets/image/introduction.png -------------------------------------------------------------------------------- /frontend/public/public/assets/image/splash-laptop-desktop.BwuW.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/frontend/public/public/assets/image/splash-laptop-desktop.BwuW.jpg -------------------------------------------------------------------------------- /frontend/public/robots.txt: -------------------------------------------------------------------------------- 1 | # http://www.robotstxt.org 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /frontend/testem.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | test_page: 'tests/index.html?hidepassed', 3 | disable_watching: true, 4 | launch_in_ci: [ 5 | 'Chrome' 6 | ], 7 | launch_in_dev: [ 8 | 'Chrome' 9 | ], 10 | browser_args: { 11 | Chrome: { 12 | mode: 'ci', 13 | args: [ 14 | // --no-sandbox is needed when running Chrome inside a container 15 | process.env.TRAVIS ? '--no-sandbox' : null, 16 | 17 | '--disable-gpu', 18 | '--headless', 19 | '--remote-debugging-port=0', 20 | '--window-size=1440,900' 21 | ].filter(Boolean) 22 | } 23 | } 24 | }; 25 | -------------------------------------------------------------------------------- /frontend/tests/acceptance/list-packs-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { visit, currentURL } from '@ember/test-helpers'; 3 | import { setupApplicationTest } from 'ember-qunit'; 4 | 5 | module('Acceptance | list packs', function(hooks) { 6 | setupApplicationTest(hooks); 7 | 8 | test('visiting /list-packs', async function(assert) { 9 | await visit('/list-packs'); 10 | 11 | assert.equal(currentURL(), '/list-packs'); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /frontend/tests/helpers/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/frontend/tests/helpers/.gitkeep -------------------------------------------------------------------------------- /frontend/tests/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Frontend Tests 7 | 8 | 9 | 10 | {{content-for "head"}} 11 | {{content-for "test-head"}} 12 | 13 | 14 | 15 | 16 | 17 | {{content-for "head-footer"}} 18 | {{content-for "test-head-footer"}} 19 | 20 | 21 | {{content-for "body"}} 22 | {{content-for "test-body"}} 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | {{content-for "body-footer"}} 31 | {{content-for "test-body-footer"}} 32 | 33 | 34 | -------------------------------------------------------------------------------- /frontend/tests/integration/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/frontend/tests/integration/.gitkeep -------------------------------------------------------------------------------- /frontend/tests/integration/components/flashcard-listing-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { setupRenderingTest } from 'ember-qunit'; 3 | import { render } from '@ember/test-helpers'; 4 | import hbs from 'htmlbars-inline-precompile'; 5 | 6 | module('Integration | Component | flashcard-listing', function(hooks) { 7 | setupRenderingTest(hooks); 8 | 9 | test('it renders', async function(assert) { 10 | // Set any properties with this.set('myProperty', 'value'); 11 | // Handle any actions with this.set('myAction', function(val) { ... }); 12 | 13 | await render(hbs`{{flashcard-listing}}`); 14 | 15 | assert.equal(this.element.textContent.trim(), ''); 16 | 17 | // Template block usage: 18 | await render(hbs` 19 | {{#flashcard-listing}} 20 | template block text 21 | {{/flashcard-listing}} 22 | `); 23 | 24 | assert.equal(this.element.textContent.trim(), 'template block text'); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /frontend/tests/integration/components/list-filter-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { setupRenderingTest } from 'ember-qunit'; 3 | import { render } from '@ember/test-helpers'; 4 | import hbs from 'htmlbars-inline-precompile'; 5 | 6 | module('Integration | Component | list-filter', function(hooks) { 7 | setupRenderingTest(hooks); 8 | 9 | test('it renders', async function(assert) { 10 | // Set any properties with this.set('myProperty', 'value'); 11 | // Handle any actions with this.set('myAction', function(val) { ... }); 12 | 13 | await render(hbs`{{list-filter}}`); 14 | 15 | assert.equal(this.element.textContent.trim(), ''); 16 | 17 | // Template block usage: 18 | await render(hbs` 19 | {{#list-filter}} 20 | template block text 21 | {{/list-filter}} 22 | `); 23 | 24 | assert.equal(this.element.textContent.trim(), 'template block text'); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /frontend/tests/integration/components/pack-listing-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { setupRenderingTest } from 'ember-qunit'; 3 | import { render } from '@ember/test-helpers'; 4 | import hbs from 'htmlbars-inline-precompile'; 5 | 6 | module('Integration | Component | pack-listing', function(hooks) { 7 | setupRenderingTest(hooks); 8 | 9 | test('it renders', async function(assert) { 10 | // Set any properties with this.set('myProperty', 'value'); 11 | // Handle any actions with this.set('myAction', function(val) { ... }); 12 | 13 | await render(hbs`{{pack-listing}}`); 14 | 15 | assert.equal(this.element.textContent.trim(), ''); 16 | 17 | // Template block usage: 18 | await render(hbs` 19 | {{#pack-listing}} 20 | template block text 21 | {{/pack-listing}} 22 | `); 23 | 24 | assert.equal(this.element.textContent.trim(), 'template block text'); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /frontend/tests/integration/components/question-filter-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { setupRenderingTest } from 'ember-qunit'; 3 | import { render } from '@ember/test-helpers'; 4 | import hbs from 'htmlbars-inline-precompile'; 5 | 6 | module('Integration | Component | question-filter', function(hooks) { 7 | setupRenderingTest(hooks); 8 | 9 | test('it renders', async function(assert) { 10 | // Set any properties with this.set('myProperty', 'value'); 11 | // Handle any actions with this.set('myAction', function(val) { ... }); 12 | 13 | await render(hbs`{{question-filter}}`); 14 | 15 | assert.equal(this.element.textContent.trim(), ''); 16 | 17 | // Template block usage: 18 | await render(hbs` 19 | {{#question-filter}} 20 | template block text 21 | {{/question-filter}} 22 | `); 23 | 24 | assert.equal(this.element.textContent.trim(), 'template block text'); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /frontend/tests/integration/components/question-list-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { setupRenderingTest } from 'ember-qunit'; 3 | import { render } from '@ember/test-helpers'; 4 | import hbs from 'htmlbars-inline-precompile'; 5 | 6 | module('Integration | Component | question-list', function(hooks) { 7 | setupRenderingTest(hooks); 8 | 9 | test('it renders', async function(assert) { 10 | // Set any properties with this.set('myProperty', 'value'); 11 | // Handle any actions with this.set('myAction', function(val) { ... }); 12 | 13 | await render(hbs`{{question-list}}`); 14 | 15 | assert.equal(this.element.textContent.trim(), ''); 16 | 17 | // Template block usage: 18 | await render(hbs` 19 | {{#question-list}} 20 | template block text 21 | {{/question-list}} 22 | `); 23 | 24 | assert.equal(this.element.textContent.trim(), 'template block text'); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /frontend/tests/integration/components/rental-listing-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { setupRenderingTest } from 'ember-qunit'; 3 | import { render } from '@ember/test-helpers'; 4 | import hbs from 'htmlbars-inline-precompile'; 5 | 6 | module('Integration | Component | rental-listing', function(hooks) { 7 | setupRenderingTest(hooks); 8 | 9 | test('it renders', async function(assert) { 10 | // Set any properties with this.set('myProperty', 'value'); 11 | // Handle any actions with this.set('myAction', function(val) { ... }); 12 | 13 | await render(hbs`{{rental-listing}}`); 14 | 15 | assert.equal(this.element.textContent.trim(), ''); 16 | 17 | // Template block usage: 18 | await render(hbs` 19 | {{#rental-listing}} 20 | template block text 21 | {{/rental-listing}} 22 | `); 23 | 24 | assert.equal(this.element.textContent.trim(), 'template block text'); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /frontend/tests/integration/helpers/pack-property-type-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { setupRenderingTest } from 'ember-qunit'; 3 | import { render } from '@ember/test-helpers'; 4 | import hbs from 'htmlbars-inline-precompile'; 5 | 6 | module('Integration | Helper | pack-property-type', function(hooks) { 7 | setupRenderingTest(hooks); 8 | 9 | // Replace this with your real tests. 10 | test('it renders', async function(assert) { 11 | this.set('inputValue', '1234'); 12 | 13 | await render(hbs`{{pack-property-type inputValue}}`); 14 | 15 | assert.equal(this.element.textContent.trim(), '1234'); 16 | }); 17 | }); 18 | -------------------------------------------------------------------------------- /frontend/tests/integration/helpers/rental-property-type-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { setupRenderingTest } from 'ember-qunit'; 3 | import { render } from '@ember/test-helpers'; 4 | import hbs from 'htmlbars-inline-precompile'; 5 | 6 | module('Integration | Helper | rental-property-type', function(hooks) { 7 | setupRenderingTest(hooks); 8 | 9 | // Replace this with your real tests. 10 | test('it renders', async function(assert) { 11 | this.set('inputValue', '1234'); 12 | 13 | await render(hbs`{{rental-property-type inputValue}}`); 14 | 15 | assert.equal(this.element.textContent.trim(), '1234'); 16 | }); 17 | }); 18 | -------------------------------------------------------------------------------- /frontend/tests/test-helper.js: -------------------------------------------------------------------------------- 1 | import Application from '../app'; 2 | import config from '../config/environment'; 3 | import { setApplication } from '@ember/test-helpers'; 4 | import { start } from 'ember-qunit'; 5 | 6 | setApplication(Application.create(config.APP)); 7 | 8 | start(); 9 | -------------------------------------------------------------------------------- /frontend/tests/unit/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/frontend/tests/unit/.gitkeep -------------------------------------------------------------------------------- /frontend/tests/unit/adapters/application-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { setupTest } from 'ember-qunit'; 3 | 4 | module('Unit | Adapter | application', function(hooks) { 5 | setupTest(hooks); 6 | 7 | // Replace this with your real tests. 8 | test('it exists', function(assert) { 9 | let adapter = this.owner.lookup('adapter:application'); 10 | assert.ok(adapter); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /frontend/tests/unit/controllers/create-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { setupTest } from 'ember-qunit'; 3 | 4 | module('Unit | Controller | create', function(hooks) { 5 | setupTest(hooks); 6 | 7 | // Replace this with your real tests. 8 | test('it exists', function(assert) { 9 | let controller = this.owner.lookup('controller:create'); 10 | assert.ok(controller); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /frontend/tests/unit/controllers/flashcard-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { setupTest } from 'ember-qunit'; 3 | 4 | module('Unit | Controller | flashcard', function(hooks) { 5 | setupTest(hooks); 6 | 7 | // Replace this with your real tests. 8 | test('it exists', function(assert) { 9 | let controller = this.owner.lookup('controller:flashcard'); 10 | assert.ok(controller); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /frontend/tests/unit/controllers/packs-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { setupTest } from 'ember-qunit'; 3 | 4 | module('Unit | Controller | packs', function(hooks) { 5 | setupTest(hooks); 6 | 7 | // Replace this with your real tests. 8 | test('it exists', function(assert) { 9 | let controller = this.owner.lookup('controller:packs'); 10 | assert.ok(controller); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /frontend/tests/unit/controllers/questions-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { setupTest } from 'ember-qunit'; 3 | 4 | module('Unit | Controller | questions', function(hooks) { 5 | setupTest(hooks); 6 | 7 | // Replace this with your real tests. 8 | test('it exists', function(assert) { 9 | let controller = this.owner.lookup('controller:questions'); 10 | assert.ok(controller); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /frontend/tests/unit/controllers/rentals-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { setupTest } from 'ember-qunit'; 3 | 4 | module('Unit | Controller | rentals', function(hooks) { 5 | setupTest(hooks); 6 | 7 | // Replace this with your real tests. 8 | test('it exists', function(assert) { 9 | let controller = this.owner.lookup('controller:rentals'); 10 | assert.ok(controller); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /frontend/tests/unit/controllers/user-select-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { setupTest } from 'ember-qunit'; 3 | 4 | module('Unit | Controller | user-select', function(hooks) { 5 | setupTest(hooks); 6 | 7 | // Replace this with your real tests. 8 | test('it exists', function(assert) { 9 | let controller = this.owner.lookup('controller:user-select'); 10 | assert.ok(controller); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /frontend/tests/unit/controllers/user-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { setupTest } from 'ember-qunit'; 3 | 4 | module('Unit | Controller | user', function(hooks) { 5 | setupTest(hooks); 6 | 7 | // Replace this with your real tests. 8 | test('it exists', function(assert) { 9 | let controller = this.owner.lookup('controller:user'); 10 | assert.ok(controller); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /frontend/tests/unit/models/create-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { setupTest } from 'ember-qunit'; 3 | import { run } from '@ember/runloop'; 4 | 5 | module('Unit | Model | create', function(hooks) { 6 | setupTest(hooks); 7 | 8 | // Replace this with your real tests. 9 | test('it exists', function(assert) { 10 | let store = this.owner.lookup('service:store'); 11 | let model = run(() => store.createRecord('create', {})); 12 | assert.ok(model); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /frontend/tests/unit/models/flashcard-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { setupTest } from 'ember-qunit'; 3 | import { run } from '@ember/runloop'; 4 | 5 | module('Unit | Model | flashcard', function(hooks) { 6 | setupTest(hooks); 7 | 8 | // Replace this with your real tests. 9 | test('it exists', function(assert) { 10 | let store = this.owner.lookup('service:store'); 11 | let model = run(() => store.createRecord('flashcard', {})); 12 | assert.ok(model); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /frontend/tests/unit/models/pack-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { setupTest } from 'ember-qunit'; 3 | import { run } from '@ember/runloop'; 4 | 5 | module('Unit | Model | pack', function(hooks) { 6 | setupTest(hooks); 7 | 8 | // Replace this with your real tests. 9 | test('it exists', function(assert) { 10 | let store = this.owner.lookup('service:store'); 11 | let model = run(() => store.createRecord('pack', {})); 12 | assert.ok(model); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /frontend/tests/unit/models/rental-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { setupTest } from 'ember-qunit'; 3 | import { run } from '@ember/runloop'; 4 | 5 | module('Unit | Model | rental', function(hooks) { 6 | setupTest(hooks); 7 | 8 | // Replace this with your real tests. 9 | test('it exists', function(assert) { 10 | let store = this.owner.lookup('service:store'); 11 | let model = run(() => store.createRecord('rental', {})); 12 | assert.ok(model); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /frontend/tests/unit/routes/create-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { setupTest } from 'ember-qunit'; 3 | 4 | module('Unit | Route | create', function(hooks) { 5 | setupTest(hooks); 6 | 7 | test('it exists', function(assert) { 8 | let route = this.owner.lookup('route:create'); 9 | assert.ok(route); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /frontend/tests/unit/routes/flashcard-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { setupTest } from 'ember-qunit'; 3 | 4 | module('Unit | Route | flashcard', function(hooks) { 5 | setupTest(hooks); 6 | 7 | test('it exists', function(assert) { 8 | let route = this.owner.lookup('route:flashcard'); 9 | assert.ok(route); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /frontend/tests/unit/routes/index-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { setupTest } from 'ember-qunit'; 3 | 4 | module('Unit | Route | index', function(hooks) { 5 | setupTest(hooks); 6 | 7 | test('it exists', function(assert) { 8 | let route = this.owner.lookup('route:index'); 9 | assert.ok(route); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /frontend/tests/unit/routes/packs-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { setupTest } from 'ember-qunit'; 3 | 4 | module('Unit | Route | packs', function(hooks) { 5 | setupTest(hooks); 6 | 7 | test('it exists', function(assert) { 8 | let route = this.owner.lookup('route:packs'); 9 | assert.ok(route); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /frontend/tests/unit/routes/rentals-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { setupTest } from 'ember-qunit'; 3 | 4 | module('Unit | Route | rentals', function(hooks) { 5 | setupTest(hooks); 6 | 7 | test('it exists', function(assert) { 8 | let route = this.owner.lookup('route:rentals'); 9 | assert.ok(route); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /frontend/tests/unit/routes/start-test.js: -------------------------------------------------------------------------------- 1 | import { module, test } from 'qunit'; 2 | import { setupTest } from 'ember-qunit'; 3 | 4 | module('Unit | Route | start', function(hooks) { 5 | setupTest(hooks); 6 | 7 | test('it exists', function(assert) { 8 | let route = this.owner.lookup('route:start'); 9 | assert.ok(route); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /frontend/vendor/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/frontend/vendor/.gitkeep -------------------------------------------------------------------------------- /frontend/vendor/ember-tutorial.css: -------------------------------------------------------------------------------- 1 | /*@import url(https://fonts.googleapis.com/css?family=Lato:300,300italic,400,700,700italic);*/ 2 | /*@import url()*/ 3 | /** 4 | * Base Elements 5 | */ 6 | 7 | * { 8 | margin: 0; 9 | padding: 0; 10 | box-sizing: border-box; 11 | } 12 | 13 | body, 14 | h1, 15 | h2, 16 | h3, 17 | h4, 18 | h5, 19 | h6, 20 | p, 21 | div, 22 | span, 23 | a { 24 | font-family: hurme_no2-webfont,-apple-system,BlinkMacSystemFont,sans-serif; 25 | line-height: 1.5; 26 | } 27 | 28 | body { 29 | background: #f3f3f3; 30 | color: #455358; 31 | background: url(../public/assets/image/splash-laptop-desktop.BwuW.jpg) no-repeat; 32 | background-size: 100%; 33 | font-family: hurme_no2-webfont; 34 | } 35 | 36 | a { 37 | color: #2185D0; 38 | text-decoration: none; 39 | } 40 | 41 | p { 42 | line-height: 1.5; 43 | margin-bottom: 15px; 44 | } 45 | /** 46 | * Button 47 | */ 48 | 49 | @media (min-width: 1200px) { 50 | .container { 51 | width: 1300px !important; 52 | } 53 | } 54 | 55 | .button { 56 | padding: 12px 30px 13px; 57 | text-decoration: none; 58 | color: #fff; 59 | background: #2185D0; 60 | border-radius: 5px; 61 | border: none; 62 | font-size: 16px; 63 | opacity: 0.9; 64 | } 65 | 66 | .button:hover { 67 | opacity: 1; 68 | } 69 | /** 70 | * Body Container 71 | */ 72 | 73 | .container { 74 | max-width: 1300px !important; 75 | /*min-height: 100vh;*/ 76 | background: #f9f9f9; 77 | margin: 0 auto; 78 | max-width: 1300px !important; 79 | } 80 | /** 81 | * Top Navigation 82 | */ 83 | 84 | .menu { 85 | height: 4em; 86 | background-color: #677ae4; 87 | background-color: #05526A; 88 | background-color: #e46855; 89 | } 90 | 91 | .menu h1 { 92 | padding: 7px 0 0 20px; 93 | color: #f9f9f9; 94 | font-size: 2.1em; 95 | } 96 | 97 | .menu h1 em { 98 | position: relative; 99 | left: -12px; 100 | } 101 | 102 | .menu a, 103 | .menu .links { 104 | display: inline-block; 105 | } 106 | 107 | .menu a { 108 | text-decoration: none; 109 | line-height: 1; 110 | padding: 0 15px; 111 | color: #f9f9f9; 112 | opacity: 0.85; 113 | } 114 | 115 | a:hover { 116 | text-decoration: none !important; 117 | } 118 | 119 | .menu a:hover, 120 | .menu a.active { 121 | opacity: 1; 122 | } 123 | 124 | .menu .links { 125 | padding: 0 21px; 126 | } 127 | 128 | .menu .links a { 129 | position: relative; 130 | bottom: 5px; 131 | } 132 | 133 | .list-filter input { 134 | padding: 11px; 135 | font-size: 18px; 136 | width: 500px; 137 | margin: 50px auto; 138 | background-color: rgba(255, 255, 255, 0.75); 139 | border: solid 1px lightgray; 140 | display: block; 141 | } 142 | 143 | .menu input:focus { 144 | background-color: #f9f9f9; 145 | outline: none; 146 | } 147 | 148 | .menu button { 149 | margin-right: 15px; 150 | position: relative; 151 | top: -1px; 152 | left: -5px; 153 | border-top-left-radius: 0; 154 | border-bottom-left-radius: 0; 155 | background-color: #262626; 156 | cursor: pointer; 157 | opacity: 1; 158 | } 159 | 160 | .menu button:hover { 161 | background-color: #111; 162 | opacity: 1; 163 | } 164 | 165 | .results { 166 | margin-left: 17px; 167 | padding-top: 1%; 168 | } 169 | 170 | .menu .results { 171 | display: none; 172 | position: absolute; 173 | width: 215px; 174 | top: 54px; 175 | left: 10px; 176 | background-color: #f6f6f6; 177 | border-right: 1px solid rgba(0, 0, 0, 0.05); 178 | border-bottom: 1px solid rgba(0, 0, 0, 0.05); 179 | } 180 | 181 | .results li { 182 | list-style: none; 183 | padding: 10px 15px; 184 | } 185 | 186 | .menu .results li:hover { 187 | background: #f3f3f3; 188 | } 189 | /** 190 | * Content Area 191 | */ 192 | 193 | .body { 194 | padding: 15px; 195 | } 196 | /** 197 | * Similar to Jumbotron 198 | */ 199 | 200 | .jumbo { 201 | padding: 50px; 202 | background: #f6f6f6; 203 | } 204 | 205 | .jumbo:hover { 206 | background-color: #f3f3f3; 207 | } 208 | 209 | .jumbo h2 { 210 | font-size: 3.2em; 211 | margin-top: -25px; 212 | } 213 | 214 | .jumbo p { 215 | margin-bottom: 25px; 216 | } 217 | 218 | .jumbo img { 219 | height: 200px; 220 | position: relative; 221 | top: -25px; 222 | right: -20px; 223 | } 224 | /** 225 | * Individual Listings 226 | */ 227 | 228 | .listing { 229 | /*margin-top: 30px;*/ 230 | padding-bottom: 9px; 231 | background-color: #f6f6f6; 232 | /*min-height: 145px;*/ 233 | position: relative; 234 | box-shadow: 0 0 2rem 0 rgba(0,0,0,0.24); 235 | } 236 | 237 | .listing:hover { 238 | background-color: #f3f3f3; 239 | } 240 | 241 | .user_image { 242 | width: 16px; 243 | height: 16px; 244 | } 245 | .listing img { 246 | width: 100%; 247 | height: 17.5rem; 248 | /*height: 100px;*/ 249 | /*float: left;*/ 250 | /*margin-right: 45px;*/ 251 | /*border-radius: 5px;*/ 252 | } 253 | 254 | .listing a.image.wide { 255 | max-width: 100%; 256 | position: relative; 257 | z-index: 999; 258 | } 259 | 260 | .listing .wide img { 261 | height: initial; 262 | width: 100%; 263 | margin-bottom: 30px; 264 | } 265 | 266 | .listing .wide small { 267 | display: none; 268 | } 269 | 270 | .listing a.image { 271 | max-width: 150px; 272 | display: block; 273 | cursor: pointer; 274 | } 275 | 276 | .listing small { 277 | float: left; 278 | display: block; 279 | text-align: center; 280 | width: 136px; 281 | } 282 | 283 | .listing h3 { 284 | padding: 0px 15px 15px 15px; 285 | font-size: 23px; 286 | word-wrap: break-word; 287 | overflow: hidden; 288 | word-break: break-all; 289 | } 290 | 291 | .listing h3 a { 292 | display: inline; 293 | } 294 | 295 | .listing .map { 296 | position: absolute; 297 | bottom: 13px; 298 | right: 50px; 299 | height: 120px; 300 | width: 120px; 301 | background-size: cover; 302 | border-radius: 5px; 303 | } 304 | 305 | .listing .detail { 306 | width: 36%; 307 | display: inline-block; 308 | padding: 10px 15px 0 0; 309 | margin: 0; 310 | font-weight: 300; 311 | font-style: italic; 312 | } 313 | 314 | .listing .detail span { 315 | font-weight: 400; 316 | font-style: normal; 317 | } 318 | 319 | .show-listing .title { 320 | margin-bottom: 15px; 321 | } 322 | 323 | .show-listing .detail-section { 324 | width: 50%; 325 | padding-left: 30px; 326 | } 327 | 328 | .show-listing .owner { 329 | margin-top: 10px; 330 | } 331 | 332 | .show-listing .rental-pic { 333 | width: 50%; 334 | height: initial; 335 | position: static; 336 | } 337 | /** 338 | * Utilities 339 | */ 340 | 341 | .light { 342 | font-weight: 300; 343 | } 344 | 345 | .left { 346 | float: left; 347 | } 348 | 349 | .right { 350 | float: right; 351 | } 352 | 353 | .hidden { 354 | display: none; 355 | } 356 | 357 | .relative { 358 | position: relative; 359 | } 360 | 361 | .tomster { 362 | /*background: url(../assets/images/teaching.png);*/ 363 | background-size: contain; 364 | background-repeat: no-repeat; 365 | height: 200px; 366 | width: 200px; 367 | position: relative; 368 | top: -50px; 369 | } 370 | 371 | #search { 372 | outline: none; 373 | background: url(search-white.png) no-repeat 10px 6px #fcfcfc; 374 | border: 1px solid #d1d1d1; 375 | font: bold 12px Arial,Helvetica,Sans-serif; 376 | color: #bebebe; 377 | width: 250px; 378 | padding: 6px 15px 6px 35px; 379 | -webkit-border-radius: 20px; 380 | -moz-border-radius: 20px; 381 | border-radius: 20px; 382 | text-shadow: 0 2px 3px rgba(0, 0, 0, 0.1); 383 | -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15) inset; 384 | -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15) inset; 385 | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15) inset; 386 | -webkit-transition: all 0.7s ease 0s; 387 | -moz-transition: all 0.7s ease 0s; 388 | -o-transition: all 0.7s ease 0s; 389 | transition: all 0.7s ease 0s; 390 | font-size: 17px; 391 | } 392 | 393 | #search:focus { 394 | width: 300px; 395 | } 396 | 397 | .cls_filterbar { 398 | padding-left: 30% !important; 399 | } 400 | 401 | .cls_style { 402 | background-color: white !important; 403 | } 404 | 405 | .cls_h3 { 406 | margin-top: 0px !important; 407 | margin-bottom: 6px !important; 408 | font-weight: bolder; 409 | } 410 | 411 | .cls_height { 412 | width: 1300px !important; 413 | max-width: 1300px; 414 | } 415 | 416 | .cls_content { 417 | padding-left: 2%; 418 | padding-right: 2%; 419 | padding-bottom: 1%; 420 | background-color: white !important; 421 | } -------------------------------------------------------------------------------- /lib/assets/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/lib/assets/.keep -------------------------------------------------------------------------------- /lib/tasks/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/lib/tasks/.keep -------------------------------------------------------------------------------- /log/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/log/.keep -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ember-spin", 3 | "private": true, 4 | "dependencies": {} 5 | } 6 | -------------------------------------------------------------------------------- /public/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The page you were looking for doesn't exist (404) 5 | 6 | 55 | 56 | 57 | 58 | 59 |
60 |
61 |

The page you were looking for doesn't exist.

62 |

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

63 |
64 |

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

65 |
66 | 67 | 68 | -------------------------------------------------------------------------------- /public/422.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The change you wanted was rejected (422) 5 | 6 | 55 | 56 | 57 | 58 | 59 |
60 |
61 |

The change you wanted was rejected.

62 |

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

63 |
64 |

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

65 |
66 | 67 | 68 | -------------------------------------------------------------------------------- /public/500.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | We're sorry, but something went wrong (500) 5 | 6 | 55 | 56 | 57 | 58 | 59 |
60 |
61 |

We're sorry, but something went wrong.

62 |
63 |

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

64 |
65 | 66 | 67 | -------------------------------------------------------------------------------- /public/apple-touch-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/public/apple-touch-icon-precomposed.png -------------------------------------------------------------------------------- /public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/public/apple-touch-icon.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/public/favicon.ico -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file 2 | -------------------------------------------------------------------------------- /test/application_system_test_case.rb: -------------------------------------------------------------------------------- 1 | require "test_helper" 2 | 3 | class ApplicationSystemTestCase < ActionDispatch::SystemTestCase 4 | driven_by :selenium, using: :chrome, screen_size: [1400, 1400] 5 | end 6 | -------------------------------------------------------------------------------- /test/controllers/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/test/controllers/.keep -------------------------------------------------------------------------------- /test/fixtures/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/test/fixtures/.keep -------------------------------------------------------------------------------- /test/fixtures/files/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/test/fixtures/files/.keep -------------------------------------------------------------------------------- /test/helpers/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/test/helpers/.keep -------------------------------------------------------------------------------- /test/integration/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/test/integration/.keep -------------------------------------------------------------------------------- /test/mailers/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/test/mailers/.keep -------------------------------------------------------------------------------- /test/models/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/test/models/.keep -------------------------------------------------------------------------------- /test/system/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/test/system/.keep -------------------------------------------------------------------------------- /test/test_helper.rb: -------------------------------------------------------------------------------- 1 | ENV['RAILS_ENV'] ||= 'test' 2 | require File.expand_path('../../config/environment', __FILE__) 3 | require 'rails/test_help' 4 | 5 | class ActiveSupport::TestCase 6 | # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. 7 | fixtures :all 8 | 9 | # Add more helper methods to be used by all tests here... 10 | end 11 | -------------------------------------------------------------------------------- /tmp/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/tmp/.keep -------------------------------------------------------------------------------- /vendor/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsguru-git/Ember-RoR/54fd26e9cd762a22250d28611786ed16951b46af/vendor/.keep --------------------------------------------------------------------------------