Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
caeecc4
generated rails api app
tehut May 9, 2017
feedcbb
generated movie and user models
tehut May 9, 2017
e18303c
generated movie and customer controllers
tehut May 9, 2017
086372b
ran migration to add account_credit column to customers and seeded data
tehut May 9, 2017
bf75287
zomg, validations, tests
eclairedelune May 9, 2017
6e17962
title and release date validations
tehut May 9, 2017
877d949
type validation on all fields but release_date
tehut May 9, 2017
f93c490
tests
eclairedelune May 9, 2017
b02bdab
begin valid_data? method
tehut May 9, 2017
a022f0e
Merge branch 'master' of https://github.com/tehut/VideoStoreAPI
tehut May 9, 2017
b5918e8
created routes and controller actions for movie#show
tehut May 10, 2017
c9e7118
movie controller methods and routes
eclairedelune May 10, 2017
cc3376a
movie controller, tests, model
eclairedelune May 10, 2017
cc63943
wrote create test
tehut May 10, 2017
0932ac3
movies controller create tests
tehut May 10, 2017
883dd5d
Added the gem for serialiser and created a serializer for cutsomer
amb54 May 10, 2017
64a9ff8
Updated the yml for customer
amb54 May 10, 2017
29e5df0
added a get route for customers customerrs#index
amb54 May 10, 2017
5df1f29
Updated the tests for the customer model and the customer controller.
amb54 May 10, 2017
5cfd171
Updated the customer modelwith the method movies_checked_out_count re…
amb54 May 10, 2017
4b08ad1
Updated the customer controller with the action index.
amb54 May 10, 2017
d1a477a
Merge branch 'serializer'
amb54 May 10, 2017
4824d94
model relationships
eclairedelune May 10, 2017
6fb4537
rental controller
eclairedelune May 10, 2017
34093c9
assocation tests for movie customer through rentals
tehut May 10, 2017
c4aafdd
checkout-movie
eclairedelune May 11, 2017
a1a03c8
Merge branch 'master' of https://github.com/tehut/VideoStoreAPI
tehut May 11, 2017
5416e4a
changed show method for movies
eclairedelune May 11, 2017
5c22a62
fixed model association
tehut May 11, 2017
c5d44c1
passed smoketests fixed routes typo
tehut May 11, 2017
6c41e68
created serializer for movie model
tehut May 11, 2017
c9f111e
avavailable inventory method for movie
tehut May 11, 2017
bec8b11
updated movie controler for serializer
tehut May 11, 2017
824035c
rental controller
eclairedelune May 11, 2017
a962fb6
added tests to the cutomer model and controller and updated customer …
amb54 May 12, 2017
26adb60
Updated the action index for the customer.
amb54 May 12, 2017
382d2c4
Merge branch 'customer_tests'
amb54 May 12, 2017
3b0a6cd
updated regex on validations for movie model
tehut May 13, 2017
d5180fa
Merge branch 'master' of https://github.com/tehut/VideoStoreAPI
tehut May 13, 2017
0c67fa6
removed serializer and returned available inventory with methods as_json
tehut May 14, 2017
750594c
got all tests but one working---serializer returns null with hash
tehut May 14, 2017
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# See https://help.github.com/articles/ignoring-files for more about ignoring files.
#
# If you find yourself ignoring temporary files generated by your text editor
# or operating system, you probably want to add a global ignore instead:
# git config --global core.excludesfile '~/.gitignore_global'

# Ignore bundler config.
/.bundle

# Ignore all logfiles and tempfiles.
/log/*
/tmp/*
!/log/.keep
!/tmp/.keep

# Ignore Byebug command history file.
.byebug_history
55 changes: 55 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
source 'https://rubygems.org'

git_source(:github) do |repo_name|
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
"https://github.com/#{repo_name}.git"
end


# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.0.2'
# Use postgresql as the database for Active Record
gem 'pg', '~> 0.18'
# Use Puma as the app server
gem 'puma', '~> 3.0'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
# gem 'jbuilder', '~> 2.5'
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 3.0'
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'

# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development

# Use Rack CORS for handling Cross-Origin Resource Sharing (CORS), making cross-origin AJAX possible
# gem 'rack-cors'

gem 'active_model_serializers', '~> 0.10.0'

group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug', platform: :mri
end

group :development do
gem 'listen', '~> 3.0.5'
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

gem 'foundation-rails'
group :development do
gem 'better_errors'
gem 'binding_of_caller'
gem 'pry-rails'
end

group :test do
gem 'minitest-rails'
gem 'minitest-reporters'
end
186 changes: 186 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,186 @@
GEM
remote: https://rubygems.org/
specs:
actioncable (5.0.2)
actionpack (= 5.0.2)
nio4r (>= 1.2, < 3.0)
websocket-driver (~> 0.6.1)
actionmailer (5.0.2)
actionpack (= 5.0.2)
actionview (= 5.0.2)
activejob (= 5.0.2)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0)
actionpack (5.0.2)
actionview (= 5.0.2)
activesupport (= 5.0.2)
rack (~> 2.0)
rack-test (~> 0.6.3)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.2)
actionview (5.0.2)
activesupport (= 5.0.2)
builder (~> 3.1)
erubis (~> 2.7.0)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.3)
active_model_serializers (0.10.6)
actionpack (>= 4.1, < 6)
activemodel (>= 4.1, < 6)
case_transform (>= 0.2)
jsonapi-renderer (>= 0.1.1.beta1, < 0.2)
activejob (5.0.2)
activesupport (= 5.0.2)
globalid (>= 0.3.6)
activemodel (5.0.2)
activesupport (= 5.0.2)
activerecord (5.0.2)
activemodel (= 5.0.2)
activesupport (= 5.0.2)
arel (~> 7.0)
activesupport (5.0.2)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (~> 0.7)
minitest (~> 5.1)
tzinfo (~> 1.1)
ansi (1.5.0)
arel (7.1.4)
babel-source (5.8.35)
babel-transpiler (0.7.0)
babel-source (>= 4.0, < 6)
execjs (~> 2.0)
better_errors (2.1.1)
coderay (>= 1.0.0)
erubis (>= 2.6.6)
rack (>= 0.9.0)
binding_of_caller (0.7.2)
debug_inspector (>= 0.0.1)
builder (3.2.3)
byebug (9.0.6)
case_transform (0.2)
activesupport
coderay (1.1.1)
concurrent-ruby (1.0.5)
debug_inspector (0.0.3)
erubis (2.7.0)
execjs (2.7.0)
ffi (1.9.18)
foundation-rails (6.3.1.0)
railties (>= 3.1.0)
sass (>= 3.3.0, < 3.5)
sprockets-es6 (>= 0.9.0)
globalid (0.4.0)
activesupport (>= 4.2.0)
i18n (0.8.1)
jsonapi-renderer (0.1.2)
listen (3.0.8)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
loofah (2.0.3)
nokogiri (>= 1.5.9)
mail (2.6.5)
mime-types (>= 1.16, < 4)
method_source (0.8.2)
mime-types (3.1)
mime-types-data (~> 3.2015)
mime-types-data (3.2016.0521)
mini_portile2 (2.1.0)
minitest (5.10.1)
minitest-rails (3.0.0)
minitest (~> 5.8)
railties (~> 5.0)
minitest-reporters (1.1.14)
ansi
builder
minitest (>= 5.0)
ruby-progressbar
nio4r (2.0.0)
nokogiri (1.7.2)
mini_portile2 (~> 2.1.0)
pg (0.20.0)
pry (0.10.4)
coderay (~> 1.1.0)
method_source (~> 0.8.1)
slop (~> 3.4)
pry-rails (0.3.6)
pry (>= 0.10.4)
puma (3.8.2)
rack (2.0.2)
rack-test (0.6.3)
rack (>= 1.0)
rails (5.0.2)
actioncable (= 5.0.2)
actionmailer (= 5.0.2)
actionpack (= 5.0.2)
actionview (= 5.0.2)
activejob (= 5.0.2)
activemodel (= 5.0.2)
activerecord (= 5.0.2)
activesupport (= 5.0.2)
bundler (>= 1.3.0, < 2.0)
railties (= 5.0.2)
sprockets-rails (>= 2.0.0)
rails-dom-testing (2.0.2)
activesupport (>= 4.2.0, < 6.0)
nokogiri (~> 1.6)
rails-html-sanitizer (1.0.3)
loofah (~> 2.0)
railties (5.0.2)
actionpack (= 5.0.2)
activesupport (= 5.0.2)
method_source
rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0)
rake (12.0.0)
rb-fsevent (0.9.8)
rb-inotify (0.9.8)
ffi (>= 0.5.0)
ruby-progressbar (1.8.1)
sass (3.4.23)
slop (3.6.0)
spring (2.0.1)
activesupport (>= 4.2)
spring-watcher-listen (2.0.1)
listen (>= 2.7, < 4.0)
spring (>= 1.2, < 3.0)
sprockets (3.7.1)
concurrent-ruby (~> 1.0)
rack (> 1, < 3)
sprockets-es6 (0.9.2)
babel-source (>= 5.8.11)
babel-transpiler
sprockets (>= 3.0.0)
sprockets-rails (3.2.0)
actionpack (>= 4.0)
activesupport (>= 4.0)
sprockets (>= 3.0.0)
thor (0.19.4)
thread_safe (0.3.6)
tzinfo (1.2.3)
thread_safe (~> 0.1)
websocket-driver (0.6.5)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.2)

PLATFORMS
ruby

DEPENDENCIES
active_model_serializers (~> 0.10.0)
better_errors
binding_of_caller
byebug
foundation-rails
listen (~> 3.0.5)
minitest-rails
minitest-reporters
pg (~> 0.18)
pry-rails
puma (~> 3.0)
rails (~> 5.0.2)
spring
spring-watcher-listen (~> 2.0.0)
tzinfo-data

BUNDLED WITH
1.14.6
6 changes: 6 additions & 0 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.

require_relative 'config/application'

Rails.application.load_tasks
4 changes: 4 additions & 0 deletions app/channels/application_cable/channel.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module ApplicationCable
class Channel < ActionCable::Channel::Base
end
end
4 changes: 4 additions & 0 deletions app/channels/application_cable/connection.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module ApplicationCable
class Connection < ActionCable::Connection::Base
end
end
2 changes: 2 additions & 0 deletions app/controllers/application_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
class ApplicationController < ActionController::API
end
Empty file added app/controllers/concerns/.keep
Empty file.
14 changes: 14 additions & 0 deletions app/controllers/customers_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
class CustomersController < ApplicationController

def index
customers = Customer.all
if customers == [] || customers
render json: customers, status: :ok
else
render json: customers, status: :bad_request
end

end


end # END of class CustomersController
41 changes: 41 additions & 0 deletions app/controllers/movies_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
class MoviesController < ApplicationController
# def zomg
# render :json => {message: "it works!"}, status: :ok
# end
def index
movies = Movie.all
render :json => movies.as_json(only:[:id, :title, :overview, :release_date, :inventory], methods: :available_inventory), :status => :ok
end

def show
@movie = Movie.find_by(title: params[:title])
if @movie == {}
render :json=> @movie.as_json(only:[:id, :title, :overview, :release_date, :inventory], methods: :available_inventory), :status => :ok
else
render :json=> @movie.as_json, status: :not_found
end
end


def create

@movie = Movie.new(
title: params[:movie][:title],
overview: params[:movie][:overview],
release_date:params[:movie][:release_date],
inventory:
params[:movie][:inventory]
)

if @movie.save
render :json => @movie.to_json, :status => :ok
else
render :json => {errors: @movie.errors.messages}, :status => :bad_request

end
end




end
9 changes: 9 additions & 0 deletions app/controllers/rentals_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
class RentalsController < ApplicationController
def checkout
rental = Rental.new
rental.movie_id = Movie.find_by(title: params[:title].capitalize).id
rental.checkout_date = Date.today
rental.due_date = Date.today + 7.days
rental.customer_id = Costumer.find_by(name: params[:name].capitalize)
end
end
2 changes: 2 additions & 0 deletions app/jobs/application_job.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
class ApplicationJob < ActiveJob::Base
end
4 changes: 4 additions & 0 deletions app/mailers/application_mailer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
class ApplicationMailer < ActionMailer::Base
default from: 'from@example.com'
layout 'mailer'
end
3 changes: 3 additions & 0 deletions app/models/application_record.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
end
Empty file added app/models/concerns/.keep
Empty file.
16 changes: 16 additions & 0 deletions app/models/customer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
class Customer < ApplicationRecord
has_many :rentals
has_many :movies, through: :rentals
validates :name, presence: true
validates :name, format: { with: /\A[a-zA-Z + ]+\z/, message: "letters only" }
validates :phone, presence: true
validates :phone, format: { with: /\([0-9]{3}\) [0-9]{3}-[0-9]{4}/, message: "phone number must be of the NANP number format (nnn) nnn-nnnn "}
validates :postal_code, presence: true
validates :postal_code, format: { with: /[0-9]{5}/, message: "postal code must be of the of the format nnnnn "}
validates :registered_at, presence: true

def movies_checked_out_count
return 0
end

end
22 changes: 22 additions & 0 deletions app/models/movie.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
class Movie < ApplicationRecord
has_many :rentals
has_many :customers, through: :rentals

validates :title, presence:true
validates :title, format:{ with: /([a-z]{1,})/,
message: "incorrect title format" }

validates :release_date, presence:true
validates :release_date, format: {with: /\d{4}\/\d{2}\/\d{2}/, message: "Not a valid date"}
validates :overview, presence:true
validates :overview, format:{ with: /([a-z]{1,})/, message: "Must be a string" }
#
validates :inventory, presence:true
validates :inventory, numericality:true


def available_inventory
return self.inventory
end

end
Loading