From 7066d102e1aa398eafa4089cea3c3841ca44056e Mon Sep 17 00:00:00 2001 From: anhvy Date: Thu, 18 Apr 2019 16:28:22 +0700 Subject: [PATCH 01/25] Upgraded rails --- Gemfile | 53 +- Gemfile.lock | 1386 +++++++++-------- app/assets/javascripts/admins.coffee | 3 - app/assets/javascripts/comments.coffee | 3 - app/assets/javascripts/dishes.coffee | 3 - app/assets/javascripts/errors.coffee | 3 - app/assets/javascripts/foods.coffee | 3 - app/assets/javascripts/managers.coffee | 3 - app/assets/javascripts/menus.coffee | 3 - app/assets/javascripts/pictures.coffee | 3 - app/assets/javascripts/restaurants.coffee | 3 - app/assets/javascripts/sessions.coffee | 3 - app/assets/javascripts/users.coffee | 3 - bin/bundle | 2 +- bin/rails | 7 +- bin/rake | 5 - bin/setup | 33 +- bin/update | 31 + bin/yarn | 11 + config.ru | 2 +- config/application.rb | 5 +- config/boot.rb | 3 +- config/cable.yml | 10 + config/database.yml | 21 +- config/environment.rb | 3 +- config/environments/development.rb | 42 +- config/environments/production.rb | 61 +- config/environments/test.rb | 18 +- .../application_controller_renderer.rb | 8 + config/initializers/assets.rb | 9 +- .../initializers/content_security_policy.rb | 25 + config/initializers/cookies_serializer.rb | 2 + .../new_framework_defaults_5_2.rb | 38 + config/initializers/wrap_parameters.rb | 4 +- config/locales/en.yml | 10 + config/puma.rb | 34 + config/spring.rb | 6 + config/storage.yml | 34 + db/migrate/20171010050523_create_foods.rb | 2 +- db/migrate/20171010082454_create_users.rb | 2 +- .../20171010082849_add_email_to_users.rb | 2 +- ...171010100311_remove_password_from_users.rb | 2 +- ...1010100347_add_digest_password_to_users.rb | 2 +- db/migrate/20171010102756_create_menus.rb | 2 +- .../20171010103034_create_restaurants.rb | 2 +- db/migrate/20171010103242_create_dishes.rb | 2 +- .../20171010103550_add_image_url_to_dishes.rb | 2 +- .../20171010153753_add_restaurant_to_menus.rb | 2 +- .../20171011030221_create_menu_restaurants.rb | 2 +- ...1011045006_remove_restaurant_from_menus.rb | 2 +- ...1011050448_remove_menu_from_restaurants.rb | 2 +- ...1011095050_add_image_logo_to_restaurant.rb | 2 +- db/migrate/20171012043932_create_orders.rb | 2 +- .../20171012080303_add_orders_dishes_table.rb | 2 +- .../20171012083249_create_dish_orders.rb | 2 +- ...0171012083607_remove_dish_id_from_order.rb | 4 +- ...1014110546_change_type_of_date_of_menus.rb | 2 +- ...304_change_type_of_date_update_of_menus.rb | 2 +- .../20171014111434_remove_date_from_menu.rb | 2 +- db/migrate/20171014111650_add_date_to_menu.rb | 2 +- .../20171015034702_add_note_to_order.rb | 2 +- .../20171015095931_add_admin_to_user.rb | 2 +- ...1016024939_change_type_of_admin_of_user.rb | 4 +- ...20171017082850_add_total_price_to_order.rb | 2 +- .../20171017095400_add_phone_to_restaurant.rb | 2 +- .../20171030025836_add_image_to_restaurant.rb | 4 +- .../20171030071847_add_image_to_dish.rb | 4 +- ...4034_remove_image_logo_from_restaurant2.rb | 2 +- ...116044340_add_image_logo_to_restaurant2.rb | 4 +- ...dd_attachment_image_logo_to_restaurants.rb | 2 +- ...357_add_attachment_image_logo_to_dishes.rb | 2 +- ...171116091806_remove_image_url_from_dish.rb | 2 +- ...171117060542_add_ref_link_to_restaurant.rb | 4 +- db/migrate/20171118214042_create_pictures.rb | 2 +- ...214132_add_attachment_image_to_pictures.rb | 2 +- ...119031716_add_description_to_restaurant.rb | 2 +- .../20171120065523_add_slack_name_to_user.rb | 2 +- .../20171120102007_add_sizeable_to_dish.rb | 2 +- ...0171120102139_add_componentable_to_dish.rb | 2 +- .../20171120103320_create_sized_prices.rb | 2 +- .../20171120103505_create_dish_components.rb | 2 +- db/migrate/20171121050902_create_comments.rb | 2 +- .../20171121051010_add_author_to_comment.rb | 2 +- db/migrate/20171122050409_create_tag_table.rb | 4 +- db/migrate/20171122050914_add_tag_to_dish.rb | 4 +- .../20171122071743_create_dish_tag_table.rb | 2 +- db/migrate/20171129014042_add_size_to_dish.rb | 2 +- .../20171129034354_add_parent_to_dish.rb | 4 +- .../20171130015214_create_dished_component.rb | 2 +- ...5516_create_dish_component_associations.rb | 2 +- ...dd_column_to_dish_component_association.rb | 4 +- .../20171130025043_change_type_to_category.rb | 2 +- db/migrate/20171212225536_create_notices.rb | 2 +- .../20171212230416_add_author_to_notice.rb | 2 +- ...34_add_column_is_provider_to_restaurant.rb | 2 +- .../20180203143751_create_daily_restaurant.rb | 2 +- ...5707_create_provider_dish_mapping_table.rb | 2 +- ...740_change_restaurant_daily_column_name.rb | 2 +- ...0312_create_dish_restaurant_association.rb | 2 +- .../20180205160358_add_group_name_to_dish.rb | 2 +- .../20180315084658_create_ol_config_table.rb | 2 +- db/migrate/20180514230028_add_lock_to_menu.rb | 2 +- db/migrate/20180605013456_add_once_to_dish.rb | 2 +- ...013704_add_locked_at_to_menu_restaurant.rb | 2 +- .../20180605013851_create_menu_history.rb | 2 +- .../20180605015820_create_general_setting.rb | 2 +- db/migrate/20180605015854_personal_setting.rb | 2 +- ...0180930160128_add_customizable_to_order.rb | 2 +- .../20181210220929_add_external_id_to_tag.rb | 2 +- .../20181210222954_add_external_id_to_dish.rb | 2 +- ...210225758_add_external_id_to_restaurant.rb | 2 +- db/schema.rb | 294 ++-- spec/factories/comments.rb | 10 +- spec/factories/dishes.rb | 18 +- spec/factories/orders.rb | 12 +- spec/factories/pictures.rb | 2 +- spec/factories/restaurants.rb | 12 +- spec/factories/salad_components.rb | 10 +- spec/factories/sized_prices.rb | 10 +- spec/factories/users.rb | 4 +- 120 files changed, 1374 insertions(+), 1060 deletions(-) delete mode 100644 app/assets/javascripts/admins.coffee delete mode 100644 app/assets/javascripts/comments.coffee delete mode 100644 app/assets/javascripts/dishes.coffee delete mode 100644 app/assets/javascripts/errors.coffee delete mode 100644 app/assets/javascripts/foods.coffee delete mode 100644 app/assets/javascripts/managers.coffee delete mode 100644 app/assets/javascripts/menus.coffee delete mode 100644 app/assets/javascripts/pictures.coffee delete mode 100644 app/assets/javascripts/restaurants.coffee delete mode 100644 app/assets/javascripts/sessions.coffee delete mode 100644 app/assets/javascripts/users.coffee create mode 100755 bin/update create mode 100755 bin/yarn create mode 100644 config/cable.yml create mode 100644 config/initializers/application_controller_renderer.rb create mode 100644 config/initializers/content_security_policy.rb create mode 100644 config/initializers/new_framework_defaults_5_2.rb create mode 100644 config/puma.rb create mode 100644 config/spring.rb create mode 100644 config/storage.yml diff --git a/Gemfile b/Gemfile index ea7956e..83d5cd7 100644 --- a/Gemfile +++ b/Gemfile @@ -1,9 +1,9 @@ source 'https://rubygems.org' -ruby '2.3.3' +ruby '2.6.1' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' -gem 'rails', '4.2.9' +gem 'rails', '~> 5.2.3' gem 'rails_12factor' @@ -11,31 +11,26 @@ gem 'rails_12factor' group :development, :test do gem 'rubocop', '0.53.0', require: false gem 'sqlite3' + gem 'dotenv-rails' end -group :production do - gem 'pg' -end -# Use SCSS for stylesheets -gem 'sass-rails', '~> 5.0' -# Use Uglifier as compressor for JavaScript assets -gem 'uglifier', '>= 1.3.0' -# Use CoffeeScript for .coffee assets and views -gem 'coffee-rails', '~> 4.1.0' -# See https://github.com/rails/execjs#readme for more supported runtimes -# gem 'therubyracer', platforms: :ruby gem 'haml' gem 'kaminari' -gem 'simple_form' - -# Use jquery as the JavaScript library -gem 'jquery-rails', '4.0.4' -# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks -gem 'turbolinks' -# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder -gem 'jbuilder', '~> 2.0' +gem 'simple_form', '~> 4.1.0' + + +gem 'jquery-rails', '4.3.3' +gem 'pg', '>= 0.18', '< 2.0' +gem 'puma', '~> 3.11' +gem 'sass-rails', '~> 5.0' +gem 'uglifier', '>= 1.3.0' +gem 'turbolinks', '~> 5' +gem 'jbuilder', '~> 2.5' +gem 'bootsnap', '>= 1.1.0', require: false +gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] + + gem 'rest-client' -# bundle exec rake doc:rails generates the API under doc/api. gem 'sdoc', '~> 0.4.0', group: :doc # Use ActiveModel has_secure_password @@ -51,26 +46,24 @@ group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug' gem 'factory_bot_rails' - # gem 'factory_girl_rails' gem 'fuubar' gem 'rspec-rails', '~> 3.6' end group :development do - # Access an IRB console on exception pages or by using <%= console %> in views - gem 'web-console', '~> 2.0' - - # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'web-console', '>= 3.3.0' + gem 'listen', '>= 3.0.5', '< 3.2' gem 'spring' + gem 'spring-watcher-listen', '~> 2.0.0' end group :test do gem 'capybara', '2.7.1' gem 'capybara-screenshot' - gem 'capybara-webkit', '1.11.1' + gem 'capybara-webkit', '1.15.1' gem 'database_cleaner' - gem 'faker', '1.7.3' + gem 'faker', '1.9.3' gem 'poltergeist' gem 'rack_session_access' gem 'selenium-webdriver', '~> 2.53.4' @@ -82,7 +75,7 @@ gem 'prawn' gem 'bcrypt', '3.1.11' gem 'bootstrap-sass' -gem 'monban-generators' +# gem 'monban-generators' gem 'prawn-table' gem 'pry' # gem 'momentjs-rails', '>= 2.9.0' diff --git a/Gemfile.lock b/Gemfile.lock index 663032d..d4b2017 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,416 +1,492 @@ GEM remote: https://rubygems.org/ specs: - actionmailer (4.2.9) - actionpack (= 4.2.9) - actionview (= 4.2.9) - activejob (= 4.2.9) + actioncable (5.2.3) + actionpack (= 5.2.3) + nio4r (~> 2.0) + websocket-driver (>= 0.6.1) + actionmailer (5.2.3) + actionpack (= 5.2.3) + actionview (= 5.2.3) + activejob (= 5.2.3) mail (~> 2.5, >= 2.5.4) - rails-dom-testing (~> 1.0, >= 1.0.5) - actionpack (4.2.9) - actionview (= 4.2.9) - activesupport (= 4.2.9) - rack (~> 1.6) - rack-test (~> 0.6.2) - rails-dom-testing (~> 1.0, >= 1.0.5) + rails-dom-testing (~> 2.0) + actionpack (5.2.3) + actionview (= 5.2.3) + activesupport (= 5.2.3) + rack (~> 2.0) + rack-test (>= 0.6.3) + rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.2) - actionview (4.2.9) - activesupport (= 4.2.9) + actionview (5.2.3) + activesupport (= 5.2.3) builder (~> 3.1) - erubis (~> 2.7.0) - rails-dom-testing (~> 1.0, >= 1.0.5) + erubi (~> 1.4) + rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.3) - active_model_serializers (0.10.6) + active_model_serializers (0.10.9) actionpack (>= 4.1, < 6) activemodel (>= 4.1, < 6) case_transform (>= 0.2) - jsonapi-renderer (>= 0.1.1.beta1, < 0.2) - activejob (4.2.9) - activesupport (= 4.2.9) - globalid (>= 0.3.0) - activemodel (4.2.9) - activesupport (= 4.2.9) - builder (~> 3.1) - activerecord (4.2.9) - activemodel (= 4.2.9) - activesupport (= 4.2.9) - arel (~> 6.0) - activesupport (4.2.9) - i18n (~> 0.7) + jsonapi-renderer (>= 0.1.1.beta1, < 0.3) + activejob (5.2.3) + activesupport (= 5.2.3) + globalid (>= 0.3.6) + activemodel (5.2.3) + activesupport (= 5.2.3) + activerecord (5.2.3) + activemodel (= 5.2.3) + activesupport (= 5.2.3) + arel (>= 9.0) + activestorage (5.2.3) + actionpack (= 5.2.3) + activerecord (= 5.2.3) + marcel (~> 0.3.1) + activesupport (5.2.3) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 0.7, < 2) minitest (~> 5.1) - thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) - addressable (2.5.2) + addressable (2.6.0) public_suffix (>= 2.0.2, < 4.0) - arel (6.0.4) + arel (9.0.0) ast (2.4.0) - autoprefixer-rails (7.1.5) + autoprefixer-rails (9.5.1) execjs - aws-eventstream (1.0.1) - aws-partitions (1.94.0) + aws-eventstream (1.0.2) + aws-partitions (1.150.0) aws-sdk (3.0.1) aws-sdk-resources (~> 3) - aws-sdk-acm (1.8.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-acmpca (1.2.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-alexaforbusiness (1.6.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-apigateway (1.12.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-applicationautoscaling (1.9.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-applicationdiscoveryservice (1.2.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-appstream (1.11.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-appsync (1.3.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-athena (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-autoscaling (1.6.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-autoscalingplans (1.3.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-batch (1.5.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-budgets (1.8.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-cloud9 (1.2.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-clouddirectory (1.5.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-cloudformation (1.6.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-cloudfront (1.4.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-cloudhsm (1.4.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-cloudhsmv2 (1.2.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-cloudsearch (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-cloudsearchdomain (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-cloudtrail (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-cloudwatch (1.6.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-cloudwatchevents (1.4.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-cloudwatchlogs (1.4.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-codebuild (1.10.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-codecommit (1.4.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-codedeploy (1.6.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-codepipeline (1.5.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-codestar (1.2.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-cognitoidentity (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-cognitoidentityprovider (1.5.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-cognitosync (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-comprehend (1.2.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-configservice (1.12.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-connect (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-core (3.22.1) - aws-eventstream (~> 1.0) + aws-sdk-acm (1.19.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-acmpca (1.13.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-alexaforbusiness (1.19.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-amplify (1.3.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-apigateway (1.26.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-apigatewaymanagementapi (1.3.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-apigatewayv2 (1.4.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-applicationautoscaling (1.22.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-applicationdiscoveryservice (1.14.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-appmesh (1.6.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-appstream (1.25.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-appsync (1.12.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-athena (1.12.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-autoscaling (1.20.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-autoscalingplans (1.12.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-backup (1.3.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-batch (1.16.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-budgets (1.18.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-chime (1.6.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-cloud9 (1.11.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-clouddirectory (1.14.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-cloudformation (1.18.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-cloudfront (1.15.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-cloudhsm (1.12.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-cloudhsmv2 (1.12.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-cloudsearch (1.9.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-cloudsearchdomain (1.9.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-cloudtrail (1.11.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-cloudwatch (1.20.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-cloudwatchevents (1.17.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-cloudwatchlogs (1.17.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-codebuild (1.32.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-codecommit (1.17.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-codedeploy (1.18.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-codepipeline (1.15.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-codestar (1.11.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-cognitoidentity (1.10.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-cognitoidentityprovider (1.17.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-cognitosync (1.9.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-comprehend (1.18.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-comprehendmedical (1.3.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-configservice (1.26.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-connect (1.13.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-core (3.48.3) + aws-eventstream (~> 1.0, >= 1.0.2) aws-partitions (~> 1.0) - aws-sigv4 (~> 1.0) + aws-sigv4 (~> 1.1) jmespath (~> 1.0) - aws-sdk-costandusagereportservice (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-costexplorer (1.5.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-databasemigrationservice (1.6.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-datapipeline (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-dax (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-devicefarm (1.7.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-directconnect (1.2.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-directoryservice (1.3.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-dynamodb (1.8.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-dynamodbstreams (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-ec2 (1.36.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-ecr (1.4.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-ecs (1.15.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-efs (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-eks (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-elasticache (1.4.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-elasticbeanstalk (1.8.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-elasticloadbalancing (1.3.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-elasticloadbalancingv2 (1.11.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-elasticsearchservice (1.6.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-elastictranscoder (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-emr (1.2.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-firehose (1.4.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-fms (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-gamelift (1.5.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-glacier (1.8.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-glue (1.9.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-greengrass (1.4.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-guardduty (1.5.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-health (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-iam (1.5.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-importexport (1.1.0) - aws-sdk-core (~> 3) + aws-sdk-costandusagereportservice (1.10.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-costexplorer (1.21.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-databasemigrationservice (1.20.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-datapipeline (1.9.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-datasync (1.3.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-dax (1.11.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-devicefarm (1.19.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-directconnect (1.16.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-directoryservice (1.15.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-dlm (1.11.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-docdb (1.4.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-dynamodb (1.25.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-dynamodbstreams (1.9.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-ec2 (1.79.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-ecr (1.14.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-ecs (1.36.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-efs (1.13.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-eks (1.15.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-elasticache (1.14.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-elasticbeanstalk (1.19.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-elasticloadbalancing (1.12.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-elasticloadbalancingv2 (1.26.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-elasticsearchservice (1.19.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-elastictranscoder (1.11.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-emr (1.14.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-firehose (1.14.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-fms (1.12.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-fsx (1.4.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-gamelift (1.15.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-glacier (1.18.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-globalaccelerator (1.4.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-glue (1.30.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-greengrass (1.17.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-guardduty (1.14.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-health (1.12.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-iam (1.18.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-importexport (1.9.0) + aws-sdk-core (~> 3, >= 3.48.2) aws-sigv2 (~> 1.0) - aws-sdk-inspector (1.5.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-iot (1.9.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-iot1clickdevicesservice (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-iot1clickprojects (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-iotanalytics (1.2.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-iotdataplane (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-iotjobsdataplane (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-kinesis (1.3.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-kinesisanalytics (1.3.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-kinesisvideo (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-kinesisvideoarchivedmedia (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-kinesisvideomedia (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-kms (1.6.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-lambda (1.7.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-lambdapreview (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-lex (1.4.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-lexmodelbuildingservice (1.6.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-lightsail (1.5.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-machinelearning (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-macie (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-marketplacecommerceanalytics (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-marketplaceentitlementservice (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-marketplacemetering (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-mediaconvert (1.4.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-medialive (1.8.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-mediapackage (1.2.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-mediastore (1.2.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-mediastoredata (1.2.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-mediatailor (1.2.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-migrationhub (1.3.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-mobile (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-mq (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-mturk (1.4.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-neptune (1.2.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-opsworks (1.3.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-opsworkscm (1.3.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-organizations (1.10.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-pi (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-pinpoint (1.5.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-polly (1.6.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-pricing (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-rds (1.23.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-redshift (1.4.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-rekognition (1.5.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-resourcegroups (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-resourcegroupstaggingapi (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-resources (3.21.0) + aws-sdk-inspector (1.15.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-iot (1.29.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-iot1clickdevicesservice (1.11.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-iot1clickprojects (1.10.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-iotanalytics (1.16.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-iotdataplane (1.9.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-iotjobsdataplane (1.10.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-kafka (1.3.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-kinesis (1.13.1) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-kinesisanalytics (1.12.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-kinesisanalyticsv2 (1.3.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-kinesisvideo (1.12.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-kinesisvideoarchivedmedia (1.11.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-kinesisvideomedia (1.10.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-kms (1.16.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-lambda (1.21.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-lambdapreview (1.9.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-lex (1.12.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-lexmodelbuildingservice (1.15.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-licensemanager (1.3.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-lightsail (1.18.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-machinelearning (1.10.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-macie (1.9.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-marketplacecommerceanalytics (1.9.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-marketplaceentitlementservice (1.9.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-marketplacemetering (1.11.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-mediaconnect (1.4.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-mediaconvert (1.25.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-medialive (1.28.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-mediapackage (1.15.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-mediastore (1.12.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-mediastoredata (1.11.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-mediatailor (1.13.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-migrationhub (1.11.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-mobile (1.9.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-mq (1.13.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-mturk (1.12.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-neptune (1.11.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-opsworks (1.13.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-opsworkscm (1.16.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-organizations (1.23.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-pi (1.9.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-pinpoint (1.19.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-pinpointemail (1.6.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-pinpointsmsvoice (1.6.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-polly (1.19.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-pricing (1.9.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-quicksight (1.5.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-ram (1.4.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-rds (1.48.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-rdsdataservice (1.4.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-redshift (1.23.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-rekognition (1.22.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-resourcegroups (1.13.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-resourcegroupstaggingapi (1.9.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-resources (3.41.0) aws-sdk-acm (~> 1) aws-sdk-acmpca (~> 1) aws-sdk-alexaforbusiness (~> 1) + aws-sdk-amplify (~> 1) aws-sdk-apigateway (~> 1) + aws-sdk-apigatewaymanagementapi (~> 1) + aws-sdk-apigatewayv2 (~> 1) aws-sdk-applicationautoscaling (~> 1) aws-sdk-applicationdiscoveryservice (~> 1) + aws-sdk-appmesh (~> 1) aws-sdk-appstream (~> 1) aws-sdk-appsync (~> 1) aws-sdk-athena (~> 1) aws-sdk-autoscaling (~> 1) aws-sdk-autoscalingplans (~> 1) + aws-sdk-backup (~> 1) aws-sdk-batch (~> 1) aws-sdk-budgets (~> 1) + aws-sdk-chime (~> 1) aws-sdk-cloud9 (~> 1) aws-sdk-clouddirectory (~> 1) aws-sdk-cloudformation (~> 1) @@ -432,16 +508,20 @@ GEM aws-sdk-cognitoidentityprovider (~> 1) aws-sdk-cognitosync (~> 1) aws-sdk-comprehend (~> 1) + aws-sdk-comprehendmedical (~> 1) aws-sdk-configservice (~> 1) aws-sdk-connect (~> 1) aws-sdk-costandusagereportservice (~> 1) aws-sdk-costexplorer (~> 1) aws-sdk-databasemigrationservice (~> 1) aws-sdk-datapipeline (~> 1) + aws-sdk-datasync (~> 1) aws-sdk-dax (~> 1) aws-sdk-devicefarm (~> 1) aws-sdk-directconnect (~> 1) aws-sdk-directoryservice (~> 1) + aws-sdk-dlm (~> 1) + aws-sdk-docdb (~> 1) aws-sdk-dynamodb (~> 1) aws-sdk-dynamodbstreams (~> 1) aws-sdk-ec2 (~> 1) @@ -458,8 +538,10 @@ GEM aws-sdk-emr (~> 1) aws-sdk-firehose (~> 1) aws-sdk-fms (~> 1) + aws-sdk-fsx (~> 1) aws-sdk-gamelift (~> 1) aws-sdk-glacier (~> 1) + aws-sdk-globalaccelerator (~> 1) aws-sdk-glue (~> 1) aws-sdk-greengrass (~> 1) aws-sdk-guardduty (~> 1) @@ -473,8 +555,10 @@ GEM aws-sdk-iotanalytics (~> 1) aws-sdk-iotdataplane (~> 1) aws-sdk-iotjobsdataplane (~> 1) + aws-sdk-kafka (~> 1) aws-sdk-kinesis (~> 1) aws-sdk-kinesisanalytics (~> 1) + aws-sdk-kinesisanalyticsv2 (~> 1) aws-sdk-kinesisvideo (~> 1) aws-sdk-kinesisvideoarchivedmedia (~> 1) aws-sdk-kinesisvideomedia (~> 1) @@ -483,12 +567,14 @@ GEM aws-sdk-lambdapreview (~> 1) aws-sdk-lex (~> 1) aws-sdk-lexmodelbuildingservice (~> 1) + aws-sdk-licensemanager (~> 1) aws-sdk-lightsail (~> 1) aws-sdk-machinelearning (~> 1) aws-sdk-macie (~> 1) aws-sdk-marketplacecommerceanalytics (~> 1) aws-sdk-marketplaceentitlementservice (~> 1) aws-sdk-marketplacemetering (~> 1) + aws-sdk-mediaconnect (~> 1) aws-sdk-mediaconvert (~> 1) aws-sdk-medialive (~> 1) aws-sdk-mediapackage (~> 1) @@ -505,24 +591,34 @@ GEM aws-sdk-organizations (~> 1) aws-sdk-pi (~> 1) aws-sdk-pinpoint (~> 1) + aws-sdk-pinpointemail (~> 1) + aws-sdk-pinpointsmsvoice (~> 1) aws-sdk-polly (~> 1) aws-sdk-pricing (~> 1) + aws-sdk-quicksight (~> 1) + aws-sdk-ram (~> 1) aws-sdk-rds (~> 1) + aws-sdk-rdsdataservice (~> 1) aws-sdk-redshift (~> 1) aws-sdk-rekognition (~> 1) aws-sdk-resourcegroups (~> 1) aws-sdk-resourcegroupstaggingapi (~> 1) + aws-sdk-robomaker (~> 1) aws-sdk-route53 (~> 1) aws-sdk-route53domains (~> 1) + aws-sdk-route53resolver (~> 1) aws-sdk-s3 (~> 1) + aws-sdk-s3control (~> 1) aws-sdk-sagemaker (~> 1) aws-sdk-sagemakerruntime (~> 1) aws-sdk-secretsmanager (~> 1) + aws-sdk-securityhub (~> 1) aws-sdk-serverlessapplicationrepository (~> 1) aws-sdk-servicecatalog (~> 1) aws-sdk-servicediscovery (~> 1) aws-sdk-ses (~> 1) aws-sdk-shield (~> 1) + aws-sdk-signer (~> 1) aws-sdk-simpledb (~> 1) aws-sdk-sms (~> 1) aws-sdk-snowball (~> 1) @@ -533,118 +629,151 @@ GEM aws-sdk-storagegateway (~> 1) aws-sdk-support (~> 1) aws-sdk-swf (~> 1) + aws-sdk-textract (~> 1) aws-sdk-transcribeservice (~> 1) + aws-sdk-transcribestreamingservice (~> 1) + aws-sdk-transfer (~> 1) aws-sdk-translate (~> 1) aws-sdk-waf (~> 1) aws-sdk-wafregional (~> 1) aws-sdk-workdocs (~> 1) + aws-sdk-worklink (~> 1) aws-sdk-workmail (~> 1) aws-sdk-workspaces (~> 1) aws-sdk-xray (~> 1) - aws-sdk-route53 (1.10.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-route53domains (1.3.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-s3 (1.16.0) - aws-sdk-core (~> 3, >= 3.21.2) + aws-sdk-robomaker (1.5.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-route53 (1.21.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-route53domains (1.11.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-route53resolver (1.4.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-s3 (1.36.0) + aws-sdk-core (~> 3, >= 3.48.2) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.0) - aws-sdk-sagemaker (1.10.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-sagemakerruntime (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-secretsmanager (1.10.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-serverlessapplicationrepository (1.3.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-servicecatalog (1.6.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-servicediscovery (1.3.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-ses (1.8.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-shield (1.3.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-simpledb (1.1.0) - aws-sdk-core (~> 3) + aws-sdk-s3control (1.4.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.0) + aws-sdk-sagemaker (1.33.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-sagemakerruntime (1.10.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-secretsmanager (1.24.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-securityhub (1.4.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-serverlessapplicationrepository (1.15.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-servicecatalog (1.20.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-servicediscovery (1.12.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-ses (1.18.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-shield (1.13.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-signer (1.9.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-simpledb (1.9.0) + aws-sdk-core (~> 3, >= 3.48.2) aws-sigv2 (~> 1.0) - aws-sdk-sms (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-snowball (1.3.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-sns (1.3.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-sqs (1.4.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-ssm (1.16.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-states (1.3.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-storagegateway (1.6.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-support (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-swf (1.1.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-transcribeservice (1.2.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-translate (1.2.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-waf (1.5.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-wafregional (1.5.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-workdocs (1.2.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-workmail (1.2.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-workspaces (1.3.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) - aws-sdk-xray (1.3.0) - aws-sdk-core (~> 3) - aws-sigv4 (~> 1.0) + aws-sdk-sms (1.10.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-snowball (1.14.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-sns (1.12.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-sqs (1.13.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-ssm (1.42.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-states (1.14.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-storagegateway (1.20.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-support (1.9.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-swf (1.9.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-textract (1.3.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-transcribeservice (1.18.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-transcribestreamingservice (1.1.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-transfer (1.5.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-translate (1.11.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-waf (1.16.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-wafregional (1.17.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-workdocs (1.12.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-worklink (1.3.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-workmail (1.11.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-workspaces (1.16.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) + aws-sdk-xray (1.13.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) aws-sigv2 (1.0.1) - aws-sigv4 (1.0.3) + aws-sigv4 (1.1.0) + aws-eventstream (~> 1.0, >= 1.0.2) axiom-types (0.1.1) descendants_tracker (~> 0.0.4) ice_nine (~> 0.11.0) thread_safe (~> 0.3, >= 0.3.1) bcrypt (3.1.11) - binding_of_caller (0.7.2) - debug_inspector (>= 0.0.1) - bootstrap-sass (3.3.7) + bindex (0.7.0) + bootsnap (1.4.0) + msgpack (~> 1.0) + bootstrap-sass (3.4.1) autoprefixer-rails (>= 5.2.1) - sass (>= 3.3.4) + sassc (>= 2.0.0) bootstrap3-datetimepicker-rails (4.17.47) momentjs-rails (>= 2.8.1) builder (3.2.3) - byebug (9.1.0) + byebug (11.0.1) capybara (2.7.1) addressable mime-types (>= 1.16) @@ -652,55 +781,51 @@ GEM rack (>= 1.0.0) rack-test (>= 0.5.4) xpath (~> 2.0) - capybara-screenshot (1.0.17) - capybara (>= 1.0, < 3) + capybara-screenshot (1.0.22) + capybara (>= 1.0, < 4) launchy - capybara-webkit (1.11.1) - capybara (>= 2.3.0, < 2.8.0) + capybara-webkit (1.15.1) + capybara (>= 2.3, < 4.0) json case_transform (0.2) activesupport - childprocess (0.8.0) + childprocess (0.9.0) ffi (~> 1.0, >= 1.0.11) climate_control (0.2.0) cliver (0.3.2) - coderay (1.1.0) + coderay (1.1.2) coercible (1.0.0) descendants_tracker (~> 0.0.1) - coffee-rails (4.1.1) - coffee-script (>= 2.2.0) - railties (>= 4.0.0, < 5.1.x) - coffee-script (2.4.1) - coffee-script-source - execjs - coffee-script-source (1.12.2) - concurrent-ruby (1.0.5) + concurrent-ruby (1.1.5) connection_pool (2.2.2) - crass (1.0.2) - database_cleaner (1.6.2) - debug_inspector (0.0.3) + crass (1.0.4) + database_cleaner (1.7.0) descendants_tracker (0.0.4) thread_safe (~> 0.3, >= 0.3.1) diff-lcs (1.3) domain_name (0.5.20180417) unf (>= 0.0.5, < 1.0.0) + dotenv (2.7.2) + dotenv-rails (2.7.2) + dotenv (= 2.7.2) + railties (>= 3.2, < 6.1) equalizer (0.0.11) - erubis (2.7.0) + erubi (1.8.0) execjs (2.7.0) - factory_bot (4.8.2) - activesupport (>= 3.0.0) - factory_bot_rails (4.8.2) - factory_bot (~> 4.8.2) - railties (>= 3.0.0) - faker (1.7.3) - i18n (~> 0.5) - ffi (1.9.18) - fuubar (2.2.0) + factory_bot (5.0.2) + activesupport (>= 4.2.0) + factory_bot_rails (5.0.2) + factory_bot (~> 5.0.2) + railties (>= 4.2.0) + faker (1.9.3) + i18n (>= 0.7) + ffi (1.10.0) + fuubar (2.3.2) rspec-core (~> 3.0) ruby-progressbar (~> 1.4) - globalid (0.4.0) + globalid (0.4.2) activesupport (>= 4.2.0) - grape (1.0.3) + grape (1.2.3) activesupport builder mustermann-grape (~> 1.0.0) @@ -712,22 +837,22 @@ GEM tilt http-cookie (1.0.3) domain_name (~> 0.5) - i18n (0.9.5) + i18n (1.6.0) concurrent-ruby (~> 1.0) ice_nine (0.11.2) - jbuilder (2.7.0) + jbuilder (2.8.0) activesupport (>= 4.2.0) multi_json (>= 1.2) jmespath (1.4.0) - jquery-rails (4.0.4) - rails-dom-testing (~> 1.0) + jquery-rails (4.3.3) + rails-dom-testing (>= 1, < 3) railties (>= 4.2.0) thor (>= 0.14, < 2.0) jquery-ui-rails (4.0.4) jquery-rails railties (>= 3.1.0) json (1.8.6) - jsonapi-renderer (0.1.3) + jsonapi-renderer (0.2.0) kaminari (1.1.1) activesupport (>= 4.1.0) kaminari-actionview (= 1.1.1) @@ -742,11 +867,17 @@ GEM kaminari-core (1.1.1) launchy (2.4.3) addressable (~> 2.3) - loofah (2.1.1) + listen (3.1.5) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + ruby_dep (~> 1.2) + loofah (2.2.3) crass (~> 1.0.2) nokogiri (>= 1.5.9) - mail (2.6.6) - mime-types (>= 1.16, < 4) + mail (2.7.1) + mini_mime (>= 0.1.1) + marcel (0.3.3) + mimemagic (~> 0.3.2) mechanize (2.7.6) domain_name (~> 0.5, >= 0.5.1) http-cookie (~> 1.0) @@ -756,31 +887,28 @@ GEM nokogiri (~> 1.6) ntlm-http (~> 0.1, >= 0.1.1) webrobots (>= 0.0.9, < 0.2) - method_source (0.8.2) - mime-types (3.1) + method_source (0.9.2) + mime-types (3.2.2) mime-types-data (~> 3.2015) - mime-types-data (3.2016.0521) - mimemagic (0.3.2) - mini_portile2 (2.3.0) - minitest (5.10.3) - momentjs-rails (2.17.1) + mime-types-data (3.2019.0331) + mimemagic (0.3.3) + mini_mime (1.0.1) + mini_portile2 (2.4.0) + minitest (5.11.3) + momentjs-rails (2.20.1) railties (>= 3.1) - monban (1.1.0) - bcrypt - rails - warden - monban-generators (1.0.1) - monban (>= 0.0.12) - multi_json (1.12.2) - mustermann (1.0.2) + msgpack (1.2.6) + multi_json (1.13.1) + mustermann (1.0.3) mustermann-grape (1.0.0) mustermann (~> 1.0.0) net-http-digest_auth (1.4.1) net-http-persistent (3.0.0) connection_pool (~> 2.2) netrc (0.11.0) - nokogiri (1.8.1) - mini_portile2 (~> 2.3.0) + nio4r (2.3.1) + nokogiri (1.10.2) + mini_portile2 (~> 2.4.0) ntlm-http (0.1.1) paperclip (6.1.0) activemodel (>= 4.2.0) @@ -788,90 +916,90 @@ GEM mime-types mimemagic (~> 0.3.0) terrapin (~> 0.6.0) - parallel (1.12.1) - parser (2.5.1.2) + parallel (1.17.0) + parser (2.6.2.1) ast (~> 2.4.0) - pdf-core (0.5.1) - pg (0.21.0) - poltergeist (1.16.0) - capybara (~> 2.1) + pdf-core (0.7.0) + pg (1.1.4) + poltergeist (1.18.1) + capybara (>= 2.1, < 4) cliver (~> 0.3.1) websocket-driver (>= 0.2.0) powerpack (0.1.2) - prawn (2.0.1) - pdf-core (~> 0.5.1) - ttfunk (~> 1.4.0) + prawn (2.2.2) + pdf-core (~> 0.7.0) + ttfunk (~> 1.5) prawn-table (0.2.2) prawn (>= 1.3.0, < 3.0.0) - pry (0.10.1) + pry (0.12.2) coderay (~> 1.1.0) - method_source (~> 0.8.1) - slop (~> 3.4) - public_suffix (3.0.0) - rack (1.6.8) + method_source (~> 0.9.0) + public_suffix (3.0.3) + puma (3.12.1) + rack (2.0.7) rack-accept (0.4.5) rack (>= 0.4) - rack-test (0.6.3) - rack (>= 1.0) - rack_session_access (0.1.1) + rack-test (1.1.0) + rack (>= 1.0, < 3) + rack_session_access (0.2.0) builder (>= 2.0.0) rack (>= 1.0.0) - rails (4.2.9) - actionmailer (= 4.2.9) - actionpack (= 4.2.9) - actionview (= 4.2.9) - activejob (= 4.2.9) - activemodel (= 4.2.9) - activerecord (= 4.2.9) - activesupport (= 4.2.9) - bundler (>= 1.3.0, < 2.0) - railties (= 4.2.9) - sprockets-rails - rails-deprecated_sanitizer (1.0.3) - activesupport (>= 4.2.0.alpha) - rails-dom-testing (1.0.8) - activesupport (>= 4.2.0.beta, < 5.0) - nokogiri (~> 1.6) - rails-deprecated_sanitizer (>= 1.0.1) - rails-html-sanitizer (1.0.3) - loofah (~> 2.0) + rails (5.2.3) + actioncable (= 5.2.3) + actionmailer (= 5.2.3) + actionpack (= 5.2.3) + actionview (= 5.2.3) + activejob (= 5.2.3) + activemodel (= 5.2.3) + activerecord (= 5.2.3) + activestorage (= 5.2.3) + activesupport (= 5.2.3) + bundler (>= 1.3.0) + railties (= 5.2.3) + sprockets-rails (>= 2.0.0) + rails-dom-testing (2.0.3) + activesupport (>= 4.2.0) + nokogiri (>= 1.6) + rails-html-sanitizer (1.0.4) + loofah (~> 2.2, >= 2.2.2) rails_12factor (0.0.3) rails_serve_static_assets rails_stdout_logging rails_serve_static_assets (0.0.5) rails_stdout_logging (0.0.5) - railties (4.2.9) - actionpack (= 4.2.9) - activesupport (= 4.2.9) + railties (5.2.3) + actionpack (= 5.2.3) + activesupport (= 5.2.3) + method_source rake (>= 0.8.7) - thor (>= 0.18.1, < 2.0) + thor (>= 0.19.0, < 2.0) rainbow (3.0.0) - rake (12.1.0) - rb-fsevent (0.10.2) - rb-inotify (0.9.10) - ffi (>= 0.5.0, < 2) + rake (12.3.2) + rb-fsevent (0.10.3) + rb-inotify (0.10.0) + ffi (~> 1.0) rdoc (4.3.0) rest-client (2.0.2) http-cookie (>= 1.0.2, < 2.0) mime-types (>= 1.16, < 4.0) netrc (~> 0.8) - rspec-core (3.7.0) - rspec-support (~> 3.7.0) - rspec-expectations (3.7.0) + rspec-core (3.8.0) + rspec-support (~> 3.8.0) + rspec-expectations (3.8.2) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.7.0) - rspec-mocks (3.7.0) + rspec-support (~> 3.8.0) + rspec-mocks (3.8.0) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.7.0) - rspec-rails (3.7.1) + rspec-support (~> 3.8.0) + rspec-rails (3.8.2) actionpack (>= 3.0) activesupport (>= 3.0) railties (>= 3.0) - rspec-core (~> 3.7.0) - rspec-expectations (~> 3.7.0) - rspec-mocks (~> 3.7.0) - rspec-support (~> 3.7.0) - rspec-support (3.7.0) + rspec-core (~> 3.8.0) + rspec-expectations (~> 3.8.0) + rspec-mocks (~> 3.8.0) + rspec-support (~> 3.8.0) + rspec-support (3.8.0) rubocop (0.53.0) parallel (~> 1.10) parser (>= 2.5) @@ -879,81 +1007,85 @@ GEM rainbow (>= 2.2.2, < 4.0) ruby-progressbar (~> 1.7) unicode-display_width (~> 1.0, >= 1.0.1) - ruby-progressbar (1.9.0) - rubyzip (1.2.1) - sass (3.5.2) + ruby-progressbar (1.10.0) + ruby_dep (1.5.0) + rubyzip (1.2.2) + sass (3.7.4) sass-listen (~> 4.0.0) sass-listen (4.0.0) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) - sass-rails (5.0.6) + sass-rails (5.0.7) railties (>= 4.0.0, < 6) sass (~> 3.1) sprockets (>= 2.8, < 4.0) sprockets-rails (>= 2.0, < 4.0) tilt (>= 1.1, < 3) + sassc (2.0.1) + ffi (~> 1.9) + rake sdoc (0.4.2) json (~> 1.7, >= 1.7.7) rdoc (~> 4.0) - seed_dump (3.2.4) + seed_dump (3.3.1) activerecord (>= 4) activesupport (>= 4) selenium-webdriver (2.53.4) childprocess (~> 0.5) rubyzip (~> 1.0) websocket (~> 1.0) - shoulda-matchers (3.1.2) + shoulda-matchers (3.1.3) activesupport (>= 4.0.0) - simple_form (3.5.0) - actionpack (> 4, < 5.2) - activemodel (> 4, < 5.2) - slack-notifier (2.3.1) - slop (3.6.0) + simple_form (4.1.0) + actionpack (>= 5.0) + activemodel (>= 5.0) + slack-notifier (2.3.2) spring (2.0.2) activesupport (>= 4.2) - sprockets (3.7.1) + spring-watcher-listen (2.0.1) + listen (>= 2.7, < 4.0) + spring (>= 1.2, < 3.0) + sprockets (3.7.2) concurrent-ruby (~> 1.0) rack (> 1, < 3) sprockets-rails (3.2.1) actionpack (>= 4.0) activesupport (>= 4.0) sprockets (>= 3.0.0) - sqlite3 (1.3.13) - temple (0.8.0) + sqlite3 (1.4.0) + temple (0.8.1) terrapin (0.6.0) climate_control (>= 0.0.3, < 1.0) - thor (0.20.0) + thor (0.20.3) thread_safe (0.3.6) - tilt (2.0.8) - ttfunk (1.4.0) - turbolinks (5.0.1) - turbolinks-source (~> 5) - turbolinks-source (5.0.3) + tilt (2.0.9) + ttfunk (1.5.1) + turbolinks (5.2.0) + turbolinks-source (~> 5.2) + turbolinks-source (5.2.0) tzinfo (1.2.5) thread_safe (~> 0.1) - uglifier (3.2.0) + uglifier (4.1.20) execjs (>= 0.3.0, < 3) unf (0.1.4) unf_ext unf_ext (0.0.7.5) - unicode-display_width (1.4.0) + unicode-display_width (1.5.0) virtus (1.0.5) axiom-types (~> 0.1) coercible (~> 1.0) descendants_tracker (~> 0.0, >= 0.0.3) equalizer (~> 0.0, >= 0.0.9) - warden (1.2.7) - rack (>= 1.0) - web-console (2.3.0) - activemodel (>= 4.0) - binding_of_caller (>= 0.7.2) - railties (>= 4.0) - sprockets-rails (>= 2.0, < 4.0) + web-console (3.7.0) + actionview (>= 5.0) + activemodel (>= 5.0) + bindex (>= 0.4.0) + railties (>= 5.0) webrobots (0.1.2) - websocket (1.2.4) + websocket (1.2.8) websocket-driver (0.7.0) websocket-extensions (>= 0.1.0) - websocket-extensions (0.1.2) + websocket-extensions (0.1.3) wombat (2.8.0) activesupport mechanize @@ -971,33 +1103,35 @@ DEPENDENCIES aws-sdk-ec2 (~> 1) aws-sdk-s3 (~> 1) bcrypt (= 3.1.11) + bootsnap (>= 1.1.0) bootstrap-sass bootstrap3-datetimepicker-rails (~> 4.17.47) byebug capybara (= 2.7.1) capybara-screenshot - capybara-webkit (= 1.11.1) - coffee-rails (~> 4.1.0) + capybara-webkit (= 1.15.1) database_cleaner + dotenv-rails factory_bot_rails - faker (= 1.7.3) + faker (= 1.9.3) fuubar grape haml - jbuilder (~> 2.0) - jquery-rails (= 4.0.4) + jbuilder (~> 2.5) + jquery-rails (= 4.3.3) jquery-ui-rails (= 4.0.4) kaminari + listen (>= 3.0.5, < 3.2) momentjs-rails (>= 2.9.0) - monban-generators paperclip (= 6.1.0) - pg + pg (>= 0.18, < 2.0) poltergeist prawn prawn-table pry + puma (~> 3.11) rack_session_access - rails (= 4.2.9) + rails (~> 5.2.3) rails_12factor rest-client rspec-rails (~> 3.6) @@ -1007,17 +1141,19 @@ DEPENDENCIES seed_dump selenium-webdriver (~> 2.53.4) shoulda-matchers (~> 3.1) - simple_form + simple_form (~> 4.1.0) slack-notifier spring + spring-watcher-listen (~> 2.0.0) sqlite3 - turbolinks + turbolinks (~> 5) + tzinfo-data uglifier (>= 1.3.0) - web-console (~> 2.0) + web-console (>= 3.3.0) wombat (~> 2.8.0) RUBY VERSION - ruby 2.3.3p222 + ruby 2.6.1p33 BUNDLED WITH - 1.16.2 + 1.17.3 diff --git a/app/assets/javascripts/admins.coffee b/app/assets/javascripts/admins.coffee deleted file mode 100644 index 24f83d1..0000000 --- a/app/assets/javascripts/admins.coffee +++ /dev/null @@ -1,3 +0,0 @@ -# Place all the behaviors and hooks related to the matching controller here. -# All this logic will automatically be available in application.js. -# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/javascripts/comments.coffee b/app/assets/javascripts/comments.coffee deleted file mode 100644 index 24f83d1..0000000 --- a/app/assets/javascripts/comments.coffee +++ /dev/null @@ -1,3 +0,0 @@ -# Place all the behaviors and hooks related to the matching controller here. -# All this logic will automatically be available in application.js. -# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/javascripts/dishes.coffee b/app/assets/javascripts/dishes.coffee deleted file mode 100644 index 24f83d1..0000000 --- a/app/assets/javascripts/dishes.coffee +++ /dev/null @@ -1,3 +0,0 @@ -# Place all the behaviors and hooks related to the matching controller here. -# All this logic will automatically be available in application.js. -# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/javascripts/errors.coffee b/app/assets/javascripts/errors.coffee deleted file mode 100644 index 24f83d1..0000000 --- a/app/assets/javascripts/errors.coffee +++ /dev/null @@ -1,3 +0,0 @@ -# Place all the behaviors and hooks related to the matching controller here. -# All this logic will automatically be available in application.js. -# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/javascripts/foods.coffee b/app/assets/javascripts/foods.coffee deleted file mode 100644 index 24f83d1..0000000 --- a/app/assets/javascripts/foods.coffee +++ /dev/null @@ -1,3 +0,0 @@ -# Place all the behaviors and hooks related to the matching controller here. -# All this logic will automatically be available in application.js. -# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/javascripts/managers.coffee b/app/assets/javascripts/managers.coffee deleted file mode 100644 index 24f83d1..0000000 --- a/app/assets/javascripts/managers.coffee +++ /dev/null @@ -1,3 +0,0 @@ -# Place all the behaviors and hooks related to the matching controller here. -# All this logic will automatically be available in application.js. -# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/javascripts/menus.coffee b/app/assets/javascripts/menus.coffee deleted file mode 100644 index 24f83d1..0000000 --- a/app/assets/javascripts/menus.coffee +++ /dev/null @@ -1,3 +0,0 @@ -# Place all the behaviors and hooks related to the matching controller here. -# All this logic will automatically be available in application.js. -# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/javascripts/pictures.coffee b/app/assets/javascripts/pictures.coffee deleted file mode 100644 index 24f83d1..0000000 --- a/app/assets/javascripts/pictures.coffee +++ /dev/null @@ -1,3 +0,0 @@ -# Place all the behaviors and hooks related to the matching controller here. -# All this logic will automatically be available in application.js. -# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/javascripts/restaurants.coffee b/app/assets/javascripts/restaurants.coffee deleted file mode 100644 index 24f83d1..0000000 --- a/app/assets/javascripts/restaurants.coffee +++ /dev/null @@ -1,3 +0,0 @@ -# Place all the behaviors and hooks related to the matching controller here. -# All this logic will automatically be available in application.js. -# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/javascripts/sessions.coffee b/app/assets/javascripts/sessions.coffee deleted file mode 100644 index 24f83d1..0000000 --- a/app/assets/javascripts/sessions.coffee +++ /dev/null @@ -1,3 +0,0 @@ -# Place all the behaviors and hooks related to the matching controller here. -# All this logic will automatically be available in application.js. -# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/javascripts/users.coffee b/app/assets/javascripts/users.coffee deleted file mode 100644 index 24f83d1..0000000 --- a/app/assets/javascripts/users.coffee +++ /dev/null @@ -1,3 +0,0 @@ -# Place all the behaviors and hooks related to the matching controller here. -# All this logic will automatically be available in application.js. -# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/bin/bundle b/bin/bundle index 66e9889..f19acf5 100755 --- a/bin/bundle +++ b/bin/bundle @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) load Gem.bin_path('bundler', 'bundle') diff --git a/bin/rails b/bin/rails index 0138d79..0739660 100755 --- a/bin/rails +++ b/bin/rails @@ -1,9 +1,4 @@ #!/usr/bin/env ruby -begin - load File.expand_path('../spring', __FILE__) -rescue LoadError => e - raise unless e.message.include?('spring') -end -APP_PATH = File.expand_path('../../config/application', __FILE__) +APP_PATH = File.expand_path('../config/application', __dir__) require_relative '../config/boot' require 'rails/commands' diff --git a/bin/rake b/bin/rake index d87d5f5..1724048 100755 --- a/bin/rake +++ b/bin/rake @@ -1,9 +1,4 @@ #!/usr/bin/env ruby -begin - load File.expand_path('../spring', __FILE__) -rescue LoadError => e - raise unless e.message.include?('spring') -end require_relative '../config/boot' require 'rake' Rake.application.run diff --git a/bin/setup b/bin/setup index acdb2c1..94fd4d7 100755 --- a/bin/setup +++ b/bin/setup @@ -1,29 +1,36 @@ #!/usr/bin/env ruby -require 'pathname' +require 'fileutils' +include FileUtils # path to your application root. -APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) +APP_ROOT = File.expand_path('..', __dir__) -Dir.chdir APP_ROOT do +def system!(*args) + system(*args) || abort("\n== Command #{args} failed ==") +end + +chdir APP_ROOT do # This script is a starting point to setup your application. - # Add necessary setup steps to this file: + # Add necessary setup steps to this file. + + puts '== Installing dependencies ==' + system! 'gem install bundler --conservative' + system('bundle check') || system!('bundle install') - puts "== Installing dependencies ==" - system "gem install bundler --conservative" - system "bundle check || bundle install" + # Install JavaScript dependencies if using Yarn + # system('bin/yarn') # puts "\n== Copying sample files ==" - # unless File.exist?("config/database.yml") - # system "cp config/database.yml.sample config/database.yml" + # unless File.exist?('config/database.yml') + # cp 'config/database.yml.sample', 'config/database.yml' # end puts "\n== Preparing database ==" - system "bin/rake db:setup" + system! 'bin/rails db:setup' puts "\n== Removing old logs and tempfiles ==" - system "rm -f log/*" - system "rm -rf tmp/cache" + system! 'bin/rails log:clear tmp:clear' puts "\n== Restarting application server ==" - system "touch tmp/restart.txt" + system! 'bin/rails restart' end diff --git a/bin/update b/bin/update new file mode 100755 index 0000000..58bfaed --- /dev/null +++ b/bin/update @@ -0,0 +1,31 @@ +#!/usr/bin/env ruby +require 'fileutils' +include FileUtils + +# path to your application root. +APP_ROOT = File.expand_path('..', __dir__) + +def system!(*args) + system(*args) || abort("\n== Command #{args} failed ==") +end + +chdir APP_ROOT do + # This script is a way to update your development environment automatically. + # Add necessary update steps to this file. + + puts '== Installing dependencies ==' + system! 'gem install bundler --conservative' + system('bundle check') || system!('bundle install') + + # Install JavaScript dependencies if using Yarn + # system('bin/yarn') + + puts "\n== Updating database ==" + system! 'bin/rails db:migrate' + + puts "\n== Removing old logs and tempfiles ==" + system! 'bin/rails log:clear tmp:clear' + + puts "\n== Restarting application server ==" + system! 'bin/rails restart' +end diff --git a/bin/yarn b/bin/yarn new file mode 100755 index 0000000..460dd56 --- /dev/null +++ b/bin/yarn @@ -0,0 +1,11 @@ +#!/usr/bin/env ruby +APP_ROOT = File.expand_path('..', __dir__) +Dir.chdir(APP_ROOT) do + begin + exec "yarnpkg", *ARGV + rescue Errno::ENOENT + $stderr.puts "Yarn executable was not detected in the system." + $stderr.puts "Download Yarn at https://yarnpkg.com/en/docs/install" + exit 1 + end +end diff --git a/config.ru b/config.ru index 0cb9d0c..cf8c0fd 100644 --- a/config.ru +++ b/config.ru @@ -2,4 +2,4 @@ require ::File.expand_path('../config/environment', __FILE__) run Rails.application -use ActiveRecord::ConnectionAdapters::ConnectionManagement +# use ActiveRecord::ConnectionAdapters::ConnectionManagement diff --git a/config/application.rb b/config/application.rb index 8761602..39e136e 100644 --- a/config/application.rb +++ b/config/application.rb @@ -8,6 +8,7 @@ module OrderLunch class Application < Rails::Application + config.load_defaults 5.0 # Settings in config/environments/* take precedence over those specified here. # Application configuration should go into files in config/initializers # -- all .rb files in that directory are automatically loaded. @@ -21,7 +22,7 @@ class Application < Rails::Application # config.i18n.default_locale = :de # Do not swallow errors in after_commit/after_rollback callbacks. - config.active_record.raise_in_transactional_callbacks = true + # config.active_record.raise_in_transactional_callbacks = true config.autoload_paths += %W(#{config.root}/lib) config.autoload_paths += Dir[Rails.root.join('app', 'api', '*')] config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb') @@ -29,5 +30,7 @@ class Application < Rails::Application config.generators do |g| g.assets false end + + config.generators.javascript_engine = :js end end diff --git a/config/boot.rb b/config/boot.rb index 6b750f0..b9e460c 100644 --- a/config/boot.rb +++ b/config/boot.rb @@ -1,3 +1,4 @@ -ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) require 'bundler/setup' # Set up gems listed in the Gemfile. +require 'bootsnap/setup' # Speed up boot time by caching expensive operations. diff --git a/config/cable.yml b/config/cable.yml new file mode 100644 index 0000000..81e70bc --- /dev/null +++ b/config/cable.yml @@ -0,0 +1,10 @@ +development: + adapter: async + +test: + adapter: async + +production: + adapter: redis + url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %> + channel_prefix: order_lunch_production diff --git a/config/database.yml b/config/database.yml index 592c257..d42f874 100644 --- a/config/database.yml +++ b/config/database.yml @@ -5,23 +5,10 @@ # gem 'sqlite3' # default: &default - adapter: sqlite3 - pool: 5 - timeout: 5000 + adapter: postgresql + encoding: unicode + pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> development: <<: *default - #adapter: postgresql - #database: order_lunch_development - database: db/development.sqlite3 - -# Warning: The database defined as "test" will be erased and -# re-generated from your development database when you run "rake". -# Do not set this db to the same as development or production. -test: - <<: *default - database: db/test.sqlite3 - -production: - <<: *default - database: db/development.sqlite3 + database: order_lunch_development diff --git a/config/environment.rb b/config/environment.rb index ee8d90d..6f57637 100644 --- a/config/environment.rb +++ b/config/environment.rb @@ -1,5 +1,6 @@ # Load the Rails application. -require File.expand_path('../application', __FILE__) +# require File.expand_path('../application', __FILE__) +require_relative 'application' # Initialize the Rails application. Rails.application.initialize! diff --git a/config/environments/development.rb b/config/environments/development.rb index a2b3e5c..e0c0f5d 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -9,38 +9,56 @@ # Do not eager load code on boot. config.eager_load = false - # Show full error reports and disable caching. + # Show full error reports. config.consider_all_requests_local = true - config.action_controller.perform_caching = false + + # Enable/disable caching. By default caching is disabled. + # Run rails dev:cache to toggle caching. + if Rails.root.join('tmp', 'caching-dev.txt').exist? + config.action_controller.perform_caching = true + + config.cache_store = :memory_store + config.public_file_server.headers = { + 'Cache-Control' => "public, max-age=#{2.days.to_i}" + } + else + config.action_controller.perform_caching = false + + config.cache_store = :null_store + end + + # Store uploaded files on the local file system (see config/storage.yml for options) + config.active_storage.service = :local # Don't care if the mailer can't send. config.action_mailer.raise_delivery_errors = false + config.action_mailer.perform_caching = false + # Print deprecation notices to the Rails logger. config.active_support.deprecation = :log # Raise an error on page load if there are pending migrations. config.active_record.migration_error = :page_load - # config.active_record.migration_error = false + + # Highlight code that triggered database queries in logs. + config.active_record.verbose_query_logs = true # Debug mode disables concatenation and preprocessing of assets. # This option may cause significant delays in view rendering with a large # number of complex assets. config.assets.debug = true - # Asset digests allow you to set far-future HTTP expiration dates on all assets, - # yet still be able to expire them through the digest params. - config.assets.digest = true - - # Adds additional error checking when serving assets at runtime. - # Checks for improperly declared sprockets dependencies. - # Raises helpful error messages. - config.assets.raise_runtime_errors = true + # Suppress logger output for asset requests. + config.assets.quiet = true # Raises error for missing translations # config.action_view.raise_on_missing_translations = true - # config.active_record.dump_schema_after_migration = false + # Use an evented file watcher to asynchronously detect changes in source code, + # routes, locales, etc. This feature depends on the listen gem. + config.file_watcher = ActiveSupport::EventedFileUpdateChecker + config.paperclip_defaults = { storage: :s3, # url: "s3-#{ENV.fetch('AWS_REGION')}.amazonaws.com", diff --git a/config/environments/production.rb b/config/environments/production.rb index 32231b8..b019ffe 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -14,15 +14,13 @@ config.consider_all_requests_local = false config.action_controller.perform_caching = true - # Enable Rack::Cache to put a simple HTTP cache in front of your application - # Add `rack-cache` to your Gemfile before enabling this. - # For large-scale production use, consider using a caching reverse proxy like - # NGINX, varnish or squid. - # config.action_dispatch.rack_cache = true + # Ensures that a master key has been made available in either ENV["RAILS_MASTER_KEY"] + # or in config/master.key. This key is used to decrypt credentials (and other encrypted files). + # config.require_master_key = true # Disable serving static files from the `/public` folder by default since # Apache or NGINX already handles this. - config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? + config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? # Compress JavaScripts and CSS. config.assets.js_compressor = :uglifier @@ -31,19 +29,23 @@ # Do not fallback to assets pipeline if a precompiled asset is missed. config.assets.compile = false - # Raise an error on page load if there are pending migrations. (Duong add 2018/05/22) - config.active_record.migration_error = false - - # Asset digests allow you to set far-future HTTP expiration dates on all assets, - # yet still be able to expire them through the digest params. - config.assets.digest = true - # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + # Specifies the header that your server uses for sending files. # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX + # Store uploaded files on the local file system (see config/storage.yml for options) + config.active_storage.service = :local + + # Mount Action Cable outside main process or domain + # config.action_cable.mount_path = nil + # config.action_cable.url = 'wss://example.com/cable' + # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ] + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. # config.force_ssl = true @@ -52,16 +54,16 @@ config.log_level = :debug # Prepend all log lines with the following tags. - # config.log_tags = [ :subdomain, :uuid ] - - # Use a different logger for distributed setups. - # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + config.log_tags = [ :request_id ] # Use a different cache store in production. # config.cache_store = :mem_cache_store - # Enable serving of images, stylesheets, and JavaScripts from an asset server. - # config.action_controller.asset_host = 'http://assets.example.com' + # Use a real queuing backend for Active Job (and separate queues per environment) + # config.active_job.queue_adapter = :resque + # config.active_job.queue_name_prefix = "order_lunch_#{Rails.env}" + + config.action_mailer.perform_caching = false # Ignore bad email addresses and do not raise email delivery errors. # Set this to true and configure the email server for immediate delivery to raise delivery errors. @@ -77,20 +79,19 @@ # Use default logging formatter so that PID and timestamp are not suppressed. config.log_formatter = ::Logger::Formatter.new + # Use a different logger for distributed setups. + # require 'syslog/logger' + # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name') + + if ENV["RAILS_LOG_TO_STDOUT"].present? + logger = ActiveSupport::Logger.new(STDOUT) + logger.formatter = config.log_formatter + config.logger = ActiveSupport::TaggedLogging.new(logger) + end + # Do not dump schema after migrations. config.active_record.dump_schema_after_migration = false - # config.paperclip_defaults = { - # storage: :s3, - # s3_host_name: "s3-#{ENV.fetch('AWS_REGION')}.amazonaws.com", - # s3_region: ENV.fetch('AWS_REGION'), - # s3_credentials: { - # bucket: ENV.fetch('S3_BUCKET_NAME'), - # access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'), - # secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY') - # } - # } - config.paperclip_defaults = { storage: :s3, # url: "s3-#{ENV.fetch('AWS_REGION')}.amazonaws.com", diff --git a/config/environments/test.rb b/config/environments/test.rb index 643d0ea..0a38fd3 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -12,9 +12,11 @@ # preloads Rails for running tests, you may have to set it to true. config.eager_load = false - # Configure static file server for tests with Cache-Control for performance. - config.serve_static_files = true - config.static_cache_control = 'public, max-age=3600' + # Configure public file server for tests with Cache-Control for performance. + config.public_file_server.enabled = true + config.public_file_server.headers = { + 'Cache-Control' => "public, max-age=#{1.hour.to_i}" + } # Show full error reports and disable caching. config.consider_all_requests_local = true @@ -26,19 +28,19 @@ # Disable request forgery protection in test environment. config.action_controller.allow_forgery_protection = false + # Store uploaded files on the local file system in a temporary directory + config.active_storage.service = :test + + config.action_mailer.perform_caching = false + # Tell Action Mailer not to deliver emails to the real world. # The :test delivery method accumulates sent emails in the # ActionMailer::Base.deliveries array. config.action_mailer.delivery_method = :test - # Randomize the order test cases are executed. - config.active_support.test_order = :random - # Print deprecation notices to the stderr. config.active_support.deprecation = :stderr # Raises error for missing translations # config.action_view.raise_on_missing_translations = true - - config.middleware.use RackSessionAccess::Middleware end diff --git a/config/initializers/application_controller_renderer.rb b/config/initializers/application_controller_renderer.rb new file mode 100644 index 0000000..89d2efa --- /dev/null +++ b/config/initializers/application_controller_renderer.rb @@ -0,0 +1,8 @@ +# Be sure to restart your server when you modify this file. + +# ActiveSupport::Reloader.to_prepare do +# ApplicationController.renderer.defaults.merge!( +# http_host: 'example.org', +# https: false +# ) +# end diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb index 5364916..4b828e8 100644 --- a/config/initializers/assets.rb +++ b/config/initializers/assets.rb @@ -3,9 +3,12 @@ # Version of your assets, change this if you want to expire all your assets. Rails.application.config.assets.version = '1.0' -# Add additional assets to the asset load path +# Add additional assets to the asset load path. # Rails.application.config.assets.paths << Emoji.images_path +# Add Yarn node_modules folder to the asset load path. +Rails.application.config.assets.paths << Rails.root.join('node_modules') # Precompile additional assets. -# application.js, application.scss, and all non-JS/CSS in app/assets folder are already added. -# Rails.application.config.assets.precompile += %w( search.js ) +# application.js, application.css, and all non-JS/CSS in the app/assets +# folder are already added. +# Rails.application.config.assets.precompile += %w( admin.js admin.css ) diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb new file mode 100644 index 0000000..d3bcaa5 --- /dev/null +++ b/config/initializers/content_security_policy.rb @@ -0,0 +1,25 @@ +# Be sure to restart your server when you modify this file. + +# Define an application-wide content security policy +# For further information see the following documentation +# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy + +# Rails.application.config.content_security_policy do |policy| +# policy.default_src :self, :https +# policy.font_src :self, :https, :data +# policy.img_src :self, :https, :data +# policy.object_src :none +# policy.script_src :self, :https +# policy.style_src :self, :https + +# # Specify URI for violation reports +# # policy.report_uri "/csp-violation-report-endpoint" +# end + +# If you are using UJS then enable automatic nonce generation +# Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) } + +# Report CSP violations to a specified URI +# For further information see the following documentation: +# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only +# Rails.application.config.content_security_policy_report_only = true diff --git a/config/initializers/cookies_serializer.rb b/config/initializers/cookies_serializer.rb index 7f70458..5a6a32d 100644 --- a/config/initializers/cookies_serializer.rb +++ b/config/initializers/cookies_serializer.rb @@ -1,3 +1,5 @@ # Be sure to restart your server when you modify this file. +# Specify a serializer for the signed and encrypted cookie jars. +# Valid options are :json, :marshal, and :hybrid. Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/config/initializers/new_framework_defaults_5_2.rb b/config/initializers/new_framework_defaults_5_2.rb new file mode 100644 index 0000000..c383d07 --- /dev/null +++ b/config/initializers/new_framework_defaults_5_2.rb @@ -0,0 +1,38 @@ +# Be sure to restart your server when you modify this file. +# +# This file contains migration options to ease your Rails 5.2 upgrade. +# +# Once upgraded flip defaults one by one to migrate to the new default. +# +# Read the Guide for Upgrading Ruby on Rails for more info on each option. + +# Make Active Record use stable #cache_key alongside new #cache_version method. +# This is needed for recyclable cache keys. +# Rails.application.config.active_record.cache_versioning = true + +# Use AES-256-GCM authenticated encryption for encrypted cookies. +# Also, embed cookie expiry in signed or encrypted cookies for increased security. +# +# This option is not backwards compatible with earlier Rails versions. +# It's best enabled when your entire app is migrated and stable on 5.2. +# +# Existing cookies will be converted on read then written with the new scheme. +# Rails.application.config.action_dispatch.use_authenticated_cookie_encryption = true + +# Use AES-256-GCM authenticated encryption as default cipher for encrypting messages +# instead of AES-256-CBC, when use_authenticated_message_encryption is set to true. +# Rails.application.config.active_support.use_authenticated_message_encryption = true + +# Add default protection from forgery to ActionController::Base instead of in +# ApplicationController. +# Rails.application.config.action_controller.default_protect_from_forgery = true + +# Store boolean values are in sqlite3 databases as 1 and 0 instead of 't' and +# 'f' after migrating old data. +# Rails.application.config.active_record.sqlite3.represent_boolean_as_integer = true + +# Use SHA-1 instead of MD5 to generate non-sensitive digests, such as the ETag header. +# Rails.application.config.active_support.use_sha1_digests = true + +# Make `form_with` generate id attributes for any generated HTML tags. +# Rails.application.config.action_view.form_with_generates_ids = true diff --git a/config/initializers/wrap_parameters.rb b/config/initializers/wrap_parameters.rb index 33725e9..bbfc396 100644 --- a/config/initializers/wrap_parameters.rb +++ b/config/initializers/wrap_parameters.rb @@ -5,10 +5,10 @@ # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. ActiveSupport.on_load(:action_controller) do - wrap_parameters format: [:json] if respond_to?(:wrap_parameters) + wrap_parameters format: [:json] end # To enable root element in JSON for ActiveRecord objects. # ActiveSupport.on_load(:active_record) do -# self.include_root_in_json = true +# self.include_root_in_json = true # end diff --git a/config/locales/en.yml b/config/locales/en.yml index b2a900a..533193d 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -16,6 +16,16 @@ # # This would use the information in config/locales/es.yml. # +# The following keys must be escaped otherwise they will not be retrieved by +# the default I18n backend: +# +# true, false, on, off, yes, no +# +# Instead, surround them with single quotes. +# +# en: +# 'true': 'foo' +# # To learn more, please read the Rails Internationalization guide # available at http://guides.rubyonrails.org/i18n.html. diff --git a/config/puma.rb b/config/puma.rb new file mode 100644 index 0000000..a5eccf8 --- /dev/null +++ b/config/puma.rb @@ -0,0 +1,34 @@ +# Puma can serve each request in a thread from an internal thread pool. +# The `threads` method setting takes two numbers: a minimum and maximum. +# Any libraries that use thread pools should be configured to match +# the maximum value specified for Puma. Default is set to 5 threads for minimum +# and maximum; this matches the default thread size of Active Record. +# +threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 } +threads threads_count, threads_count + +# Specifies the `port` that Puma will listen on to receive requests; default is 3000. +# +port ENV.fetch("PORT") { 3000 } + +# Specifies the `environment` that Puma will run in. +# +environment ENV.fetch("RAILS_ENV") { "development" } + +# Specifies the number of `workers` to boot in clustered mode. +# Workers are forked webserver processes. If using threads and workers together +# the concurrency of the application would be max `threads` * `workers`. +# Workers do not work on JRuby or Windows (both of which do not support +# processes). +# +# workers ENV.fetch("WEB_CONCURRENCY") { 2 } + +# Use the `preload_app!` method when specifying a `workers` number. +# This directive tells Puma to first boot the application and load code +# before forking the application. This takes advantage of Copy On Write +# process behavior so workers use less memory. +# +# preload_app! + +# Allow puma to be restarted by `rails restart` command. +plugin :tmp_restart diff --git a/config/spring.rb b/config/spring.rb new file mode 100644 index 0000000..9fa7863 --- /dev/null +++ b/config/spring.rb @@ -0,0 +1,6 @@ +%w[ + .ruby-version + .rbenv-vars + tmp/restart.txt + tmp/caching-dev.txt +].each { |path| Spring.watch(path) } diff --git a/config/storage.yml b/config/storage.yml new file mode 100644 index 0000000..d32f76e --- /dev/null +++ b/config/storage.yml @@ -0,0 +1,34 @@ +test: + service: Disk + root: <%= Rails.root.join("tmp/storage") %> + +local: + service: Disk + root: <%= Rails.root.join("storage") %> + +# Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key) +# amazon: +# service: S3 +# access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %> +# secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %> +# region: us-east-1 +# bucket: your_own_bucket + +# Remember not to checkin your GCS keyfile to a repository +# google: +# service: GCS +# project: your_project +# credentials: <%= Rails.root.join("path/to/gcs.keyfile") %> +# bucket: your_own_bucket + +# Use rails credentials:edit to set the Azure Storage secret (as azure_storage:storage_access_key) +# microsoft: +# service: AzureStorage +# storage_account_name: your_account_name +# storage_access_key: <%= Rails.application.credentials.dig(:azure_storage, :storage_access_key) %> +# container: your_container_name + +# mirror: +# service: Mirror +# primary: local +# mirrors: [ amazon, google, microsoft ] diff --git a/db/migrate/20171010050523_create_foods.rb b/db/migrate/20171010050523_create_foods.rb index a743aca..09c39c8 100644 --- a/db/migrate/20171010050523_create_foods.rb +++ b/db/migrate/20171010050523_create_foods.rb @@ -1,4 +1,4 @@ -class CreateFoods < ActiveRecord::Migration +class CreateFoods < ActiveRecord::Migration[4.2] def change create_table :foods do |t| t.text :title diff --git a/db/migrate/20171010082454_create_users.rb b/db/migrate/20171010082454_create_users.rb index 99c6e1d..85f7aee 100644 --- a/db/migrate/20171010082454_create_users.rb +++ b/db/migrate/20171010082454_create_users.rb @@ -1,4 +1,4 @@ -class CreateUsers < ActiveRecord::Migration +class CreateUsers < ActiveRecord::Migration[4.2] def change create_table :users do |t| t.string :username diff --git a/db/migrate/20171010082849_add_email_to_users.rb b/db/migrate/20171010082849_add_email_to_users.rb index 1370f7d..ab4e8e1 100644 --- a/db/migrate/20171010082849_add_email_to_users.rb +++ b/db/migrate/20171010082849_add_email_to_users.rb @@ -1,4 +1,4 @@ -class AddEmailToUsers < ActiveRecord::Migration +class AddEmailToUsers < ActiveRecord::Migration[4.2] def change add_column :users, :email, :string end diff --git a/db/migrate/20171010100311_remove_password_from_users.rb b/db/migrate/20171010100311_remove_password_from_users.rb index 2eb26b9..6699b58 100644 --- a/db/migrate/20171010100311_remove_password_from_users.rb +++ b/db/migrate/20171010100311_remove_password_from_users.rb @@ -1,4 +1,4 @@ -class RemovePasswordFromUsers < ActiveRecord::Migration +class RemovePasswordFromUsers < ActiveRecord::Migration[4.2] def change remove_column :users, :password, :string end diff --git a/db/migrate/20171010100347_add_digest_password_to_users.rb b/db/migrate/20171010100347_add_digest_password_to_users.rb index d0e6582..f40bafa 100644 --- a/db/migrate/20171010100347_add_digest_password_to_users.rb +++ b/db/migrate/20171010100347_add_digest_password_to_users.rb @@ -1,4 +1,4 @@ -class AddDigestPasswordToUsers < ActiveRecord::Migration +class AddDigestPasswordToUsers < ActiveRecord::Migration[4.2] def change add_column :users, :password_digest, :string end diff --git a/db/migrate/20171010102756_create_menus.rb b/db/migrate/20171010102756_create_menus.rb index 72bddf4..b9d70e3 100644 --- a/db/migrate/20171010102756_create_menus.rb +++ b/db/migrate/20171010102756_create_menus.rb @@ -1,4 +1,4 @@ -class CreateMenus < ActiveRecord::Migration +class CreateMenus < ActiveRecord::Migration[4.2] def change create_table :menus do |t| t.datetime :date diff --git a/db/migrate/20171010103034_create_restaurants.rb b/db/migrate/20171010103034_create_restaurants.rb index 03fc51e..21aa498 100644 --- a/db/migrate/20171010103034_create_restaurants.rb +++ b/db/migrate/20171010103034_create_restaurants.rb @@ -1,4 +1,4 @@ -class CreateRestaurants < ActiveRecord::Migration +class CreateRestaurants < ActiveRecord::Migration[4.2] def change create_table :restaurants do |t| t.references :menu, index: true, foreign_key: true diff --git a/db/migrate/20171010103242_create_dishes.rb b/db/migrate/20171010103242_create_dishes.rb index 6e12563..89e606a 100644 --- a/db/migrate/20171010103242_create_dishes.rb +++ b/db/migrate/20171010103242_create_dishes.rb @@ -1,4 +1,4 @@ -class CreateDishes < ActiveRecord::Migration +class CreateDishes < ActiveRecord::Migration[4.2] def change create_table :dishes do |t| t.references :restaurant, index: true, foreign_key: true diff --git a/db/migrate/20171010103550_add_image_url_to_dishes.rb b/db/migrate/20171010103550_add_image_url_to_dishes.rb index ed05224..c0ed9de 100644 --- a/db/migrate/20171010103550_add_image_url_to_dishes.rb +++ b/db/migrate/20171010103550_add_image_url_to_dishes.rb @@ -1,4 +1,4 @@ -class AddImageUrlToDishes < ActiveRecord::Migration +class AddImageUrlToDishes < ActiveRecord::Migration[4.2] def change add_column :dishes, :image_url, :string end diff --git a/db/migrate/20171010153753_add_restaurant_to_menus.rb b/db/migrate/20171010153753_add_restaurant_to_menus.rb index 21ad4f8..ea6fb65 100644 --- a/db/migrate/20171010153753_add_restaurant_to_menus.rb +++ b/db/migrate/20171010153753_add_restaurant_to_menus.rb @@ -1,4 +1,4 @@ -class AddRestaurantToMenus < ActiveRecord::Migration +class AddRestaurantToMenus < ActiveRecord::Migration[4.2] def change add_reference :menus, :restaurant, index: true, foreign_key: true end diff --git a/db/migrate/20171011030221_create_menu_restaurants.rb b/db/migrate/20171011030221_create_menu_restaurants.rb index 3a137c6..58ceee4 100644 --- a/db/migrate/20171011030221_create_menu_restaurants.rb +++ b/db/migrate/20171011030221_create_menu_restaurants.rb @@ -1,4 +1,4 @@ -class CreateMenuRestaurants < ActiveRecord::Migration +class CreateMenuRestaurants < ActiveRecord::Migration[4.2] def change create_table :menu_restaurants do |t| t.integer :menu_id diff --git a/db/migrate/20171011045006_remove_restaurant_from_menus.rb b/db/migrate/20171011045006_remove_restaurant_from_menus.rb index 008526e..cc5d6a8 100644 --- a/db/migrate/20171011045006_remove_restaurant_from_menus.rb +++ b/db/migrate/20171011045006_remove_restaurant_from_menus.rb @@ -1,4 +1,4 @@ -class RemoveRestaurantFromMenus < ActiveRecord::Migration +class RemoveRestaurantFromMenus < ActiveRecord::Migration[4.2] def change remove_reference :menus, :restaurant, index: true, foreign_key: true end diff --git a/db/migrate/20171011050448_remove_menu_from_restaurants.rb b/db/migrate/20171011050448_remove_menu_from_restaurants.rb index 4bb823c..c57e6c8 100644 --- a/db/migrate/20171011050448_remove_menu_from_restaurants.rb +++ b/db/migrate/20171011050448_remove_menu_from_restaurants.rb @@ -1,4 +1,4 @@ -class RemoveMenuFromRestaurants < ActiveRecord::Migration +class RemoveMenuFromRestaurants < ActiveRecord::Migration[4.2] def change remove_reference :restaurants, :menu, index: true, foreign_key: true end diff --git a/db/migrate/20171011095050_add_image_logo_to_restaurant.rb b/db/migrate/20171011095050_add_image_logo_to_restaurant.rb index 1859ec5..b515b33 100644 --- a/db/migrate/20171011095050_add_image_logo_to_restaurant.rb +++ b/db/migrate/20171011095050_add_image_logo_to_restaurant.rb @@ -1,4 +1,4 @@ -class AddImageLogoToRestaurant < ActiveRecord::Migration +class AddImageLogoToRestaurant < ActiveRecord::Migration[4.2] def change add_column :restaurants, :image_logo, :string end diff --git a/db/migrate/20171012043932_create_orders.rb b/db/migrate/20171012043932_create_orders.rb index 727df0a..3b4b01e 100644 --- a/db/migrate/20171012043932_create_orders.rb +++ b/db/migrate/20171012043932_create_orders.rb @@ -1,4 +1,4 @@ -class CreateOrders < ActiveRecord::Migration +class CreateOrders < ActiveRecord::Migration[4.2] def change create_table :orders do |t| t.references :user, index: true, foreign_key: true diff --git a/db/migrate/20171012080303_add_orders_dishes_table.rb b/db/migrate/20171012080303_add_orders_dishes_table.rb index c038805..a7e564e 100644 --- a/db/migrate/20171012080303_add_orders_dishes_table.rb +++ b/db/migrate/20171012080303_add_orders_dishes_table.rb @@ -1,4 +1,4 @@ -class AddOrdersDishesTable < ActiveRecord::Migration +class AddOrdersDishesTable < ActiveRecord::Migration[4.2] def change create_table :orders_dishes do |t| t.belongs_to :orders, index: true diff --git a/db/migrate/20171012083249_create_dish_orders.rb b/db/migrate/20171012083249_create_dish_orders.rb index 578146a..3b8a6e6 100644 --- a/db/migrate/20171012083249_create_dish_orders.rb +++ b/db/migrate/20171012083249_create_dish_orders.rb @@ -1,4 +1,4 @@ -class CreateDishOrders < ActiveRecord::Migration +class CreateDishOrders < ActiveRecord::Migration[4.2] def change create_table :dish_orders do |t| t.integer :dish_id diff --git a/db/migrate/20171012083607_remove_dish_id_from_order.rb b/db/migrate/20171012083607_remove_dish_id_from_order.rb index efc109a..bb25d5d 100644 --- a/db/migrate/20171012083607_remove_dish_id_from_order.rb +++ b/db/migrate/20171012083607_remove_dish_id_from_order.rb @@ -1,5 +1,5 @@ -class RemoveDishIdFromOrder < ActiveRecord::Migration +class RemoveDishIdFromOrder < ActiveRecord::Migration[4.2] def change - remove_column :orders, :dishes_id, :integer + # remove_column :orders, :dishes_id, :integer end end diff --git a/db/migrate/20171014110546_change_type_of_date_of_menus.rb b/db/migrate/20171014110546_change_type_of_date_of_menus.rb index 108f56b..49ea043 100644 --- a/db/migrate/20171014110546_change_type_of_date_of_menus.rb +++ b/db/migrate/20171014110546_change_type_of_date_of_menus.rb @@ -1,4 +1,4 @@ -class ChangeTypeOfDateOfMenus < ActiveRecord::Migration +class ChangeTypeOfDateOfMenus < ActiveRecord::Migration[4.2] def change reversible do |dir| change_table :menus do |t| diff --git a/db/migrate/20171014111304_change_type_of_date_update_of_menus.rb b/db/migrate/20171014111304_change_type_of_date_update_of_menus.rb index 22dd817..4434063 100644 --- a/db/migrate/20171014111304_change_type_of_date_update_of_menus.rb +++ b/db/migrate/20171014111304_change_type_of_date_update_of_menus.rb @@ -1,4 +1,4 @@ -class ChangeTypeOfDateUpdateOfMenus < ActiveRecord::Migration +class ChangeTypeOfDateUpdateOfMenus < ActiveRecord::Migration[4.2] def change def change reversible do |dir| diff --git a/db/migrate/20171014111434_remove_date_from_menu.rb b/db/migrate/20171014111434_remove_date_from_menu.rb index 243dc5c..0d71f94 100644 --- a/db/migrate/20171014111434_remove_date_from_menu.rb +++ b/db/migrate/20171014111434_remove_date_from_menu.rb @@ -1,4 +1,4 @@ -class RemoveDateFromMenu < ActiveRecord::Migration +class RemoveDateFromMenu < ActiveRecord::Migration[4.2] def change remove_column :menus, :date, :datetime end diff --git a/db/migrate/20171014111650_add_date_to_menu.rb b/db/migrate/20171014111650_add_date_to_menu.rb index 039e3ed..0ff533b 100644 --- a/db/migrate/20171014111650_add_date_to_menu.rb +++ b/db/migrate/20171014111650_add_date_to_menu.rb @@ -1,4 +1,4 @@ -class AddDateToMenu < ActiveRecord::Migration +class AddDateToMenu < ActiveRecord::Migration[4.2] def change add_column :menus, :date, :date end diff --git a/db/migrate/20171015034702_add_note_to_order.rb b/db/migrate/20171015034702_add_note_to_order.rb index 2a41f8d..99c5bce 100644 --- a/db/migrate/20171015034702_add_note_to_order.rb +++ b/db/migrate/20171015034702_add_note_to_order.rb @@ -1,4 +1,4 @@ -class AddNoteToOrder < ActiveRecord::Migration +class AddNoteToOrder < ActiveRecord::Migration[4.2] def change add_column :orders, :note, :text end diff --git a/db/migrate/20171015095931_add_admin_to_user.rb b/db/migrate/20171015095931_add_admin_to_user.rb index 848792b..add4d07 100644 --- a/db/migrate/20171015095931_add_admin_to_user.rb +++ b/db/migrate/20171015095931_add_admin_to_user.rb @@ -1,4 +1,4 @@ -class AddAdminToUser < ActiveRecord::Migration +class AddAdminToUser < ActiveRecord::Migration[4.2] def change add_column :users, :admin, :boolean end diff --git a/db/migrate/20171016024939_change_type_of_admin_of_user.rb b/db/migrate/20171016024939_change_type_of_admin_of_user.rb index 1873fa7..b9f86a1 100644 --- a/db/migrate/20171016024939_change_type_of_admin_of_user.rb +++ b/db/migrate/20171016024939_change_type_of_admin_of_user.rb @@ -1,8 +1,8 @@ -class ChangeTypeOfAdminOfUser < ActiveRecord::Migration +class ChangeTypeOfAdminOfUser < ActiveRecord::Migration[4.2] def change reversible do |dir| change_table :users do |t| - dir.up { t.change :admin, :integer } + dir.up { t.change :admin, "integer USING admin::integer" } dir.down { t.change :admin, :boolean } end end diff --git a/db/migrate/20171017082850_add_total_price_to_order.rb b/db/migrate/20171017082850_add_total_price_to_order.rb index d07cade..4b729e5 100644 --- a/db/migrate/20171017082850_add_total_price_to_order.rb +++ b/db/migrate/20171017082850_add_total_price_to_order.rb @@ -1,4 +1,4 @@ -class AddTotalPriceToOrder < ActiveRecord::Migration +class AddTotalPriceToOrder < ActiveRecord::Migration[4.2] def change add_column :orders, :total_price, :integer end diff --git a/db/migrate/20171017095400_add_phone_to_restaurant.rb b/db/migrate/20171017095400_add_phone_to_restaurant.rb index 746779d..c7e819b 100644 --- a/db/migrate/20171017095400_add_phone_to_restaurant.rb +++ b/db/migrate/20171017095400_add_phone_to_restaurant.rb @@ -1,4 +1,4 @@ -class AddPhoneToRestaurant < ActiveRecord::Migration +class AddPhoneToRestaurant < ActiveRecord::Migration[4.2] def change add_column :restaurants, :phone, :string end diff --git a/db/migrate/20171030025836_add_image_to_restaurant.rb b/db/migrate/20171030025836_add_image_to_restaurant.rb index dddbd6f..f99f347 100644 --- a/db/migrate/20171030025836_add_image_to_restaurant.rb +++ b/db/migrate/20171030025836_add_image_to_restaurant.rb @@ -1,5 +1,5 @@ -class AddImageToRestaurant < ActiveRecord::Migration +class AddImageToRestaurant < ActiveRecord::Migration[4.2] def change - add_column :restaurants, :image, :blob + add_column :restaurants, :image, :bytea end end diff --git a/db/migrate/20171030071847_add_image_to_dish.rb b/db/migrate/20171030071847_add_image_to_dish.rb index c889433..e7efb53 100644 --- a/db/migrate/20171030071847_add_image_to_dish.rb +++ b/db/migrate/20171030071847_add_image_to_dish.rb @@ -1,5 +1,5 @@ -class AddImageToDish < ActiveRecord::Migration +class AddImageToDish < ActiveRecord::Migration[4.2] def change - add_column :dishes, :image, :blob + add_column :dishes, :image, :bytea end end diff --git a/db/migrate/20171116044034_remove_image_logo_from_restaurant2.rb b/db/migrate/20171116044034_remove_image_logo_from_restaurant2.rb index fb5dd7f..d2c0136 100644 --- a/db/migrate/20171116044034_remove_image_logo_from_restaurant2.rb +++ b/db/migrate/20171116044034_remove_image_logo_from_restaurant2.rb @@ -1,4 +1,4 @@ -class RemoveImageLogoFromRestaurant2 < ActiveRecord::Migration +class RemoveImageLogoFromRestaurant2 < ActiveRecord::Migration[4.2] def change remove_column :restaurants, :image_logo, :string end diff --git a/db/migrate/20171116044340_add_image_logo_to_restaurant2.rb b/db/migrate/20171116044340_add_image_logo_to_restaurant2.rb index 08259f5..eafeb48 100644 --- a/db/migrate/20171116044340_add_image_logo_to_restaurant2.rb +++ b/db/migrate/20171116044340_add_image_logo_to_restaurant2.rb @@ -1,4 +1,4 @@ -class AddImageLogoToRestaurant2 < ActiveRecord::Migration +class AddImageLogoToRestaurant2 < ActiveRecord::Migration[4.2] def change def self.up add_attachment :restaurants, :image_logo @@ -8,4 +8,4 @@ def self.down remove_attachment :restaurants, :image_logo end end -end \ No newline at end of file +end diff --git a/db/migrate/20171116081826_add_attachment_image_logo_to_restaurants.rb b/db/migrate/20171116081826_add_attachment_image_logo_to_restaurants.rb index a100a47..d4fa701 100644 --- a/db/migrate/20171116081826_add_attachment_image_logo_to_restaurants.rb +++ b/db/migrate/20171116081826_add_attachment_image_logo_to_restaurants.rb @@ -1,4 +1,4 @@ -class AddAttachmentImageLogoToRestaurants < ActiveRecord::Migration +class AddAttachmentImageLogoToRestaurants < ActiveRecord::Migration[4.2] def self.up change_table :restaurants do |t| t.attachment :image_logo diff --git a/db/migrate/20171116091357_add_attachment_image_logo_to_dishes.rb b/db/migrate/20171116091357_add_attachment_image_logo_to_dishes.rb index 1032820..5d59757 100644 --- a/db/migrate/20171116091357_add_attachment_image_logo_to_dishes.rb +++ b/db/migrate/20171116091357_add_attachment_image_logo_to_dishes.rb @@ -1,4 +1,4 @@ -class AddAttachmentImageLogoToDishes < ActiveRecord::Migration +class AddAttachmentImageLogoToDishes < ActiveRecord::Migration[4.2] def self.up change_table :dishes do |t| t.attachment :image_logo diff --git a/db/migrate/20171116091806_remove_image_url_from_dish.rb b/db/migrate/20171116091806_remove_image_url_from_dish.rb index b118aa2..e4f6151 100644 --- a/db/migrate/20171116091806_remove_image_url_from_dish.rb +++ b/db/migrate/20171116091806_remove_image_url_from_dish.rb @@ -1,4 +1,4 @@ -class RemoveImageUrlFromDish < ActiveRecord::Migration +class RemoveImageUrlFromDish < ActiveRecord::Migration[4.2] def change remove_column :dishes, :image_url, :string end diff --git a/db/migrate/20171117060542_add_ref_link_to_restaurant.rb b/db/migrate/20171117060542_add_ref_link_to_restaurant.rb index 61d3e99..07d3e55 100644 --- a/db/migrate/20171117060542_add_ref_link_to_restaurant.rb +++ b/db/migrate/20171117060542_add_ref_link_to_restaurant.rb @@ -1,5 +1,5 @@ -class AddRefLinkToRestaurant < ActiveRecord::Migration +class AddRefLinkToRestaurant < ActiveRecord::Migration[4.2] def change add_column :restaurants, :ref_link, :string end -end \ No newline at end of file +end diff --git a/db/migrate/20171118214042_create_pictures.rb b/db/migrate/20171118214042_create_pictures.rb index 2970fb5..bd10ebf 100644 --- a/db/migrate/20171118214042_create_pictures.rb +++ b/db/migrate/20171118214042_create_pictures.rb @@ -1,4 +1,4 @@ -class CreatePictures < ActiveRecord::Migration +class CreatePictures < ActiveRecord::Migration[4.2] def change create_table :pictures do |t| t.string :name diff --git a/db/migrate/20171118214132_add_attachment_image_to_pictures.rb b/db/migrate/20171118214132_add_attachment_image_to_pictures.rb index 2d80e81..f8ee970 100644 --- a/db/migrate/20171118214132_add_attachment_image_to_pictures.rb +++ b/db/migrate/20171118214132_add_attachment_image_to_pictures.rb @@ -1,4 +1,4 @@ -class AddAttachmentImageToPictures < ActiveRecord::Migration +class AddAttachmentImageToPictures < ActiveRecord::Migration[4.2] def self.up change_table :pictures do |t| t.attachment :image diff --git a/db/migrate/20171119031716_add_description_to_restaurant.rb b/db/migrate/20171119031716_add_description_to_restaurant.rb index ae53528..105b9cc 100644 --- a/db/migrate/20171119031716_add_description_to_restaurant.rb +++ b/db/migrate/20171119031716_add_description_to_restaurant.rb @@ -1,4 +1,4 @@ -class AddDescriptionToRestaurant < ActiveRecord::Migration +class AddDescriptionToRestaurant < ActiveRecord::Migration[4.2] def change add_column :restaurants, :description, :text end diff --git a/db/migrate/20171120065523_add_slack_name_to_user.rb b/db/migrate/20171120065523_add_slack_name_to_user.rb index 887b4e5..d6d2eca 100644 --- a/db/migrate/20171120065523_add_slack_name_to_user.rb +++ b/db/migrate/20171120065523_add_slack_name_to_user.rb @@ -1,4 +1,4 @@ -class AddSlackNameToUser < ActiveRecord::Migration +class AddSlackNameToUser < ActiveRecord::Migration[4.2] def change add_column :users, :slack_name, :string end diff --git a/db/migrate/20171120102007_add_sizeable_to_dish.rb b/db/migrate/20171120102007_add_sizeable_to_dish.rb index bd7abdd..721dfaf 100644 --- a/db/migrate/20171120102007_add_sizeable_to_dish.rb +++ b/db/migrate/20171120102007_add_sizeable_to_dish.rb @@ -1,4 +1,4 @@ -class AddSizeableToDish < ActiveRecord::Migration +class AddSizeableToDish < ActiveRecord::Migration[4.2] def change add_column :dishes, :sizeable, :boolean end diff --git a/db/migrate/20171120102139_add_componentable_to_dish.rb b/db/migrate/20171120102139_add_componentable_to_dish.rb index 7861d4e..01e7bbf 100644 --- a/db/migrate/20171120102139_add_componentable_to_dish.rb +++ b/db/migrate/20171120102139_add_componentable_to_dish.rb @@ -1,4 +1,4 @@ -class AddComponentableToDish < ActiveRecord::Migration +class AddComponentableToDish < ActiveRecord::Migration[4.2] def change add_column :dishes, :componentable, :boolean end diff --git a/db/migrate/20171120103320_create_sized_prices.rb b/db/migrate/20171120103320_create_sized_prices.rb index 5e13de3..f443f5e 100644 --- a/db/migrate/20171120103320_create_sized_prices.rb +++ b/db/migrate/20171120103320_create_sized_prices.rb @@ -1,4 +1,4 @@ -class CreateSizedPrices < ActiveRecord::Migration +class CreateSizedPrices < ActiveRecord::Migration[4.2] def change create_table :sized_prices do |t| t.string :size diff --git a/db/migrate/20171120103505_create_dish_components.rb b/db/migrate/20171120103505_create_dish_components.rb index 0170419..eecc346 100644 --- a/db/migrate/20171120103505_create_dish_components.rb +++ b/db/migrate/20171120103505_create_dish_components.rb @@ -1,4 +1,4 @@ -class CreateDishComponents < ActiveRecord::Migration +class CreateDishComponents < ActiveRecord::Migration[4.2] def change create_table :dish_components do |t| t.string :name diff --git a/db/migrate/20171121050902_create_comments.rb b/db/migrate/20171121050902_create_comments.rb index eaf532a..524822e 100644 --- a/db/migrate/20171121050902_create_comments.rb +++ b/db/migrate/20171121050902_create_comments.rb @@ -1,4 +1,4 @@ -class CreateComments < ActiveRecord::Migration +class CreateComments < ActiveRecord::Migration[4.2] def change create_table :comments do |t| t.string :title diff --git a/db/migrate/20171121051010_add_author_to_comment.rb b/db/migrate/20171121051010_add_author_to_comment.rb index 72b3968..febfd10 100644 --- a/db/migrate/20171121051010_add_author_to_comment.rb +++ b/db/migrate/20171121051010_add_author_to_comment.rb @@ -1,4 +1,4 @@ -class AddAuthorToComment < ActiveRecord::Migration +class AddAuthorToComment < ActiveRecord::Migration[4.2] def change add_reference :comments, :author, references: :users, index: true add_foreign_key :comments, :users, column: :author_id diff --git a/db/migrate/20171122050409_create_tag_table.rb b/db/migrate/20171122050409_create_tag_table.rb index 76f5cd1..6766e28 100644 --- a/db/migrate/20171122050409_create_tag_table.rb +++ b/db/migrate/20171122050409_create_tag_table.rb @@ -1,7 +1,7 @@ -class CreateTagTable < ActiveRecord::Migration +class CreateTagTable < ActiveRecord::Migration[4.2] def change create_table :tags do |t| t.string :name end end -end \ No newline at end of file +end diff --git a/db/migrate/20171122050914_add_tag_to_dish.rb b/db/migrate/20171122050914_add_tag_to_dish.rb index 58653a8..28b0dd0 100644 --- a/db/migrate/20171122050914_add_tag_to_dish.rb +++ b/db/migrate/20171122050914_add_tag_to_dish.rb @@ -1,5 +1,5 @@ -class AddTagToDish < ActiveRecord::Migration +class AddTagToDish < ActiveRecord::Migration[4.2] def change add_reference :dishes, :tags, references: :tags, index: true end -end \ No newline at end of file +end diff --git a/db/migrate/20171122071743_create_dish_tag_table.rb b/db/migrate/20171122071743_create_dish_tag_table.rb index 9a752d4..765f4ba 100644 --- a/db/migrate/20171122071743_create_dish_tag_table.rb +++ b/db/migrate/20171122071743_create_dish_tag_table.rb @@ -1,4 +1,4 @@ -class CreateDishTagTable < ActiveRecord::Migration +class CreateDishTagTable < ActiveRecord::Migration[4.2] def change create_table :dishes_tags do |t| t.integer :dish_id diff --git a/db/migrate/20171129014042_add_size_to_dish.rb b/db/migrate/20171129014042_add_size_to_dish.rb index 02ac7ea..e41f88e 100644 --- a/db/migrate/20171129014042_add_size_to_dish.rb +++ b/db/migrate/20171129014042_add_size_to_dish.rb @@ -1,4 +1,4 @@ -class AddSizeToDish < ActiveRecord::Migration +class AddSizeToDish < ActiveRecord::Migration[4.2] def change add_column :dishes, :size, :string end diff --git a/db/migrate/20171129034354_add_parent_to_dish.rb b/db/migrate/20171129034354_add_parent_to_dish.rb index 7a88e26..c04d892 100644 --- a/db/migrate/20171129034354_add_parent_to_dish.rb +++ b/db/migrate/20171129034354_add_parent_to_dish.rb @@ -1,5 +1,5 @@ -class AddParentToDish < ActiveRecord::Migration +class AddParentToDish < ActiveRecord::Migration[4.2] def change add_reference :dishes, :parent, index: true end -end \ No newline at end of file +end diff --git a/db/migrate/20171130015214_create_dished_component.rb b/db/migrate/20171130015214_create_dished_component.rb index fc15820..454a511 100644 --- a/db/migrate/20171130015214_create_dished_component.rb +++ b/db/migrate/20171130015214_create_dished_component.rb @@ -1,4 +1,4 @@ -class CreateDishedComponent < ActiveRecord::Migration +class CreateDishedComponent < ActiveRecord::Migration[4.2] def change create_table :dished_components do |t| t.string :name diff --git a/db/migrate/20171130015516_create_dish_component_associations.rb b/db/migrate/20171130015516_create_dish_component_associations.rb index f11c891..053680c 100644 --- a/db/migrate/20171130015516_create_dish_component_associations.rb +++ b/db/migrate/20171130015516_create_dish_component_associations.rb @@ -1,4 +1,4 @@ -class CreateDishComponentAssociations < ActiveRecord::Migration +class CreateDishComponentAssociations < ActiveRecord::Migration[4.2] def change create_table :dish_component_associations do |t| diff --git a/db/migrate/20171130015641_add_column_to_dish_component_association.rb b/db/migrate/20171130015641_add_column_to_dish_component_association.rb index 0e92e27..f61d928 100644 --- a/db/migrate/20171130015641_add_column_to_dish_component_association.rb +++ b/db/migrate/20171130015641_add_column_to_dish_component_association.rb @@ -1,6 +1,6 @@ -class AddColumnToDishComponentAssociation < ActiveRecord::Migration +class AddColumnToDishComponentAssociation < ActiveRecord::Migration[4.2] def change add_column :dish_component_associations, :dish_id, :integer add_column :dish_component_associations, :dished_component_id, :integer end -end \ No newline at end of file +end diff --git a/db/migrate/20171130025043_change_type_to_category.rb b/db/migrate/20171130025043_change_type_to_category.rb index 172fcc4..86afde0 100644 --- a/db/migrate/20171130025043_change_type_to_category.rb +++ b/db/migrate/20171130025043_change_type_to_category.rb @@ -1,4 +1,4 @@ -class ChangeTypeToCategory < ActiveRecord::Migration +class ChangeTypeToCategory < ActiveRecord::Migration[4.2] def change rename_column :dished_components, :type, :category end diff --git a/db/migrate/20171212225536_create_notices.rb b/db/migrate/20171212225536_create_notices.rb index f3144eb..1b69cb5 100644 --- a/db/migrate/20171212225536_create_notices.rb +++ b/db/migrate/20171212225536_create_notices.rb @@ -1,4 +1,4 @@ -class CreateNotices < ActiveRecord::Migration +class CreateNotices < ActiveRecord::Migration[4.2] def change create_table :notices do |t| t.text :content diff --git a/db/migrate/20171212230416_add_author_to_notice.rb b/db/migrate/20171212230416_add_author_to_notice.rb index d648e0d..e5c6009 100644 --- a/db/migrate/20171212230416_add_author_to_notice.rb +++ b/db/migrate/20171212230416_add_author_to_notice.rb @@ -1,4 +1,4 @@ -class AddAuthorToNotice < ActiveRecord::Migration +class AddAuthorToNotice < ActiveRecord::Migration[4.2] def change add_reference :notices, :author, references: :users, index: true end diff --git a/db/migrate/20180201074834_add_column_is_provider_to_restaurant.rb b/db/migrate/20180201074834_add_column_is_provider_to_restaurant.rb index 13784e4..50ddf16 100644 --- a/db/migrate/20180201074834_add_column_is_provider_to_restaurant.rb +++ b/db/migrate/20180201074834_add_column_is_provider_to_restaurant.rb @@ -1,4 +1,4 @@ -class AddColumnIsProviderToRestaurant < ActiveRecord::Migration +class AddColumnIsProviderToRestaurant < ActiveRecord::Migration[4.2] def change add_column :restaurants, :is_provider, :integer end diff --git a/db/migrate/20180203143751_create_daily_restaurant.rb b/db/migrate/20180203143751_create_daily_restaurant.rb index 8a9c95c..bd87e20 100644 --- a/db/migrate/20180203143751_create_daily_restaurant.rb +++ b/db/migrate/20180203143751_create_daily_restaurant.rb @@ -1,4 +1,4 @@ -class CreateDailyRestaurant < ActiveRecord::Migration +class CreateDailyRestaurant < ActiveRecord::Migration[4.2] def up unless ActiveRecord::Base.connection.table_exists? 'daily_restaurants' create_table :daily_restaurants do |t| diff --git a/db/migrate/20180205035707_create_provider_dish_mapping_table.rb b/db/migrate/20180205035707_create_provider_dish_mapping_table.rb index e1cd226..025bf4a 100644 --- a/db/migrate/20180205035707_create_provider_dish_mapping_table.rb +++ b/db/migrate/20180205035707_create_provider_dish_mapping_table.rb @@ -1,4 +1,4 @@ -class CreateProviderDishMappingTable < ActiveRecord::Migration +class CreateProviderDishMappingTable < ActiveRecord::Migration[4.2] def change create_table :provider_dish_mappings do |t| t.integer :restaurant_daily_id diff --git a/db/migrate/20180205044740_change_restaurant_daily_column_name.rb b/db/migrate/20180205044740_change_restaurant_daily_column_name.rb index 8243e22..930410b 100644 --- a/db/migrate/20180205044740_change_restaurant_daily_column_name.rb +++ b/db/migrate/20180205044740_change_restaurant_daily_column_name.rb @@ -1,4 +1,4 @@ -class ChangeRestaurantDailyColumnName < ActiveRecord::Migration +class ChangeRestaurantDailyColumnName < ActiveRecord::Migration[4.2] def change rename_column :provider_dish_mappings, :restaurant_daily_id, :daily_restaurant_id end diff --git a/db/migrate/20180205080312_create_dish_restaurant_association.rb b/db/migrate/20180205080312_create_dish_restaurant_association.rb index 3610088..b9db8ba 100644 --- a/db/migrate/20180205080312_create_dish_restaurant_association.rb +++ b/db/migrate/20180205080312_create_dish_restaurant_association.rb @@ -1,4 +1,4 @@ -class CreateDishRestaurantAssociation < ActiveRecord::Migration +class CreateDishRestaurantAssociation < ActiveRecord::Migration[4.2] def change create_table :dish_restaurant_associations do |t| t.integer :dish_id diff --git a/db/migrate/20180205160358_add_group_name_to_dish.rb b/db/migrate/20180205160358_add_group_name_to_dish.rb index bae09b2..fa5b738 100644 --- a/db/migrate/20180205160358_add_group_name_to_dish.rb +++ b/db/migrate/20180205160358_add_group_name_to_dish.rb @@ -1,4 +1,4 @@ -class AddGroupNameToDish < ActiveRecord::Migration +class AddGroupNameToDish < ActiveRecord::Migration[4.2] def change add_column :dishes, :group_name, :text end diff --git a/db/migrate/20180315084658_create_ol_config_table.rb b/db/migrate/20180315084658_create_ol_config_table.rb index e9f7105..7d36d22 100644 --- a/db/migrate/20180315084658_create_ol_config_table.rb +++ b/db/migrate/20180315084658_create_ol_config_table.rb @@ -1,4 +1,4 @@ -class CreateOlConfigTable < ActiveRecord::Migration +class CreateOlConfigTable < ActiveRecord::Migration[4.2] def change create_table :ol_configs do |t| t.text :name diff --git a/db/migrate/20180514230028_add_lock_to_menu.rb b/db/migrate/20180514230028_add_lock_to_menu.rb index cada2fc..315b09a 100644 --- a/db/migrate/20180514230028_add_lock_to_menu.rb +++ b/db/migrate/20180514230028_add_lock_to_menu.rb @@ -1,4 +1,4 @@ -class AddLockToMenu < ActiveRecord::Migration +class AddLockToMenu < ActiveRecord::Migration[4.2] def change add_column :menus, :is_lock, :integer add_column :menus, :locked_at, :datetime diff --git a/db/migrate/20180605013456_add_once_to_dish.rb b/db/migrate/20180605013456_add_once_to_dish.rb index 580de4d..e37eeba 100644 --- a/db/migrate/20180605013456_add_once_to_dish.rb +++ b/db/migrate/20180605013456_add_once_to_dish.rb @@ -1,4 +1,4 @@ -class AddOnceToDish < ActiveRecord::Migration +class AddOnceToDish < ActiveRecord::Migration[4.2] def change add_column :dishes, :once, :integer end diff --git a/db/migrate/20180605013704_add_locked_at_to_menu_restaurant.rb b/db/migrate/20180605013704_add_locked_at_to_menu_restaurant.rb index 29338a3..e589464 100644 --- a/db/migrate/20180605013704_add_locked_at_to_menu_restaurant.rb +++ b/db/migrate/20180605013704_add_locked_at_to_menu_restaurant.rb @@ -1,4 +1,4 @@ -class AddLockedAtToMenuRestaurant < ActiveRecord::Migration +class AddLockedAtToMenuRestaurant < ActiveRecord::Migration[4.2] def change add_column :menu_restaurants, :locked_at, :datetime end diff --git a/db/migrate/20180605013851_create_menu_history.rb b/db/migrate/20180605013851_create_menu_history.rb index d7bd6e2..78d758d 100644 --- a/db/migrate/20180605013851_create_menu_history.rb +++ b/db/migrate/20180605013851_create_menu_history.rb @@ -1,4 +1,4 @@ -class CreateMenuHistory < ActiveRecord::Migration +class CreateMenuHistory < ActiveRecord::Migration[4.2] def change create_table :menu_histories do |t| t.references :menu, index: true, foreign_key: true diff --git a/db/migrate/20180605015820_create_general_setting.rb b/db/migrate/20180605015820_create_general_setting.rb index 2595dd6..6a22f5c 100644 --- a/db/migrate/20180605015820_create_general_setting.rb +++ b/db/migrate/20180605015820_create_general_setting.rb @@ -1,4 +1,4 @@ -class CreateGeneralSetting < ActiveRecord::Migration +class CreateGeneralSetting < ActiveRecord::Migration[4.2] def change create_table :general_settings do |t| t.string :key diff --git a/db/migrate/20180605015854_personal_setting.rb b/db/migrate/20180605015854_personal_setting.rb index c423e5e..a4a0b5c 100644 --- a/db/migrate/20180605015854_personal_setting.rb +++ b/db/migrate/20180605015854_personal_setting.rb @@ -1,4 +1,4 @@ -class PersonalSetting < ActiveRecord::Migration +class PersonalSetting < ActiveRecord::Migration[4.2] def change create_table :personal_settings do |t| t.references :user, index: true, foreign_key: true diff --git a/db/migrate/20180930160128_add_customizable_to_order.rb b/db/migrate/20180930160128_add_customizable_to_order.rb index 6589d8c..3573071 100644 --- a/db/migrate/20180930160128_add_customizable_to_order.rb +++ b/db/migrate/20180930160128_add_customizable_to_order.rb @@ -1,4 +1,4 @@ -class AddCustomizableToOrder < ActiveRecord::Migration +class AddCustomizableToOrder < ActiveRecord::Migration[4.2] def change add_column :orders, :customizable, :boolean, default: false end diff --git a/db/migrate/20181210220929_add_external_id_to_tag.rb b/db/migrate/20181210220929_add_external_id_to_tag.rb index e8aa0a1..8c39f5b 100644 --- a/db/migrate/20181210220929_add_external_id_to_tag.rb +++ b/db/migrate/20181210220929_add_external_id_to_tag.rb @@ -1,4 +1,4 @@ -class AddExternalIdToTag < ActiveRecord::Migration +class AddExternalIdToTag < ActiveRecord::Migration[4.2] def change add_column :tags, :external_id, :string end diff --git a/db/migrate/20181210222954_add_external_id_to_dish.rb b/db/migrate/20181210222954_add_external_id_to_dish.rb index 74b1c6e..a35dfeb 100644 --- a/db/migrate/20181210222954_add_external_id_to_dish.rb +++ b/db/migrate/20181210222954_add_external_id_to_dish.rb @@ -1,4 +1,4 @@ -class AddExternalIdToDish < ActiveRecord::Migration +class AddExternalIdToDish < ActiveRecord::Migration[4.2] def change add_column :dishes, :external_id, :string end diff --git a/db/migrate/20181210225758_add_external_id_to_restaurant.rb b/db/migrate/20181210225758_add_external_id_to_restaurant.rb index cece5e1..6ceaca9 100644 --- a/db/migrate/20181210225758_add_external_id_to_restaurant.rb +++ b/db/migrate/20181210225758_add_external_id_to_restaurant.rb @@ -1,4 +1,4 @@ -class AddExternalIdToRestaurant < ActiveRecord::Migration +class AddExternalIdToRestaurant < ActiveRecord::Migration[4.2] def change add_column :restaurants, :external_id, :string end diff --git a/db/schema.rb b/db/schema.rb index c1db6ff..c5675b5 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -1,4 +1,3 @@ -# encoding: UTF-8 # This file is auto-generated from the current state of the database. Instead # of editing this file, please use the migrations feature of Active Record to # incrementally modify your database, and then regenerate this schema definition. @@ -11,235 +10,232 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20181210225758) do +ActiveRecord::Schema.define(version: 2018_12_10_225758) do - create_table "comments", force: :cascade do |t| - t.string "title" - t.text "content" - t.date "date" + # These are extensions that must be enabled in order to support this database + enable_extension "plpgsql" + + create_table "comments", id: :serial, force: :cascade do |t| + t.string "title" + t.text "content" + t.date "date" t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.integer "author_id" + t.integer "author_id" + t.index ["author_id"], name: "index_comments_on_author_id" end - add_index "comments", ["author_id"], name: "index_comments_on_author_id" + create_table "daily_restaurants", id: :serial, force: :cascade do |t| + t.integer "restaurant_id" + t.integer "dish_id" + t.date "date" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end - create_table "daily_restaurants", force: :cascade do |t| - t.integer "restaurant_id" - t.integer "dish_id" - t.date "date" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + create_table "dish_component_associations", id: :serial, force: :cascade do |t| + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "dish_id" + t.integer "dished_component_id" end - create_table "dish_component_associations", force: :cascade do |t| - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.integer "dish_id" - t.integer "dished_component_id" + create_table "dish_components", id: :serial, force: :cascade do |t| + t.string "name" + t.string "type" + t.integer "dish_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["dish_id"], name: "index_dish_components_on_dish_id" end - create_table "dish_orders", force: :cascade do |t| - t.integer "dish_id" - t.integer "order_id" + create_table "dish_orders", id: :serial, force: :cascade do |t| + t.integer "dish_id" + t.integer "order_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false end - create_table "dish_restaurant_associations", force: :cascade do |t| + create_table "dish_restaurant_associations", id: :serial, force: :cascade do |t| t.integer "dish_id" t.integer "restaurant_id" end - create_table "dished_components", force: :cascade do |t| + create_table "dished_components", id: :serial, force: :cascade do |t| t.string "name" t.string "category" end - create_table "dishes", force: :cascade do |t| - t.integer "restaurant_id" - t.string "name" - t.decimal "price" - t.text "description" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.binary "image" - t.string "image_logo_file_name" - t.string "image_logo_content_type" - t.integer "image_logo_file_size" + create_table "dishes", id: :serial, force: :cascade do |t| + t.integer "restaurant_id" + t.string "name" + t.decimal "price" + t.text "description" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.binary "image" + t.string "image_logo_file_name" + t.string "image_logo_content_type" + t.bigint "image_logo_file_size" t.datetime "image_logo_updated_at" - t.boolean "sizeable" - t.boolean "componentable" - t.integer "tags_id" - t.string "size" - t.integer "parent_id" - t.text "group_name" - t.integer "once" - t.string "external_id" + t.boolean "sizeable" + t.boolean "componentable" + t.integer "tags_id" + t.string "size" + t.integer "parent_id" + t.text "group_name" + t.integer "once" + t.string "external_id" + t.index ["parent_id"], name: "index_dishes_on_parent_id" + t.index ["restaurant_id"], name: "index_dishes_on_restaurant_id" + t.index ["tags_id"], name: "index_dishes_on_tags_id" end - add_index "dishes", ["parent_id"], name: "index_dishes_on_parent_id" - add_index "dishes", ["restaurant_id"], name: "index_dishes_on_restaurant_id" - add_index "dishes", ["tags_id"], name: "index_dishes_on_tags_id" - - create_table "dishes_tags", force: :cascade do |t| - t.integer "tags_id" + create_table "dishes_tags", id: :serial, force: :cascade do |t| t.integer "dish_id" t.integer "tag_id" end - create_table "foods", force: :cascade do |t| - t.text "title" - t.text "description" - t.text "creator" + create_table "foods", id: :serial, force: :cascade do |t| + t.text "title" + t.text "description" + t.text "creator" t.datetime "date" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false end - create_table "general_settings", force: :cascade do |t| + create_table "general_settings", id: :serial, force: :cascade do |t| t.string "key" t.string "value" end - create_table "menu_histories", force: :cascade do |t| - t.integer "menu_id" - t.integer "actor_id" + create_table "menu_histories", id: :serial, force: :cascade do |t| + t.integer "menu_id" + t.integer "actor_id" t.datetime "datetime" - t.text "content" + t.text "content" + t.index ["menu_id"], name: "index_menu_histories_on_menu_id" end - add_index "menu_histories", ["menu_id"], name: "index_menu_histories_on_menu_id" - - create_table "menu_restaurants", force: :cascade do |t| - t.integer "menu_id" - t.integer "restaurant_id" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + create_table "menu_restaurants", id: :serial, force: :cascade do |t| + t.integer "menu_id" + t.integer "restaurant_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.datetime "locked_at" end - create_table "menus", force: :cascade do |t| + create_table "menus", id: :serial, force: :cascade do |t| t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.date "date" - t.integer "is_lock" + t.date "date" + t.integer "is_lock" t.datetime "locked_at" end - create_table "notices", force: :cascade do |t| - t.text "content" + create_table "notices", id: :serial, force: :cascade do |t| + t.text "content" t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.integer "author_id" + t.integer "author_id" + t.index ["author_id"], name: "index_notices_on_author_id" end - add_index "notices", ["author_id"], name: "index_notices_on_author_id" - - create_table "ol_configs", force: :cascade do |t| + create_table "ol_configs", id: :serial, force: :cascade do |t| t.text "name" t.text "value" t.text "note" end - create_table "orders", force: :cascade do |t| - t.integer "user_id" + create_table "orders", id: :serial, force: :cascade do |t| + t.integer "user_id" t.datetime "date" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.text "note" - t.integer "total_price" - t.boolean "customizable", default: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.text "note" + t.integer "total_price" + t.boolean "customizable", default: false + t.index ["user_id"], name: "index_orders_on_user_id" end - add_index "orders", ["user_id"], name: "index_orders_on_user_id" - - create_table "orders_dishes", force: :cascade do |t| - t.integer "order_id" - t.integer "dish_id" + create_table "orders_dishes", id: :serial, force: :cascade do |t| + t.integer "orders_id" + t.integer "dish_id" t.datetime "created_at" t.datetime "updated_at" + t.index ["dish_id"], name: "index_orders_dishes_on_dish_id" + t.index ["orders_id"], name: "index_orders_dishes_on_orders_id" end - add_index "orders_dishes", ["dish_id"], name: "index_orders_dishes_on_dish_id" - add_index "orders_dishes", ["order_id"], name: "index_orders_dishes_on_order_id" - - create_table "personal_settings", force: :cascade do |t| + create_table "personal_settings", id: :serial, force: :cascade do |t| t.integer "user_id" - t.string "key" - t.string "value" + t.string "key" + t.string "value" + t.index ["user_id"], name: "index_personal_settings_on_user_id" end - add_index "personal_settings", ["user_id"], name: "index_personal_settings_on_user_id" - - create_table "pictures", force: :cascade do |t| - t.string "name" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.string "image_file_name" - t.string "image_content_type" - t.integer "image_file_size" + create_table "pictures", id: :serial, force: :cascade do |t| + t.string "name" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "image_file_name" + t.string "image_content_type" + t.bigint "image_file_size" t.datetime "image_updated_at" end - create_table "provider_dish_mappings", force: :cascade do |t| + create_table "provider_dish_mappings", id: :serial, force: :cascade do |t| t.integer "daily_restaurant_id" t.integer "dish_id" end - create_table "restaurants", force: :cascade do |t| - t.string "name" - t.text "address" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.string "phone" - t.binary "image" - t.string "image_logo_file_name" - t.string "image_logo_content_type" - t.integer "image_logo_file_size" - t.datetime "image_logo_updated_at" - t.string "ref_link" - t.text "description" - t.boolean "is_provider" - t.string "external_id" - end - - create_table "salad_components", force: :cascade do |t| - t.string "name" - t.string "type" - t.integer "dish_id" + create_table "restaurants", id: :serial, force: :cascade do |t| + t.string "name" + t.text "address" t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.string "phone" + t.binary "image" + t.string "image_logo_file_name" + t.string "image_logo_content_type" + t.bigint "image_logo_file_size" + t.datetime "image_logo_updated_at" + t.string "ref_link" + t.text "description" + t.integer "is_provider" + t.string "external_id" end - add_index "salad_components", ["dish_id"], name: "index_salad_components_on_dish_id" - - create_table "sized_prices", force: :cascade do |t| - t.string "size" - t.decimal "price" - t.integer "dish_id" + create_table "sized_prices", id: :serial, force: :cascade do |t| + t.string "size" + t.decimal "price" + t.integer "dish_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.index ["dish_id"], name: "index_sized_prices_on_dish_id" end - add_index "sized_prices", ["dish_id"], name: "index_sized_prices_on_dish_id" - - create_table "tags", force: :cascade do |t| - t.string "name" - t.integer "dishes_id" - t.string "external_id" - end - - add_index "tags", ["dishes_id"], name: "index_tags_on_dishes_id" - - create_table "users", force: :cascade do |t| - t.string "username" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.string "email" - t.string "password_digest" - t.integer "admin" - t.string "slack_name" + create_table "tags", id: :serial, force: :cascade do |t| + t.string "name" + t.string "external_id" end + create_table "users", id: :serial, force: :cascade do |t| + t.string "username" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "email" + t.string "password_digest" + t.integer "admin" + t.string "slack_name" + end + + add_foreign_key "comments", "users", column: "author_id" + add_foreign_key "dish_components", "dishes" + add_foreign_key "dishes", "restaurants" + add_foreign_key "menu_histories", "menus" + add_foreign_key "orders", "users" + add_foreign_key "personal_settings", "users" + add_foreign_key "sized_prices", "dishes" end diff --git a/spec/factories/comments.rb b/spec/factories/comments.rb index 7270fb9..f45df48 100644 --- a/spec/factories/comments.rb +++ b/spec/factories/comments.rb @@ -1,7 +1,7 @@ FactoryBot.define do - factory :comment do - title "" - content "" - date "2017-11-21" - end + # factory :comment do + # title "" + # content "" + # date "2017-11-21" + # end end diff --git a/spec/factories/dishes.rb b/spec/factories/dishes.rb index cbcb275..cf81fe1 100644 --- a/spec/factories/dishes.rb +++ b/spec/factories/dishes.rb @@ -1,13 +1,13 @@ require 'faker' FactoryBot.define do - factory :dish do |f| - f.name {Faker::Name.name} - f.restaurant - f.price {Faker::Number.between(1,80) * 1000} - end + # factory :dish do |f| + # f.name {Faker::Name.name} + # f.restaurant + # f.price {Faker::Number.between(1,80) * 1000} + # end - factory :invalid_dish, parent: :dish do |f| - f.name = nil - end -end \ No newline at end of file + # factory :invalid_dish, parent: :dish do |f| + # f.name = nil + # end +end diff --git a/spec/factories/orders.rb b/spec/factories/orders.rb index 99924d3..5ccba2a 100644 --- a/spec/factories/orders.rb +++ b/spec/factories/orders.rb @@ -1,9 +1,9 @@ require 'faker' FactoryBot.define do - factory :order do |f| - f.date Faker::Date.between('2017-01-01', '2017-12-31') - f.user - f.dishes {[FactoryBot.create(:dish)]} - end -end \ No newline at end of file + # factory :order do |f| + # f.date Faker::Date.between('2017-01-01', '2017-12-31') + # f.user + # f.dishes {[FactoryBot.create(:dish)]} + # end +end diff --git a/spec/factories/pictures.rb b/spec/factories/pictures.rb index 0e8f0a7..125353d 100644 --- a/spec/factories/pictures.rb +++ b/spec/factories/pictures.rb @@ -1,5 +1,5 @@ FactoryBot.define do factory :picture do - name "MyString" + # name "MyString" end end diff --git a/spec/factories/restaurants.rb b/spec/factories/restaurants.rb index c56cdf9..74bd7b5 100644 --- a/spec/factories/restaurants.rb +++ b/spec/factories/restaurants.rb @@ -1,9 +1,9 @@ require 'faker' FactoryBot.define do - factory :restaurant do |f| - f.name {Faker::Name.unique.title} - f.address {Faker::Address.city} - f.phone {Faker::PhoneNumber.phone_number} - end -end \ No newline at end of file + # factory :restaurant do |f| + # f.name {Faker::Name.unique.title} + # f.address {Faker::Address.city} + # f.phone {Faker::PhoneNumber.phone_number} + # end +end diff --git a/spec/factories/salad_components.rb b/spec/factories/salad_components.rb index 1e4279c..4676206 100644 --- a/spec/factories/salad_components.rb +++ b/spec/factories/salad_components.rb @@ -1,7 +1,7 @@ FactoryBot.define do - factory :salad_component do - name "MyString" - type "" - dish nil - end + # factory :salad_component do + # name "MyString" + # type "" + # dish nil + # end end diff --git a/spec/factories/sized_prices.rb b/spec/factories/sized_prices.rb index 6f29a03..3dafdd1 100644 --- a/spec/factories/sized_prices.rb +++ b/spec/factories/sized_prices.rb @@ -1,7 +1,7 @@ FactoryBot.define do - factory :sized_price do - size "MyString" - price "" - dish nil - end + # factory :sized_price do + # size "MyString" + # price "" + # dish nil + # end end diff --git a/spec/factories/users.rb b/spec/factories/users.rb index 86c67f6..ccfa393 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -4,6 +4,6 @@ factory :user do |f| f.username {Faker::Name.name} f.email {Faker::Internet.email} - f.password "1" + # f.password "1" end -end \ No newline at end of file +end From 9f6a618f6faf8249e208407a12264dffc34aefaa Mon Sep 17 00:00:00 2001 From: anhvy Date: Fri, 3 May 2019 19:32:56 +0700 Subject: [PATCH 02/25] Updated new UI for login page --- Gemfile | 6 +- Gemfile.lock | 110 ++++++++++++----------- app/assets/images/eh-canteen-logo.svg | 1 + app/assets/javascripts/new_template.js | 3 + app/assets/stylesheets/main.scss | 68 ++++++++++++++ app/assets/stylesheets/new_template.scss | 4 + app/controllers/sessions_controller.rb | 1 + app/views/layouts/sessions.html.haml | 17 ++++ app/views/sessions/new.html.erb | 29 ------ app/views/sessions/new.html.haml | 22 +++++ config/routes.rb | 4 +- 11 files changed, 183 insertions(+), 82 deletions(-) create mode 100644 app/assets/images/eh-canteen-logo.svg create mode 100644 app/assets/javascripts/new_template.js create mode 100644 app/assets/stylesheets/main.scss create mode 100644 app/assets/stylesheets/new_template.scss create mode 100644 app/views/layouts/sessions.html.haml delete mode 100644 app/views/sessions/new.html.erb create mode 100644 app/views/sessions/new.html.haml diff --git a/Gemfile b/Gemfile index 83d5cd7..6b84b06 100644 --- a/Gemfile +++ b/Gemfile @@ -14,7 +14,7 @@ group :development, :test do gem 'dotenv-rails' end -gem 'haml' +gem 'hamlit' gem 'kaminari' gem 'simple_form', '~> 4.1.0' @@ -93,3 +93,7 @@ gem 'grape' gem 'momentjs-rails', '>= 2.9.0' gem 'slack-notifier' gem 'wombat', '~> 2.8.0' + +source 'https://rails-assets.org' do + gem 'rails-assets-semantic' +end diff --git a/Gemfile.lock b/Gemfile.lock index d4b2017..32bffc1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,5 +1,6 @@ GEM remote: https://rubygems.org/ + remote: https://rails-assets.org/ specs: actioncable (5.2.3) actionpack (= 5.2.3) @@ -53,8 +54,8 @@ GEM ast (2.4.0) autoprefixer-rails (9.5.1) execjs - aws-eventstream (1.0.2) - aws-partitions (1.150.0) + aws-eventstream (1.0.3) + aws-partitions (1.157.0) aws-sdk (3.0.1) aws-sdk-resources (~> 3) aws-sdk-acm (1.19.0) @@ -63,7 +64,7 @@ GEM aws-sdk-acmpca (1.13.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-alexaforbusiness (1.19.0) + aws-sdk-alexaforbusiness (1.21.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-amplify (1.3.0) @@ -81,7 +82,7 @@ GEM aws-sdk-applicationautoscaling (1.22.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-applicationdiscoveryservice (1.14.0) + aws-sdk-applicationdiscoveryservice (1.15.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-appmesh (1.6.0) @@ -105,7 +106,7 @@ GEM aws-sdk-backup (1.3.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-batch (1.16.0) + aws-sdk-batch (1.17.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-budgets (1.18.0) @@ -120,7 +121,7 @@ GEM aws-sdk-clouddirectory (1.14.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-cloudformation (1.18.0) + aws-sdk-cloudformation (1.19.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-cloudfront (1.15.0) @@ -159,7 +160,7 @@ GEM aws-sdk-codedeploy (1.18.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-codepipeline (1.15.0) + aws-sdk-codepipeline (1.16.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-codestar (1.11.0) @@ -168,7 +169,7 @@ GEM aws-sdk-cognitoidentity (1.10.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-cognitoidentityprovider (1.17.0) + aws-sdk-cognitoidentityprovider (1.18.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-cognitosync (1.9.0) @@ -186,7 +187,7 @@ GEM aws-sdk-connect (1.13.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-core (3.48.3) + aws-sdk-core (3.49.0) aws-eventstream (~> 1.0, >= 1.0.2) aws-partitions (~> 1.0) aws-sigv4 (~> 1.1) @@ -212,7 +213,7 @@ GEM aws-sdk-devicefarm (1.19.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-directconnect (1.16.0) + aws-sdk-directconnect (1.17.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-directoryservice (1.15.0) @@ -224,19 +225,19 @@ GEM aws-sdk-docdb (1.4.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-dynamodb (1.25.0) + aws-sdk-dynamodb (1.26.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-dynamodbstreams (1.9.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-ec2 (1.79.0) + aws-sdk-ec2 (1.82.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-ecr (1.14.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-ecs (1.36.0) + aws-sdk-ecs (1.37.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-efs (1.13.0) @@ -275,7 +276,7 @@ GEM aws-sdk-fsx (1.4.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-gamelift (1.15.0) + aws-sdk-gamelift (1.16.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-glacier (1.18.0) @@ -296,13 +297,13 @@ GEM aws-sdk-health (1.12.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-iam (1.18.0) + aws-sdk-iam (1.19.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-importexport (1.9.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv2 (~> 1.0) - aws-sdk-inspector (1.15.0) + aws-sdk-inspector (1.16.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-iot (1.29.0) @@ -323,7 +324,7 @@ GEM aws-sdk-iotjobsdataplane (1.10.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-kafka (1.3.0) + aws-sdk-kafka (1.4.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-kinesis (1.13.1) @@ -344,10 +345,10 @@ GEM aws-sdk-kinesisvideomedia (1.10.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-kms (1.16.0) + aws-sdk-kms (1.18.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-lambda (1.21.0) + aws-sdk-lambda (1.22.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-lambdapreview (1.9.0) @@ -371,6 +372,9 @@ GEM aws-sdk-macie (1.9.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) + aws-sdk-managedblockchain (1.0.0) + aws-sdk-core (~> 3, >= 3.48.2) + aws-sigv4 (~> 1.1) aws-sdk-marketplacecommerceanalytics (1.9.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) @@ -380,7 +384,7 @@ GEM aws-sdk-marketplacemetering (1.11.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-mediaconnect (1.4.0) + aws-sdk-mediaconnect (1.5.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-mediaconvert (1.25.0) @@ -398,7 +402,7 @@ GEM aws-sdk-mediastoredata (1.11.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-mediatailor (1.13.0) + aws-sdk-mediatailor (1.14.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-migrationhub (1.11.0) @@ -413,7 +417,7 @@ GEM aws-sdk-mturk (1.12.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-neptune (1.11.0) + aws-sdk-neptune (1.12.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-opsworks (1.13.0) @@ -422,7 +426,7 @@ GEM aws-sdk-opsworkscm (1.16.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-organizations (1.23.0) + aws-sdk-organizations (1.24.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-pi (1.9.0) @@ -449,7 +453,7 @@ GEM aws-sdk-ram (1.4.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-rds (1.48.0) + aws-sdk-rds (1.50.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-rdsdataservice (1.4.0) @@ -461,13 +465,13 @@ GEM aws-sdk-rekognition (1.22.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-resourcegroups (1.13.0) + aws-sdk-resourcegroups (1.14.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-resourcegroupstaggingapi (1.9.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-resources (3.41.0) + aws-sdk-resources (3.42.0) aws-sdk-acm (~> 1) aws-sdk-acmpca (~> 1) aws-sdk-alexaforbusiness (~> 1) @@ -571,6 +575,7 @@ GEM aws-sdk-lightsail (~> 1) aws-sdk-machinelearning (~> 1) aws-sdk-macie (~> 1) + aws-sdk-managedblockchain (~> 1) aws-sdk-marketplacecommerceanalytics (~> 1) aws-sdk-marketplaceentitlementservice (~> 1) aws-sdk-marketplacemetering (~> 1) @@ -644,7 +649,7 @@ GEM aws-sdk-robomaker (1.5.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-route53 (1.21.0) + aws-sdk-route53 (1.22.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-route53domains (1.11.0) @@ -653,11 +658,11 @@ GEM aws-sdk-route53resolver (1.4.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.36.0) + aws-sdk-s3 (1.36.1) aws-sdk-core (~> 3, >= 3.48.2) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.0) - aws-sdk-s3control (1.4.0) + aws-sdk-s3control (1.5.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.0) aws-sdk-sagemaker (1.33.0) @@ -675,7 +680,7 @@ GEM aws-sdk-serverlessapplicationrepository (1.15.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-servicecatalog (1.20.0) + aws-sdk-servicecatalog (1.21.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-servicediscovery (1.12.0) @@ -699,19 +704,19 @@ GEM aws-sdk-snowball (1.14.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-sns (1.12.0) + aws-sdk-sns (1.13.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-sqs (1.13.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-ssm (1.42.0) + aws-sdk-ssm (1.43.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-states (1.14.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-storagegateway (1.20.0) + aws-sdk-storagegateway (1.21.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-support (1.9.0) @@ -720,16 +725,16 @@ GEM aws-sdk-swf (1.9.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-textract (1.3.0) + aws-sdk-textract (1.4.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-transcribeservice (1.18.0) + aws-sdk-transcribeservice (1.19.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-transcribestreamingservice (1.1.0) + aws-sdk-transcribestreamingservice (1.2.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-transfer (1.5.0) + aws-sdk-transfer (1.6.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-translate (1.11.0) @@ -744,16 +749,16 @@ GEM aws-sdk-workdocs (1.12.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-worklink (1.3.0) + aws-sdk-worklink (1.4.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sdk-workmail (1.11.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-workspaces (1.16.0) + aws-sdk-workspaces (1.19.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) - aws-sdk-xray (1.13.0) + aws-sdk-xray (1.14.0) aws-sdk-core (~> 3, >= 3.48.2) aws-sigv4 (~> 1.1) aws-sigv2 (1.0.1) @@ -765,7 +770,7 @@ GEM thread_safe (~> 0.3, >= 0.3.1) bcrypt (3.1.11) bindex (0.7.0) - bootsnap (1.4.0) + bootsnap (1.4.4) msgpack (~> 1.0) bootstrap-sass (3.4.1) autoprefixer-rails (>= 5.2.1) @@ -832,8 +837,9 @@ GEM rack (>= 1.3.0) rack-accept virtus (>= 1.0.0) - haml (5.0.4) + hamlit (2.9.3) temple (>= 0.8.0) + thor tilt http-cookie (1.0.3) domain_name (~> 0.5) @@ -897,17 +903,17 @@ GEM minitest (5.11.3) momentjs-rails (2.20.1) railties (>= 3.1) - msgpack (1.2.6) + msgpack (1.2.10) multi_json (1.13.1) mustermann (1.0.3) mustermann-grape (1.0.0) mustermann (~> 1.0.0) net-http-digest_auth (1.4.1) - net-http-persistent (3.0.0) + net-http-persistent (3.0.1) connection_pool (~> 2.2) netrc (0.11.0) nio4r (2.3.1) - nokogiri (1.10.2) + nokogiri (1.10.3) mini_portile2 (~> 2.4.0) ntlm-http (0.1.1) paperclip (6.1.0) @@ -917,7 +923,7 @@ GEM mimemagic (~> 0.3.0) terrapin (~> 0.6.0) parallel (1.17.0) - parser (2.6.2.1) + parser (2.6.3.0) ast (~> 2.4.0) pdf-core (0.7.0) pg (1.1.4) @@ -957,6 +963,9 @@ GEM bundler (>= 1.3.0) railties (= 5.2.3) sprockets-rails (>= 2.0.0) + rails-assets-jquery (3.4.1) + rails-assets-semantic (2.4.1) + rails-assets-jquery (>= 1.8) rails-dom-testing (2.0.3) activesupport (>= 4.2.0) nokogiri (>= 1.6) @@ -985,7 +994,7 @@ GEM netrc (~> 0.8) rspec-core (3.8.0) rspec-support (~> 3.8.0) - rspec-expectations (3.8.2) + rspec-expectations (3.8.3) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.8.0) rspec-mocks (3.8.0) @@ -1052,7 +1061,7 @@ GEM actionpack (>= 4.0) activesupport (>= 4.0) sprockets (>= 3.0.0) - sqlite3 (1.4.0) + sqlite3 (1.4.1) temple (0.8.1) terrapin (0.6.0) climate_control (>= 0.0.3, < 1.0) @@ -1069,7 +1078,7 @@ GEM execjs (>= 0.3.0, < 3) unf (0.1.4) unf_ext - unf_ext (0.0.7.5) + unf_ext (0.0.7.6) unicode-display_width (1.5.0) virtus (1.0.5) axiom-types (~> 0.1) @@ -1116,7 +1125,7 @@ DEPENDENCIES faker (= 1.9.3) fuubar grape - haml + hamlit jbuilder (~> 2.5) jquery-rails (= 4.3.3) jquery-ui-rails (= 4.0.4) @@ -1132,6 +1141,7 @@ DEPENDENCIES puma (~> 3.11) rack_session_access rails (~> 5.2.3) + rails-assets-semantic! rails_12factor rest-client rspec-rails (~> 3.6) diff --git a/app/assets/images/eh-canteen-logo.svg b/app/assets/images/eh-canteen-logo.svg new file mode 100644 index 0000000..4e8ac47 --- /dev/null +++ b/app/assets/images/eh-canteen-logo.svg @@ -0,0 +1 @@ +eh-canteen-logo \ No newline at end of file diff --git a/app/assets/javascripts/new_template.js b/app/assets/javascripts/new_template.js new file mode 100644 index 0000000..8993958 --- /dev/null +++ b/app/assets/javascripts/new_template.js @@ -0,0 +1,3 @@ +//= require jquery +//= require jquery_ujs +//= require semantic diff --git a/app/assets/stylesheets/main.scss b/app/assets/stylesheets/main.scss new file mode 100644 index 0000000..0f4422f --- /dev/null +++ b/app/assets/stylesheets/main.scss @@ -0,0 +1,68 @@ +body { + font-family: 'Maven Pro', sans-serif; +} + +.full-view-height { + height: 100vh; +} + +.ui.button { + font-weight: normal; + text-transform: uppercase; +} + + +#login { + .form { + max-width: 360px; + margin-top: 50px; + + input { + color: #525f7f; + font-weight: 100; + border-radius: 0.5em; + border-color: #dfe5ea; + font-family: 'Maven Pro', sans-serif; + } + + .ui.button { + width: 40%; + display: flex; + color: #27ae60; + margin-top: 2em; + padding: 0.75em 1em; + align-items: center; + border-radius: 0.5em; + justify-content: space-between; + background: rgba(68, 217, 149, 0.15); + } + + .ui.button .feather { + height: 20px; + } + } + .ui.header { + color: #2c3e50; + margin: 20px 0; + font-size: 32px; + font-weight: normal; + font-family: 'Maven Pro', sans-serif; + } +} + +.input-icon { + display: flex; + margin: 0em; + height: 100%; + width: 2.67142857em; + align-items: center; + justify-content: center; + position: absolute; + text-align: center; + opacity: 0.5; + + svg { + height: 18px; + } +} + diff --git a/app/assets/stylesheets/new_template.scss b/app/assets/stylesheets/new_template.scss new file mode 100644 index 0000000..e3552fd --- /dev/null +++ b/app/assets/stylesheets/new_template.scss @@ -0,0 +1,4 @@ +/* + *= require semantic + *= require main + */ diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 60a8f0a..888ae22 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -1,5 +1,6 @@ class SessionsController < ApplicationController include SessionsHelper + layout 'sessions' def new if logged_in? diff --git a/app/views/layouts/sessions.html.haml b/app/views/layouts/sessions.html.haml new file mode 100644 index 0000000..8db8d85 --- /dev/null +++ b/app/views/layouts/sessions.html.haml @@ -0,0 +1,17 @@ +!!! +%html + %head + %title EH Canteen + = stylesheet_link_tag 'new_template', media: 'all', 'data-turbolinks-track': true + = javascript_include_tag 'new_template', 'data-turbolinks-track': true + = csrf_meta_tags + %script{src: "https://unpkg.com/feather-icons"} + %link{href: "https://employmenthero.com/favicon-96x96.png", rel: "icon", sizes: "96x96", type: "image/png"}/ + %link{href: "https://fonts.googleapis.com/css?family=Maven+Pro:400,500,700&subset=vietnamese", rel: "stylesheet"}/ + %body + .ui.container= yield + + :javascript + $(function(){ + feather.replace(); + }); diff --git a/app/views/sessions/new.html.erb b/app/views/sessions/new.html.erb deleted file mode 100644 index 281a55d..0000000 --- a/app/views/sessions/new.html.erb +++ /dev/null @@ -1,29 +0,0 @@ -<% provide(:title, "Log in") %> -

Log in

- -
-
- <%= form_for(:session, url: login_path) do |f| %> -
- <%= f.label :email %> - <%= f.email_field :email, class: 'form-control', - placeholder: 'Enter your email' %> -
- -
- <%= f.label :password %> - <%= f.password_field :password, class: 'form-control', - placeholder: 'Enter your password' %> -
- -
- <%= f.submit "Log in", class: "btn btn-primary" %> -
- <% end %> - - -
-
- - diff --git a/app/views/sessions/new.html.haml b/app/views/sessions/new.html.haml new file mode 100644 index 0000000..36aa0fd --- /dev/null +++ b/app/views/sessions/new.html.haml @@ -0,0 +1,22 @@ +- provide(:title, "Log in") +.ui.grid.middle.aligned.full-view-height + .seven.wide.column#login + = image_tag "eh-canteen-logo.svg", height: 60 + %h1.ui.header EH's Lunch Ordering Services + = form_for(:session, url: login_path, html: {class: "ui large form"}) do |f| + .field + .ui.left.icon.input + .input-icon + %i{"data-feather": "user"} + = f.email_field :email, placeholder: 'Account' + .field + .ui.left.icon.input + .input-icon + %i{"data-feather": "key"} + = f.password_field :password, placeholder: 'Password' + .field + .ui.icon.button + %span Sign in + %i{"data-feather": "arrow-right"} + .nine.wide.column + = image_tag "hero-isometric.png", class: "ui image" diff --git a/config/routes.rb b/config/routes.rb index d031944..422dc25 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,9 +1,9 @@ Rails.application.routes.draw do mount OrderLunchAPI => '/api' - get 'sessions/new' + root 'sessions#new' - root 'welcomes#index' + # root 'welcomes#index' resources :foods do collection do get 'export_pdf' From 3874392840e1aad4d35e4445918fd87f39fa3f25 Mon Sep 17 00:00:00 2001 From: anhvy Date: Fri, 3 May 2019 19:33:53 +0700 Subject: [PATCH 03/25] Converted layout to haml --- app/views/layouts/_header.html.erb | 35 ------------------------- app/views/layouts/_header.html.haml | 25 ++++++++++++++++++ app/views/layouts/application.html.erb | 31 ---------------------- app/views/layouts/application.html.haml | 18 +++++++++++++ 4 files changed, 43 insertions(+), 66 deletions(-) delete mode 100644 app/views/layouts/_header.html.erb create mode 100644 app/views/layouts/_header.html.haml delete mode 100644 app/views/layouts/application.html.erb create mode 100644 app/views/layouts/application.html.haml diff --git a/app/views/layouts/_header.html.erb b/app/views/layouts/_header.html.erb deleted file mode 100644 index cd8f299..0000000 --- a/app/views/layouts/_header.html.erb +++ /dev/null @@ -1,35 +0,0 @@ - \ No newline at end of file diff --git a/app/views/layouts/_header.html.haml b/app/views/layouts/_header.html.haml new file mode 100644 index 0000000..81a025e --- /dev/null +++ b/app/views/layouts/_header.html.haml @@ -0,0 +1,25 @@ +%header.navbar.navbar-fixed-top.navbar-inverse + .container + = link_to "EH Order Lunch", root_path, id: "logo" + %nav + %ul.nav.navbar-nav.navbar-right + - if logged_in? + %li= link_to "NEWs", new_update_path + %li= link_to "Home", order_user_path(current_user) + %li= link_to "How to use", help_path + %li.dropdown + %a.dropdown-toggle{"data-toggle" => "dropdown", :href => "#"} + Account + %b.caret + %ul.dropdown-menu + %li= link_to "Hello! #{current_user.email}", current_user + %li= link_to "Settings", '#' + - if is_admin? + %li= link_to "Manager Page", manage_admin_users_path + %li.divider + %li= link_to "PING SLACK", ping_slack_admin_users_path, data: {confirm: 'This ping can cause noise for users. Do you want to continue?'} + %li.divider + %li + = link_to "Log out", logout_path, method: :delete + - else + %li= link_to "Log in", login_path diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb deleted file mode 100644 index 0114529..0000000 --- a/app/views/layouts/application.html.erb +++ /dev/null @@ -1,31 +0,0 @@ - - - - OrderLunch - <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> - <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> - <%= csrf_meta_tags %> - - - -<%= render 'layouts/header' %> -
-
- <% if logged_in? %> -
- <%= render 'layouts/left_menu' %> -
- <% end %> -
- <% flash.each do |key, value| %> - <%= content_tag(:div, value, class: "alert alert-#{key}") %> - <% end %> - <%= yield %> -
- -
-
- - - - diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml new file mode 100644 index 0000000..c714218 --- /dev/null +++ b/app/views/layouts/application.html.haml @@ -0,0 +1,18 @@ +!!! +%html + %head + %title EH Canteen + = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': true + = javascript_include_tag 'application', 'data-turbolinks-track': true + = csrf_meta_tags + %body + = render 'layouts/header' + .ui.container.fluid + .ui.grid + - if logged_in? + .four.wide.column + = render 'layouts/left_menu' + .twelve.wide.center.aligned.column + - flash.each do |key, value| + = content_tag(:div, value, class: "alert alert-#{key}") + = yield From 1d91e6ae13733735ce3ce8a9aa3dc001ebf01609 Mon Sep 17 00:00:00 2001 From: anhvy Date: Sat, 4 May 2019 13:31:10 +0700 Subject: [PATCH 04/25] A few fixes --- Gemfile | 2 -- app/controllers/application_controller.rb | 9 --------- app/controllers/dashboards_controller.rb | 2 ++ app/controllers/sessions_controller.rb | 6 +----- app/controllers/welcomes_controller.rb | 3 --- app/views/sessions/new.html.haml | 4 ++-- config/initializers/assets.rb | 2 +- 7 files changed, 6 insertions(+), 22 deletions(-) create mode 100644 app/controllers/dashboards_controller.rb delete mode 100644 app/controllers/welcomes_controller.rb diff --git a/Gemfile b/Gemfile index 6b84b06..815f991 100644 --- a/Gemfile +++ b/Gemfile @@ -33,8 +33,6 @@ gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] gem 'rest-client' gem 'sdoc', '~> 0.4.0', group: :doc -# Use ActiveModel has_secure_password -# gem 'bcrypt', '~> 3.1.7' # Use Unicorn as the app server # gem 'unicorn' diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index f43f161..27269c2 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,15 +1,6 @@ -# require File.join(Rails.root, 'lib/error/error_handler.rb') - -# Dir[Rails.root.join('lib/error/*.rb')].each {|file| require file } - class ApplicationController < ActionController::Base - # Prevent CSRF attacks by raising an exception. - # For APIs, you may want to use :null_session instead. protect_from_forgery with: :exception include SessionsHelper include MyError::ErrorHandler - # def current_user - # super || User.new - # end end diff --git a/app/controllers/dashboards_controller.rb b/app/controllers/dashboards_controller.rb new file mode 100644 index 0000000..fc2b312 --- /dev/null +++ b/app/controllers/dashboards_controller.rb @@ -0,0 +1,2 @@ +class DashboardsController < ApplicationController +end diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 888ae22..6d3c003 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -3,11 +3,7 @@ class SessionsController < ApplicationController layout 'sessions' def new - if logged_in? - render 'welcomes/index' - else - render 'new' - end + redirect_to user_path(current_user) if logged_in? end def create diff --git a/app/controllers/welcomes_controller.rb b/app/controllers/welcomes_controller.rb deleted file mode 100644 index 67c2c87..0000000 --- a/app/controllers/welcomes_controller.rb +++ /dev/null @@ -1,3 +0,0 @@ -class WelcomesController < ApplicationController - def index; end -end diff --git a/app/views/sessions/new.html.haml b/app/views/sessions/new.html.haml index 36aa0fd..335e6ac 100644 --- a/app/views/sessions/new.html.haml +++ b/app/views/sessions/new.html.haml @@ -8,14 +8,14 @@ .ui.left.icon.input .input-icon %i{"data-feather": "user"} - = f.email_field :email, placeholder: 'Account' + = f.email_field :email, placeholder: 'Account', autofocus: true .field .ui.left.icon.input .input-icon %i{"data-feather": "key"} = f.password_field :password, placeholder: 'Password' .field - .ui.icon.button + %button.ui.icon.button{type: "submit"} %span Sign in %i{"data-feather": "arrow-right"} .nine.wide.column diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb index 4b828e8..c0b7658 100644 --- a/config/initializers/assets.rb +++ b/config/initializers/assets.rb @@ -11,4 +11,4 @@ # Precompile additional assets. # application.js, application.css, and all non-JS/CSS in the app/assets # folder are already added. -# Rails.application.config.assets.precompile += %w( admin.js admin.css ) +Rails.application.config.assets.precompile += %w( new_template.js new_template.css ) From 433256523cb8df874d15d6e2d1f03ba341ef15c7 Mon Sep 17 00:00:00 2001 From: anhvy Date: Sun, 5 May 2019 17:51:02 +0700 Subject: [PATCH 05/25] Added sidebar template --- app/assets/stylesheets/dashboard.scss | 91 ++++++++++++++++++++++++ app/assets/stylesheets/new_template.scss | 1 + app/controllers/dashboards_controller.rb | 31 ++++++++ app/helpers/sessions_helper.rb | 2 +- app/views/dashboards/index.html.haml | 1 + app/views/layouts/_sidebar.html.haml | 27 +++++++ app/views/layouts/dashboard.html.haml | 18 +++++ config/routes.rb | 58 +-------------- 8 files changed, 171 insertions(+), 58 deletions(-) create mode 100644 app/assets/stylesheets/dashboard.scss create mode 100644 app/views/dashboards/index.html.haml create mode 100644 app/views/layouts/_sidebar.html.haml create mode 100644 app/views/layouts/dashboard.html.haml diff --git a/app/assets/stylesheets/dashboard.scss b/app/assets/stylesheets/dashboard.scss new file mode 100644 index 0000000..cbd4c6b --- /dev/null +++ b/app/assets/stylesheets/dashboard.scss @@ -0,0 +1,91 @@ +body { + font-family: 'Maven Pro', sans-serif; +} + +.sidebar { + width: 260px; + box-shadow: 0 2px 20px 0 rgba(0,0,0,0.075); +} + +.pusher { + height: 100%; + display: flex; + flex-direction: row; + background: #fafbfd; + padding: 2em 2em 2em 300px; +} + +#sidebar_content { + .heading { + padding: 1.5em; + margin-top: 1em; + text-align: center; + + h3 { + color: #2c3e50; + margin-top: 0.5em; + font-weight: normal; + } + } + + .quick_actions, + .admin_actions { + display: grid; + grid-gap: 1em; + padding: 1.5em; + margin-top: 1em; + position: relative; + grid-template-columns: repeat(2, 1fr); + + .item { + display: flex; + padding: 10px; + color: #525f7f; + font-size: 12px; + border-radius: 5px; + align-items: center; + flex-direction: column; + border: 1px solid #dfe5ea; + } + + .item svg { + // color: #bdc3c7; + color: #74b9ff; + } + + .item span { + margin-top: 0.2em; + } + + .item:hover { + border-color: transparent; + background: rgba(223, 229, 234, 0.25); + } + + &:before { + content: "Quick Actions"; + position: absolute; + font-size: 0.75em; + color: #b7c3cb; + left: 20px; + top: -10px; + } + } + + .admin_actions { + grid-template-columns: repeat(1, 1fr); + + .item { + flex-direction: row; + } + + .item span { + margin-top: 0; + margin-left: 1em; + } + + &:before { + content: "Admin Actions"; + } + } +} diff --git a/app/assets/stylesheets/new_template.scss b/app/assets/stylesheets/new_template.scss index e3552fd..ba5bd4c 100644 --- a/app/assets/stylesheets/new_template.scss +++ b/app/assets/stylesheets/new_template.scss @@ -1,4 +1,5 @@ /* *= require semantic *= require main + *= require dashboard */ diff --git a/app/controllers/dashboards_controller.rb b/app/controllers/dashboards_controller.rb index fc2b312..fac17c3 100644 --- a/app/controllers/dashboards_controller.rb +++ b/app/controllers/dashboards_controller.rb @@ -1,2 +1,33 @@ class DashboardsController < ApplicationController + layout 'dashboard' + before_action :require_login + + def index + # select_date = select_date_params[:select_date] + # select_date = select_date ? Date.parse(select_date) : Date.today + + # @menu = Menu.where('DATE(date)=?', select_date).first + # @select_date = select_date + + # return if @menu.blank? + # if select_date < Date.today || + # (select_date == Date.today && @menu.is_lock? && Time.current > @menu.locked_at) + # @locked = true + # @locked_time = @menu.locked_at + # return + # end + + # @today_order = Orders::RetrieveService.find_order_by_user_id_and_date session[:user_id], select_date + + # @r_tags = Menus::RetrieveService.new(@menu).collect_follow_tags_for_each_restaurant + + # @total_price = @today_order.blank? ? 0 : @today_order.cal_total_price + + # @all_orders = Order.where('DATE(date)=?', select_date) + + # @available_restaurants = @menu.available_restaurants(Time.current) + # @avg_cost_on_month = AverageCostService.call(current_user.id) + # num_day_of_month = ParseDateService.weekdays_in_month_given_a_date(Date.current) + # @total_allow_budget_for_month = num_day_of_month * Order::MONTH_AVG_LIMIT + end end diff --git a/app/helpers/sessions_helper.rb b/app/helpers/sessions_helper.rb index 7f4d4c9..cfba14f 100644 --- a/app/helpers/sessions_helper.rb +++ b/app/helpers/sessions_helper.rb @@ -2,7 +2,7 @@ module SessionsHelper def require_login unless logged_in? flash[:danger] = 'Need to login to see this page' - render 'sessions/new' + redirect_to login_path end end diff --git a/app/views/dashboards/index.html.haml b/app/views/dashboards/index.html.haml new file mode 100644 index 0000000..be6011c --- /dev/null +++ b/app/views/dashboards/index.html.haml @@ -0,0 +1 @@ +this is new index page diff --git a/app/views/layouts/_sidebar.html.haml b/app/views/layouts/_sidebar.html.haml new file mode 100644 index 0000000..8591613 --- /dev/null +++ b/app/views/layouts/_sidebar.html.haml @@ -0,0 +1,27 @@ +#sidebar_content + .heading + = image_tag "eh-canteen-logo.svg", width: 80 + %h3 EH's Lunch Ordering + .quick_actions + = link_to order_user_path(current_user), class: 'item' do + %i{"data-feather": "shopping-bag"} + %span Self Order + .item + %i{"data-feather": "users"} + %span Aggregate + = link_to get_all_orders_today_users_path, class: 'item' do + %i{"data-feather": "clipboard"} + %span All orders + = link_to orders_show_personal_orders_path, class: 'item' do + %i{"data-feather": "rotate-ccw"} + %span Histories + .admin_actions + = link_to manage_company_admin_users_path, class: 'item' do + %i{"data-feather": "shopping-cart"} + %span Manage Today Order + = link_to manage_all_days_admin_users_path, class: 'item' do + %i{"data-feather": "pie-chart"} + %span Overview + = link_to admin_index_path, class: 'item' do + %i{"data-feather": "zap"} + %span Administration diff --git a/app/views/layouts/dashboard.html.haml b/app/views/layouts/dashboard.html.haml new file mode 100644 index 0000000..1559912 --- /dev/null +++ b/app/views/layouts/dashboard.html.haml @@ -0,0 +1,18 @@ +!!! +%html + %head + %title EH Canteen + = stylesheet_link_tag 'new_template', media: 'all', 'data-turbolinks-track': true + = javascript_include_tag 'new_template', 'data-turbolinks-track': true + = csrf_meta_tags + %script{src: "https://unpkg.com/feather-icons"} + %link{href: "https://employmenthero.com/favicon-96x96.png", rel: "icon", sizes: "96x96", type: "image/png"}/ + %link{href: "https://fonts.googleapis.com/css?family=Maven+Pro:400,500,700&subset=vietnamese", rel: "stylesheet"}/ + %body + .ui.overlay.visible.sidebar= render "layouts/sidebar" + .pusher= yield + + :javascript + $(function(){ + feather.replace(); + }); diff --git a/config/routes.rb b/config/routes.rb index 422dc25..464fc1c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,9 +1,8 @@ Rails.application.routes.draw do mount OrderLunchAPI => '/api' - root 'sessions#new' + root 'dashboards#index' - # root 'welcomes#index' resources :foods do collection do get 'export_pdf' @@ -204,59 +203,4 @@ resources :ol_settings do end end - - # The priority is based upon orders of creation: first created -> highest priority. - # See how all your routes lay out with "rake routes". - - # You can have the root of your site routed with "root" - # root 'welcome#index' - - # Example of regular route: - # get 'products/:id' => 'catalog#view' - - # Example of named route that can be invoked with purchase_url(id: product.id) - # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase - - # Example resource route (maps HTTP verbs to controller actions automatically): - # resources :products - - # Example resource route with options: - # resources :products do - # member do - # get 'short' - # post 'toggle' - # end - # - # collection do - # get 'sold' - # end - # end - - # Example resource route with sub-resources: - # resources :products do - # resources :comments, :sales - # resource :seller - # end - - # Example resource route with more complex sub-resources: - # resources :products do - # resources :comments - # resources :sales do - # get 'recent', on: :collection - # end - # end - - # Example resource route with concerns: - # concern :toggleable do - # post 'toggle' - # end - # resources :posts, concerns: :toggleable - # resources :photos, concerns: :toggleable - - # Example resource route within a namespace: - # namespace :admin do - # # Directs /admin/products/* to Admin::ProductsController - # # (app/controllers/admin/products_controller.rb) - # resources :products - # end end From 55672b7ce00533d0d722f0f6ed876b250e09b2f0 Mon Sep 17 00:00:00 2001 From: anhvy Date: Tue, 7 May 2019 16:21:01 +0700 Subject: [PATCH 06/25] [WIP] Updating UI for legacy order --- .byebug_history | 5 +- app/assets/stylesheets/dashboard.scss | 118 ++++++++++++++++++++++- app/controllers/dashboards_controller.rb | 40 ++++---- app/controllers/sessions_controller.rb | 4 +- app/helpers/dashboard_helper.rb | 8 ++ app/views/dashboards/index.html.haml | 41 +++++++- app/views/layouts/_sidebar.html.haml | 10 +- 7 files changed, 190 insertions(+), 36 deletions(-) create mode 100644 app/helpers/dashboard_helper.rb diff --git a/.byebug_history b/.byebug_history index f21b566..06d91f0 100644 --- a/.byebug_history +++ b/.byebug_history @@ -1,4 +1,6 @@ c +restaurant.ref_link +c available_dishes.first.values.first.dig(:status, :valid) available_dishes.first.values.first available_dishes.first.values @@ -251,6 +253,3 @@ c notice_params params c -p_dishes.last[:name] -p_dishes.last -params diff --git a/app/assets/stylesheets/dashboard.scss b/app/assets/stylesheets/dashboard.scss index cbd4c6b..20b5f63 100644 --- a/app/assets/stylesheets/dashboard.scss +++ b/app/assets/stylesheets/dashboard.scss @@ -8,10 +8,10 @@ body { } .pusher { - height: 100%; + min-height: 100%; display: flex; flex-direction: row; - background: #fafbfd; + background: #f6f9fc; padding: 2em 2em 2em 300px; } @@ -48,8 +48,18 @@ body { border: 1px solid #dfe5ea; } + .item.active, + .item.active:hover { + color: #54a0ff; + border-color: transparent; + background: rgba(116, 185, 255, 0.15); + } + + .item.active svg { + color: #54a0ff; + } + .item svg { - // color: #bdc3c7; color: #74b9ff; } @@ -58,8 +68,12 @@ body { } .item:hover { - border-color: transparent; - background: rgba(223, 229, 234, 0.25); + border-color: #74b9ff; + background: rgba(223, 229, 234, 0.1); + } + + .item.active:hover { + cursor: default; } &:before { @@ -89,3 +103,97 @@ body { } } } + +#dishes_container { + .dishes { + display: grid; + grid-gap: 1em; + grid-template-columns: repeat(2, 1fr); + } + + .dish { + display: flex; + padding: 0.75em; + border-radius: 5px; + background: #fff; + align-items: flex-start; + box-shadow: 0 2px 4px 0 rgba(50,50,93,.1); + + .ui.image { + margin-right: 1em; + max-width: 60px; + } + + .content { + flex: 1; + } + + .header { + display: flex; + } + + .header .name { + flex: 1; + font-size: 1.2em; + font-weight: 500; + } + + .header .price { + width: 100px; + color: #27ae60; + font-size: 16px; + font-weight: 500; + text-align: right; + } + + .header .add_button { + width: 30px; + height: 30px; + padding: 5px; + color: #ffffff; + margin-left: 1em; + background: #54a0ff; + border-radius: 0.5em; + } + + .header .add_button svg { + width: 20px; + height: 20px; + } + } +} + +#filter_container { + display: flex; + margin-bottom: 3em; + align-items: center; + justify-content: space-between; +} + +#filter_container .menu { + border: none; + margin-top: 0; + box-shadow: none; + background: transparent; + + .item { + padding: 0; + margin-left: 1em; + } + + .item.active { + padding: 0.5em 2em; + border-radius: 0.5em; + } + + .item:hover { + background: transparent; + } +} + +#filter_container .ui.header { + font-size: 22px; + margin-bottom: 0; + font-weight: 500; + font-family: 'Maven Pro', sans-serif; +} diff --git a/app/controllers/dashboards_controller.rb b/app/controllers/dashboards_controller.rb index fac17c3..a58ee56 100644 --- a/app/controllers/dashboards_controller.rb +++ b/app/controllers/dashboards_controller.rb @@ -3,31 +3,31 @@ class DashboardsController < ApplicationController before_action :require_login def index - # select_date = select_date_params[:select_date] - # select_date = select_date ? Date.parse(select_date) : Date.today + @select_date = Date.parse(params[:select_date].presence || Date.today.to_s) + @menu = Menu.where('DATE(date)=?', @select_date).first - # @menu = Menu.where('DATE(date)=?', select_date).first - # @select_date = select_date + return if @menu.blank? + if @select_date < Date.today || + (@select_date == Date.today && @menu.is_lock? && Time.current > @menu.locked_at) + @locked = true + @locked_time = @menu.locked_at + return + end - # return if @menu.blank? - # if select_date < Date.today || - # (select_date == Date.today && @menu.is_lock? && Time.current > @menu.locked_at) - # @locked = true - # @locked_time = @menu.locked_at - # return - # end + @today_order = Orders::RetrieveService.find_order_by_user_id_and_date session[:user_id], @select_date - # @today_order = Orders::RetrieveService.find_order_by_user_id_and_date session[:user_id], select_date + @r_tags = Menus::RetrieveService.new(@menu).collect_follow_tags_for_each_restaurant - # @r_tags = Menus::RetrieveService.new(@menu).collect_follow_tags_for_each_restaurant + @total_price = @today_order.blank? ? 0 : @today_order.cal_total_price - # @total_price = @today_order.blank? ? 0 : @today_order.cal_total_price + @all_orders = Order.where('DATE(date)=?', @select_date) - # @all_orders = Order.where('DATE(date)=?', select_date) - - # @available_restaurants = @menu.available_restaurants(Time.current) - # @avg_cost_on_month = AverageCostService.call(current_user.id) - # num_day_of_month = ParseDateService.weekdays_in_month_given_a_date(Date.current) - # @total_allow_budget_for_month = num_day_of_month * Order::MONTH_AVG_LIMIT + @available_restaurants = @menu.available_restaurants(Time.current) + @avg_cost_on_month = AverageCostService.call(current_user.id) + num_day_of_month = ParseDateService.weekdays_in_month_given_a_date(Date.current) + @total_allow_budget_for_month = num_day_of_month * Order::MONTH_AVG_LIMIT + @api_requests = {} end + + private end diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 6d3c003..60fbdf7 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -3,14 +3,14 @@ class SessionsController < ApplicationController layout 'sessions' def new - redirect_to user_path(current_user) if logged_in? + redirect_to root_path if logged_in? end def create @user = User.find_by(email: params[:session][:email].downcase) if @user&.authenticate(params[:session][:password]) log_in @user - redirect_back_or @user + redirect_back_or root_path else flash[:danger] = 'Invalid email/password combination' # Not quite right! render 'new' diff --git a/app/helpers/dashboard_helper.rb b/app/helpers/dashboard_helper.rb new file mode 100644 index 0000000..1a59ff4 --- /dev/null +++ b/app/helpers/dashboard_helper.rb @@ -0,0 +1,8 @@ +module DashboardHelper + def active_state_for(item) + case item + when :order_lunch + 'active' if controller_name == 'dashboards' && action_name == 'index' + end + end +end diff --git a/app/views/dashboards/index.html.haml b/app/views/dashboards/index.html.haml index be6011c..4134c7a 100644 --- a/app/views/dashboards/index.html.haml +++ b/app/views/dashboards/index.html.haml @@ -1 +1,40 @@ -this is new index page +.ui.fluid.container + / .ui.borderless.menu + / .item{style:"border-right: 1px solid #f2f2f2"} + / %i{"data-feather": "chevron-left"} + / .item{style:"border-right: 1px solid #f2f2f2"} + / %i{"data-feather": "chevron-right"} + / .item= @select_date.strftime("%A, %B %e, %Y") + / .right.menu + + + .ui.grid + .eleven.wide.column + #filter_container + %h3.ui.header Pantry Ordering + .ui.borderless.menu + %a.item.active All Dishes + - @available_restaurants.each do |res| + .ui.dropdown.item + %a= res.name + .menu + - @r_tags[res.id.to_s].keys.each do |tag| + %a.item= tag.name + #dishes_container + .dishes + - @available_restaurants.each do |restaurant| + - restaurant.by_date(@select_date).dish_decorators.each do |dish| + .dish + = render partial: 'layouts/components/image_tag_inline', + locals: {image: dish.image, + restaurant: dish, + size: [120, 120], + object: 'dish', + options: {class_name: "ui rounded image", img_size: 'thumb'}} + .content + .header + %a.name{href: dish_path(dish)}= dish.name + %span.price= show_price dish.price + %button.ui.icon.button.add_button + %i{"data-feather": "plus"} + %p.description= dish.description diff --git a/app/views/layouts/_sidebar.html.haml b/app/views/layouts/_sidebar.html.haml index 8591613..bcc713e 100644 --- a/app/views/layouts/_sidebar.html.haml +++ b/app/views/layouts/_sidebar.html.haml @@ -3,18 +3,18 @@ = image_tag "eh-canteen-logo.svg", width: 80 %h3 EH's Lunch Ordering .quick_actions - = link_to order_user_path(current_user), class: 'item' do + = link_to order_user_path(current_user), class: "item #{active_state_for(:order_lunch)}" do %i{"data-feather": "shopping-bag"} - %span Self Order - .item - %i{"data-feather": "users"} - %span Aggregate + %span Get A Meal = link_to get_all_orders_today_users_path, class: 'item' do %i{"data-feather": "clipboard"} %span All orders = link_to orders_show_personal_orders_path, class: 'item' do %i{"data-feather": "rotate-ccw"} %span Histories + .item + %i{"data-feather": "settings"} + %span Preferences .admin_actions = link_to manage_company_admin_users_path, class: 'item' do %i{"data-feather": "shopping-cart"} From 65d8af2eec44fc785f0f0219fc4c360481384b8b Mon Sep 17 00:00:00 2001 From: anhvy Date: Thu, 9 May 2019 18:21:15 +0700 Subject: [PATCH 07/25] Wrapped new layout --- .../3rd_party/radialIndicator.min.js | 7 ++ app/assets/javascripts/new_template.js | 1 + app/assets/stylesheets/dashboard.scss | 70 ++++++++++++++++--- app/assets/stylesheets/main.scss | 12 ++++ app/views/dashboards/_aggregate.html.haml | 20 ++++++ app/views/dashboards/_self_order.html.haml | 29 ++++++++ app/views/dashboards/index.html.haml | 65 ++++++++--------- app/views/dashboards/shared/_navbar.html.haml | 11 +++ 8 files changed, 171 insertions(+), 44 deletions(-) create mode 100644 app/assets/javascripts/3rd_party/radialIndicator.min.js create mode 100644 app/views/dashboards/_aggregate.html.haml create mode 100644 app/views/dashboards/_self_order.html.haml create mode 100644 app/views/dashboards/shared/_navbar.html.haml diff --git a/app/assets/javascripts/3rd_party/radialIndicator.min.js b/app/assets/javascripts/3rd_party/radialIndicator.min.js new file mode 100644 index 0000000..bd09687 --- /dev/null +++ b/app/assets/javascripts/3rd_party/radialIndicator.min.js @@ -0,0 +1,7 @@ +/* + radialIndicator.js v 1.4.0 + Author: Sudhanshu Yadav + Copyright (c) 2015 Sudhanshu Yadav - ignitersworld.com , released under the MIT license. + Demo on: ignitersworld.com/lab/radialIndicator.html +*/ +!function(a){var b=Function("return this")()||eval("this");"function"==typeof define&&define.amd?define(["jquery"],function(t){return b.radialIndicator=a(t,b)}):"object"==typeof module&&module.exports?module.exports=b.document?a(require("jquery"),b):function(t){if(!t.document)throw new Error("radialIndiactor requires a window with a document");return a(require("jquery")(t),t)}:b.radialIndicator=a(b.jQuery,b)}(function(n,t,L){var e,r,u=t.document,j=2*Math.PI,F=Math.PI/2,i=(e=u.createElement("canvas").getContext("2d"),r=(t.devicePixelRatio||1)/(e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1),function(t,e,n){var i=n||u.createElement("canvas");return i.width=t*r,i.height=e*r,i.style.width=t+"px",i.style.height=e+"px",i.getContext("2d").setTransform(r,0,0,r,0,0),i});function R(t){t=t.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,function(t,e,n,i){return e+e+n+n+i+i});var e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return e?[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]:null}function q(t,e,n,i){return Math.round(n+(i-n)*t/e)}function a(t,h){var d=this;h=function(){for(var t=arguments,e=t[0],n=1,i=t.length;n Date: Mon, 20 May 2019 15:32:54 +0700 Subject: [PATCH 08/25] Few ignorance --- .byebug_history | 255 ------------ .gitignore | 1050 +---------------------------------------------- 2 files changed, 1 insertion(+), 1304 deletions(-) delete mode 100644 .byebug_history diff --git a/.byebug_history b/.byebug_history deleted file mode 100644 index 06d91f0..0000000 --- a/.byebug_history +++ /dev/null @@ -1,255 +0,0 @@ -c -restaurant.ref_link -c -available_dishes.first.values.first.dig(:status, :valid) -available_dishes.first.values.first -available_dishes.first.values -available_dishes -c -available_dishes.first.keys.first -available_dishes.first.first -available_dishes.last -available_dishes.first -available_dishes -n -available_dishes -n -c -params -c -params -c -params -c -params -c -params -c -params -c -result -n -data -n -c -n -key_arr -arr2 -arr1 -c -exception -n -c -s -c -CreateMultiDishesService.instance_methods -self.instance_method -self.instance_methods -@names -self.names -names -c -self.names -self.name -@names -names -NAMES -c -self.names -names -self.prices -@prices -prices -c -names -n -service -n -prices -names -n -c -names -data -n -c -n -date -n -c -date -@result -n -date -n -c -params -date -n -c -params -date -n -c -exception -n -provider_id -n -nn -n -params -c -params -c -exception -n -c -n -c -n -dish_names.length -prices.length -n -prices -dish_names -n -c -prices.length - prices = ExtractLineService.split_line(prices) -prices = params[:provider][:dish_prices] -params[:provider][:dish_prices] -params['dish_prices'] -params[:dish_prices] -params -c -n -c -n -@error -c -n -@error -c -daily_restaurants.find_by(date: parse_date) -daily_restaurants.find_by(date: parse_date)&.dishes -n -parse_date.is_a? Date -parse_date -parse_Date -n -date.is_a? Date -n -c -n -parse_date -n -is_provider? -n -date -n -s -n -c -@provider.daily_restaurants.count -n -parse_date -n -c -@dishes -c -Date&.strptime("dadas", "%m/%d/%Y") -Date.strptime("dadas", "%m/%d/%Y") -Date.strptime("", "%m/%d/%Y") -Date.strptime("05/24/2018 8:34 PM", "%m/%d/%Y") -Date.strptime("05/24/2018", "%m/%d/%Y") -Date.strptime("12/22/2011", "%m/%d/%Y") -Date.parse("05-24-2018") -Date.parse("05/24/2018") -DateTime.parse(date, '%D/%M/%Y') -DateTime.parse(date) -date -n -c -exception -n -c -params -date -n -c -exception -n -params -date -n -c -admin_quick_add_with_type_path.split('/').last -admin_quick_add_with_type_path.class -admin_quick_add_with_type_path -import_page_admin_dishes_path -request.env['PATH_INFO'] -request.env['REQUEST_PATH'] -request.env['REQUEST_METHOD'] -request.env['REMOTE_ADDR'] -request.env['QUERY_STRING'] -request.env['GATEWAY_INTERFACE'] -request.env['REQUEST_URI'] -request.env['URI'] -request.env.keys -request.env -current_path -request.env['PATH_INFO'].include? 'sap_page' -request.env['PATH_INFO'] -current_page? -current_page -c -@r_tags -n -@menu.is_lock? -select_date < Date.today -c -params -c -params -c -params -c -wed_res -wed_res[idx - 1] -n -at_date.wday -at_date -c -date -n -c -n -wday_res -n -restaurants.find_by(name: "#{prefix}_Monday") -prefix -prefi -restaurants -c -params -c -params -c -params -c -n -c -prefix -n -c -@result -c -'abc'.gsub!('a', '1') -@notice -@notice.content = @notice.content.gsub('\r\n', 'aa') -@notice.content -@notice -c -notice_params -params -c diff --git a/.gitignore b/.gitignore index f4eae23..aa7b213 100644 --- a/.gitignore +++ b/.gitignore @@ -15,1058 +15,10 @@ /log/* !/log/.keep /tmp +/public/* .ruby-version .ruby-gemset .idea/ config/secrets.yml .byebug_history -public/assets/.sprockets-manifest-3224166f937f7a5a39473e4647ecb271.json -public/assets/ajax-box-php-master-7650f5d3d5965e08c91bef1762f5d03312df4c5d0ff383ac9127eb7e977ace2c.zip -public/assets/ajax-box-php-master/index-127b5bd5b29dbcd0337e99d7273ce35bfabac1a73d4caf4788613de214d5307a.html -public/assets/ajax-box-php-master/index-127b5bd5b29dbcd0337e99d7273ce35bfabac1a73d4caf4788613de214d5307a.html.gz -public/assets/ajax-box-php-master/README-c8bda106f3bc591ce95c47003c298fdffdd20ac61f22f45ad01c8ac836271d6e.md -public/assets/ajax-box-php-master/search-73ba9240d55bd8e9698597585b3b35fe5b4be801957f68e515af564a6c2bd796.php -public/assets/application-866aa530f68d0962cfe59a4a1366de9cccdcd01db814034f3bbdddf77ed39c14.css -public/assets/application-866aa530f68d0962cfe59a4a1366de9cccdcd01db814034f3bbdddf77ed39c14.css.gz -public/assets/application-c3e5d03d028b2670b03ccd7fa0b8a6fb58bae5bd72c1c69656f48a3751e1454d.js -public/assets/application-c3e5d03d028b2670b03ccd7fa0b8a6fb58bae5bd72c1c69656f48a3751e1454d.js.gz -public/assets/application-d356158688b2899118d71f93ca8543309849bc36ced1842c38bfa91895aaa47d.js -public/assets/application-d356158688b2899118d71f93ca8543309849bc36ced1842c38bfa91895aaa47d.js.gz -public/assets/application-eb0274efcb4c4bfb9cf5f81f372958699a58250c298408839e5dbbe9db713f1e.css -public/assets/application-eb0274efcb4c4bfb9cf5f81f372958699a58250c298408839e5dbbe9db713f1e.css.gz -public/assets/bento_logo-57b0b30133a6a6687e527058e93213719e9f8359ebd5cfafe02f0f91ea60af80.jpg -public/assets/bootstrap/glyphicons-halflings-regular-13634da87d9e23f8c3ed9108ce1724d183a39ad072e73e1b3d8cbf646d2d0407.eot -public/assets/bootstrap/glyphicons-halflings-regular-13634da87d9e23f8c3ed9108ce1724d183a39ad072e73e1b3d8cbf646d2d0407.eot.gz -public/assets/bootstrap/glyphicons-halflings-regular-42f60659d265c1a3c30f9fa42abcbb56bd4a53af4d83d316d6dd7a36903c43e5.svg -public/assets/bootstrap/glyphicons-halflings-regular-42f60659d265c1a3c30f9fa42abcbb56bd4a53af4d83d316d6dd7a36903c43e5.svg.gz -public/assets/bootstrap/glyphicons-halflings-regular-a26394f7ede100ca118eff2eda08596275a9839b959c226e15439557a5a80742.woff -public/assets/bootstrap/glyphicons-halflings-regular-e395044093757d82afcb138957d06a1ea9361bdcf0b442d06a18a8051af57456.ttf -public/assets/bootstrap/glyphicons-halflings-regular-e395044093757d82afcb138957d06a1ea9361bdcf0b442d06a18a8051af57456.ttf.gz -public/assets/bootstrap/glyphicons-halflings-regular-fe185d11a49676890d47bb783312a0cda5a44c4039214094e7957b4c040ef11c.woff2 -public/assets/default/default_dish-60f51d38e66d7e2c77771afbf91ac4304d1c6e049cddf69147abda5c8a87e14e.jpg -public/assets/default/default_restaurant-e58dcf2b3e581b6a9c5c38e46afaba0091feed172ee5e4ca06762889ae80f396.jpg -public/assets/dishes/13_25_Screen Shot 2017-10-10 at 6.31.22 PM-38bacd97f34f1148521067cdea2b9dff4979db8202aa6339fc879da9f2991033.png -public/assets/dishes/13_26_Screen Shot 2017-10-10 at 6.31.32 PM-8d37eb68abb0ceee7eb15982d8d9dd73a10790cd4a20875499242995dcbb24cc.png -public/assets/dishes/13_27_Screen Shot 2017-10-10 at 6.31.22 PM-38bacd97f34f1148521067cdea2b9dff4979db8202aa6339fc879da9f2991033.png -public/assets/dishes/13_28_com bo banh xeo-c76311f2587ac7e1b6ca0e49439ac8788a27a8f5bf26e072387a79ade69e8e88.png -public/assets/dishes/13_38_Screen Shot 2017-10-17 at 1.54.54 PM-4c4e273d498dca175b6d2ed18b1d0f5298d04da51f5f170500b4885f1e4108e8.png -public/assets/dishes/13_40_Screen Shot 2017-10-10 at 6.31.32 PM-8d37eb68abb0ceee7eb15982d8d9dd73a10790cd4a20875499242995dcbb24cc.png -public/assets/dishes/14_29_Screen Shot 2017-10-17 at 1.53.39 PM-94d7ba7138d18ab0b19e1d2231fb28a64fb33e88d458e6a262c675a034ffe889.png -public/assets/dishes/14_30_Screen Shot 2017-10-17 at 1.54.23 PM-909dee1a18af462f57ec65d2f93612e25ae7a5ddb479dc004a9467197012a94b.png -public/assets/dishes/14_31_Screen Shot 2017-10-17 at 1.54.54 PM-4c4e273d498dca175b6d2ed18b1d0f5298d04da51f5f170500b4885f1e4108e8.png -public/assets/dishes/14_35_com bo banh xeo-c76311f2587ac7e1b6ca0e49439ac8788a27a8f5bf26e072387a79ade69e8e88.png -public/assets/dishes/_38_Screen Shot 2017-10-17 at 1.53.39 PM-94d7ba7138d18ab0b19e1d2231fb28a64fb33e88d458e6a262c675a034ffe889.png -public/assets/hung_map_logo-f9764d0b65b8875085c042563c3617ad07ac48eb4a11e12836a0be8c6575cd0e.jpg -public/assets/OpenSans-Regular-13c03e22a633919beb2847c58c8285fb8a735ee97097d7c48fd403f8294b05f8.ttf -public/assets/OpenSans-Regular-13c03e22a633919beb2847c58c8285fb8a735ee97097d7c48fd403f8294b05f8.ttf.gz -public/assets/pho_le_logo-c843564ffec558dc0a3993b14a52460698e9906a80d92a8073be8ad3b8236ce4.jpg -public/assets/restaurants/12_sukiya_logo-d15e3a713e09556d186258887e89f30c86202a60a0de635e49aea0b0dfb096fb.jpg -public/assets/restaurants/13_bento_taiwan-57b0b30133a6a6687e527058e93213719e9f8359ebd5cfafe02f0f91ea60af80.jpg -public/assets/restaurants/13_Screen Shot 2017-10-17 at 1.53.39 PM-94d7ba7138d18ab0b19e1d2231fb28a64fb33e88d458e6a262c675a034ffe889.png -public/assets/restaurants/13_Screen Shot 2017-10-17 at 1.54.23 PM-909dee1a18af462f57ec65d2f93612e25ae7a5ddb479dc004a9467197012a94b.png -public/assets/restaurants/13_Screen Shot 2017-10-17 at 1.54.54 PM-4c4e273d498dca175b6d2ed18b1d0f5298d04da51f5f170500b4885f1e4108e8.png -public/assets/restaurants/13_sukiya_logo-d15e3a713e09556d186258887e89f30c86202a60a0de635e49aea0b0dfb096fb.jpg -public/assets/restaurants/14_bento_taiwan-57b0b30133a6a6687e527058e93213719e9f8359ebd5cfafe02f0f91ea60af80.jpg -public/assets/restaurants/15_Screen Shot 2017-10-17 at 1.57.00 PM-d4be5bd4886e0933a10614e3612894c6619bcd8823cdb3d0b834018a0227c394.png -public/assets/restaurants/16_Screen Shot 2017-10-17 at 1.59.35 PM-cf46cddafc67235146f236d2b6fb4ba3ac03aae334b89c2bac9ebfa6052eb069.png -public/assets/restaurants/17_Screen Shot 2017-10-17 at 1.54.54 PM-4c4e273d498dca175b6d2ed18b1d0f5298d04da51f5f170500b4885f1e4108e8.png -public/assets/restaurants/18_com bo banh xeo-c76311f2587ac7e1b6ca0e49439ac8788a27a8f5bf26e072387a79ade69e8e88.png -public/assets/restaurants/18_Screen Shot 2017-10-17 at 1.53.39 PM-94d7ba7138d18ab0b19e1d2231fb28a64fb33e88d458e6a262c675a034ffe889.png -public/assets/restaurants/18_Screen Shot 2017-10-17 at 1.54.54 PM-4c4e273d498dca175b6d2ed18b1d0f5298d04da51f5f170500b4885f1e4108e8.png -public/assets/restaurants/19_Screen Shot 2017-10-17 at 1.54.23 PM-909dee1a18af462f57ec65d2f93612e25ae7a5ddb479dc004a9467197012a94b.png -public/assets/restaurants/22_Screen Shot 2017-10-17 at 1.54.23 PM-909dee1a18af462f57ec65d2f93612e25ae7a5ddb479dc004a9467197012a94b.png -public/assets/restaurants/23_Screen Shot 2017-10-17 at 1.57.00 PM-d4be5bd4886e0933a10614e3612894c6619bcd8823cdb3d0b834018a0227c394.png -public/assets/restaurants/24_Screen Shot 2017-10-17 at 1.53.39 PM-94d7ba7138d18ab0b19e1d2231fb28a64fb33e88d458e6a262c675a034ffe889.png -public/assets/Screen Shot 2017-10-10 at 6.31.22 PM-38bacd97f34f1148521067cdea2b9dff4979db8202aa6339fc879da9f2991033.png -public/assets/Screen Shot 2017-10-10 at 6.31.32 PM-8d37eb68abb0ceee7eb15982d8d9dd73a10790cd4a20875499242995dcbb24cc.png -public/assets/Screen Shot 2017-10-10 at 6.31.38 PM-7068844666e3b73b3faf56a5dda3330399b2df0140c9a2a5b2fe1385d6e3d332.png -public/assets/Screen Shot 2017-10-10 at 6.31.43 PM-e713c15e60b2e1ce48d79f17c9cec59cf3093f355b29a148ca91f97efdc37bd6.png -public/assets/Screen Shot 2017-10-10 at 6.47.29 PM-638e180fbae3a664185e63848b513867c03413cd4f05a27463ca65afdeafa3b6.png -public/assets/Screen Shot 2017-10-10 at 6.47.41 PM-41601f5d31d31efbc1b7aecbb11ef677e6eb1c9cbc035fddaf5382be53181925.png -public/assets/Screen Shot 2017-10-10 at 6.47.52 PM-702680c3171230d3d4a049367b762c1c1c14d0a49d33c4c2d6ab2c824c9bdbb4.png -public/assets/sukiya_1-38bacd97f34f1148521067cdea2b9dff4979db8202aa6339fc879da9f2991033.png -public/assets/sukiya_2-8d37eb68abb0ceee7eb15982d8d9dd73a10790cd4a20875499242995dcbb24cc.png -public/assets/sukiya_3-7068844666e3b73b3faf56a5dda3330399b2df0140c9a2a5b2fe1385d6e3d332.png -public/assets/sukiya_4-e713c15e60b2e1ce48d79f17c9cec59cf3093f355b29a148ca91f97efdc37bd6.png -public/assets/sukiya_logo-8497cbec57eb3b12792939a8f582e1946818c8131670575fffdfec7d335a161c.jpg -public/system/dishes/image_logos/000/000/396/medium/2017113163938-hmn.jpg -public/system/dishes/image_logos/000/000/396/original/2017113163938-hmn.jpg -public/system/dishes/image_logos/000/000/396/square/2017113163938-hmn.jpg -public/system/dishes/image_logos/000/000/396/thumb/2017113163938-hmn.jpg -public/system/dishes/image_logos/000/000/399/medium/201711316121-hmn.jpg -public/system/dishes/image_logos/000/000/399/original/201711316121-hmn.jpg -public/system/dishes/image_logos/000/000/399/square/201711316121-hmn.jpg -public/system/dishes/image_logos/000/000/399/thumb/201711316121-hmn.jpg -public/system/dishes/image_logos/000/000/408/medium/201711316229-hmn.jpg -public/system/dishes/image_logos/000/000/408/original/201711316229-hmn.jpg -public/system/dishes/image_logos/000/000/408/square/201711316229-hmn.jpg -public/system/dishes/image_logos/000/000/408/thumb/201711316229-hmn.jpg -public/system/dishes/image_logos/000/000/409/medium/201711317380-hmn.jpg -public/system/dishes/image_logos/000/000/409/original/201711317380-hmn.jpg -public/system/dishes/image_logos/000/000/409/square/201711317380-hmn.jpg -public/system/dishes/image_logos/000/000/409/thumb/201711317380-hmn.jpg -public/system/dishes/image_logos/000/000/416/medium/2017113165150-hmn.jpg -public/system/dishes/image_logos/000/000/416/original/2017113165150-hmn.jpg -public/system/dishes/image_logos/000/000/416/square/2017113165150-hmn.jpg -public/system/dishes/image_logos/000/000/416/thumb/2017113165150-hmn.jpg -public/system/dishes/image_logos/000/000/423/medium/201711317223-hmn.jpg -public/system/dishes/image_logos/000/000/423/original/201711317223-hmn.jpg -public/system/dishes/image_logos/000/000/423/square/201711317223-hmn.jpg -public/system/dishes/image_logos/000/000/423/thumb/201711317223-hmn.jpg -public/system/dishes/image_logos/000/000/425/medium/2017113171516-hmn.jpg -public/system/dishes/image_logos/000/000/425/original/2017113171516-hmn.jpg -public/system/dishes/image_logos/000/000/425/square/2017113171516-hmn.jpg -public/system/dishes/image_logos/000/000/425/thumb/2017113171516-hmn.jpg -public/system/dishes/image_logos/000/000/436/medium/2017113172638-hmn.jpg -public/system/dishes/image_logos/000/000/436/original/2017113172638-hmn.jpg -public/system/dishes/image_logos/000/000/436/square/2017113172638-hmn.jpg -public/system/dishes/image_logos/000/000/436/thumb/2017113172638-hmn.jpg -public/system/dishes/image_logos/000/000/437/medium/2017113164857-hmn.jpg -public/system/dishes/image_logos/000/000/437/original/2017113164857-hmn.jpg -public/system/dishes/image_logos/000/000/437/square/2017113164857-hmn.jpg -public/system/dishes/image_logos/000/000/437/thumb/2017113164857-hmn.jpg -public/system/dishes/image_logos/000/000/441/medium/2017113165028-hmn.jpg -public/system/dishes/image_logos/000/000/441/original/2017113165028-hmn.jpg -public/system/dishes/image_logos/000/000/441/square/2017113165028-hmn.jpg -public/system/dishes/image_logos/000/000/441/thumb/2017113165028-hmn.jpg -public/system/dishes/image_logos/000/000/448/medium/2017113164227-hmn.jpg -public/system/dishes/image_logos/000/000/448/original/2017113164227-hmn.jpg -public/system/dishes/image_logos/000/000/448/square/2017113164227-hmn.jpg -public/system/dishes/image_logos/000/000/448/thumb/2017113164227-hmn.jpg -public/system/dishes/image_logos/000/000/450/medium/20171118141118-27.jpg -public/system/dishes/image_logos/000/000/450/original/20171118141118-27.jpg -public/system/dishes/image_logos/000/000/450/square/20171118141118-27.jpg -public/system/dishes/image_logos/000/000/450/thumb/20171118141118-27.jpg -public/system/dishes/image_logos/000/000/451/medium/20171118142124-29.jpg -public/system/dishes/image_logos/000/000/451/original/20171118142124-29.jpg -public/system/dishes/image_logos/000/000/451/square/20171118142124-29.jpg -public/system/dishes/image_logos/000/000/451/thumb/20171118142124-29.jpg -public/system/dishes/image_logos/000/000/453/medium/2017113172452-hmn.jpg -public/system/dishes/image_logos/000/000/453/original/2017113172452-hmn.jpg -public/system/dishes/image_logos/000/000/453/square/2017113172452-hmn.jpg -public/system/dishes/image_logos/000/000/453/thumb/2017113172452-hmn.jpg -public/system/dishes/image_logos/000/000/454/medium/2017111814921-26.jpg -public/system/dishes/image_logos/000/000/454/original/2017111814921-26.jpg -public/system/dishes/image_logos/000/000/454/square/2017111814921-26.jpg -public/system/dishes/image_logos/000/000/454/thumb/2017111814921-26.jpg -public/system/dishes/image_logos/000/000/455/medium/2017111814727-25.jpg -public/system/dishes/image_logos/000/000/455/original/2017111814727-25.jpg -public/system/dishes/image_logos/000/000/455/square/2017111814727-25.jpg -public/system/dishes/image_logos/000/000/455/thumb/2017111814727-25.jpg -public/system/dishes/image_logos/000/000/458/medium/20171118113323-hmn.jpg -public/system/dishes/image_logos/000/000/458/original/20171118113323-hmn.jpg -public/system/dishes/image_logos/000/000/458/square/20171118113323-hmn.jpg -public/system/dishes/image_logos/000/000/458/thumb/20171118113323-hmn.jpg -public/system/dishes/image_logos/000/000/459/medium/20171118113017-hmn.jpg -public/system/dishes/image_logos/000/000/459/original/20171118113017-hmn.jpg -public/system/dishes/image_logos/000/000/459/square/20171118113017-hmn.jpg -public/system/dishes/image_logos/000/000/459/thumb/20171118113017-hmn.jpg -public/system/dishes/image_logos/000/000/460/medium/2017111811243-hmn.jpg -public/system/dishes/image_logos/000/000/460/original/2017111811243-hmn.jpg -public/system/dishes/image_logos/000/000/460/square/2017111811243-hmn.jpg -public/system/dishes/image_logos/000/000/460/thumb/2017111811243-hmn.jpg -public/system/dishes/image_logos/000/000/461/medium/foody-b_c3_ban_20nem_20ch_e1_ba_a3-635633083421057487.jpg -public/system/dishes/image_logos/000/000/461/original/foody-b_c3_ban_20nem_20ch_e1_ba_a3-635633083421057487.jpg -public/system/dishes/image_logos/000/000/461/square/foody-b_c3_ban_20nem_20ch_e1_ba_a3-635633083421057487.jpg -public/system/dishes/image_logos/000/000/461/thumb/foody-b_c3_ban_20nem_20ch_e1_ba_a3-635633083421057487.jpg -public/system/dishes/image_logos/000/000/462/medium/20171118113830-hmn.jpg -public/system/dishes/image_logos/000/000/462/original/20171118113830-hmn.jpg -public/system/dishes/image_logos/000/000/462/square/20171118113830-hmn.jpg -public/system/dishes/image_logos/000/000/462/thumb/20171118113830-hmn.jpg -public/system/dishes/image_logos/000/000/463/medium/2017111811275-hmn.jpg -public/system/dishes/image_logos/000/000/463/original/2017111811275-hmn.jpg -public/system/dishes/image_logos/000/000/463/square/2017111811275-hmn.jpg -public/system/dishes/image_logos/000/000/463/thumb/2017111811275-hmn.jpg -public/system/dishes/image_logos/000/000/464/medium/20171118115854-hmn.jpg -public/system/dishes/image_logos/000/000/464/original/20171118115854-hmn.jpg -public/system/dishes/image_logos/000/000/464/square/20171118115854-hmn.jpg -public/system/dishes/image_logos/000/000/464/thumb/20171118115854-hmn.jpg -public/system/dishes/image_logos/000/000/465/medium/foody-b_c3_ban_20th_e1_bb_8bt_20ch_e1_ba_a3-635633086499722895.jpg -public/system/dishes/image_logos/000/000/465/original/foody-b_c3_ban_20th_e1_bb_8bt_20ch_e1_ba_a3-635633086499722895.jpg -public/system/dishes/image_logos/000/000/465/square/foody-b_c3_ban_20th_e1_bb_8bt_20ch_e1_ba_a3-635633086499722895.jpg -public/system/dishes/image_logos/000/000/465/thumb/foody-b_c3_ban_20th_e1_bb_8bt_20ch_e1_ba_a3-635633086499722895.jpg -public/system/dishes/image_logos/000/000/466/medium/foody-b_c3_ban_20th_e1_bb_8bt_20x_c3_a0o-635633056954051001.jpg -public/system/dishes/image_logos/000/000/466/original/foody-b_c3_ban_20th_e1_bb_8bt_20x_c3_a0o-635633056954051001.jpg -public/system/dishes/image_logos/000/000/466/square/foody-b_c3_ban_20th_e1_bb_8bt_20x_c3_a0o-635633056954051001.jpg -public/system/dishes/image_logos/000/000/466/thumb/foody-b_c3_ban_20th_e1_bb_8bt_20x_c3_a0o-635633056954051001.jpg -public/system/dishes/image_logos/000/000/467/medium/foody-b_c3_ban_20t_c3_b4m_20x_c3_a0o-635633075461923508.jpg -public/system/dishes/image_logos/000/000/467/original/foody-b_c3_ban_20t_c3_b4m_20x_c3_a0o-635633075461923508.jpg -public/system/dishes/image_logos/000/000/467/square/foody-b_c3_ban_20t_c3_b4m_20x_c3_a0o-635633075461923508.jpg -public/system/dishes/image_logos/000/000/467/thumb/foody-b_c3_ban_20t_c3_b4m_20x_c3_a0o-635633075461923508.jpg -public/system/dishes/image_logos/000/000/468/medium/2017112211211-bun-tom-xao.jpg -public/system/dishes/image_logos/000/000/468/original/2017112211211-bun-tom-xao.jpg -public/system/dishes/image_logos/000/000/468/square/2017112211211-bun-tom-xao.jpg -public/system/dishes/image_logos/000/000/468/thumb/2017112211211-bun-tom-xao.jpg -public/system/dishes/image_logos/000/000/469/medium/2017112211225-bun-muc-ca-ri.jpg -public/system/dishes/image_logos/000/000/469/original/2017112211225-bun-muc-ca-ri.jpg -public/system/dishes/image_logos/000/000/469/square/2017112211225-bun-muc-ca-ri.jpg -public/system/dishes/image_logos/000/000/469/thumb/2017112211225-bun-muc-ca-ri.jpg -public/system/dishes/image_logos/000/000/470/medium/2017112211153-bun-bi-cha-gio.jpg -public/system/dishes/image_logos/000/000/470/original/2017112211153-bun-bi-cha-gio.jpg -public/system/dishes/image_logos/000/000/470/square/2017112211153-bun-bi-cha-gio.jpg -public/system/dishes/image_logos/000/000/470/thumb/2017112211153-bun-bi-cha-gio.jpg -public/system/dishes/image_logos/000/000/471/medium/2017111812019-hmn.jpg -public/system/dishes/image_logos/000/000/471/original/2017111812019-hmn.jpg -public/system/dishes/image_logos/000/000/471/square/2017111812019-hmn.jpg -public/system/dishes/image_logos/000/000/471/thumb/2017111812019-hmn.jpg -public/system/dishes/image_logos/000/000/472/medium/2017111811447-hmn.jpg -public/system/dishes/image_logos/000/000/472/original/2017111811447-hmn.jpg -public/system/dishes/image_logos/000/000/472/square/2017111811447-hmn.jpg -public/system/dishes/image_logos/000/000/472/thumb/2017111811447-hmn.jpg -public/system/dishes/image_logos/000/000/473/medium/foody-b_c3_b2_20l_c3_a1_20l_e1_bb_91t-635633069779301527.jpg -public/system/dishes/image_logos/000/000/473/original/foody-b_c3_b2_20l_c3_a1_20l_e1_bb_91t-635633069779301527.jpg -public/system/dishes/image_logos/000/000/473/square/foody-b_c3_b2_20l_c3_a1_20l_e1_bb_91t-635633069779301527.jpg -public/system/dishes/image_logos/000/000/473/thumb/foody-b_c3_b2_20l_c3_a1_20l_e1_bb_91t-635633069779301527.jpg -public/system/dishes/image_logos/000/000/474/medium/20171118114927-hmn.jpg -public/system/dishes/image_logos/000/000/474/original/20171118114927-hmn.jpg -public/system/dishes/image_logos/000/000/474/square/20171118114927-hmn.jpg -public/system/dishes/image_logos/000/000/474/thumb/20171118114927-hmn.jpg -public/system/dishes/image_logos/000/000/475/medium/2017111814640-hmn.jpg -public/system/dishes/image_logos/000/000/475/original/2017111814640-hmn.jpg -public/system/dishes/image_logos/000/000/475/square/2017111814640-hmn.jpg -public/system/dishes/image_logos/000/000/475/thumb/2017111814640-hmn.jpg -public/system/dishes/image_logos/000/000/476/medium/2017112211321-chao-oc.jpg -public/system/dishes/image_logos/000/000/476/original/2017112211321-chao-oc.jpg -public/system/dishes/image_logos/000/000/476/square/2017112211321-chao-oc.jpg -public/system/dishes/image_logos/000/000/476/thumb/2017112211321-chao-oc.jpg -public/system/dishes/image_logos/000/000/477/medium/2017111814251-hmn.jpg -public/system/dishes/image_logos/000/000/477/original/2017111814251-hmn.jpg -public/system/dishes/image_logos/000/000/477/square/2017111814251-hmn.jpg -public/system/dishes/image_logos/000/000/477/thumb/2017111814251-hmn.jpg -public/system/dishes/image_logos/000/000/478/medium/20171118115547-hmn.jpg -public/system/dishes/image_logos/000/000/478/original/20171118115547-hmn.jpg -public/system/dishes/image_logos/000/000/478/square/20171118115547-hmn.jpg -public/system/dishes/image_logos/000/000/478/thumb/20171118115547-hmn.jpg -public/system/dishes/image_logos/000/000/480/medium/20171118114733-hmn.jpg -public/system/dishes/image_logos/000/000/480/original/20171118114733-hmn.jpg -public/system/dishes/image_logos/000/000/480/square/20171118114733-hmn.jpg -public/system/dishes/image_logos/000/000/480/thumb/20171118114733-hmn.jpg -public/system/dishes/image_logos/000/000/481/medium/2017118152440-c2.jpg -public/system/dishes/image_logos/000/000/481/original/2017118152440-c2.jpg -public/system/dishes/image_logos/000/000/481/square/2017118152440-c2.jpg -public/system/dishes/image_logos/000/000/481/thumb/2017118152440-c2.jpg -public/system/dishes/image_logos/000/000/482/medium/2017112211257-goi-cuon-bo-xao.jpg -public/system/dishes/image_logos/000/000/482/original/2017112211257-goi-cuon-bo-xao.jpg -public/system/dishes/image_logos/000/000/482/square/2017112211257-goi-cuon-bo-xao.jpg -public/system/dishes/image_logos/000/000/482/thumb/2017112211257-goi-cuon-bo-xao.jpg -public/system/dishes/image_logos/000/000/483/medium/201711310725-foody-vi-sai-gon-bun-thit-nuong-810-636078464995013480.jpg -public/system/dishes/image_logos/000/000/483/original/201711310725-foody-vi-sai-gon-bun-thit-nuong-810-636078464995013480.jpg -public/system/dishes/image_logos/000/000/483/square/201711310725-foody-vi-sai-gon-bun-thit-nuong-810-636078464995013480.jpg -public/system/dishes/image_logos/000/000/483/thumb/201711310725-foody-vi-sai-gon-bun-thit-nuong-810-636078464995013480.jpg -public/system/dishes/image_logos/000/000/484/medium/201711310742-foody-checkin-vi-sai-gon-bun-thit-nuong-812-636069605242678558.jpg -public/system/dishes/image_logos/000/000/484/original/201711310742-foody-checkin-vi-sai-gon-bun-thit-nuong-812-636069605242678558.jpg -public/system/dishes/image_logos/000/000/484/square/201711310742-foody-checkin-vi-sai-gon-bun-thit-nuong-812-636069605242678558.jpg -public/system/dishes/image_logos/000/000/484/thumb/201711310742-foody-checkin-vi-sai-gon-bun-thit-nuong-812-636069605242678558.jpg -public/system/dishes/image_logos/000/000/485/medium/201711310734-foody-vi-sai-gon-bun-thit-nuong-841-636078464936727626.jpg -public/system/dishes/image_logos/000/000/485/original/201711310734-foody-vi-sai-gon-bun-thit-nuong-841-636078464936727626.jpg -public/system/dishes/image_logos/000/000/485/square/201711310734-foody-vi-sai-gon-bun-thit-nuong-841-636078464936727626.jpg -public/system/dishes/image_logos/000/000/485/thumb/201711310734-foody-vi-sai-gon-bun-thit-nuong-841-636078464936727626.jpg -public/system/dishes/image_logos/000/000/486/medium/foody-tr_c3_a0_20hoa_20c_c3_bac-635862939942796579.jpg -public/system/dishes/image_logos/000/000/486/original/foody-tr_c3_a0_20hoa_20c_c3_bac-635862939942796579.jpg -public/system/dishes/image_logos/000/000/486/square/foody-tr_c3_a0_20hoa_20c_c3_bac-635862939942796579.jpg -public/system/dishes/image_logos/000/000/486/thumb/foody-tr_c3_a0_20hoa_20c_c3_bac-635862939942796579.jpg -public/system/dishes/image_logos/000/000/488/medium/foody-s_c3_a2m_20d_e1_bb_a9a-635862940183661002.jpg -public/system/dishes/image_logos/000/000/488/original/foody-s_c3_a2m_20d_e1_bb_a9a-635862940183661002.jpg -public/system/dishes/image_logos/000/000/488/square/foody-s_c3_a2m_20d_e1_bb_a9a-635862940183661002.jpg -public/system/dishes/image_logos/000/000/488/thumb/foody-s_c3_a2m_20d_e1_bb_a9a-635862940183661002.jpg -public/system/dishes/image_logos/000/000/489/medium/foody-nha_20_c4_91am-635862942563070059.jpg -public/system/dishes/image_logos/000/000/489/original/foody-nha_20_c4_91am-635862942563070059.jpg -public/system/dishes/image_logos/000/000/489/square/foody-nha_20_c4_91am-635862942563070059.jpg -public/system/dishes/image_logos/000/000/489/thumb/foody-nha_20_c4_91am-635862942563070059.jpg -public/system/dishes/image_logos/000/000/521/medium/201736162922-cesar-salad.jpg -public/system/dishes/image_logos/000/000/521/original/201736162922-cesar-salad.jpg -public/system/dishes/image_logos/000/000/521/square/201736162922-cesar-salad.jpg -public/system/dishes/image_logos/000/000/521/thumb/201736162922-cesar-salad.jpg -public/system/dishes/image_logos/000/000/522/medium/201736163010-beef-salad-1-.jpg -public/system/dishes/image_logos/000/000/522/original/201736163010-beef-salad-1-.jpg -public/system/dishes/image_logos/000/000/522/square/201736163010-beef-salad-1-.jpg -public/system/dishes/image_logos/000/000/522/thumb/201736163010-beef-salad-1-.jpg -public/system/dishes/image_logos/000/000/523/medium/201736163254-festive-salad-1.jpg -public/system/dishes/image_logos/000/000/523/original/201736163254-festive-salad-1.jpg -public/system/dishes/image_logos/000/000/523/square/201736163254-festive-salad-1.jpg -public/system/dishes/image_logos/000/000/523/thumb/201736163254-festive-salad-1.jpg -public/system/dishes/image_logos/000/000/524/medium/201736162855-nicoise-salad-.jpg -public/system/dishes/image_logos/000/000/524/original/201736162855-nicoise-salad-.jpg -public/system/dishes/image_logos/000/000/524/square/201736162855-nicoise-salad-.jpg -public/system/dishes/image_logos/000/000/524/thumb/201736162855-nicoise-salad-.jpg -public/system/dishes/image_logos/000/000/525/medium/20173616336-japanese-salad-.jpg -public/system/dishes/image_logos/000/000/525/original/20173616336-japanese-salad-.jpg -public/system/dishes/image_logos/000/000/525/square/20173616336-japanese-salad-.jpg -public/system/dishes/image_logos/000/000/525/thumb/20173616336-japanese-salad-.jpg -public/system/dishes/image_logos/000/000/526/medium/20173616299-guacamole.jpg -public/system/dishes/image_logos/000/000/526/original/20173616299-guacamole.jpg -public/system/dishes/image_logos/000/000/526/square/20173616299-guacamole.jpg -public/system/dishes/image_logos/000/000/526/thumb/20173616299-guacamole.jpg -public/system/dishes/image_logos/000/000/527/medium/201736163114-salad-station.jpg -public/system/dishes/image_logos/000/000/527/original/201736163114-salad-station.jpg -public/system/dishes/image_logos/000/000/527/square/201736163114-salad-station.jpg -public/system/dishes/image_logos/000/000/527/thumb/201736163114-salad-station.jpg -public/system/dishes/image_logos/000/000/528/medium/201736162936-greek-salad.jpg -public/system/dishes/image_logos/000/000/528/original/201736162936-greek-salad.jpg -public/system/dishes/image_logos/000/000/528/square/201736162936-greek-salad.jpg -public/system/dishes/image_logos/000/000/528/thumb/201736162936-greek-salad.jpg -public/system/dishes/image_logos/000/000/590/medium/img_1027_jpg.jpg -public/system/dishes/image_logos/000/000/590/original/img_1027_jpg.jpg -public/system/dishes/image_logos/000/000/590/square/img_1027_jpg.jpg -public/system/dishes/image_logos/000/000/590/thumb/img_1027_jpg.jpg -public/system/dishes/image_logos/000/000/591/medium/img_1023_jpg.jpg -public/system/dishes/image_logos/000/000/591/original/img_1023_jpg.jpg -public/system/dishes/image_logos/000/000/591/square/img_1023_jpg.jpg -public/system/dishes/image_logos/000/000/591/thumb/img_1023_jpg.jpg -public/system/dishes/image_logos/000/000/592/medium/img_0260.jpg -public/system/dishes/image_logos/000/000/592/original/img_0260.jpg -public/system/dishes/image_logos/000/000/592/square/img_0260.jpg -public/system/dishes/image_logos/000/000/592/thumb/img_0260.jpg -public/system/dishes/image_logos/000/000/593/medium/6881366198363.png -public/system/dishes/image_logos/000/000/593/original/6881366198363.png -public/system/dishes/image_logos/000/000/593/square/6881366198363.png -public/system/dishes/image_logos/000/000/593/thumb/6881366198363.png -public/system/dishes/image_logos/000/000/594/medium/com_tam_bi_cha.png -public/system/dishes/image_logos/000/000/594/original/com_tam_bi_cha.png -public/system/dishes/image_logos/000/000/594/square/com_tam_bi_cha.png -public/system/dishes/image_logos/000/000/594/thumb/com_tam_bi_cha.png -public/system/dishes/image_logos/000/000/595/medium/com_tam_cua_faci.png -public/system/dishes/image_logos/000/000/595/original/com_tam_cua_faci.png -public/system/dishes/image_logos/000/000/595/square/com_tam_cua_faci.png -public/system/dishes/image_logos/000/000/595/thumb/com_tam_cua_faci.png -public/system/dishes/image_logos/000/000/596/medium/com_tam_ga_nuong.png -public/system/dishes/image_logos/000/000/596/original/com_tam_ga_nuong.png -public/system/dishes/image_logos/000/000/596/square/com_tam_ga_nuong.png -public/system/dishes/image_logos/000/000/596/thumb/com_tam_ga_nuong.png -public/system/dishes/image_logos/000/000/597/medium/com_tam_lap_xuong.png -public/system/dishes/image_logos/000/000/597/original/com_tam_lap_xuong.png -public/system/dishes/image_logos/000/000/597/square/com_tam_lap_xuong.png -public/system/dishes/image_logos/000/000/597/thumb/com_tam_lap_xuong.png -public/system/dishes/image_logos/000/000/598/medium/com_tam_nem_nuong.png -public/system/dishes/image_logos/000/000/598/original/com_tam_nem_nuong.png -public/system/dishes/image_logos/000/000/598/square/com_tam_nem_nuong.png -public/system/dishes/image_logos/000/000/598/thumb/com_tam_nem_nuong.png -public/system/dishes/image_logos/000/000/599/medium/com_tam_suon_bi_cha.png -public/system/dishes/image_logos/000/000/599/original/com_tam_suon_bi_cha.png -public/system/dishes/image_logos/000/000/599/square/com_tam_suon_bi_cha.png -public/system/dishes/image_logos/000/000/599/thumb/com_tam_suon_bi_cha.png -public/system/dishes/image_logos/000/000/600/medium/com_tam_suon_cha_hoac_suon_bi.jpg -public/system/dishes/image_logos/000/000/600/original/com_tam_suon_cha_hoac_suon_bi.jpg -public/system/dishes/image_logos/000/000/600/square/com_tam_suon_cha_hoac_suon_bi.jpg -public/system/dishes/image_logos/000/000/600/thumb/com_tam_suon_cha_hoac_suon_bi.jpg -public/system/dishes/image_logos/000/000/601/medium/com_tam_suon_nuong.png -public/system/dishes/image_logos/000/000/601/original/com_tam_suon_nuong.png -public/system/dishes/image_logos/000/000/601/square/com_tam_suon_nuong.png -public/system/dishes/image_logos/000/000/601/thumb/com_tam_suon_nuong.png -public/system/dishes/image_logos/000/000/602/medium/com_tam_tom_cang_rim.jpg -public/system/dishes/image_logos/000/000/602/original/com_tam_tom_cang_rim.jpg -public/system/dishes/image_logos/000/000/602/square/com_tam_tom_cang_rim.jpg -public/system/dishes/image_logos/000/000/602/thumb/com_tam_tom_cang_rim.jpg -public/system/dishes/image_logos/000/000/603/medium/9321366197589.png -public/system/dishes/image_logos/000/000/603/original/9321366197589.png -public/system/dishes/image_logos/000/000/603/square/9321366197589.png -public/system/dishes/image_logos/000/000/603/thumb/9321366197589.png -public/system/dishes/image_logos/000/000/604/medium/3421366197443.jpg -public/system/dishes/image_logos/000/000/604/original/3421366197443.jpg -public/system/dishes/image_logos/000/000/604/square/3421366197443.jpg -public/system/dishes/image_logos/000/000/604/thumb/3421366197443.jpg -public/system/dishes/image_logos/000/000/605/medium/ga_roty.png -public/system/dishes/image_logos/000/000/605/original/ga_roty.png -public/system/dishes/image_logos/000/000/605/square/ga_roty.png -public/system/dishes/image_logos/000/000/605/thumb/ga_roty.png -public/system/dishes/image_logos/000/000/606/medium/heo_quay.png -public/system/dishes/image_logos/000/000/606/original/heo_quay.png -public/system/dishes/image_logos/000/000/606/square/heo_quay.png -public/system/dishes/image_logos/000/000/606/thumb/heo_quay.png -public/system/dishes/image_logos/000/000/607/medium/hot_vit_muoi_chung_thit.png -public/system/dishes/image_logos/000/000/607/original/hot_vit_muoi_chung_thit.png -public/system/dishes/image_logos/000/000/607/square/hot_vit_muoi_chung_thit.png -public/system/dishes/image_logos/000/000/607/thumb/hot_vit_muoi_chung_thit.png -public/system/dishes/image_logos/000/000/608/medium/kho_qua_ca_ot_don_cha_ca.png -public/system/dishes/image_logos/000/000/608/original/kho_qua_ca_ot_don_cha_ca.png -public/system/dishes/image_logos/000/000/608/square/kho_qua_ca_ot_don_cha_ca.png -public/system/dishes/image_logos/000/000/608/thumb/kho_qua_ca_ot_don_cha_ca.png -public/system/dishes/image_logos/000/000/609/medium/muc_don_thit.png -public/system/dishes/image_logos/000/000/609/original/muc_don_thit.png -public/system/dishes/image_logos/000/000/609/square/muc_don_thit.png -public/system/dishes/image_logos/000/000/609/thumb/muc_don_thit.png -public/system/dishes/image_logos/000/000/610/medium/pha_lau.png -public/system/dishes/image_logos/000/000/610/original/pha_lau.png -public/system/dishes/image_logos/000/000/610/square/pha_lau.png -public/system/dishes/image_logos/000/000/610/thumb/pha_lau.png -public/system/dishes/image_logos/000/000/611/medium/suon_non_ram_man.png -public/system/dishes/image_logos/000/000/611/original/suon_non_ram_man.png -public/system/dishes/image_logos/000/000/611/square/suon_non_ram_man.png -public/system/dishes/image_logos/000/000/611/thumb/suon_non_ram_man.png -public/system/dishes/image_logos/000/000/612/medium/tau_hu_ky_cha_tom.jpg -public/system/dishes/image_logos/000/000/612/original/tau_hu_ky_cha_tom.jpg -public/system/dishes/image_logos/000/000/612/square/tau_hu_ky_cha_tom.jpg -public/system/dishes/image_logos/000/000/612/thumb/tau_hu_ky_cha_tom.jpg -public/system/dishes/image_logos/000/000/613/medium/tep_rang.png -public/system/dishes/image_logos/000/000/613/original/tep_rang.png -public/system/dishes/image_logos/000/000/613/square/tep_rang.png -public/system/dishes/image_logos/000/000/613/thumb/tep_rang.png -public/system/dishes/image_logos/000/000/614/medium/xa_xiu.png -public/system/dishes/image_logos/000/000/614/original/xa_xiu.png -public/system/dishes/image_logos/000/000/614/square/xa_xiu.png -public/system/dishes/image_logos/000/000/614/thumb/xa_xiu.png -public/system/dishes/image_logos/000/000/615/medium/xiu_mai.png -public/system/dishes/image_logos/000/000/615/original/xiu_mai.png -public/system/dishes/image_logos/000/000/615/square/xiu_mai.png -public/system/dishes/image_logos/000/000/615/thumb/xiu_mai.png -public/system/dishes/image_logos/000/000/616/medium/dau_hu_don_thit.png -public/system/dishes/image_logos/000/000/616/original/dau_hu_don_thit.png -public/system/dishes/image_logos/000/000/616/square/dau_hu_don_thit.png -public/system/dishes/image_logos/000/000/616/thumb/dau_hu_don_thit.png -public/system/dishes/image_logos/000/000/617/medium/bo_xoi_xao_bo.jpg -public/system/dishes/image_logos/000/000/617/original/bo_xoi_xao_bo.jpg -public/system/dishes/image_logos/000/000/617/square/bo_xoi_xao_bo.jpg -public/system/dishes/image_logos/000/000/617/thumb/bo_xoi_xao_bo.jpg -public/system/dishes/image_logos/000/000/618/medium/bong_cai_xao.png -public/system/dishes/image_logos/000/000/618/original/bong_cai_xao.png -public/system/dishes/image_logos/000/000/618/square/bong_cai_xao.png -public/system/dishes/image_logos/000/000/618/thumb/bong_cai_xao.png -public/system/dishes/image_logos/000/000/619/medium/ca_com_kho.png -public/system/dishes/image_logos/000/000/619/original/ca_com_kho.png -public/system/dishes/image_logos/000/000/619/square/ca_com_kho.png -public/system/dishes/image_logos/000/000/619/thumb/ca_com_kho.png -public/system/dishes/image_logos/000/000/620/medium/ca_keo_kho_to.png -public/system/dishes/image_logos/000/000/620/original/ca_keo_kho_to.png -public/system/dishes/image_logos/000/000/620/square/ca_keo_kho_to.png -public/system/dishes/image_logos/000/000/620/thumb/ca_keo_kho_to.png -public/system/dishes/image_logos/000/000/621/medium/ca_loc_kho_to.png -public/system/dishes/image_logos/000/000/621/original/ca_loc_kho_to.png -public/system/dishes/image_logos/000/000/621/square/ca_loc_kho_to.png -public/system/dishes/image_logos/000/000/621/thumb/ca_loc_kho_to.png -public/system/dishes/image_logos/000/000/622/medium/ca_ro_kho_to.png -public/system/dishes/image_logos/000/000/622/original/ca_ro_kho_to.png -public/system/dishes/image_logos/000/000/622/square/ca_ro_kho_to.png -public/system/dishes/image_logos/000/000/622/thumb/ca_ro_kho_to.png -public/system/dishes/image_logos/000/000/623/medium/ca_thu.jpg -public/system/dishes/image_logos/000/000/623/original/ca_thu.jpg -public/system/dishes/image_logos/000/000/623/square/ca_thu.jpg -public/system/dishes/image_logos/000/000/623/thumb/ca_thu.jpg -public/system/dishes/image_logos/000/000/624/medium/muc_xao_chua_ngot.png -public/system/dishes/image_logos/000/000/624/original/muc_xao_chua_ngot.png -public/system/dishes/image_logos/000/000/624/square/muc_xao_chua_ngot.png -public/system/dishes/image_logos/000/000/624/thumb/muc_xao_chua_ngot.png -public/system/dishes/image_logos/000/000/625/medium/thit_kho_hot_vit.png -public/system/dishes/image_logos/000/000/625/original/thit_kho_hot_vit.png -public/system/dishes/image_logos/000/000/625/square/thit_kho_hot_vit.png -public/system/dishes/image_logos/000/000/625/thumb/thit_kho_hot_vit.png -public/system/dishes/image_logos/000/000/626/medium/thit_kho_tieu.jpg -public/system/dishes/image_logos/000/000/626/original/thit_kho_tieu.jpg -public/system/dishes/image_logos/000/000/626/square/thit_kho_tieu.jpg -public/system/dishes/image_logos/000/000/626/thumb/thit_kho_tieu.jpg -public/system/dishes/image_logos/000/000/627/medium/thu_linh_kho.png -public/system/dishes/image_logos/000/000/627/original/thu_linh_kho.png -public/system/dishes/image_logos/000/000/627/square/thu_linh_kho.png -public/system/dishes/image_logos/000/000/627/thumb/thu_linh_kho.png -public/system/dishes/image_logos/000/000/628/medium/dau_que_xao_bo.jpg -public/system/dishes/image_logos/000/000/628/original/dau_que_xao_bo.jpg -public/system/dishes/image_logos/000/000/628/square/dau_que_xao_bo.jpg -public/system/dishes/image_logos/000/000/628/thumb/dau_que_xao_bo.jpg -public/system/dishes/image_logos/000/000/629/medium/ca_com_chien.png -public/system/dishes/image_logos/000/000/629/original/ca_com_chien.png -public/system/dishes/image_logos/000/000/629/square/ca_com_chien.png -public/system/dishes/image_logos/000/000/629/thumb/ca_com_chien.png -public/system/dishes/image_logos/000/000/630/medium/ca_thu.png -public/system/dishes/image_logos/000/000/630/original/ca_thu.png -public/system/dishes/image_logos/000/000/630/square/ca_thu.png -public/system/dishes/image_logos/000/000/630/thumb/ca_thu.png -public/system/dishes/image_logos/000/000/631/medium/ca_tre_chien.jpg -public/system/dishes/image_logos/000/000/631/original/ca_tre_chien.jpg -public/system/dishes/image_logos/000/000/631/square/ca_tre_chien.jpg -public/system/dishes/image_logos/000/000/631/thumb/ca_tre_chien.jpg -public/system/dishes/image_logos/000/000/632/medium/ca_dieu_hong.png -public/system/dishes/image_logos/000/000/632/original/ca_dieu_hong.png -public/system/dishes/image_logos/000/000/632/square/ca_dieu_hong.png -public/system/dishes/image_logos/000/000/632/thumb/ca_dieu_hong.png -public/system/dishes/image_logos/000/000/633/medium/canh_cai_chua.png -public/system/dishes/image_logos/000/000/633/original/canh_cai_chua.png -public/system/dishes/image_logos/000/000/633/square/canh_cai_chua.png -public/system/dishes/image_logos/000/000/633/thumb/canh_cai_chua.png -public/system/dishes/image_logos/000/000/634/medium/canh_cai_thao.png -public/system/dishes/image_logos/000/000/634/original/canh_cai_thao.png -public/system/dishes/image_logos/000/000/634/square/canh_cai_thao.png -public/system/dishes/image_logos/000/000/634/thumb/canh_cai_thao.png -public/system/dishes/image_logos/000/000/635/medium/canh_chua_ca.png -public/system/dishes/image_logos/000/000/635/original/canh_chua_ca.png -public/system/dishes/image_logos/000/000/635/square/canh_chua_ca.png -public/system/dishes/image_logos/000/000/635/thumb/canh_chua_ca.png -public/system/dishes/image_logos/000/000/636/medium/canh_chua_tep.png -public/system/dishes/image_logos/000/000/636/original/canh_chua_tep.png -public/system/dishes/image_logos/000/000/636/square/canh_chua_tep.png -public/system/dishes/image_logos/000/000/636/thumb/canh_chua_tep.png -public/system/dishes/image_logos/000/000/637/medium/canh_rau_day.png -public/system/dishes/image_logos/000/000/637/original/canh_rau_day.png -public/system/dishes/image_logos/000/000/637/square/canh_rau_day.png -public/system/dishes/image_logos/000/000/637/thumb/canh_rau_day.png -public/system/dishes/image_logos/000/000/638/medium/canh_kho_qua.png -public/system/dishes/image_logos/000/000/638/original/canh_kho_qua.png -public/system/dishes/image_logos/000/000/638/square/canh_kho_qua.png -public/system/dishes/image_logos/000/000/638/thumb/canh_kho_qua.png -public/system/dishes/image_logos/000/000/639/medium/canh_cu_xuong.png -public/system/dishes/image_logos/000/000/639/original/canh_cu_xuong.png -public/system/dishes/image_logos/000/000/639/square/canh_cu_xuong.png -public/system/dishes/image_logos/000/000/639/thumb/canh_cu_xuong.png -public/system/dishes/image_logos/000/000/640/medium/canh_cai_xoong.png -public/system/dishes/image_logos/000/000/640/original/canh_cai_xoong.png -public/system/dishes/image_logos/000/000/640/square/canh_cai_xoong.png -public/system/dishes/image_logos/000/000/640/thumb/canh_cai_xoong.png -public/system/dishes/image_logos/000/000/641/medium/ca_bong_dua.jpg -public/system/dishes/image_logos/000/000/641/original/ca_bong_dua.jpg -public/system/dishes/image_logos/000/000/641/square/ca_bong_dua.jpg -public/system/dishes/image_logos/000/000/641/thumb/ca_bong_dua.jpg -public/system/dishes/image_logos/000/000/642/medium/ca_bong_trung.jpg -public/system/dishes/image_logos/000/000/642/original/ca_bong_trung.jpg -public/system/dishes/image_logos/000/000/642/square/ca_bong_trung.jpg -public/system/dishes/image_logos/000/000/642/thumb/ca_bong_trung.jpg -public/system/dishes/image_logos/000/000/643/medium/ca_com_chien.jpg -public/system/dishes/image_logos/000/000/643/original/ca_com_chien.jpg -public/system/dishes/image_logos/000/000/643/square/ca_com_chien.jpg -public/system/dishes/image_logos/000/000/643/thumb/ca_com_chien.jpg -public/system/dishes/image_logos/000/000/644/medium/ca_com_kho.jpg -public/system/dishes/image_logos/000/000/644/original/ca_com_kho.jpg -public/system/dishes/image_logos/000/000/644/square/ca_com_kho.jpg -public/system/dishes/image_logos/000/000/644/thumb/ca_com_kho.jpg -public/system/dishes/image_logos/000/000/645/medium/cha_bong_ca.jpg -public/system/dishes/image_logos/000/000/645/original/cha_bong_ca.jpg -public/system/dishes/image_logos/000/000/645/square/cha_bong_ca.jpg -public/system/dishes/image_logos/000/000/645/thumb/cha_bong_ca.jpg -public/system/dishes/image_logos/000/000/646/medium/cu_kieu_muoi.jpg -public/system/dishes/image_logos/000/000/646/original/cu_kieu_muoi.jpg -public/system/dishes/image_logos/000/000/646/square/cu_kieu_muoi.jpg -public/system/dishes/image_logos/000/000/646/thumb/cu_kieu_muoi.jpg -public/system/dishes/image_logos/000/000/657/medium/2017103117414-img-8232.jpg -public/system/dishes/image_logos/000/000/657/original/2017103117414-img-8232.jpg -public/system/dishes/image_logos/000/000/657/square/2017103117414-img-8232.jpg -public/system/dishes/image_logos/000/000/657/thumb/2017103117414-img-8232.jpg -public/system/dishes/image_logos/000/000/658/medium/20171031163647-img-8229.jpg -public/system/dishes/image_logos/000/000/658/original/20171031163647-img-8229.jpg -public/system/dishes/image_logos/000/000/658/square/20171031163647-img-8229.jpg -public/system/dishes/image_logos/000/000/658/thumb/20171031163647-img-8229.jpg -public/system/dishes/image_logos/000/000/659/medium/20171031163629-img-8228.jpg -public/system/dishes/image_logos/000/000/659/original/20171031163629-img-8228.jpg -public/system/dishes/image_logos/000/000/659/square/20171031163629-img-8228.jpg -public/system/dishes/image_logos/000/000/659/thumb/20171031163629-img-8228.jpg -public/system/dishes/image_logos/000/000/660/medium/foody-cua_20t_c3_b4m_20th_e1_bb_8bt-635869168217901806.jpg -public/system/dishes/image_logos/000/000/660/original/foody-cua_20t_c3_b4m_20th_e1_bb_8bt-635869168217901806.jpg -public/system/dishes/image_logos/000/000/660/square/foody-cua_20t_c3_b4m_20th_e1_bb_8bt-635869168217901806.jpg -public/system/dishes/image_logos/000/000/660/thumb/foody-cua_20t_c3_b4m_20th_e1_bb_8bt-635869168217901806.jpg -public/system/dishes/image_logos/000/000/661/medium/foody-t_c3_b4m_20ch_e1_ba_a3-635869171136198931.jpg -public/system/dishes/image_logos/000/000/661/original/foody-t_c3_b4m_20ch_e1_ba_a3-635869171136198931.jpg -public/system/dishes/image_logos/000/000/661/square/foody-t_c3_b4m_20ch_e1_ba_a3-635869171136198931.jpg -public/system/dishes/image_logos/000/000/661/thumb/foody-t_c3_b4m_20ch_e1_ba_a3-635869171136198931.jpg -public/system/dishes/image_logos/000/000/662/medium/foody-b_c3_a1nh_20canh_20cua-635869172808209868.jpg -public/system/dishes/image_logos/000/000/662/original/foody-b_c3_a1nh_20canh_20cua-635869172808209868.jpg -public/system/dishes/image_logos/000/000/662/square/foody-b_c3_a1nh_20canh_20cua-635869172808209868.jpg -public/system/dishes/image_logos/000/000/662/thumb/foody-b_c3_a1nh_20canh_20cua-635869172808209868.jpg -public/system/dishes/image_logos/000/000/663/medium/20171031163734-img-8230.jpg -public/system/dishes/image_logos/000/000/663/original/20171031163734-img-8230.jpg -public/system/dishes/image_logos/000/000/663/square/20171031163734-img-8230.jpg -public/system/dishes/image_logos/000/000/663/thumb/20171031163734-img-8230.jpg -public/system/dishes/image_logos/000/000/664/medium/foody-banh-canh-cua-14-tran-binh-trong-138-635551943536586002.jpg -public/system/dishes/image_logos/000/000/664/original/foody-banh-canh-cua-14-tran-binh-trong-138-635551943536586002.jpg -public/system/dishes/image_logos/000/000/664/square/foody-banh-canh-cua-14-tran-binh-trong-138-635551943536586002.jpg -public/system/dishes/image_logos/000/000/664/thumb/foody-banh-canh-cua-14-tran-binh-trong-138-635551943536586002.jpg -public/system/dishes/image_logos/000/000/665/medium/foody-banh-canh-cua-14-tran-binh-trong-372-635587508919031703.jpg -public/system/dishes/image_logos/000/000/665/original/foody-banh-canh-cua-14-tran-binh-trong-372-635587508919031703.jpg -public/system/dishes/image_logos/000/000/665/square/foody-banh-canh-cua-14-tran-binh-trong-372-635587508919031703.jpg -public/system/dishes/image_logos/000/000/665/thumb/foody-banh-canh-cua-14-tran-binh-trong-372-635587508919031703.jpg -public/system/dishes/image_logos/000/000/666/medium/20171031165710-img-8231.jpg -public/system/dishes/image_logos/000/000/666/original/20171031165710-img-8231.jpg -public/system/dishes/image_logos/000/000/666/square/20171031165710-img-8231.jpg -public/system/dishes/image_logos/000/000/666/thumb/20171031165710-img-8231.jpg -public/system/dishes/image_logos/000/000/667/medium/20171031165347-banh-canh-cua-thit-nac.jpg -public/system/dishes/image_logos/000/000/667/original/20171031165347-banh-canh-cua-thit-nac.jpg -public/system/dishes/image_logos/000/000/667/square/20171031165347-banh-canh-cua-thit-nac.jpg -public/system/dishes/image_logos/000/000/667/thumb/20171031165347-banh-canh-cua-thit-nac.jpg -public/system/dishes/image_logos/000/000/668/medium/20171031165558-foody-banh-canh-cua-14-tran-binh-trong-408-635493223981643436.jpg -public/system/dishes/image_logos/000/000/668/original/20171031165558-foody-banh-canh-cua-14-tran-binh-trong-408-635493223981643436.jpg -public/system/dishes/image_logos/000/000/668/square/20171031165558-foody-banh-canh-cua-14-tran-binh-trong-408-635493223981643436.jpg -public/system/dishes/image_logos/000/000/668/thumb/20171031165558-foody-banh-canh-cua-14-tran-binh-trong-408-635493223981643436.jpg -public/system/dishes/image_logos/000/000/669/medium/foody-b_c3_a1nh_20canh_20t_c3_b4m-635869169144231433.jpg -public/system/dishes/image_logos/000/000/669/original/foody-b_c3_a1nh_20canh_20t_c3_b4m-635869169144231433.jpg -public/system/dishes/image_logos/000/000/669/square/foody-b_c3_a1nh_20canh_20t_c3_b4m-635869169144231433.jpg -public/system/dishes/image_logos/000/000/669/thumb/foody-b_c3_a1nh_20canh_20t_c3_b4m-635869169144231433.jpg -public/system/dishes/image_logos/000/000/670/medium/foody-banh-canh-cua-14-tran-binh-trong-202-635585120978845508.jpg -public/system/dishes/image_logos/000/000/670/original/foody-banh-canh-cua-14-tran-binh-trong-202-635585120978845508.jpg -public/system/dishes/image_logos/000/000/670/square/foody-banh-canh-cua-14-tran-binh-trong-202-635585120978845508.jpg -public/system/dishes/image_logos/000/000/670/thumb/foody-banh-canh-cua-14-tran-binh-trong-202-635585120978845508.jpg -public/system/dishes/image_logos/000/000/671/medium/foody-b_c3_a1nh_20canh_20t_c3_b4m_20gi_c3_b2-635869169833596643.jpg -public/system/dishes/image_logos/000/000/671/original/foody-b_c3_a1nh_20canh_20t_c3_b4m_20gi_c3_b2-635869169833596643.jpg -public/system/dishes/image_logos/000/000/671/square/foody-b_c3_a1nh_20canh_20t_c3_b4m_20gi_c3_b2-635869169833596643.jpg -public/system/dishes/image_logos/000/000/671/thumb/foody-b_c3_a1nh_20canh_20t_c3_b4m_20gi_c3_b2-635869169833596643.jpg -public/system/dishes/image_logos/000/000/672/medium/20171031165310-tom-cha-cua-cha-ca.jpg -public/system/dishes/image_logos/000/000/672/original/20171031165310-tom-cha-cua-cha-ca.jpg -public/system/dishes/image_logos/000/000/672/square/20171031165310-tom-cha-cua-cha-ca.jpg -public/system/dishes/image_logos/000/000/672/thumb/20171031165310-tom-cha-cua-cha-ca.jpg -public/system/dishes/image_logos/000/000/673/medium/foody-banh-canh-cua-14-tran-binh-trong-117758-635419726649253733.jpg -public/system/dishes/image_logos/000/000/673/original/foody-banh-canh-cua-14-tran-binh-trong-117758-635419726649253733.jpg -public/system/dishes/image_logos/000/000/673/square/foody-banh-canh-cua-14-tran-binh-trong-117758-635419726649253733.jpg -public/system/dishes/image_logos/000/000/673/thumb/foody-banh-canh-cua-14-tran-binh-trong-117758-635419726649253733.jpg -public/system/dishes/image_logos/000/000/674/medium/20171031165812-cua-cha-ca.jpg -public/system/dishes/image_logos/000/000/674/original/20171031165812-cua-cha-ca.jpg -public/system/dishes/image_logos/000/000/674/square/20171031165812-cua-cha-ca.jpg -public/system/dishes/image_logos/000/000/674/thumb/20171031165812-cua-cha-ca.jpg -public/system/dishes/image_logos/000/000/675/medium/2017103117045-img-8231.jpg -public/system/dishes/image_logos/000/000/675/original/2017103117045-img-8231.jpg -public/system/dishes/image_logos/000/000/675/square/2017103117045-img-8231.jpg -public/system/dishes/image_logos/000/000/675/thumb/2017103117045-img-8231.jpg -public/system/dishes/image_logos/000/000/676/medium/20171031165327-tom-cha-ca.jpg -public/system/dishes/image_logos/000/000/676/original/20171031165327-tom-cha-ca.jpg -public/system/dishes/image_logos/000/000/676/square/20171031165327-tom-cha-ca.jpg -public/system/dishes/image_logos/000/000/676/thumb/20171031165327-tom-cha-ca.jpg -public/system/dishes/image_logos/000/000/677/medium/20171031165337-banh-canh-tom-cha-cua.jpg -public/system/dishes/image_logos/000/000/677/original/20171031165337-banh-canh-tom-cha-cua.jpg -public/system/dishes/image_logos/000/000/677/square/20171031165337-banh-canh-tom-cha-cua.jpg -public/system/dishes/image_logos/000/000/677/thumb/20171031165337-banh-canh-tom-cha-cua.jpg -public/system/dishes/image_logos/000/000/678/medium/2017103116401-img-8238.jpg -public/system/dishes/image_logos/000/000/678/original/2017103116401-img-8238.jpg -public/system/dishes/image_logos/000/000/678/square/2017103116401-img-8238.jpg -public/system/dishes/image_logos/000/000/678/thumb/2017103116401-img-8238.jpg -public/system/dishes/image_logos/000/000/679/medium/20171031163947-img-8237.jpg -public/system/dishes/image_logos/000/000/679/original/20171031163947-img-8237.jpg -public/system/dishes/image_logos/000/000/679/square/20171031163947-img-8237.jpg -public/system/dishes/image_logos/000/000/679/thumb/20171031163947-img-8237.jpg -public/system/dishes/image_logos/000/000/680/medium/20171031164112-img-8240.jpg -public/system/dishes/image_logos/000/000/680/original/20171031164112-img-8240.jpg -public/system/dishes/image_logos/000/000/680/square/20171031164112-img-8240.jpg -public/system/dishes/image_logos/000/000/680/thumb/20171031164112-img-8240.jpg -public/system/dishes/image_logos/000/000/681/medium/20171031164013-img-8234.jpg -public/system/dishes/image_logos/000/000/681/original/20171031164013-img-8234.jpg -public/system/dishes/image_logos/000/000/681/square/20171031164013-img-8234.jpg -public/system/dishes/image_logos/000/000/681/thumb/20171031164013-img-8234.jpg -public/system/dishes/image_logos/000/000/682/medium/20171031164025-img-8235.jpg -public/system/dishes/image_logos/000/000/682/original/20171031164025-img-8235.jpg -public/system/dishes/image_logos/000/000/682/square/20171031164025-img-8235.jpg -public/system/dishes/image_logos/000/000/682/thumb/20171031164025-img-8235.jpg -public/system/dishes/image_logos/000/000/683/medium/20171031164038-img-8236.jpg -public/system/dishes/image_logos/000/000/683/original/20171031164038-img-8236.jpg -public/system/dishes/image_logos/000/000/683/square/20171031164038-img-8236.jpg -public/system/dishes/image_logos/000/000/683/thumb/20171031164038-img-8236.jpg -public/system/dishes/image_logos/000/000/684/medium/20171031164054-img-8239.jpg -public/system/dishes/image_logos/000/000/684/original/20171031164054-img-8239.jpg -public/system/dishes/image_logos/000/000/684/square/20171031164054-img-8239.jpg -public/system/dishes/image_logos/000/000/684/thumb/20171031164054-img-8239.jpg -public/system/dishes/image_logos/000/000/685/medium/20171031164133-img-8241.jpg -public/system/dishes/image_logos/000/000/685/original/20171031164133-img-8241.jpg -public/system/dishes/image_logos/000/000/685/square/20171031164133-img-8241.jpg -public/system/dishes/image_logos/000/000/685/thumb/20171031164133-img-8241.jpg -public/system/dishes/image_logos/000/000/878/medium/Co_CC_9Bm_bo_CC_80_pho_CC_82_mai.png -public/system/dishes/image_logos/000/000/878/original/Co_CC_9Bm_bo_CC_80_pho_CC_82_mai.png -public/system/dishes/image_logos/000/000/878/square/Co_CC_9Bm_bo_CC_80_pho_CC_82_mai.png -public/system/dishes/image_logos/000/000/878/thumb/Co_CC_9Bm_bo_CC_80_pho_CC_82_mai.png -public/system/dishes/image_logos/000/000/879/medium/Co_CC_9Bm_bo_CC_80_pho_CC_82_mai.png -public/system/dishes/image_logos/000/000/879/original/Co_CC_9Bm_bo_CC_80_pho_CC_82_mai.png -public/system/dishes/image_logos/000/000/879/square/Co_CC_9Bm_bo_CC_80_pho_CC_82_mai.png -public/system/dishes/image_logos/000/000/879/thumb/Co_CC_9Bm_bo_CC_80_pho_CC_82_mai.png -public/system/dishes/image_logos/000/000/880/medium/Co_CC_9Bm_bo_CC_80_pho_CC_82_mai.png -public/system/dishes/image_logos/000/000/880/original/Co_CC_9Bm_bo_CC_80_pho_CC_82_mai.png -public/system/dishes/image_logos/000/000/880/square/Co_CC_9Bm_bo_CC_80_pho_CC_82_mai.png -public/system/dishes/image_logos/000/000/880/thumb/Co_CC_9Bm_bo_CC_80_pho_CC_82_mai.png -public/system/dishes/image_logos/000/000/881/medium/Co_CC_9Bm_bo_CC_80_kimchi.png -public/system/dishes/image_logos/000/000/881/original/Co_CC_9Bm_bo_CC_80_kimchi.png -public/system/dishes/image_logos/000/000/881/square/Co_CC_9Bm_bo_CC_80_kimchi.png -public/system/dishes/image_logos/000/000/881/thumb/Co_CC_9Bm_bo_CC_80_kimchi.png -public/system/dishes/image_logos/000/000/882/medium/Co_CC_9Bm_bo_CC_80_kimchi.png -public/system/dishes/image_logos/000/000/882/original/Co_CC_9Bm_bo_CC_80_kimchi.png -public/system/dishes/image_logos/000/000/882/square/Co_CC_9Bm_bo_CC_80_kimchi.png -public/system/dishes/image_logos/000/000/882/thumb/Co_CC_9Bm_bo_CC_80_kimchi.png -public/system/dishes/image_logos/000/000/883/medium/Co_CC_9Bm_bo_CC_80_kimchi.png -public/system/dishes/image_logos/000/000/883/original/Co_CC_9Bm_bo_CC_80_kimchi.png -public/system/dishes/image_logos/000/000/883/square/Co_CC_9Bm_bo_CC_80_kimchi.png -public/system/dishes/image_logos/000/000/883/thumb/Co_CC_9Bm_bo_CC_80_kimchi.png -public/system/dishes/image_logos/000/000/884/medium/Co_CC_9Bm_bo_CC_80_ha_CC_80nh.png -public/system/dishes/image_logos/000/000/884/original/Co_CC_9Bm_bo_CC_80_ha_CC_80nh.png -public/system/dishes/image_logos/000/000/884/square/Co_CC_9Bm_bo_CC_80_ha_CC_80nh.png -public/system/dishes/image_logos/000/000/884/thumb/Co_CC_9Bm_bo_CC_80_ha_CC_80nh.png -public/system/dishes/image_logos/000/000/885/medium/Co_CC_9Bm_bo_CC_80_ha_CC_80nh.png -public/system/dishes/image_logos/000/000/885/original/Co_CC_9Bm_bo_CC_80_ha_CC_80nh.png -public/system/dishes/image_logos/000/000/885/square/Co_CC_9Bm_bo_CC_80_ha_CC_80nh.png -public/system/dishes/image_logos/000/000/885/thumb/Co_CC_9Bm_bo_CC_80_ha_CC_80nh.png -public/system/dishes/image_logos/000/000/886/medium/Co_CC_9Bm_bo_CC_80_ha_CC_80nh.png -public/system/dishes/image_logos/000/000/886/original/Co_CC_9Bm_bo_CC_80_ha_CC_80nh.png -public/system/dishes/image_logos/000/000/886/square/Co_CC_9Bm_bo_CC_80_ha_CC_80nh.png -public/system/dishes/image_logos/000/000/886/thumb/Co_CC_9Bm_bo_CC_80_ha_CC_80nh.png -public/system/dishes/image_logos/000/000/887/medium/Co_CC_9Bm_bo_CC_80_phong_ca_CC_81ch_ba_CC_81nh_xe_CC_80o_Nha_CC_A3_CC_82t_Ba_CC_89n.png -public/system/dishes/image_logos/000/000/887/original/Co_CC_9Bm_bo_CC_80_phong_ca_CC_81ch_ba_CC_81nh_xe_CC_80o_Nha_CC_A3_CC_82t_Ba_CC_89n.png -public/system/dishes/image_logos/000/000/887/square/Co_CC_9Bm_bo_CC_80_phong_ca_CC_81ch_ba_CC_81nh_xe_CC_80o_Nha_CC_A3_CC_82t_Ba_CC_89n.png -public/system/dishes/image_logos/000/000/887/thumb/Co_CC_9Bm_bo_CC_80_phong_ca_CC_81ch_ba_CC_81nh_xe_CC_80o_Nha_CC_A3_CC_82t_Ba_CC_89n.png -public/system/dishes/image_logos/000/000/888/medium/Co_CC_9Bm_bo_CC_80_phong_ca_CC_81ch_ba_CC_81nh_xe_CC_80o_Nha_CC_A3_CC_82t_Ba_CC_89n.png -public/system/dishes/image_logos/000/000/888/original/Co_CC_9Bm_bo_CC_80_phong_ca_CC_81ch_ba_CC_81nh_xe_CC_80o_Nha_CC_A3_CC_82t_Ba_CC_89n.png -public/system/dishes/image_logos/000/000/888/square/Co_CC_9Bm_bo_CC_80_phong_ca_CC_81ch_ba_CC_81nh_xe_CC_80o_Nha_CC_A3_CC_82t_Ba_CC_89n.png -public/system/dishes/image_logos/000/000/888/thumb/Co_CC_9Bm_bo_CC_80_phong_ca_CC_81ch_ba_CC_81nh_xe_CC_80o_Nha_CC_A3_CC_82t_Ba_CC_89n.png -public/system/dishes/image_logos/000/000/889/medium/Co_CC_9Bm_bo_CC_80_phong_ca_CC_81ch_ba_CC_81nh_xe_CC_80o_Nha_CC_A3_CC_82t_Ba_CC_89n.png -public/system/dishes/image_logos/000/000/889/original/Co_CC_9Bm_bo_CC_80_phong_ca_CC_81ch_ba_CC_81nh_xe_CC_80o_Nha_CC_A3_CC_82t_Ba_CC_89n.png -public/system/dishes/image_logos/000/000/889/square/Co_CC_9Bm_bo_CC_80_phong_ca_CC_81ch_ba_CC_81nh_xe_CC_80o_Nha_CC_A3_CC_82t_Ba_CC_89n.png -public/system/dishes/image_logos/000/000/889/thumb/Co_CC_9Bm_bo_CC_80_phong_ca_CC_81ch_ba_CC_81nh_xe_CC_80o_Nha_CC_A3_CC_82t_Ba_CC_89n.png -public/system/dishes/image_logos/000/000/890/medium/Co_CC_9Bm_bo_CC_80_cay.png -public/system/dishes/image_logos/000/000/890/original/Co_CC_9Bm_bo_CC_80_cay.png -public/system/dishes/image_logos/000/000/890/square/Co_CC_9Bm_bo_CC_80_cay.png -public/system/dishes/image_logos/000/000/890/thumb/Co_CC_9Bm_bo_CC_80_cay.png -public/system/dishes/image_logos/000/000/891/medium/Co_CC_9Bm_bo_CC_80_cay.png -public/system/dishes/image_logos/000/000/891/original/Co_CC_9Bm_bo_CC_80_cay.png -public/system/dishes/image_logos/000/000/891/square/Co_CC_9Bm_bo_CC_80_cay.png -public/system/dishes/image_logos/000/000/891/thumb/Co_CC_9Bm_bo_CC_80_cay.png -public/system/dishes/image_logos/000/000/892/medium/Co_CC_9Bm_bo_CC_80_cay.png -public/system/dishes/image_logos/000/000/892/original/Co_CC_9Bm_bo_CC_80_cay.png -public/system/dishes/image_logos/000/000/892/square/Co_CC_9Bm_bo_CC_80_cay.png -public/system/dishes/image_logos/000/000/892/thumb/Co_CC_9Bm_bo_CC_80_cay.png -public/system/dishes/image_logos/000/000/893/medium/Ca_CC_80_ri.png -public/system/dishes/image_logos/000/000/893/original/Ca_CC_80_ri.png -public/system/dishes/image_logos/000/000/893/square/Ca_CC_80_ri.png -public/system/dishes/image_logos/000/000/893/thumb/Ca_CC_80_ri.png -public/system/dishes/image_logos/000/000/894/medium/Ca_CC_80_ri.png -public/system/dishes/image_logos/000/000/894/original/Ca_CC_80_ri.png -public/system/dishes/image_logos/000/000/894/square/Ca_CC_80_ri.png -public/system/dishes/image_logos/000/000/894/thumb/Ca_CC_80_ri.png -public/system/dishes/image_logos/000/000/895/medium/Ca_CC_80_ri.png -public/system/dishes/image_logos/000/000/895/original/Ca_CC_80_ri.png -public/system/dishes/image_logos/000/000/895/square/Ca_CC_80_ri.png -public/system/dishes/image_logos/000/000/895/thumb/Ca_CC_80_ri.png -public/system/dishes/image_logos/000/000/896/medium/Ca_CC_80_ri_bo_CC_80.png -public/system/dishes/image_logos/000/000/896/original/Ca_CC_80_ri_bo_CC_80.png -public/system/dishes/image_logos/000/000/896/square/Ca_CC_80_ri_bo_CC_80.png -public/system/dishes/image_logos/000/000/896/thumb/Ca_CC_80_ri_bo_CC_80.png -public/system/dishes/image_logos/000/000/897/medium/Ca_CC_80_ri_bo_CC_80.png -public/system/dishes/image_logos/000/000/897/original/Ca_CC_80_ri_bo_CC_80.png -public/system/dishes/image_logos/000/000/897/square/Ca_CC_80_ri_bo_CC_80.png -public/system/dishes/image_logos/000/000/897/thumb/Ca_CC_80_ri_bo_CC_80.png -public/system/dishes/image_logos/000/000/898/medium/Ca_CC_80_ri_bo_CC_80.png -public/system/dishes/image_logos/000/000/898/original/Ca_CC_80_ri_bo_CC_80.png -public/system/dishes/image_logos/000/000/898/square/Ca_CC_80_ri_bo_CC_80.png -public/system/dishes/image_logos/000/000/898/thumb/Ca_CC_80_ri_bo_CC_80.png -public/system/dishes/image_logos/000/000/899/medium/Ca_CC_80_ri_tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/899/original/Ca_CC_80_ri_tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/899/square/Ca_CC_80_ri_tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/899/thumb/Ca_CC_80_ri_tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/900/medium/Ca_CC_80_ri_tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/900/original/Ca_CC_80_ri_tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/900/square/Ca_CC_80_ri_tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/900/thumb/Ca_CC_80_ri_tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/901/medium/Ca_CC_80_ri_tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/901/original/Ca_CC_80_ri_tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/901/square/Ca_CC_80_ri_tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/901/thumb/Ca_CC_80_ri_tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/902/medium/Ca_CC_80_ri_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/902/original/Ca_CC_80_ri_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/902/square/Ca_CC_80_ri_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/902/thumb/Ca_CC_80_ri_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/903/medium/Ca_CC_80_ri_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/903/original/Ca_CC_80_ri_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/903/square/Ca_CC_80_ri_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/903/thumb/Ca_CC_80_ri_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/904/medium/Ca_CC_80_ri_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/904/original/Ca_CC_80_ri_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/904/square/Ca_CC_80_ri_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/904/thumb/Ca_CC_80_ri_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/905/medium/Co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng.png -public/system/dishes/image_logos/000/000/905/original/Co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng.png -public/system/dishes/image_logos/000/000/905/square/Co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng.png -public/system/dishes/image_logos/000/000/905/thumb/Co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng.png -public/system/dishes/image_logos/000/000/906/medium/Co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng.png -public/system/dishes/image_logos/000/000/906/original/Co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng.png -public/system/dishes/image_logos/000/000/906/square/Co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng.png -public/system/dishes/image_logos/000/000/906/thumb/Co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng.png -public/system/dishes/image_logos/000/000/907/medium/Co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng.png -public/system/dishes/image_logos/000/000/907/original/Co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng.png -public/system/dishes/image_logos/000/000/907/square/Co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng.png -public/system/dishes/image_logos/000/000/907/thumb/Co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng.png -public/system/dishes/image_logos/000/000/908/medium/Co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng_va_CC_80_tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/908/original/Co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng_va_CC_80_tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/908/square/Co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng_va_CC_80_tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/908/thumb/Co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng_va_CC_80_tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/909/medium/Co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng_va_CC_80_tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/909/original/Co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng_va_CC_80_tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/909/square/Co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng_va_CC_80_tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/909/thumb/Co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng_va_CC_80_tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/910/medium/Co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng_va_CC_80_tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/910/original/Co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng_va_CC_80_tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/910/square/Co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng_va_CC_80_tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/910/thumb/Co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng_va_CC_80_tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/911/medium/Co_CC_9Bm_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/911/original/Co_CC_9Bm_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/911/square/Co_CC_9Bm_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/911/thumb/Co_CC_9Bm_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/912/medium/Co_CC_9Bm_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/912/original/Co_CC_9Bm_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/912/square/Co_CC_9Bm_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/912/thumb/Co_CC_9Bm_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/913/medium/Co_CC_9Bm_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/913/original/Co_CC_9Bm_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/913/square/Co_CC_9Bm_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/913/thumb/Co_CC_9Bm_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/914/medium/Co_CC_9Bm_ga_CC_80_nu_CC_9Bo_CC_9B_CC_81ng_so_CC_82_CC_81t_teriyaki.png -public/system/dishes/image_logos/000/000/914/original/Co_CC_9Bm_ga_CC_80_nu_CC_9Bo_CC_9B_CC_81ng_so_CC_82_CC_81t_teriyaki.png -public/system/dishes/image_logos/000/000/914/square/Co_CC_9Bm_ga_CC_80_nu_CC_9Bo_CC_9B_CC_81ng_so_CC_82_CC_81t_teriyaki.png -public/system/dishes/image_logos/000/000/914/thumb/Co_CC_9Bm_ga_CC_80_nu_CC_9Bo_CC_9B_CC_81ng_so_CC_82_CC_81t_teriyaki.png -public/system/dishes/image_logos/000/000/915/medium/Co_CC_9Bm_ga_CC_80_nu_CC_9Bo_CC_9B_CC_81ng_so_CC_82_CC_81t_teriyaki.png -public/system/dishes/image_logos/000/000/915/original/Co_CC_9Bm_ga_CC_80_nu_CC_9Bo_CC_9B_CC_81ng_so_CC_82_CC_81t_teriyaki.png -public/system/dishes/image_logos/000/000/915/square/Co_CC_9Bm_ga_CC_80_nu_CC_9Bo_CC_9B_CC_81ng_so_CC_82_CC_81t_teriyaki.png -public/system/dishes/image_logos/000/000/915/thumb/Co_CC_9Bm_ga_CC_80_nu_CC_9Bo_CC_9B_CC_81ng_so_CC_82_CC_81t_teriyaki.png -public/system/dishes/image_logos/000/000/916/medium/Co_CC_9Bm_ga_CC_80_nu_CC_9Bo_CC_9B_CC_81ng_so_CC_82_CC_81t_teriyaki.png -public/system/dishes/image_logos/000/000/916/original/Co_CC_9Bm_ga_CC_80_nu_CC_9Bo_CC_9B_CC_81ng_so_CC_82_CC_81t_teriyaki.png -public/system/dishes/image_logos/000/000/916/square/Co_CC_9Bm_ga_CC_80_nu_CC_9Bo_CC_9B_CC_81ng_so_CC_82_CC_81t_teriyaki.png -public/system/dishes/image_logos/000/000/916/thumb/Co_CC_9Bm_ga_CC_80_nu_CC_9Bo_CC_9B_CC_81ng_so_CC_82_CC_81t_teriyaki.png -public/system/dishes/image_logos/000/000/917/medium/Mi_CC_80_ramen_Tokyo.png -public/system/dishes/image_logos/000/000/917/original/Mi_CC_80_ramen_Tokyo.png -public/system/dishes/image_logos/000/000/917/square/Mi_CC_80_ramen_Tokyo.png -public/system/dishes/image_logos/000/000/917/thumb/Mi_CC_80_ramen_Tokyo.png -public/system/dishes/image_logos/000/000/918/medium/Mi_CC_80_ramen_Tokyo_thi_CC_A3t_xa_CC_81_xi_CC_81u.png -public/system/dishes/image_logos/000/000/918/original/Mi_CC_80_ramen_Tokyo_thi_CC_A3t_xa_CC_81_xi_CC_81u.png -public/system/dishes/image_logos/000/000/918/square/Mi_CC_80_ramen_Tokyo_thi_CC_A3t_xa_CC_81_xi_CC_81u.png -public/system/dishes/image_logos/000/000/918/thumb/Mi_CC_80_ramen_Tokyo_thi_CC_A3t_xa_CC_81_xi_CC_81u.png -public/system/dishes/image_logos/000/000/919/medium/Mi_CC_80_tantan_su_CC_81p_tu_CC_9Bo_CC_9Bng.png -public/system/dishes/image_logos/000/000/919/original/Mi_CC_80_tantan_su_CC_81p_tu_CC_9Bo_CC_9Bng.png -public/system/dishes/image_logos/000/000/919/square/Mi_CC_80_tantan_su_CC_81p_tu_CC_9Bo_CC_9Bng.png -public/system/dishes/image_logos/000/000/919/thumb/Mi_CC_80_tantan_su_CC_81p_tu_CC_9Bo_CC_9Bng.png -public/system/dishes/image_logos/000/000/920/medium/Mi_CC_80_ramen_su_CC_81p_xu_CC_9Bo_CC_9Bng_heo_thi_CC_A3t_xa_CC_81_xi_CC_81u.png -public/system/dishes/image_logos/000/000/920/original/Mi_CC_80_ramen_su_CC_81p_xu_CC_9Bo_CC_9Bng_heo_thi_CC_A3t_xa_CC_81_xi_CC_81u.png -public/system/dishes/image_logos/000/000/920/square/Mi_CC_80_ramen_su_CC_81p_xu_CC_9Bo_CC_9Bng_heo_thi_CC_A3t_xa_CC_81_xi_CC_81u.png -public/system/dishes/image_logos/000/000/920/thumb/Mi_CC_80_ramen_su_CC_81p_xu_CC_9Bo_CC_9Bng_heo_thi_CC_A3t_xa_CC_81_xi_CC_81u.png -public/system/dishes/image_logos/000/000/921/medium/Mi_CC_80_tantan_su_CC_81p_xu_CC_9Bo_CC_9Bng_heo.png -public/system/dishes/image_logos/000/000/921/original/Mi_CC_80_tantan_su_CC_81p_xu_CC_9Bo_CC_9Bng_heo.png -public/system/dishes/image_logos/000/000/921/square/Mi_CC_80_tantan_su_CC_81p_xu_CC_9Bo_CC_9Bng_heo.png -public/system/dishes/image_logos/000/000/921/thumb/Mi_CC_80_tantan_su_CC_81p_xu_CC_9Bo_CC_9Bng_heo.png -public/system/dishes/image_logos/000/000/922/medium/Mi_CC_80_ramen_su_CC_81p_xu_CC_9Bo_CC_9Bng_heo.png -public/system/dishes/image_logos/000/000/922/original/Mi_CC_80_ramen_su_CC_81p_xu_CC_9Bo_CC_9Bng_heo.png -public/system/dishes/image_logos/000/000/922/square/Mi_CC_80_ramen_su_CC_81p_xu_CC_9Bo_CC_9Bng_heo.png -public/system/dishes/image_logos/000/000/922/thumb/Mi_CC_80_ramen_su_CC_81p_xu_CC_9Bo_CC_9Bng_heo.png -public/system/dishes/image_logos/000/000/923/medium/Mi_CC_80_ramen_cay_ca_CC_81_vie_CC_82n.png -public/system/dishes/image_logos/000/000/923/original/Mi_CC_80_ramen_cay_ca_CC_81_vie_CC_82n.png -public/system/dishes/image_logos/000/000/923/square/Mi_CC_80_ramen_cay_ca_CC_81_vie_CC_82n.png -public/system/dishes/image_logos/000/000/923/thumb/Mi_CC_80_ramen_cay_ca_CC_81_vie_CC_82n.png -public/system/dishes/image_logos/000/000/924/medium/Tokyo_Bowl_-_Beef.png -public/system/dishes/image_logos/000/000/924/original/Tokyo_Bowl_-_Beef.png -public/system/dishes/image_logos/000/000/924/square/Tokyo_Bowl_-_Beef.png -public/system/dishes/image_logos/000/000/924/thumb/Tokyo_Bowl_-_Beef.png -public/system/dishes/image_logos/000/000/925/medium/Tokyo_Bowl_-__Fried_Chicken_with_Onion.png -public/system/dishes/image_logos/000/000/925/original/Tokyo_Bowl_-__Fried_Chicken_with_Onion.png -public/system/dishes/image_logos/000/000/925/square/Tokyo_Bowl_-__Fried_Chicken_with_Onion.png -public/system/dishes/image_logos/000/000/925/thumb/Tokyo_Bowl_-__Fried_Chicken_with_Onion.png -public/system/dishes/image_logos/000/000/926/medium/Tokyo_Bowl_-__Grilled_Pork.png -public/system/dishes/image_logos/000/000/926/original/Tokyo_Bowl_-__Grilled_Pork.png -public/system/dishes/image_logos/000/000/926/square/Tokyo_Bowl_-__Grilled_Pork.png -public/system/dishes/image_logos/000/000/926/thumb/Tokyo_Bowl_-__Grilled_Pork.png -public/system/dishes/image_logos/000/000/927/medium/Tokyo_Bowl_-__Katsu.png -public/system/dishes/image_logos/000/000/927/original/Tokyo_Bowl_-__Katsu.png -public/system/dishes/image_logos/000/000/927/square/Tokyo_Bowl_-__Katsu.png -public/system/dishes/image_logos/000/000/927/thumb/Tokyo_Bowl_-__Katsu.png -public/system/dishes/image_logos/000/000/928/medium/Tokyo_Bowl_-__Curry.png -public/system/dishes/image_logos/000/000/928/original/Tokyo_Bowl_-__Curry.png -public/system/dishes/image_logos/000/000/928/square/Tokyo_Bowl_-__Curry.png -public/system/dishes/image_logos/000/000/928/thumb/Tokyo_Bowl_-__Curry.png -public/system/dishes/image_logos/000/000/929/medium/Suki_Zen.png -public/system/dishes/image_logos/000/000/929/original/Suki_Zen.png -public/system/dishes/image_logos/000/000/929/square/Suki_Zen.png -public/system/dishes/image_logos/000/000/929/thumb/Suki_Zen.png -public/system/dishes/image_logos/000/000/930/medium/Zen_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/930/original/Zen_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/930/square/Zen_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/930/thumb/Zen_thi_CC_A3t_heo_chie_CC_82n_xu_CC_80.png -public/system/dishes/image_logos/000/000/931/medium/Zen_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng_(s).png -public/system/dishes/image_logos/000/000/931/original/Zen_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng_(s).png -public/system/dishes/image_logos/000/000/931/square/Zen_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng_(s).png -public/system/dishes/image_logos/000/000/931/thumb/Zen_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng_(s).png -public/system/dishes/image_logos/000/000/932/medium/Zen_co_CC_9Bm_bo_CC_80_(s)_va_CC_80_mi_CC_80_ramen_Tokyo.png -public/system/dishes/image_logos/000/000/932/original/Zen_co_CC_9Bm_bo_CC_80_(s)_va_CC_80_mi_CC_80_ramen_Tokyo.png -public/system/dishes/image_logos/000/000/932/square/Zen_co_CC_9Bm_bo_CC_80_(s)_va_CC_80_mi_CC_80_ramen_Tokyo.png -public/system/dishes/image_logos/000/000/932/thumb/Zen_co_CC_9Bm_bo_CC_80_(s)_va_CC_80_mi_CC_80_ramen_Tokyo.png -public/system/dishes/image_logos/000/000/933/medium/Zen_co_CC_9Bm_bo_CC_80_(s)_va_CC_80_mi_CC_80_ramen_su_CC_81p_xu_CC_9Bo_CC_9Bng_heo.png -public/system/dishes/image_logos/000/000/933/original/Zen_co_CC_9Bm_bo_CC_80_(s)_va_CC_80_mi_CC_80_ramen_su_CC_81p_xu_CC_9Bo_CC_9Bng_heo.png -public/system/dishes/image_logos/000/000/933/square/Zen_co_CC_9Bm_bo_CC_80_(s)_va_CC_80_mi_CC_80_ramen_su_CC_81p_xu_CC_9Bo_CC_9Bng_heo.png -public/system/dishes/image_logos/000/000/933/thumb/Zen_co_CC_9Bm_bo_CC_80_(s)_va_CC_80_mi_CC_80_ramen_su_CC_81p_xu_CC_9Bo_CC_9Bng_heo.png -public/system/dishes/image_logos/000/000/934/medium/Zen_co_CC_9Bm_bo_CC_80_ha_CC_82_CC_80m_(S)_va_CC_80_ca_CC_80_ri_mini.png -public/system/dishes/image_logos/000/000/934/original/Zen_co_CC_9Bm_bo_CC_80_ha_CC_82_CC_80m_(S)_va_CC_80_ca_CC_80_ri_mini.png -public/system/dishes/image_logos/000/000/934/square/Zen_co_CC_9Bm_bo_CC_80_ha_CC_82_CC_80m_(S)_va_CC_80_ca_CC_80_ri_mini.png -public/system/dishes/image_logos/000/000/934/thumb/Zen_co_CC_9Bm_bo_CC_80_ha_CC_82_CC_80m_(S)_va_CC_80_ca_CC_80_ri_mini.png -public/system/dishes/image_logos/000/000/935/medium/Zen_co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng_(S)_va_CC_80_ca_CC_80_ri_mini.png -public/system/dishes/image_logos/000/000/935/original/Zen_co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng_(S)_va_CC_80_ca_CC_80_ri_mini.png -public/system/dishes/image_logos/000/000/935/square/Zen_co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng_(S)_va_CC_80_ca_CC_80_ri_mini.png -public/system/dishes/image_logos/000/000/935/thumb/Zen_co_CC_9Bm_thi_CC_A3t_heo_nu_CC_9Bo_CC_9B_CC_81ng_(S)_va_CC_80_ca_CC_80_ri_mini.png -public/system/dishes/image_logos/000/000/936/medium/Zen_ga_CC_80_nu_CC_9Bo_CC_9B_CC_81ng_so_CC_82_CC_81t_teriyaki_(S).png -public/system/dishes/image_logos/000/000/936/original/Zen_ga_CC_80_nu_CC_9Bo_CC_9B_CC_81ng_so_CC_82_CC_81t_teriyaki_(S).png -public/system/dishes/image_logos/000/000/936/square/Zen_ga_CC_80_nu_CC_9Bo_CC_9B_CC_81ng_so_CC_82_CC_81t_teriyaki_(S).png -public/system/dishes/image_logos/000/000/936/thumb/Zen_ga_CC_80_nu_CC_9Bo_CC_9B_CC_81ng_so_CC_82_CC_81t_teriyaki_(S).png -public/system/dishes/image_logos/000/000/937/medium/Zen_co_CC_9Bm_sushi_ca_CC_81_ho_CC_82_CC_80i_(M).png -public/system/dishes/image_logos/000/000/937/original/Zen_co_CC_9Bm_sushi_ca_CC_81_ho_CC_82_CC_80i_(M).png -public/system/dishes/image_logos/000/000/937/square/Zen_co_CC_9Bm_sushi_ca_CC_81_ho_CC_82_CC_80i_(M).png -public/system/dishes/image_logos/000/000/937/thumb/Zen_co_CC_9Bm_sushi_ca_CC_81_ho_CC_82_CC_80i_(M).png -public/system/dishes/image_logos/000/000/938/medium/Co_CC_9Bm_sushi_ca_CC_81_ho_CC_82_CC_80i.png -public/system/dishes/image_logos/000/000/938/original/Co_CC_9Bm_sushi_ca_CC_81_ho_CC_82_CC_80i.png -public/system/dishes/image_logos/000/000/938/square/Co_CC_9Bm_sushi_ca_CC_81_ho_CC_82_CC_80i.png -public/system/dishes/image_logos/000/000/938/thumb/Co_CC_9Bm_sushi_ca_CC_81_ho_CC_82_CC_80i.png -public/system/dishes/image_logos/000/000/939/medium/Co_CC_9Bm_sushi_ca_CC_81_ho_CC_82_CC_80i.png -public/system/dishes/image_logos/000/000/939/original/Co_CC_9Bm_sushi_ca_CC_81_ho_CC_82_CC_80i.png -public/system/dishes/image_logos/000/000/939/square/Co_CC_9Bm_sushi_ca_CC_81_ho_CC_82_CC_80i.png -public/system/dishes/image_logos/000/000/939/thumb/Co_CC_9Bm_sushi_ca_CC_81_ho_CC_82_CC_80i.png -public/system/dishes/image_logos/000/000/940/medium/Ba_CC_81nh_ba_CC_A3ch_tuo_CC_A3_CC_82c_nu_CC_9Bo_CC_9B_CC_81ng.png -public/system/dishes/image_logos/000/000/940/original/Ba_CC_81nh_ba_CC_A3ch_tuo_CC_A3_CC_82c_nu_CC_9Bo_CC_9B_CC_81ng.png -public/system/dishes/image_logos/000/000/940/square/Ba_CC_81nh_ba_CC_A3ch_tuo_CC_A3_CC_82c_nu_CC_9Bo_CC_9B_CC_81ng.png -public/system/dishes/image_logos/000/000/940/thumb/Ba_CC_81nh_ba_CC_A3ch_tuo_CC_A3_CC_82c_nu_CC_9Bo_CC_9B_CC_81ng.png -public/system/dishes/image_logos/000/000/941/medium/Ba_CC_81nh_ba_CC_A3ch_tuo_CC_A3_CC_82c_nu_CC_9Bo_CC_9B_CC_81ng.png -public/system/dishes/image_logos/000/000/941/original/Ba_CC_81nh_ba_CC_A3ch_tuo_CC_A3_CC_82c_nu_CC_9Bo_CC_9B_CC_81ng.png -public/system/dishes/image_logos/000/000/941/square/Ba_CC_81nh_ba_CC_A3ch_tuo_CC_A3_CC_82c_nu_CC_9Bo_CC_9B_CC_81ng.png -public/system/dishes/image_logos/000/000/941/thumb/Ba_CC_81nh_ba_CC_A3ch_tuo_CC_A3_CC_82c_nu_CC_9Bo_CC_9B_CC_81ng.png -public/system/dishes/image_logos/000/000/942/medium/Ba_CC_81nh_xe_CC_80o_Nha_CC_A3_CC_82t_Ba_CC_89n.png -public/system/dishes/image_logos/000/000/942/original/Ba_CC_81nh_xe_CC_80o_Nha_CC_A3_CC_82t_Ba_CC_89n.png -public/system/dishes/image_logos/000/000/942/square/Ba_CC_81nh_xe_CC_80o_Nha_CC_A3_CC_82t_Ba_CC_89n.png -public/system/dishes/image_logos/000/000/942/thumb/Ba_CC_81nh_xe_CC_80o_Nha_CC_A3_CC_82t_Ba_CC_89n.png -public/system/dishes/image_logos/000/000/943/medium/Gyoza.png -public/system/dishes/image_logos/000/000/943/original/Gyoza.png -public/system/dishes/image_logos/000/000/943/square/Gyoza.png -public/system/dishes/image_logos/000/000/943/thumb/Gyoza.png -public/system/dishes/image_logos/000/000/944/medium/Gyoza.png -public/system/dishes/image_logos/000/000/944/original/Gyoza.png -public/system/dishes/image_logos/000/000/944/square/Gyoza.png -public/system/dishes/image_logos/000/000/944/thumb/Gyoza.png -public/system/dishes/image_logos/000/000/945/medium/Ga_CC_80_ra_CC_81n.png -public/system/dishes/image_logos/000/000/945/original/Ga_CC_80_ra_CC_81n.png -public/system/dishes/image_logos/000/000/945/square/Ga_CC_80_ra_CC_81n.png -public/system/dishes/image_logos/000/000/945/thumb/Ga_CC_80_ra_CC_81n.png -public/system/dishes/image_logos/000/000/946/medium/Ga_CC_80_ra_CC_81n.png -public/system/dishes/image_logos/000/000/946/original/Ga_CC_80_ra_CC_81n.png -public/system/dishes/image_logos/000/000/946/square/Ga_CC_80_ra_CC_81n.png -public/system/dishes/image_logos/000/000/946/thumb/Ga_CC_80_ra_CC_81n.png -public/system/dishes/image_logos/000/000/947/medium/Di_CC_83a_thi_CC_A3t_bo_CC_80_ha_CC_82_CC_80m.png -public/system/dishes/image_logos/000/000/947/original/Di_CC_83a_thi_CC_A3t_bo_CC_80_ha_CC_82_CC_80m.png -public/system/dishes/image_logos/000/000/947/square/Di_CC_83a_thi_CC_A3t_bo_CC_80_ha_CC_82_CC_80m.png -public/system/dishes/image_logos/000/000/947/thumb/Di_CC_83a_thi_CC_A3t_bo_CC_80_ha_CC_82_CC_80m.png -public/system/dishes/image_logos/000/000/948/medium/Di_CC_83a_thi_CC_A3t_bo_CC_80_ha_CC_82_CC_80m.png -public/system/dishes/image_logos/000/000/948/original/Di_CC_83a_thi_CC_A3t_bo_CC_80_ha_CC_82_CC_80m.png -public/system/dishes/image_logos/000/000/948/square/Di_CC_83a_thi_CC_A3t_bo_CC_80_ha_CC_82_CC_80m.png -public/system/dishes/image_logos/000/000/948/thumb/Di_CC_83a_thi_CC_A3t_bo_CC_80_ha_CC_82_CC_80m.png -public/system/dishes/image_logos/000/000/949/medium/Rau.png -public/system/dishes/image_logos/000/000/949/original/Rau.png -public/system/dishes/image_logos/000/000/949/square/Rau.png -public/system/dishes/image_logos/000/000/949/thumb/Rau.png -public/system/dishes/image_logos/000/000/950/medium/Rau_muo_CC_82_CC_81ng.png -public/system/dishes/image_logos/000/000/950/original/Rau_muo_CC_82_CC_81ng.png -public/system/dishes/image_logos/000/000/950/square/Rau_muo_CC_82_CC_81ng.png -public/system/dishes/image_logos/000/000/950/thumb/Rau_muo_CC_82_CC_81ng.png -public/system/dishes/image_logos/000/000/954/medium/Su_CC_81p_miso.png -public/system/dishes/image_logos/000/000/954/original/Su_CC_81p_miso.png -public/system/dishes/image_logos/000/000/954/square/Su_CC_81p_miso.png -public/system/dishes/image_logos/000/000/954/thumb/Su_CC_81p_miso.png -public/system/dishes/image_logos/000/000/955/medium/Tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/955/original/Tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/955/square/Tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/955/thumb/Tru_CC_9B_CC_81ng_ho_CC_82_CC_80ng__C4_91a_CC_80o.png -public/system/dishes/image_logos/000/000/956/medium/Co_CC_9Bm_bo_CC_80_ha_CC_82_CC_80m_(set_tre_CC_89_em).png -public/system/dishes/image_logos/000/000/956/original/Co_CC_9Bm_bo_CC_80_ha_CC_82_CC_80m_(set_tre_CC_89_em).png -public/system/dishes/image_logos/000/000/956/square/Co_CC_9Bm_bo_CC_80_ha_CC_82_CC_80m_(set_tre_CC_89_em).png -public/system/dishes/image_logos/000/000/956/thumb/Co_CC_9Bm_bo_CC_80_ha_CC_82_CC_80m_(set_tre_CC_89_em).png -public/system/dishes/image_logos/000/000/957/medium/Co_CC_9Bm_ga_CC_80_ra_CC_81n_(set_tre_CC_89_em).png -public/system/dishes/image_logos/000/000/957/original/Co_CC_9Bm_ga_CC_80_ra_CC_81n_(set_tre_CC_89_em).png -public/system/dishes/image_logos/000/000/957/square/Co_CC_9Bm_ga_CC_80_ra_CC_81n_(set_tre_CC_89_em).png -public/system/dishes/image_logos/000/000/957/thumb/Co_CC_9Bm_ga_CC_80_ra_CC_81n_(set_tre_CC_89_em).png -public/system/dishes/image_logos/000/000/958/medium/Tru_CC_9B_CC_81ng_ha_CC_82_CC_81p_kie_CC_82_CC_89u_Nha_CC_A3_CC_82t.png -public/system/dishes/image_logos/000/000/958/original/Tru_CC_9B_CC_81ng_ha_CC_82_CC_81p_kie_CC_82_CC_89u_Nha_CC_A3_CC_82t.png -public/system/dishes/image_logos/000/000/958/square/Tru_CC_9B_CC_81ng_ha_CC_82_CC_81p_kie_CC_82_CC_89u_Nha_CC_A3_CC_82t.png -public/system/dishes/image_logos/000/000/958/thumb/Tru_CC_9B_CC_81ng_ha_CC_82_CC_81p_kie_CC_82_CC_89u_Nha_CC_A3_CC_82t.png -public/system/dishes/image_logos/000/000/959/medium/Set_rau_muo_CC_82_CC_81ng.png -public/system/dishes/image_logos/000/000/959/original/Set_rau_muo_CC_82_CC_81ng.png -public/system/dishes/image_logos/000/000/959/square/Set_rau_muo_CC_82_CC_81ng.png -public/system/dishes/image_logos/000/000/959/thumb/Set_rau_muo_CC_82_CC_81ng.png -public/system/dishes/image_logos/000/000/960/medium/Set_rau.png -public/system/dishes/image_logos/000/000/960/original/Set_rau.png -public/system/dishes/image_logos/000/000/960/square/Set_rau.png -public/system/dishes/image_logos/000/000/960/thumb/Set_rau.png -public/system/dishes/image_logos/000/000/961/medium/Set_ga_CC_80_ra_CC_81n.png -public/system/dishes/image_logos/000/000/961/original/Set_ga_CC_80_ra_CC_81n.png -public/system/dishes/image_logos/000/000/961/square/Set_ga_CC_80_ra_CC_81n.png -public/system/dishes/image_logos/000/000/961/thumb/Set_ga_CC_80_ra_CC_81n.png -public/system/dishes/image_logos/000/000/962/medium/Set_gyoza.png -public/system/dishes/image_logos/000/000/962/original/Set_gyoza.png -public/system/dishes/image_logos/000/000/962/square/Set_gyoza.png -public/system/dishes/image_logos/000/000/962/thumb/Set_gyoza.png -public/system/dishes/image_logos/000/000/975/medium/Co_CC_9Bm_bo_CC_80_ha_CC_82_CC_80m.png -public/system/dishes/image_logos/000/000/975/original/Co_CC_9Bm_bo_CC_80_ha_CC_82_CC_80m.png -public/system/dishes/image_logos/000/000/975/square/Co_CC_9Bm_bo_CC_80_ha_CC_82_CC_80m.png -public/system/dishes/image_logos/000/000/975/thumb/Co_CC_9Bm_bo_CC_80_ha_CC_82_CC_80m.png -public/system/dishes/image_logos/000/000/976/medium/Co_CC_9Bm_bo_CC_80_ha_CC_82_CC_80m.png -public/system/dishes/image_logos/000/000/976/original/Co_CC_9Bm_bo_CC_80_ha_CC_82_CC_80m.png -public/system/dishes/image_logos/000/000/976/square/Co_CC_9Bm_bo_CC_80_ha_CC_82_CC_80m.png -public/system/dishes/image_logos/000/000/976/thumb/Co_CC_9Bm_bo_CC_80_ha_CC_82_CC_80m.png -public/system/dishes/image_logos/000/000/977/medium/Co_CC_9Bm_bo_CC_80_ha_CC_82_CC_80m.png -public/system/dishes/image_logos/000/000/977/original/Co_CC_9Bm_bo_CC_80_ha_CC_82_CC_80m.png -public/system/dishes/image_logos/000/000/977/square/Co_CC_9Bm_bo_CC_80_ha_CC_82_CC_80m.png -public/system/dishes/image_logos/000/000/977/thumb/Co_CC_9Bm_bo_CC_80_ha_CC_82_CC_80m.png -public/system/dishes/image_logos/000/000/978/medium/Co_CC_9Bm.png -public/system/dishes/image_logos/000/000/978/original/Co_CC_9Bm.png -public/system/dishes/image_logos/000/000/978/square/Co_CC_9Bm.png -public/system/dishes/image_logos/000/000/978/thumb/Co_CC_9Bm.png -public/system/dishes/image_logos/000/000/979/medium/Co_CC_9Bm.png -public/system/dishes/image_logos/000/000/979/original/Co_CC_9Bm.png -public/system/dishes/image_logos/000/000/979/square/Co_CC_9Bm.png -public/system/dishes/image_logos/000/000/979/thumb/Co_CC_9Bm.png -public/system/dishes/image_logos/000/000/980/medium/Co_CC_9Bm.png -public/system/dishes/image_logos/000/000/980/original/Co_CC_9Bm.png -public/system/dishes/image_logos/000/000/980/square/Co_CC_9Bm.png -public/system/dishes/image_logos/000/000/980/thumb/Co_CC_9Bm.png -public/system/dishes/image_logos/000/001/080/medium/Screen_Shot_2018-05-30_at_5.35.16_AM.png -public/system/dishes/image_logos/000/001/080/original/Screen_Shot_2018-05-30_at_5.35.16_AM.png -public/system/dishes/image_logos/000/001/080/square/Screen_Shot_2018-05-30_at_5.35.16_AM.png -public/system/dishes/image_logos/000/001/080/thumb/Screen_Shot_2018-05-30_at_5.35.16_AM.png -public/system/dishes/image_logos/000/001/081/medium/banh_mi.png -public/system/dishes/image_logos/000/001/081/original/banh_mi.png -public/system/dishes/image_logos/000/001/081/square/banh_mi.png -public/system/dishes/image_logos/000/001/081/thumb/banh_mi.png -public/system/pictures/images/000/000/001/medium/salad_menu.JPG -public/system/pictures/images/000/000/001/original/salad_menu.JPG -public/system/pictures/images/000/000/001/square/salad_menu.JPG -public/system/pictures/images/000/000/001/thumb/salad_menu.JPG -public/system/pictures/images/000/000/002/medium/default_dish.jpg -public/system/pictures/images/000/000/002/original/default_dish.jpg -public/system/pictures/images/000/000/002/square/default_dish.jpg -public/system/pictures/images/000/000/002/thumb/default_dish.jpg -public/system/pictures/images/000/000/004/medium/Screen_Shot_2017-11-29_at_9.30.07_PM.png -public/system/pictures/images/000/000/004/original/Screen_Shot_2017-11-29_at_9.30.07_PM.png -public/system/pictures/images/000/000/004/square/Screen_Shot_2017-11-29_at_9.30.07_PM.png -public/system/pictures/images/000/000/004/thumb/Screen_Shot_2017-11-29_at_9.30.07_PM.png -public/system/restaurants/image_logos/000/000/015/medium/bun_bo_hung_map.png -public/system/restaurants/image_logos/000/000/015/original/bun_bo_hung_map.png -public/system/restaurants/image_logos/000/000/015/square/bun_bo_hung_map.png -public/system/restaurants/image_logos/000/000/015/thumb/bun_bo_hung_map.png -public/system/restaurants/image_logos/000/000/016/medium/salad_2.png -public/system/restaurants/image_logos/000/000/016/original/salad_2.png -public/system/restaurants/image_logos/000/000/016/square/salad_2.png -public/system/restaurants/image_logos/000/000/016/thumb/salad_2.png -public/system/restaurants/image_logos/000/000/031/medium/banh_canh_cua_hoang_lan.png -public/system/restaurants/image_logos/000/000/031/original/banh_canh_cua_hoang_lan.png -public/system/restaurants/image_logos/000/000/031/square/banh_canh_cua_hoang_lan.png -public/system/restaurants/image_logos/000/000/031/thumb/banh_canh_cua_hoang_lan.png -public/system/restaurants/image_logos/000/000/033/medium/salad_menu.JPG -public/system/restaurants/image_logos/000/000/033/original/salad_menu.JPG -public/system/restaurants/image_logos/000/000/033/square/salad_menu.JPG -public/system/restaurants/image_logos/000/000/033/thumb/salad_menu.JPG -public/system/restaurants/image_logos/000/000/034/medium/bun_vi_sai_gon.png -public/system/restaurants/image_logos/000/000/034/original/bun_vi_sai_gon.png -public/system/restaurants/image_logos/000/000/034/square/bun_vi_sai_gon.png -public/system/restaurants/image_logos/000/000/034/thumb/bun_vi_sai_gon.png -public/system/restaurants/image_logos/000/000/035/medium/bun_vi_sai_gon.png -public/system/restaurants/image_logos/000/000/035/original/bun_vi_sai_gon.png -public/system/restaurants/image_logos/000/000/035/square/bun_vi_sai_gon.png -public/system/restaurants/image_logos/000/000/035/thumb/bun_vi_sai_gon.png -public/system/restaurants/image_logos/000/000/036/medium/default_restaurant.jpg -public/system/restaurants/image_logos/000/000/036/original/default_restaurant.jpg -public/system/restaurants/image_logos/000/000/036/square/default_restaurant.jpg -public/system/restaurants/image_logos/000/000/036/thumb/default_restaurant.jpg -public/system/restaurants/image_logos/000/000/039/medium/default_restaurant.jpg -public/system/restaurants/image_logos/000/000/039/original/default_restaurant.jpg -public/system/restaurants/image_logos/000/000/039/square/default_restaurant.jpg -public/system/restaurants/image_logos/000/000/039/thumb/default_restaurant.jpg -public/system/restaurants/image_logos/000/000/040/medium/com_tam_thuan_kieu.png -public/system/restaurants/image_logos/000/000/040/original/com_tam_thuan_kieu.png -public/system/restaurants/image_logos/000/000/040/square/com_tam_thuan_kieu.png -public/system/restaurants/image_logos/000/000/040/thumb/com_tam_thuan_kieu.png -public/system/restaurants/image_logos/000/000/076/medium/Screen_Shot_2018-05-30_at_5.35.16_AM.png -public/system/restaurants/image_logos/000/000/076/original/Screen_Shot_2018-05-30_at_5.35.16_AM.png -public/system/restaurants/image_logos/000/000/076/square/Screen_Shot_2018-05-30_at_5.35.16_AM.png -public/system/restaurants/image_logos/000/000/076/thumb/Screen_Shot_2018-05-30_at_5.35.16_AM.png -public/system/restaurants/image_logos/000/000/077/medium/Screen_Shot_2018-05-25_at_3.10.47_PM.png -public/system/restaurants/image_logos/000/000/077/original/Screen_Shot_2018-05-25_at_3.10.47_PM.png -public/system/restaurants/image_logos/000/000/077/square/Screen_Shot_2018-05-25_at_3.10.47_PM.png -public/system/restaurants/image_logos/000/000/077/thumb/Screen_Shot_2018-05-25_at_3.10.47_PM.png -.byebug_history -*.png -config/environments/development.rb -.byebug_history From 942b069ab8a4c0da5da8b0ef9f982d717f2df067 Mon Sep 17 00:00:00 2001 From: anhvy Date: Mon, 20 May 2019 15:33:20 +0700 Subject: [PATCH 09/25] Finished UI for current order --- .rubocop.yml | 152 -- app/assets/images/empty-order.svg | 64 + app/assets/images/hero-isometric.png | Bin 0 -> 285645 bytes app/assets/images/lunch-isometric.svg | 2060 +++++++++++++++++ app/assets/stylesheets/dashboard.scss | 16 + app/assets/stylesheets/main.scss | 9 + app/assets/stylesheets/new_template.scss | 1 + app/assets/stylesheets/spacing.scss | 31 + app/assets/stylesheets/variables.scss | 20 + app/controllers/dashboards_controller.rb | 12 - app/views/dashboards/_self_order.html.haml | 4 +- app/views/dashboards/index.html.haml | 6 +- app/views/dashboards/shared/_navbar.html.haml | 7 +- app/views/sessions/new.html.haml | 4 +- 14 files changed, 2213 insertions(+), 173 deletions(-) delete mode 100644 .rubocop.yml create mode 100644 app/assets/images/empty-order.svg create mode 100644 app/assets/images/hero-isometric.png create mode 100644 app/assets/images/lunch-isometric.svg create mode 100644 app/assets/stylesheets/spacing.scss create mode 100644 app/assets/stylesheets/variables.scss diff --git a/.rubocop.yml b/.rubocop.yml deleted file mode 100644 index abbbeff..0000000 --- a/.rubocop.yml +++ /dev/null @@ -1,152 +0,0 @@ -AllCops: - TargetRubyVersion: 2.3 - TargetRailsVersion: 4.0 - Exclude: - - db/*.rb - - "vendor/**/*" - - "bin/*" - - "node_modules/**/*" - DisplayCopNames: true - -Rails: - Enabled: true - -Style/Alias: - Enabled: false - -Style/HashSyntax: - EnforcedStyle: ruby19 - -Style/Documentation: - Enabled: false - -Layout/AlignParameters: - Enabled: false - -Layout/BlockEndNewline: - Enabled: false - -Style/GuardClause: - Enabled: false - -Layout/IndentHash: - Enabled: false - -Layout/SpaceBeforeFirstArg: - Enabled: false - -Naming/PredicateName: - Enabled: false # Doesn't understand `has_secure_token`, though there's promising discussion here: https://github.com/bbatsov/rubocop/issues/1741 - -Style/Next: - Enabled: false - -Layout/CaseIndentation: - Enabled: false - -Style/ParallelAssignment: - Enabled: false - -Metrics/LineLength: - Max: 100 - -Metrics/ClassLength: - Enabled: false - -Metrics/ModuleLength: - Enabled: true - CountComments: false - Max: 300 - Exclude: - - "**/*_spec.rb" - -Metrics/BlockLength: - Exclude: - - "**/*_spec.rb" - - "app/models/concerns/cobranding_partner_integrations/integratable.rb" - -Style/StringLiterals: - Enabled: false - SupportedStyles: - - single_quotes - - double_quotes - ConsistentQuotesInMultiline: false - -Metrics/ParameterLists: - Max: 6 - -Layout/DotPosition: - Enabled: false - -Metrics/AbcSize: - Enabled: false - -Metrics/MethodLength: - Enabled: false - -Metrics/ClassLength: - Enabled: false - -Naming/AccessorMethodName: - Enabled: false - -Layout/AlignArray: - Enabled: false - -Layout/IndentArray: - Enabled: false - -Style/AndOr: - Enabled: false - -Style/BlockDelimiters: - Enabled: false - -Style/ClassAndModuleChildren: - Enabled: false - -Layout/MultilineOperationIndentation: - Enabled: false - -Layout/MultilineMethodCallIndentation: - Enabled: false - -Style/RegexpLiteral: - Enabled: false - -Rails/HasAndBelongsToMany: - Enabled: false # At the moment MultiEditble is the problem, for has_many through we'd need to interpolate the join table for Configs and Docs - -# Disable some New Rules from Rubocop 0.39 -Style/FrozenStringLiteralComment: - Enabled: false - -Style/SignalException: - Enabled: false - -Style/MutableConstant: - Enabled: false - -Style/ConditionalAssignment: - Enabled: false - -Lint/AmbiguousRegexpLiteral: - Description: >- - Checks for ambiguous regexp literals in the first argument of - a method invocation without parenthesis. - Enabled: false - -Lint/AmbiguousBlockAssociation: - Enabled: false - -# We are using Rails 4, this check is for Rails 5. So, let's remove it -# http://www.rubydoc.info/gems/rubocop/RuboCop/Cop/Rails/HttpPositionalArguments -Rails/HttpPositionalArguments: - Enabled: false - -Rails/SkipsModelValidations: - Enabled: true - Exclude: - - "app/models/member.rb" - - "app/models/organisation.rb" - - "**/*_spec.rb" diff --git a/app/assets/images/empty-order.svg b/app/assets/images/empty-order.svg new file mode 100644 index 0000000..56b6eed --- /dev/null +++ b/app/assets/images/empty-order.svg @@ -0,0 +1,64 @@ + + + + +Artboard 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/assets/images/hero-isometric.png b/app/assets/images/hero-isometric.png new file mode 100644 index 0000000000000000000000000000000000000000..e37b236956c0fd0377c70fe2ca7d0cbf7d15285a GIT binary patch literal 285645 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%0AA)nWkArE!$J1~0qqc4!73MT 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

u-bQX~L-g}LajxD=?O%$bd4u%FejF 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

R@?+d&c%_UV#EQUD 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/lunch-isometric.svg b/app/assets/images/lunch-isometric.svg new file mode 100644 index 0000000..9160a0a --- /dev/null +++ b/app/assets/images/lunch-isometric.svg @@ -0,0 +1,2060 @@ + + + + + + + + + + + + + + + HERO SECTION + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/assets/stylesheets/dashboard.scss b/app/assets/stylesheets/dashboard.scss index 94f7e28..aa3f46d 100644 --- a/app/assets/stylesheets/dashboard.scss +++ b/app/assets/stylesheets/dashboard.scss @@ -108,6 +108,10 @@ body { #navbar { border: none; margin-bottom: 50px; + + .item:not(:last-child) { + border-right: 1px solid #f2f2f2; + } } #dishes_container { @@ -251,3 +255,15 @@ body { #indicatorContainer { text-align: center; } + +#order_cart { + .empty-order { + text-align: center; + + h3.ui.header { + color: #626465; + padding-top: 2em; + text-transform: none; + } + } +} diff --git a/app/assets/stylesheets/main.scss b/app/assets/stylesheets/main.scss index 27a927b..ec5e516 100644 --- a/app/assets/stylesheets/main.scss +++ b/app/assets/stylesheets/main.scss @@ -78,3 +78,12 @@ body { background: #f2f2f2; } } + +.isometric { + top: 50%; + right: 0px; + width: 40%; + z-index: -1; + position: absolute; + transform: translateY(-50%); +} diff --git a/app/assets/stylesheets/new_template.scss b/app/assets/stylesheets/new_template.scss index ba5bd4c..1723432 100644 --- a/app/assets/stylesheets/new_template.scss +++ b/app/assets/stylesheets/new_template.scss @@ -1,5 +1,6 @@ /* *= require semantic + *= require spacing *= require main *= require dashboard */ diff --git a/app/assets/stylesheets/spacing.scss b/app/assets/stylesheets/spacing.scss new file mode 100644 index 0000000..6ad73b8 --- /dev/null +++ b/app/assets/stylesheets/spacing.scss @@ -0,0 +1,31 @@ +@import 'variables'; + +.ui.segment { + border: none; + -webkit-box-shadow: 0 2px 16px 0 rgba(0, 0, 0, 0.08); + -moz-box-shadow: 0 2px 16px 0 rgba(0, 0, 0, 0.08); + box-shadow: 0 2px 16px 0 rgba(0, 0, 0, 0.08); + border-radius: 0.75em; +} + +@each $type, $value in $spaceTypes { + @each $prop, $size in $spaceSizes { + .#{$type}-#{$prop} { + &--all { + #{$value}: $size $ip; + } + &--top, &--ends { + #{$value}-top: $size $ip; + } + &--bottom, &--ends { + #{$value}-bottom: $size $ip; + } + &--left, &--sides { + #{$value}-left: $size $ip; + } + &--right, &--sides { + #{$value}-right: $size $ip; + } + } + } +} diff --git a/app/assets/stylesheets/variables.scss b/app/assets/stylesheets/variables.scss new file mode 100644 index 0000000..08e250e --- /dev/null +++ b/app/assets/stylesheets/variables.scss @@ -0,0 +1,20 @@ +//--------------------- +// Sizes +//--------------------- + +$spaceTypes: ('m': "margin", 'p': "padding"); + +$spaceSizes: ( + 'none': 0, + 'tiny': 0.25em, + 'mini': 0.5em, + 'small': 1em, + 'medium': 2em, + 'big': 3em +); + +//--------------------- +// Properties +//--------------------- + +$ip: !important; diff --git a/app/controllers/dashboards_controller.rb b/app/controllers/dashboards_controller.rb index a58ee56..54a9e1b 100644 --- a/app/controllers/dashboards_controller.rb +++ b/app/controllers/dashboards_controller.rb @@ -14,20 +14,8 @@ def index return end - @today_order = Orders::RetrieveService.find_order_by_user_id_and_date session[:user_id], @select_date - @r_tags = Menus::RetrieveService.new(@menu).collect_follow_tags_for_each_restaurant - - @total_price = @today_order.blank? ? 0 : @today_order.cal_total_price - @all_orders = Order.where('DATE(date)=?', @select_date) - @available_restaurants = @menu.available_restaurants(Time.current) - @avg_cost_on_month = AverageCostService.call(current_user.id) - num_day_of_month = ParseDateService.weekdays_in_month_given_a_date(Date.current) - @total_allow_budget_for_month = num_day_of_month * Order::MONTH_AVG_LIMIT - @api_requests = {} end - - private end diff --git a/app/views/dashboards/_self_order.html.haml b/app/views/dashboards/_self_order.html.haml index ddae3c4..892e15f 100644 --- a/app/views/dashboards/_self_order.html.haml +++ b/app/views/dashboards/_self_order.html.haml @@ -2,7 +2,7 @@ %h3.ui.header Self Ordering .restaurant_selector %button.ui.basic.active.button All Dishes - - @available_restaurants.each do |res| + - @available_restaurants&.each do |res| .ui.basic.icon.button = res.name %i.dropdown.icon @@ -11,7 +11,7 @@ / %a.item= tag.name #dishes_container .dishes - - @available_restaurants.each do |restaurant| + - @available_restaurants&.each do |restaurant| - restaurant.by_date(@select_date).dish_decorators.each do |dish| .dish = render partial: 'layouts/components/image_tag_inline', diff --git a/app/views/dashboards/index.html.haml b/app/views/dashboards/index.html.haml index 567f2a8..1f3308a 100644 --- a/app/views/dashboards/index.html.haml +++ b/app/views/dashboards/index.html.haml @@ -11,8 +11,10 @@ %h3.ui.header Monthly budget: #indicatorContainer %p.average Avg 78.000 / 80.000 đ - #order_cart.ui.segment - .content + #order_cart.ui.segment.p-none--all + .empty-order + %h3.ui.header You haven't made any order yet! + = image_tag 'empty-order.svg', width: 250 :javascript $(function(){ diff --git a/app/views/dashboards/shared/_navbar.html.haml b/app/views/dashboards/shared/_navbar.html.haml index 442360c..0a051a1 100644 --- a/app/views/dashboards/shared/_navbar.html.haml +++ b/app/views/dashboards/shared/_navbar.html.haml @@ -1,11 +1,12 @@ #navbar.ui.borderless.menu - .item{style:"border-right: 1px solid #f2f2f2"} + %a.item(href="?select_date=#{@select_date - 1.day}") %i{"data-feather": "chevron-left"} - .item{style:"border-right: 1px solid #f2f2f2"} + %a.item(href="?select_date=#{@select_date + 1.day}") %i{"data-feather": "chevron-right"} .item= @select_date.strftime("%A, %B %e, %Y") .right.menu .item %span= current_user.username - .avatar + = link_to logout_path, method: :delete do + .avatar diff --git a/app/views/sessions/new.html.haml b/app/views/sessions/new.html.haml index 335e6ac..e118675 100644 --- a/app/views/sessions/new.html.haml +++ b/app/views/sessions/new.html.haml @@ -18,5 +18,5 @@ %button.ui.icon.button{type: "submit"} %span Sign in %i{"data-feather": "arrow-right"} - .nine.wide.column - = image_tag "hero-isometric.png", class: "ui image" +.isometric + = image_tag "lunch-isometric.svg", class: "ui image" From 1f71385f889936f6309f0450f4c3e097b3623165 Mon Sep 17 00:00:00 2001 From: anhvy Date: Mon, 20 May 2019 19:33:34 +0700 Subject: [PATCH 10/25] Added create order actions --- app/controllers/dashboards_controller.rb | 31 ++++++++++++++++------ app/views/dashboards/_self_order.html.haml | 2 +- app/views/dashboards/index.html.haml | 11 ++++++++ config/routes.rb | 7 +++++ 4 files changed, 42 insertions(+), 9 deletions(-) diff --git a/app/controllers/dashboards_controller.rb b/app/controllers/dashboards_controller.rb index 54a9e1b..d87e147 100644 --- a/app/controllers/dashboards_controller.rb +++ b/app/controllers/dashboards_controller.rb @@ -2,20 +2,35 @@ class DashboardsController < ApplicationController layout 'dashboard' before_action :require_login + STATUS_OK = 'ok'.freeze + STATUS_FAIL = 'fail'.freeze + MSG_SUCCESS = 'Success!'.freeze + def index @select_date = Date.parse(params[:select_date].presence || Date.today.to_s) @menu = Menu.where('DATE(date)=?', @select_date).first - return if @menu.blank? - if @select_date < Date.today || - (@select_date == Date.today && @menu.is_lock? && Time.current > @menu.locked_at) - @locked = true - @locked_time = @menu.locked_at - return - end @r_tags = Menus::RetrieveService.new(@menu).collect_follow_tags_for_each_restaurant - @all_orders = Order.where('DATE(date)=?', @select_date) @available_restaurants = @menu.available_restaurants(Time.current) end + + ### Temporary place these actions here for refactor orders_controller later + def create_order + service = OrderServices::AddDish.new(current_user.id, params[:dish_id], params[:select_date], Time.current) + service.call + + msg = if service.success? + { status: STATUS_OK, message: MSG_SUCCESS } + else + { status: STATUS_FAIL, message: service.errors } + end + + msg[:today] = session[:today_order] if msg[:status] == STATUS_OK + @order = service.order + + respond_to do |format| + format.json { render json: msg } + end + end end diff --git a/app/views/dashboards/_self_order.html.haml b/app/views/dashboards/_self_order.html.haml index 892e15f..d218e07 100644 --- a/app/views/dashboards/_self_order.html.haml +++ b/app/views/dashboards/_self_order.html.haml @@ -24,6 +24,6 @@ .header %a.name{href: dish_path(dish)}= dish.name %span.price= show_price dish.price - %button.ui.icon.button.add_button + %button.ui.icon.button.add_button{"data-dish-id": dish.id} %i{"data-feather": "plus"} %p.description= dish.description diff --git a/app/views/dashboards/index.html.haml b/app/views/dashboards/index.html.haml index 1f3308a..0861eb0 100644 --- a/app/views/dashboards/index.html.haml +++ b/app/views/dashboards/index.html.haml @@ -32,4 +32,15 @@ 2000000: '#33CC33', } }); + + $(".add_button").click(function(){ + dish_params = { + dish_id: $(this).data("dish-id"), + select_date: "#{@select_date}" + } + + console.log("Params:", dish_params) + + $.post("#{create_order_dashboards_path}", dish_params) + }); }) diff --git a/config/routes.rb b/config/routes.rb index 464fc1c..ac0f88d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -203,4 +203,11 @@ resources :ol_settings do end end + + ### New Router + resources :dashboards do + collection do + post 'create_order' + end + end end From d57a479a90bb4a9ee05db7b090d045da5102a98e Mon Sep 17 00:00:00 2001 From: anhvy Date: Mon, 20 May 2019 19:33:34 +0700 Subject: [PATCH 11/25] Added create order actions --- app/controllers/dashboards_controller.rb | 25 +++++++++++++++------- app/views/dashboards/_self_order.html.haml | 2 +- app/views/dashboards/index.html.haml | 11 ++++++++++ config/routes.rb | 7 ++++++ 4 files changed, 36 insertions(+), 9 deletions(-) diff --git a/app/controllers/dashboards_controller.rb b/app/controllers/dashboards_controller.rb index 54a9e1b..a2b5f17 100644 --- a/app/controllers/dashboards_controller.rb +++ b/app/controllers/dashboards_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class DashboardsController < ApplicationController layout 'dashboard' before_action :require_login @@ -5,17 +7,24 @@ class DashboardsController < ApplicationController def index @select_date = Date.parse(params[:select_date].presence || Date.today.to_s) @menu = Menu.where('DATE(date)=?', @select_date).first - return if @menu.blank? - if @select_date < Date.today || - (@select_date == Date.today && @menu.is_lock? && Time.current > @menu.locked_at) - @locked = true - @locked_time = @menu.locked_at - return - end @r_tags = Menus::RetrieveService.new(@menu).collect_follow_tags_for_each_restaurant - @all_orders = Order.where('DATE(date)=?', @select_date) @available_restaurants = @menu.available_restaurants(Time.current) end + + ### Temporary place these actions here for refactor orders_controller later + def create_order + service = OrderServices::AddDish.new(current_user.id, params[:dish_id], params[:select_date], Time.current) + service.call + + msg = service.success? ? { status: 'ok', message: 'Success!' } : { status: 'fail', message: service.errors } + + msg[:today] = session[:today_order] if msg[:status] == 'ok' + @order = service.order + + respond_to do |format| + format.json { render json: msg } + end + end end diff --git a/app/views/dashboards/_self_order.html.haml b/app/views/dashboards/_self_order.html.haml index 892e15f..d218e07 100644 --- a/app/views/dashboards/_self_order.html.haml +++ b/app/views/dashboards/_self_order.html.haml @@ -24,6 +24,6 @@ .header %a.name{href: dish_path(dish)}= dish.name %span.price= show_price dish.price - %button.ui.icon.button.add_button + %button.ui.icon.button.add_button{"data-dish-id": dish.id} %i{"data-feather": "plus"} %p.description= dish.description diff --git a/app/views/dashboards/index.html.haml b/app/views/dashboards/index.html.haml index 1f3308a..0861eb0 100644 --- a/app/views/dashboards/index.html.haml +++ b/app/views/dashboards/index.html.haml @@ -32,4 +32,15 @@ 2000000: '#33CC33', } }); + + $(".add_button").click(function(){ + dish_params = { + dish_id: $(this).data("dish-id"), + select_date: "#{@select_date}" + } + + console.log("Params:", dish_params) + + $.post("#{create_order_dashboards_path}", dish_params) + }); }) diff --git a/config/routes.rb b/config/routes.rb index 464fc1c..ac0f88d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -203,4 +203,11 @@ resources :ol_settings do end end + + ### New Router + resources :dashboards do + collection do + post 'create_order' + end + end end From bb1fecc4c77c1a8997f8d4581ccafef19ba265b3 Mon Sep 17 00:00:00 2001 From: anhvy Date: Sat, 1 Jun 2019 02:40:14 +0700 Subject: [PATCH 12/25] Ignored .env --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index aa7b213..4e988e5 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ .idea/ config/secrets.yml .byebug_history +.env From e0eca0cab43bdbf39879d803800a722ba8bdc195 Mon Sep 17 00:00:00 2001 From: anhvy Date: Sat, 1 Jun 2019 02:40:52 +0700 Subject: [PATCH 13/25] Disabled capybara-webkit temporary --- Gemfile | 2 +- Gemfile.lock | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/Gemfile b/Gemfile index 815f991..11b8152 100644 --- a/Gemfile +++ b/Gemfile @@ -58,7 +58,7 @@ end group :test do gem 'capybara', '2.7.1' gem 'capybara-screenshot' - gem 'capybara-webkit', '1.15.1' + # gem 'capybara-webkit', '1.15.1' gem 'database_cleaner' gem 'faker', '1.9.3' diff --git a/Gemfile.lock b/Gemfile.lock index 32bffc1..a15614f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -789,9 +789,6 @@ GEM capybara-screenshot (1.0.22) capybara (>= 1.0, < 4) launchy - capybara-webkit (1.15.1) - capybara (>= 2.3, < 4.0) - json case_transform (0.2) activesupport childprocess (0.9.0) @@ -1118,7 +1115,6 @@ DEPENDENCIES byebug capybara (= 2.7.1) capybara-screenshot - capybara-webkit (= 1.15.1) database_cleaner dotenv-rails factory_bot_rails From c5e0b091b02a4dd24dd8b6e70233c7894f0b7fdf Mon Sep 17 00:00:00 2001 From: anhvy Date: Mon, 3 Jun 2019 00:15:45 +0700 Subject: [PATCH 14/25] Added back rubocop config --- .rubocop.yml | 152 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 .rubocop.yml diff --git a/.rubocop.yml b/.rubocop.yml new file mode 100644 index 0000000..abbbeff --- /dev/null +++ b/.rubocop.yml @@ -0,0 +1,152 @@ +AllCops: + TargetRubyVersion: 2.3 + TargetRailsVersion: 4.0 + Exclude: + - db/*.rb + - "vendor/**/*" + - "bin/*" + - "node_modules/**/*" + DisplayCopNames: true + +Rails: + Enabled: true + +Style/Alias: + Enabled: false + +Style/HashSyntax: + EnforcedStyle: ruby19 + +Style/Documentation: + Enabled: false + +Layout/AlignParameters: + Enabled: false + +Layout/BlockEndNewline: + Enabled: false + +Style/GuardClause: + Enabled: false + +Layout/IndentHash: + Enabled: false + +Layout/SpaceBeforeFirstArg: + Enabled: false + +Naming/PredicateName: + Enabled: false # Doesn't understand `has_secure_token`, though there's promising discussion here: https://github.com/bbatsov/rubocop/issues/1741 + +Style/Next: + Enabled: false + +Layout/CaseIndentation: + Enabled: false + +Style/ParallelAssignment: + Enabled: false + +Metrics/LineLength: + Max: 100 + +Metrics/ClassLength: + Enabled: false + +Metrics/ModuleLength: + Enabled: true + CountComments: false + Max: 300 + Exclude: + - "**/*_spec.rb" + +Metrics/BlockLength: + Exclude: + - "**/*_spec.rb" + - "app/models/concerns/cobranding_partner_integrations/integratable.rb" + +Style/StringLiterals: + Enabled: false + SupportedStyles: + - single_quotes + - double_quotes + ConsistentQuotesInMultiline: false + +Metrics/ParameterLists: + Max: 6 + +Layout/DotPosition: + Enabled: false + +Metrics/AbcSize: + Enabled: false + +Metrics/MethodLength: + Enabled: false + +Metrics/ClassLength: + Enabled: false + +Naming/AccessorMethodName: + Enabled: false + +Layout/AlignArray: + Enabled: false + +Layout/IndentArray: + Enabled: false + +Style/AndOr: + Enabled: false + +Style/BlockDelimiters: + Enabled: false + +Style/ClassAndModuleChildren: + Enabled: false + +Layout/MultilineOperationIndentation: + Enabled: false + +Layout/MultilineMethodCallIndentation: + Enabled: false + +Style/RegexpLiteral: + Enabled: false + +Rails/HasAndBelongsToMany: + Enabled: false # At the moment MultiEditble is the problem, for has_many through we'd need to interpolate the join table for Configs and Docs + +# Disable some New Rules from Rubocop 0.39 +Style/FrozenStringLiteralComment: + Enabled: false + +Style/SignalException: + Enabled: false + +Style/MutableConstant: + Enabled: false + +Style/ConditionalAssignment: + Enabled: false + +Lint/AmbiguousRegexpLiteral: + Description: >- + Checks for ambiguous regexp literals in the first argument of + a method invocation without parenthesis. + Enabled: false + +Lint/AmbiguousBlockAssociation: + Enabled: false + +# We are using Rails 4, this check is for Rails 5. So, let's remove it +# http://www.rubydoc.info/gems/rubocop/RuboCop/Cop/Rails/HttpPositionalArguments +Rails/HttpPositionalArguments: + Enabled: false + +Rails/SkipsModelValidations: + Enabled: true + Exclude: + - "app/models/member.rb" + - "app/models/organisation.rb" + - "**/*_spec.rb" From e68d242defe38afb416cad305cdad0454d28cd2b Mon Sep 17 00:00:00 2001 From: anhvy Date: Fri, 6 Sep 2019 14:58:55 +0700 Subject: [PATCH 15/25] Update rubocop --- .rubocop.yml | 30 ++++-------------------------- 1 file changed, 4 insertions(+), 26 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index abbbeff..7284c47 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,6 +1,5 @@ AllCops: - TargetRubyVersion: 2.3 - TargetRailsVersion: 4.0 + TargetRubyVersion: 2.6.1 Exclude: - db/*.rb - "vendor/**/*" @@ -8,9 +7,6 @@ AllCops: - "node_modules/**/*" DisplayCopNames: true -Rails: - Enabled: true - Style/Alias: Enabled: false @@ -29,7 +25,7 @@ Layout/BlockEndNewline: Style/GuardClause: Enabled: false -Layout/IndentHash: +Layout/IndentFirstHashElement: Enabled: false Layout/SpaceBeforeFirstArg: @@ -48,10 +44,7 @@ Style/ParallelAssignment: Enabled: false Metrics/LineLength: - Max: 100 - -Metrics/ClassLength: - Enabled: false + Max: 80 Metrics/ModuleLength: Enabled: true @@ -93,7 +86,7 @@ Naming/AccessorMethodName: Layout/AlignArray: Enabled: false -Layout/IndentArray: +Layout/IndentFirstArrayElement: Enabled: false Style/AndOr: @@ -114,9 +107,6 @@ Layout/MultilineMethodCallIndentation: Style/RegexpLiteral: Enabled: false -Rails/HasAndBelongsToMany: - Enabled: false # At the moment MultiEditble is the problem, for has_many through we'd need to interpolate the join table for Configs and Docs - # Disable some New Rules from Rubocop 0.39 Style/FrozenStringLiteralComment: Enabled: false @@ -138,15 +128,3 @@ Lint/AmbiguousRegexpLiteral: Lint/AmbiguousBlockAssociation: Enabled: false - -# We are using Rails 4, this check is for Rails 5. So, let's remove it -# http://www.rubydoc.info/gems/rubocop/RuboCop/Cop/Rails/HttpPositionalArguments -Rails/HttpPositionalArguments: - Enabled: false - -Rails/SkipsModelValidations: - Enabled: true - Exclude: - - "app/models/member.rb" - - "app/models/organisation.rb" - - "**/*_spec.rb" From f6cc92b0fb57f59ead3aef4e1d3906a0f471abbf Mon Sep 17 00:00:00 2001 From: anhvy Date: Fri, 6 Sep 2019 14:59:12 +0700 Subject: [PATCH 16/25] Working on new dashboard UI --- Gemfile | 18 ++--- Gemfile.lock | 18 +++++ app/assets/images/empty-cart.png | Bin 0 -> 8660 bytes app/assets/images/empty-order.svg | 64 ---------------- .../images/orderup-emptystate-sadbag.png | Bin 0 -> 35856 bytes app/assets/javascripts/new_template.js | 2 + .../templates/selected_order_item.hbs | 14 ++++ app/assets/stylesheets/dashboard.scss | 21 +++--- app/controllers/dashboards_controller.rb | 18 ++--- app/decorators/application_decorator.rb | 8 ++ app/decorators/dish_decorator.rb | 18 +++++ app/models/order.rb | 2 +- app/views/dashboards/_self_order.html.haml | 2 +- app/views/dashboards/index.html.haml | 71 ++++++++++++------ 14 files changed, 136 insertions(+), 120 deletions(-) create mode 100644 app/assets/images/empty-cart.png delete mode 100644 app/assets/images/empty-order.svg create mode 100644 app/assets/images/orderup-emptystate-sadbag.png create mode 100644 app/assets/javascripts/templates/selected_order_item.hbs create mode 100644 app/decorators/application_decorator.rb create mode 100644 app/decorators/dish_decorator.rb diff --git a/Gemfile b/Gemfile index 11b8152..69f5a7d 100644 --- a/Gemfile +++ b/Gemfile @@ -9,31 +9,28 @@ gem 'rails_12factor' # Use sqlite3 as the database for Active Record group :development, :test do + gem 'dotenv-rails' gem 'rubocop', '0.53.0', require: false gem 'sqlite3' - gem 'dotenv-rails' end gem 'hamlit' gem 'kaminari' gem 'simple_form', '~> 4.1.0' - +gem 'bootsnap', '>= 1.1.0', require: false +gem 'jbuilder', '~> 2.5' gem 'jquery-rails', '4.3.3' gem 'pg', '>= 0.18', '< 2.0' gem 'puma', '~> 3.11' gem 'sass-rails', '~> 5.0' -gem 'uglifier', '>= 1.3.0' gem 'turbolinks', '~> 5' -gem 'jbuilder', '~> 2.5' -gem 'bootsnap', '>= 1.1.0', require: false -gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] - +gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw jruby] +gem 'uglifier', '>= 1.3.0' gem 'rest-client' gem 'sdoc', '~> 0.4.0', group: :doc - # Use Unicorn as the app server # gem 'unicorn' @@ -41,7 +38,6 @@ gem 'sdoc', '~> 0.4.0', group: :doc # gem 'capistrano-rails', group: :development group :development, :test do - # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug' gem 'factory_bot_rails' gem 'fuubar' @@ -49,10 +45,10 @@ group :development, :test do end group :development do - gem 'web-console', '>= 3.3.0' gem 'listen', '>= 3.0.5', '< 3.2' gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' + gem 'web-console', '>= 3.3.0' end group :test do @@ -87,7 +83,9 @@ gem 'aws-sdk-ec2', '~> 1' gem 'aws-sdk-s3', '~> 1' gem 'bootstrap3-datetimepicker-rails', '~> 4.17.47' +gem 'draper' gem 'grape' +gem 'handlebars_assets' gem 'momentjs-rails', '>= 2.9.0' gem 'slack-notifier' gem 'wombat', '~> 2.8.0' diff --git a/Gemfile.lock b/Gemfile.lock index a15614f..7d787b0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -35,6 +35,10 @@ GEM globalid (>= 0.3.6) activemodel (5.2.3) activesupport (= 5.2.3) + activemodel-serializers-xml (1.0.2) + activemodel (> 5.x) + activesupport (> 5.x) + builder (~> 3.1) activerecord (5.2.3) activemodel (= 5.2.3) activesupport (= 5.2.3) @@ -811,6 +815,12 @@ GEM dotenv-rails (2.7.2) dotenv (= 2.7.2) railties (>= 3.2, < 6.1) + draper (3.1.0) + actionpack (>= 5.0) + activemodel (>= 5.0) + activemodel-serializers-xml (>= 1.0) + activesupport (>= 5.0) + request_store (>= 1.0) equalizer (0.0.11) erubi (1.8.0) execjs (2.7.0) @@ -838,6 +848,10 @@ GEM temple (>= 0.8.0) thor tilt + handlebars_assets (0.23.3) + execjs (~> 2.0) + sprockets (>= 2.0.0) + tilt (>= 1.2) http-cookie (1.0.3) domain_name (~> 0.5) i18n (1.6.0) @@ -985,6 +999,8 @@ GEM rb-inotify (0.10.0) ffi (~> 1.0) rdoc (4.3.0) + request_store (1.4.1) + rack (>= 1.4) rest-client (2.0.2) http-cookie (>= 1.0.2, < 2.0) mime-types (>= 1.16, < 4.0) @@ -1117,11 +1133,13 @@ DEPENDENCIES capybara-screenshot database_cleaner dotenv-rails + draper factory_bot_rails faker (= 1.9.3) fuubar grape hamlit + handlebars_assets jbuilder (~> 2.5) jquery-rails (= 4.3.3) jquery-ui-rails (= 4.0.4) diff --git a/app/assets/images/empty-cart.png b/app/assets/images/empty-cart.png new file mode 100644 index 0000000000000000000000000000000000000000..f0b6946cd8196193a30269c2cd2c07305db97f62 GIT binary patch literal 8660 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 - - - -Artboard 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/assets/images/orderup-emptystate-sadbag.png b/app/assets/images/orderup-emptystate-sadbag.png new file mode 100644 index 0000000000000000000000000000000000000000..082e6e103cdbc5e9358e0116437a55153a215094 GIT binary patch literal 35856 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 b?|<^Ko&j?%RmZyl!=J&^)z4*}Q$iB}0ddHk literal 0 HcmV?d00001 diff --git a/app/assets/javascripts/new_template.js b/app/assets/javascripts/new_template.js index 027dcaa..3ad3d63 100644 --- a/app/assets/javascripts/new_template.js +++ b/app/assets/javascripts/new_template.js @@ -1,4 +1,6 @@ //= require jquery //= require jquery_ujs //= require semantic +//= require handlebars.runtime //= require_tree ./3rd_party +//= require_tree ./templates diff --git a/app/assets/javascripts/templates/selected_order_item.hbs b/app/assets/javascripts/templates/selected_order_item.hbs new file mode 100644 index 0000000..aecf766 --- /dev/null +++ b/app/assets/javascripts/templates/selected_order_item.hbs @@ -0,0 +1,14 @@ + + +

+ {{name}} +
+ {{name}} +
x1
+
+

+ + + {{price}} + + diff --git a/app/assets/stylesheets/dashboard.scss b/app/assets/stylesheets/dashboard.scss index aa3f46d..45b5914 100644 --- a/app/assets/stylesheets/dashboard.scss +++ b/app/assets/stylesheets/dashboard.scss @@ -5,7 +5,7 @@ body { .sidebar { width: 260px; background: #ffffff; - box-shadow: 0 2px 20px 0 rgba(0,0,0,0.075); + box-shadow: 0 2px 20px 0 rgba(0, 0, 0, 0.075); } .pusher { @@ -127,7 +127,7 @@ body { border-radius: 5px; background: #fff; align-items: flex-start; - box-shadow: 0 2px 4px 0 rgba(50,50,93,.1); + box-shadow: 0 2px 4px 0 rgba(50, 50, 93, .1); .ui.image { margin-right: 1em; @@ -225,7 +225,7 @@ body { margin-bottom: 50px; .ui.card { - box-shadow: 0 2px 4px 0 rgba(50,50,93,.1); + box-shadow: 0 2px 4px 0 rgba(50, 50, 93, .1); } } @@ -234,7 +234,7 @@ body { border: none; padding: 1.5em; border-radius: 5px; - box-shadow: 0 2px 4px 0 rgba(50,50,93,.1); + box-shadow: 0 2px 4px 0 rgba(50, 50, 93, .1); .ui.header { color: #2c3e50; @@ -257,13 +257,16 @@ body { } #order_cart { + padding: 1em; + .empty-order { + color: #626465; text-align: center; + text-transform: none; + } - h3.ui.header { - color: #626465; - padding-top: 2em; - text-transform: none; - } + .selected-order-item .dish-detail h4 { + margin-bottom: 0; + text-transform: none; } } diff --git a/app/controllers/dashboards_controller.rb b/app/controllers/dashboards_controller.rb index 783fc20..c84b9b7 100644 --- a/app/controllers/dashboards_controller.rb +++ b/app/controllers/dashboards_controller.rb @@ -4,10 +4,6 @@ class DashboardsController < ApplicationController layout 'dashboard' before_action :require_login - STATUS_OK = 'ok'.freeze - STATUS_FAIL = 'fail'.freeze - MSG_SUCCESS = 'Success!'.freeze - def index @select_date = Date.parse(params[:select_date].presence || Date.today.to_s) @menu = Menu.where('DATE(date)=?', @select_date).first @@ -15,6 +11,8 @@ def index @r_tags = Menus::RetrieveService.new(@menu).collect_follow_tags_for_each_restaurant @available_restaurants = @menu.available_restaurants(Time.current) + + @current_order = current_user.orders.where(date: Date.today).take end ### Temporary place these actions here for refactor orders_controller later @@ -22,19 +20,13 @@ def create_order service = OrderServices::AddDish.new(current_user.id, params[:dish_id], params[:select_date], Time.current) service.call -<<<<<<< HEAD - msg = service.success? ? { status: 'ok', message: 'Success!' } : { status: 'fail', message: service.errors } - - msg[:today] = session[:today_order] if msg[:status] == 'ok' -======= msg = if service.success? - { status: STATUS_OK, message: MSG_SUCCESS } + { status: 'success', message: 'success' } else - { status: STATUS_FAIL, message: service.errors } + { status: 'fail', message: service.errors } end - msg[:today] = session[:today_order] if msg[:status] == STATUS_OK ->>>>>>> 1f71385f889936f6309f0450f4c3e097b3623165 + msg[:today] = session[:today_order] if msg[:status] == 'success' @order = service.order respond_to do |format| diff --git a/app/decorators/application_decorator.rb b/app/decorators/application_decorator.rb new file mode 100644 index 0000000..5caf08b --- /dev/null +++ b/app/decorators/application_decorator.rb @@ -0,0 +1,8 @@ +class ApplicationDecorator < Draper::Decorator + # Define methods for all decorated objects. + # Helpers are accessed through `helpers` (aka `h`). For example: + # + # def percent_amount + # h.number_to_percentage object.amount, precision: 2 + # end +end diff --git a/app/decorators/dish_decorator.rb b/app/decorators/dish_decorator.rb new file mode 100644 index 0000000..ce7fb65 --- /dev/null +++ b/app/decorators/dish_decorator.rb @@ -0,0 +1,18 @@ +class DishDecorator < Draper::Decorator + delegate_all + + def detail_as_json + { + id: object.id, + name: object.name, + price: object.price, + image: dish_image_url + }.to_json + end + + private + + def dish_image_url + h.get_s3_image_source(object.presence, 'square') + end +end diff --git a/app/models/order.rb b/app/models/order.rb index 1debab2..7a633d6 100644 --- a/app/models/order.rb +++ b/app/models/order.rb @@ -14,6 +14,6 @@ class Order < ActiveRecord::Base DF_CR_UNIT = 'VND' def cal_total_price - dishes.inject(0) { |s, d| s + d.price } + dishes.sum(:price) end end diff --git a/app/views/dashboards/_self_order.html.haml b/app/views/dashboards/_self_order.html.haml index d218e07..140cb41 100644 --- a/app/views/dashboards/_self_order.html.haml +++ b/app/views/dashboards/_self_order.html.haml @@ -24,6 +24,6 @@ .header %a.name{href: dish_path(dish)}= dish.name %span.price= show_price dish.price - %button.ui.icon.button.add_button{"data-dish-id": dish.id} + %button.ui.icon.button.add_button{"data-dish-detail": dish.decorate.detail_as_json} %i{"data-feather": "plus"} %p.description= dish.description diff --git a/app/views/dashboards/index.html.haml b/app/views/dashboards/index.html.haml index 0861eb0..62a60f6 100644 --- a/app/views/dashboards/index.html.haml +++ b/app/views/dashboards/index.html.haml @@ -3,7 +3,7 @@ .ui.grid .eleven.wide.column - = render "dashboards/aggregate" + -# = render "dashboards/aggregate" = render "dashboards/self_order" .five.wide.column #summary_panel.ui.segment @@ -11,36 +11,63 @@ %h3.ui.header Monthly budget: #indicatorContainer %p.average Avg 78.000 / 80.000 đ - #order_cart.ui.segment.p-none--all - .empty-order - %h3.ui.header You haven't made any order yet! - = image_tag 'empty-order.svg', width: 250 + #order_cart.ui.segment + %table#dishes.ui.very.basic.celled.table + %tbody + - if @current_order && @current_order.dishes.present? + - @current_order.dishes.each do |dish| + %tr.selected-order-item + %td.dish-detail + %h4.ui.image.header + = render partial: 'layouts/components/image_tag_inline', + locals: {image: dish.image, + restaurant: dish, + size: [120, 120], + object: 'dish', + options: {class_name: "ui rounded image", img_size: 'thumb'}} + .content + = dish.name + .sub.header x1 + %td.dish-price= dish.price + - else + .empty-order + = image_tag 'empty-cart.png', width: 150, class: "p-big--top" + %p.p-big--bottom You haven't order anything yet! :javascript $(function(){ $radialIndicator = $('#indicatorContainer').radialIndicator({ - minValue: 10000, - maxValue: 2000000, - format: '##,###,### đ', - barWidth: 8, - initValue: 100000, - roundCorner : true, - barColor: { - 0: '#FF0000', - 160000: '#FFFF00', - 560000: '#0066FF', - 2000000: '#33CC33', - } + minValue: 10000, + maxValue: 2000000, + format: '##,###,### đ', + barWidth: 8, + initValue: 100000, + roundCorner : true, + barColor: { + 0: '#FF0000', + 160000: '#FFFF00', + 560000: '#0066FF', + 2000000: '#33CC33', + } }); $(".add_button").click(function(){ + dish_detail = $(this).data('dish-detail') dish_params = { - dish_id: $(this).data("dish-id"), - select_date: "#{@select_date}" + dish_id: dish_detail['id'], + select_date: "#{@select_date}" } - console.log("Params:", dish_params) - - $.post("#{create_order_dashboards_path}", dish_params) + $.post("#{create_order_dashboards_path}", dish_params, function(response_data) { + $("#order_cart .empty-order").hide(); + selectedOrderItemHtml = HandlebarsTemplates['selected_order_item'](dish_detail); + $("#dishes").append(selectedOrderItemHtml); + }) + .done(function(response_data){ + console.log("Success:", response_data); + }) + .fail(function(response_data){ + console.log("Error! Should remove renedered block"); + }) }); }) From 2fd33627889290331060520f4873a75432e391f1 Mon Sep 17 00:00:00 2001 From: anhvy Date: Fri, 6 Sep 2019 15:25:48 +0700 Subject: [PATCH 17/25] Working on refine layout --- app/assets/stylesheets/dashboard.scss | 6 +- app/views/dashboards/_self_order.html.haml | 64 +++++++++++-------- app/views/dashboards/index.html.haml | 2 - app/views/dashboards/shared/_navbar.html.haml | 12 ---- app/views/layouts/_sidebar.html.haml | 4 ++ 5 files changed, 44 insertions(+), 44 deletions(-) diff --git a/app/assets/stylesheets/dashboard.scss b/app/assets/stylesheets/dashboard.scss index 45b5914..d66f649 100644 --- a/app/assets/stylesheets/dashboard.scss +++ b/app/assets/stylesheets/dashboard.scss @@ -106,8 +106,8 @@ body { } #navbar { + margin: 0; border: none; - margin-bottom: 50px; .item:not(:last-child) { border-right: 1px solid #f2f2f2; @@ -118,7 +118,7 @@ body { .dishes { display: grid; grid-gap: 1.5em; - grid-template-columns: repeat(2, 1fr); + grid-template-columns: 1fr; } .dish { @@ -176,7 +176,7 @@ body { #filter_container { display: flex; margin-bottom: 3em; - align-items: flex-start; + align-items: center; justify-content: space-between; } diff --git a/app/views/dashboards/_self_order.html.haml b/app/views/dashboards/_self_order.html.haml index 140cb41..355d8a6 100644 --- a/app/views/dashboards/_self_order.html.haml +++ b/app/views/dashboards/_self_order.html.haml @@ -1,29 +1,39 @@ #filter_container %h3.ui.header Self Ordering - .restaurant_selector - %button.ui.basic.active.button All Dishes - - @available_restaurants&.each do |res| - .ui.basic.icon.button - = res.name - %i.dropdown.icon - / .menu - / - @r_tags[res.id.to_s].keys.each do |tag| - / %a.item= tag.name -#dishes_container - .dishes - - @available_restaurants&.each do |restaurant| - - restaurant.by_date(@select_date).dish_decorators.each do |dish| - .dish - = render partial: 'layouts/components/image_tag_inline', - locals: {image: dish.image, - restaurant: dish, - size: [120, 120], - object: 'dish', - options: {class_name: "ui rounded image", img_size: 'thumb'}} - .content - .header - %a.name{href: dish_path(dish)}= dish.name - %span.price= show_price dish.price - %button.ui.icon.button.add_button{"data-dish-detail": dish.decorate.detail_as_json} - %i{"data-feather": "plus"} - %p.description= dish.description + #navbar.ui.borderless.menu + %a.item(href="?select_date=#{@select_date - 1.day}") + %i{"data-feather": "chevron-left"} + %a.item(href="?select_date=#{@select_date + 1.day}") + %i{"data-feather": "chevron-right"} + .item= @select_date.strftime("%A, %B %e, %Y") + +.ui.grid + .five.wide.column + .restaurant_selector + %button.ui.basic.active.button All Dishes + - @available_restaurants&.each do |res| + .ui.basic.icon.button + = res.name + %i.dropdown.icon + / .menu + / - @r_tags[res.id.to_s].keys.each do |tag| + / %a.item= tag.name + .eleven.wide.column + #dishes_container + .dishes + - @available_restaurants&.each do |restaurant| + - restaurant.by_date(@select_date).dish_decorators.each do |dish| + .dish + = render partial: 'layouts/components/image_tag_inline', + locals: {image: dish.image, + restaurant: dish, + size: [120, 120], + object: 'dish', + options: {class_name: "ui rounded image", img_size: 'thumb'}} + .content + .header + %a.name{href: dish_path(dish)}= dish.name + %span.price= show_price dish.price + %button.ui.icon.button.add_button{"data-dish-detail": dish.decorate.detail_as_json} + %i{"data-feather": "plus"} + %p.description= dish.description diff --git a/app/views/dashboards/index.html.haml b/app/views/dashboards/index.html.haml index 62a60f6..5d51747 100644 --- a/app/views/dashboards/index.html.haml +++ b/app/views/dashboards/index.html.haml @@ -1,6 +1,4 @@ .ui.fluid.container - = render "dashboards/shared/navbar" - .ui.grid .eleven.wide.column -# = render "dashboards/aggregate" diff --git a/app/views/dashboards/shared/_navbar.html.haml b/app/views/dashboards/shared/_navbar.html.haml index 0a051a1..e69de29 100644 --- a/app/views/dashboards/shared/_navbar.html.haml +++ b/app/views/dashboards/shared/_navbar.html.haml @@ -1,12 +0,0 @@ -#navbar.ui.borderless.menu - %a.item(href="?select_date=#{@select_date - 1.day}") - %i{"data-feather": "chevron-left"} - %a.item(href="?select_date=#{@select_date + 1.day}") - %i{"data-feather": "chevron-right"} - .item= @select_date.strftime("%A, %B %e, %Y") - .right.menu - .item - %span= current_user.username - = link_to logout_path, method: :delete do - .avatar - diff --git a/app/views/layouts/_sidebar.html.haml b/app/views/layouts/_sidebar.html.haml index bcc713e..08818ba 100644 --- a/app/views/layouts/_sidebar.html.haml +++ b/app/views/layouts/_sidebar.html.haml @@ -25,3 +25,7 @@ = link_to admin_index_path, class: 'item' do %i{"data-feather": "zap"} %span Administration + .item + = link_to logout_path, method: :delete do + %span= current_user.username + .avatar From 1bb074d7f6910e7af433124cf1994117a4cd3be3 Mon Sep 17 00:00:00 2001 From: anhvy Date: Sun, 12 Jan 2020 13:02:32 +0700 Subject: [PATCH 18/25] [WIP] --- app/controllers/dashboards_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/dashboards_controller.rb b/app/controllers/dashboards_controller.rb index c84b9b7..0f34988 100644 --- a/app/controllers/dashboards_controller.rb +++ b/app/controllers/dashboards_controller.rb @@ -12,7 +12,7 @@ def index @r_tags = Menus::RetrieveService.new(@menu).collect_follow_tags_for_each_restaurant @available_restaurants = @menu.available_restaurants(Time.current) - @current_order = current_user.orders.where(date: Date.today).take + @current_order = current_user.orders.where(date: @select_date).take end ### Temporary place these actions here for refactor orders_controller later From bd31cf44cee8c1f2296cbbd33301e76ddfc11c16 Mon Sep 17 00:00:00 2001 From: anhvy Date: Tue, 4 Feb 2020 23:57:38 +0700 Subject: [PATCH 19/25] feat: new admin layout --- Gemfile | 2 +- Gemfile.lock | 15 +- app/assets/images/lunchery-logo.svg | 1 + app/assets/javascripts/new_template.js | 1 + app/assets/stylesheets/main.scss | 12 +- app/assets/stylesheets/management.scss | 76 ++++++++ app/assets/stylesheets/new_template.scss | 1 + app/assets/stylesheets/reset.scss | 79 ++++++++ app/controllers/managements_controller.rb | 7 + .../manages/overviews_controller.rb | 6 + .../manages/restaurants_controller.rb | 11 ++ app/helpers/application_helper.rb | 2 + app/helpers/sessions_helper.rb | 7 + app/views/layouts/_sidebar.html.haml | 4 +- .../{dashboard.html.haml => dashboard.haml} | 2 +- app/views/layouts/management.haml | 48 +++++ app/views/manages/overviews/index.haml | 8 + app/views/manages/restaurants/index.haml | 38 ++++ app/views/manages/restaurants/new.haml | 19 ++ config/initializers/pagy.rb | 171 ++++++++++++++++++ config/routes.rb | 5 + 21 files changed, 493 insertions(+), 22 deletions(-) create mode 100644 app/assets/images/lunchery-logo.svg create mode 100644 app/assets/stylesheets/management.scss create mode 100644 app/assets/stylesheets/reset.scss create mode 100644 app/controllers/managements_controller.rb create mode 100644 app/controllers/manages/overviews_controller.rb create mode 100644 app/controllers/manages/restaurants_controller.rb rename app/views/layouts/{dashboard.html.haml => dashboard.haml} (93%) create mode 100644 app/views/layouts/management.haml create mode 100644 app/views/manages/overviews/index.haml create mode 100644 app/views/manages/restaurants/index.haml create mode 100644 app/views/manages/restaurants/new.haml create mode 100644 config/initializers/pagy.rb diff --git a/Gemfile b/Gemfile index 69f5a7d..c8e201e 100644 --- a/Gemfile +++ b/Gemfile @@ -15,7 +15,6 @@ group :development, :test do end gem 'hamlit' -gem 'kaminari' gem 'simple_form', '~> 4.1.0' gem 'bootsnap', '>= 1.1.0', require: false @@ -89,6 +88,7 @@ gem 'handlebars_assets' gem 'momentjs-rails', '>= 2.9.0' gem 'slack-notifier' gem 'wombat', '~> 2.8.0' +gem 'pagy' source 'https://rails-assets.org' do gem 'rails-assets-semantic' diff --git a/Gemfile.lock b/Gemfile.lock index 7d787b0..f740453 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -870,18 +870,6 @@ GEM railties (>= 3.1.0) json (1.8.6) jsonapi-renderer (0.2.0) - kaminari (1.1.1) - activesupport (>= 4.1.0) - kaminari-actionview (= 1.1.1) - kaminari-activerecord (= 1.1.1) - kaminari-core (= 1.1.1) - kaminari-actionview (1.1.1) - actionview - kaminari-core (= 1.1.1) - kaminari-activerecord (1.1.1) - activerecord - kaminari-core (= 1.1.1) - kaminari-core (1.1.1) launchy (2.4.3) addressable (~> 2.3) listen (3.1.5) @@ -927,6 +915,7 @@ GEM nokogiri (1.10.3) mini_portile2 (~> 2.4.0) ntlm-http (0.1.1) + pagy (3.7.2) paperclip (6.1.0) activemodel (>= 4.2.0) activesupport (>= 4.2.0) @@ -1143,9 +1132,9 @@ DEPENDENCIES jbuilder (~> 2.5) jquery-rails (= 4.3.3) jquery-ui-rails (= 4.0.4) - kaminari listen (>= 3.0.5, < 3.2) momentjs-rails (>= 2.9.0) + pagy paperclip (= 6.1.0) pg (>= 0.18, < 2.0) poltergeist diff --git a/app/assets/images/lunchery-logo.svg b/app/assets/images/lunchery-logo.svg new file mode 100644 index 0000000..4b8dcf8 --- /dev/null +++ b/app/assets/images/lunchery-logo.svg @@ -0,0 +1 @@ +lunchery-logo \ No newline at end of file diff --git a/app/assets/javascripts/new_template.js b/app/assets/javascripts/new_template.js index 3ad3d63..3747c9f 100644 --- a/app/assets/javascripts/new_template.js +++ b/app/assets/javascripts/new_template.js @@ -1,5 +1,6 @@ //= require jquery //= require jquery_ujs +//= require turbolinks //= require semantic //= require handlebars.runtime //= require_tree ./3rd_party diff --git a/app/assets/stylesheets/main.scss b/app/assets/stylesheets/main.scss index ec5e516..d097cac 100644 --- a/app/assets/stylesheets/main.scss +++ b/app/assets/stylesheets/main.scss @@ -6,11 +6,6 @@ body { height: 100vh; } -.ui.button { - font-weight: normal; - text-transform: uppercase; -} - #login { .form { @@ -40,7 +35,13 @@ body { .ui.button .feather { height: 20px; } + + .ui.button { + font-weight: normal; + text-transform: uppercase; + } } + .ui.header { color: #2c3e50; margin: 20px 0; @@ -70,6 +71,7 @@ body { .item { padding: 0.75em; } + .avatar { width: 30px; height: 30px; diff --git a/app/assets/stylesheets/management.scss b/app/assets/stylesheets/management.scss new file mode 100644 index 0000000..102ed69 --- /dev/null +++ b/app/assets/stylesheets/management.scss @@ -0,0 +1,76 @@ +@import 'reset'; + +body { + background: #f5f7fb; +} + +#navigation { + h3 { + color: #2c3e50; + font-size: 18px; + font-weight: 400; + } + + .menu { + border: none; + border-bottom: 1px solid rgba(0, 40, 100, 0.12); + } + + .right.menu { + border: none; + } + + .menu .item:hover, + .menu .item.active { + color: #54a0ff; + background-color: transparent; + } + + .menu .item.active:after { + bottom: 0; + height: 2px; + content: ''; + position: absolute; + width: calc(100% - 2em); + background-color: #54a0ff; + } + + .menu .item { + display: flex; + color: #6e7687; + align-items: center; + } + + .menu .item .feather { + width: 16px; + height: 16px; + margin-right: 0.5em; + } + + .middle-aligned { + display: flex; + align-items: center; + } +} + +#management_board { + .statistic .ui.segment { + border-radius: 4px; + box-shadow: 0 22px 22px 0 rgba(11, 37, 75, 0.01), 0 14px 14px 0 rgba(11, 37, 75, 0.02), 0 4px 4px 0 rgba(11, 37, 75, 0.02), 0 2px 2px 0 rgba(11, 37, 75, 0.02), 0 0 0 1px rgba(11, 37, 75, 0.04); + } + + .data-table { + th { + color: #718096; + font-weight: 500; + padding: 0.5em 1em; + background-color: #f3f5f8; + } + } +} + +#advanced_table_bundle { + .ui.attached.segment { + border-color: rgba(0, 40, 100, 0.12); + } +} diff --git a/app/assets/stylesheets/new_template.scss b/app/assets/stylesheets/new_template.scss index 1723432..6f2ce1d 100644 --- a/app/assets/stylesheets/new_template.scss +++ b/app/assets/stylesheets/new_template.scss @@ -3,4 +3,5 @@ *= require spacing *= require main *= require dashboard + *= require management */ diff --git a/app/assets/stylesheets/reset.scss b/app/assets/stylesheets/reset.scss new file mode 100644 index 0000000..ccf4882 --- /dev/null +++ b/app/assets/stylesheets/reset.scss @@ -0,0 +1,79 @@ +html, +body, +div, +span, +applet, +object, +iframe, +p, +blockquote, +pre, +a, +abbr, +acronym, +address, +big, +cite, +code, +del, +dfn, +em, +img, +ins, +kbd, +q, +s, +samp, +small, +strike, +strong, +sub, +sup, +tt, +var, +b, +u, +i, +center, +dl, +dt, +dd, +ol, +ul, +li, +fieldset, +form, +label, +legend, +table, +caption, +tbody, +tfoot, +thead, +tr, +th, +td, +article, +aside { + font-family: 'Maven Pro', sans-serif; +} + +h1, +h2, +h3, +h4, +h5, +h6, +.ui.header { + font-weight: 500; + font-family: 'Maven Pro', sans-serif; +} + +.ui.input input { + font-family: 'Maven Pro', sans-serif; +} + +.ui.primary.button { + background: #54a0ff; + font-weight: normal; +} diff --git a/app/controllers/managements_controller.rb b/app/controllers/managements_controller.rb new file mode 100644 index 0000000..b4ce135 --- /dev/null +++ b/app/controllers/managements_controller.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class ManagementsController < ApplicationController + layout 'management' + before_action :require_login + before_action :authorize_administration +end diff --git a/app/controllers/manages/overviews_controller.rb b/app/controllers/manages/overviews_controller.rb new file mode 100644 index 0000000..35959f7 --- /dev/null +++ b/app/controllers/manages/overviews_controller.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +class Manages::OverviewsController < ManagementsController + def index + end +end \ No newline at end of file diff --git a/app/controllers/manages/restaurants_controller.rb b/app/controllers/manages/restaurants_controller.rb new file mode 100644 index 0000000..6b15281 --- /dev/null +++ b/app/controllers/manages/restaurants_controller.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true +include Pagy::Backend + +class Manages::RestaurantsController < ManagementsController + def index + @pagy, @restaurants = pagy(Restaurant.order("created_at DESC")) + end + + def new + end +end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 6d6b878..5b74598 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1,4 +1,6 @@ module ApplicationHelper + include Pagy::Frontend + NUMBER_OF_DISH_PER_PAGE = 30 STATUS_OK = 'ok'.freeze STATUS_FAIL = 'fail'.freeze diff --git a/app/helpers/sessions_helper.rb b/app/helpers/sessions_helper.rb index cfba14f..dcb43c6 100644 --- a/app/helpers/sessions_helper.rb +++ b/app/helpers/sessions_helper.rb @@ -6,6 +6,13 @@ def require_login end end + def authorize_administration + return if current_user.admin? + + flash[:danger] = 'Need to login to see this page' + redirect_to dashboards_path + end + def log_in(user) session[:user_id] = user.id session[:is_admin] = User.find(user.id).admin? diff --git a/app/views/layouts/_sidebar.html.haml b/app/views/layouts/_sidebar.html.haml index 08818ba..4c0ef9c 100644 --- a/app/views/layouts/_sidebar.html.haml +++ b/app/views/layouts/_sidebar.html.haml @@ -1,7 +1,7 @@ #sidebar_content .heading - = image_tag "eh-canteen-logo.svg", width: 80 - %h3 EH's Lunch Ordering + = image_tag "lunchery-logo.svg", width: 80 + %h3 Lunchery .quick_actions = link_to order_user_path(current_user), class: "item #{active_state_for(:order_lunch)}" do %i{"data-feather": "shopping-bag"} diff --git a/app/views/layouts/dashboard.html.haml b/app/views/layouts/dashboard.haml similarity index 93% rename from app/views/layouts/dashboard.html.haml rename to app/views/layouts/dashboard.haml index 1559912..fda54d6 100644 --- a/app/views/layouts/dashboard.html.haml +++ b/app/views/layouts/dashboard.haml @@ -1,7 +1,7 @@ !!! %html %head - %title EH Canteen + %title Lunchery | EH's Lunch Ordering = stylesheet_link_tag 'new_template', media: 'all', 'data-turbolinks-track': true = javascript_include_tag 'new_template', 'data-turbolinks-track': true = csrf_meta_tags diff --git a/app/views/layouts/management.haml b/app/views/layouts/management.haml new file mode 100644 index 0000000..5e9e6e6 --- /dev/null +++ b/app/views/layouts/management.haml @@ -0,0 +1,48 @@ +!!! +%html + %head + %title Lunchery | Admin Dashboard + = stylesheet_link_tag 'new_template', media: 'all', 'data-turbolinks-track': true + = javascript_include_tag 'new_template', 'data-turbolinks-track': true + = csrf_meta_tags + %script{src: "https://unpkg.com/feather-icons"} + %link{href: "https://employmenthero.com/favicon-96x96.png", rel: "icon", sizes: "96x96", type: "image/png"}/ + %link{href: "https://fonts.googleapis.com/css?family=Maven+Pro:400,500,700&subset=vietnamese", rel: "stylesheet"}/ + %link{href: "https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css", rel: "stylesheet"}/ + %body + #navigation + .ui.borderless.top.attached.menu + .ui.container + .item.p-none--left.p-small--right + = image_tag "lunchery-logo.svg", width: 35, class: 'ui image' + .item.horizontally.fitted + %h3 Lunchery + .right.menu + .item + %a.middle-aligned(href="/") + %i{"data-feather": "arrow-left"} + Switch to dashboard + .item.p-none--right + .ui.basic.button Sign Out + .ui.borderless.bottom.attached.menu + .ui.container + = link_to manages_root_path, class: "item p-none--left #{'active' if current_page?(manages_root_path)}" do + %i{"data-feather": "home"} + Overview + %a.item(href="https://google.com") + %i{"data-feather": "file-text"} + Menus + = link_to manages_restaurants_path, class: "item #{'active' if controller_name == 'restaurants'}" do + %i{"data-feather": "coffee"} + Restaurant + %a.item(href="https://google.com") + %i{"data-feather": "users"} + Users + + #management_board.ui.container + .p-medium--ends= yield + + :javascript + $(function(){ + feather.replace(); + }); diff --git a/app/views/manages/overviews/index.haml b/app/views/manages/overviews/index.haml new file mode 100644 index 0000000..7c374e1 --- /dev/null +++ b/app/views/manages/overviews/index.haml @@ -0,0 +1,8 @@ +.statistic + .ui.three.column.grid + .column + .ui.segment + .column + .ui.segment + .column + .ui.segment diff --git a/app/views/manages/restaurants/index.haml b/app/views/manages/restaurants/index.haml new file mode 100644 index 0000000..5a1d7e8 --- /dev/null +++ b/app/views/manages/restaurants/index.haml @@ -0,0 +1,38 @@ +#advanced_table_bundle + %h3.text-xl.font-medium Restaurant List + + .ui.top.attached.segment + .flex.items-center.justify-between + .ui.category.search.item + .flex.items-center + %i.w-8.mr-5.text-gray-500{'data-feather': 'search'} + %input{type:"text", + placeholder:"Search restaurant...", + class: "appearance-none bg-transparent border-none w-full text-gray-700 mr-3 py-1 px-2 leading-tight focus:outline-none text-lg"} + = link_to "Add New Restaurant", new_manages_restaurant_path, class: "ui primary button" + .ui.attached.segment.p-none--all + %table.ui.very.basic.celled.table.data-table + %thead + %tr + %th.center.aligned.p-mini--sides ID + %th Restaurant + %th Supplier + %th Created at + %th + %tbody + - @restaurants.each do |restaurant| + %tr + %td.center.aligned.p-mini--sides + = restaurant.id + %td + %h4.ui.header + = restaurant.name + .sub.header= restaurant.address + %td Now Delivery + %td= restaurant.created_at + %td.center.aligned + .ui.very.basic.mini.icon.button + %i.setting.icon + + .ui.bottom.attached.segment + != pagy_semantic_nav(@pagy) diff --git a/app/views/manages/restaurants/new.haml b/app/views/manages/restaurants/new.haml new file mode 100644 index 0000000..5db0561 --- /dev/null +++ b/app/views/manages/restaurants/new.haml @@ -0,0 +1,19 @@ +%h3.text-xl.font-medium New Restaurant +.ui.two.column.grid.m-small--top + .column + .bg-white.rounded.border-gray-400.p-5 + %h5.text-lg.font-medium + Crawl from + %img.inline.h-8(src="https://www.now.vn/app/assets/img/nowvn.png" alt="Now logo")/ + .ui.divider + .mt-5 + .label.mb-2 Input Now's URL: + .ui.input.fluid + %input(type="text" placeholder="https://www.now.vn/ho-chi-minh/chilli-thai-mac-thi-buoi")/ + %button.flex.items-center.p-2.bg-gray-300.rounded.w-auto.mt-3 + %i.text-gray-600.h-5.mr-2{'data-feather': 'download-cloud'} + %span.text-gray-600.mr-1 Pull restaurant info + .column + .bg-white.rounded.border-gray-400.p-5 + %h5.text-lg.font-medium Manually input as Vendor + diff --git a/config/initializers/pagy.rb b/config/initializers/pagy.rb new file mode 100644 index 0000000..d81b7ea --- /dev/null +++ b/config/initializers/pagy.rb @@ -0,0 +1,171 @@ +# encoding: utf-8 +# frozen_string_literal: true + +# Pagy initializer file (3.7.2) +# Customize only what you really need and notice that Pagy works also without any of the following lines. +# Should you just cherry pick part of this file, please maintain the require-order of the extras + + +# Extras +# See https://ddnexus.github.io/pagy/extras + + +# Backend Extras + +# Array extra: Paginate arrays efficiently, avoiding expensive array-wrapping and without overriding +# See https://ddnexus.github.io/pagy/extras/array +# require 'pagy/extras/array' + +# Countless extra: Paginate without any count, saving one query per rendering +# See https://ddnexus.github.io/pagy/extras/countless +# require 'pagy/extras/countless' +# Pagy::VARS[:cycle] = false # default + +# Elasticsearch Rails extra: Paginate `ElasticsearchRails::Results` objects +# See https://ddnexus.github.io/pagy/extras/elasticsearch_rails +# require 'pagy/extras/elasticsearch_rails' + +# Searchkick extra: Paginate `Searchkick::Results` objects +# See https://ddnexus.github.io/pagy/extras/searchkick +# require 'pagy/extras/searchkick' + + +# Frontend Extras + +# Bootstrap extra: Add nav, nav_js and combo_nav_js helpers and templates for Bootstrap pagination +# See https://ddnexus.github.io/pagy/extras/bootstrap +# require 'pagy/extras/bootstrap' + +# Bulma extra: Add nav, nav_js and combo_nav_js helpers and templates for Bulma pagination +# See https://ddnexus.github.io/pagy/extras/bulma +# require 'pagy/extras/bulma' + +# Foundation extra: Add nav, nav_js and combo_nav_js helpers and templates for Foundation pagination +# See https://ddnexus.github.io/pagy/extras/foundation +# require 'pagy/extras/foundation' + +# Materialize extra: Add nav, nav_js and combo_nav_js helpers for Materialize pagination +# See https://ddnexus.github.io/pagy/extras/materialize +# require 'pagy/extras/materialize' + +# Navs extra: Add nav_js and combo_nav_js javascript helpers +# Notice: the other frontend extras add their own framework-styled versions, +# so require this extra only if you need the unstyled version +# See https://ddnexus.github.io/pagy/extras/navs +# require 'pagy/extras/navs' + +# Semantic extra: Add nav, nav_js and combo_nav_js helpers for Semantic UI pagination +# See https://ddnexus.github.io/pagy/extras/semantic +# require 'pagy/extras/semantic' + +# UIkit extra: Add nav helper and templates for UIkit pagination +# See https://ddnexus.github.io/pagy/extras/uikit +# require 'pagy/extras/uikit' + +# Multi size var used by the *_nav_js helpers +# See https://ddnexus.github.io/pagy/extras/navs#steps +# Pagy::VARS[:steps] = { 0 => [2,3,3,2], 540 => [3,5,5,3], 720 => [5,7,7,5] } # example + + +# Feature Extras + +# Headers extra: http response headers (and other helpers) useful for API pagination +# See http://ddnexus.github.io/pagy/extras/headers +# require 'pagy/extras/headers' +# Pagy::VARS[:headers] = { page: 'Current-Page', items: 'Page-Items', count: 'Total-Count', pages: 'Total-Pages' } # default + +# Support extra: Extra support for features like: incremental, infinite, auto-scroll pagination +# See https://ddnexus.github.io/pagy/extras/support +# require 'pagy/extras/support' + +# Items extra: Allow the client to request a custom number of items per page with an optional selector UI +# See https://ddnexus.github.io/pagy/extras/items +# require 'pagy/extras/items' +# Pagy::VARS[:items_param] = :items # default +# Pagy::VARS[:max_items] = 100 # default + +# Overflow extra: Allow for easy handling of overflowing pages +# See https://ddnexus.github.io/pagy/extras/overflow +# require 'pagy/extras/overflow' +# Pagy::VARS[:overflow] = :empty_page # default (other options: :last_page and :exception) + +# Metadata extra: Provides the pagination metadata to Javascript frameworks like Vue.js, react.js, etc. +# See https://ddnexus.github.io/pagy/extras/metadata +# you must require the shared internal extra (BEFORE the metadata extra) ONLY if you need also the :sequels +# require 'pagy/extras/shared' +# require 'pagy/extras/metadata' +# For performance reason, you should explicitly set ONLY the metadata you use in the frontend +# Pagy::VARS[:metadata] = [:scaffold_url, :count, :page, :prev, :next, :last] # example + +# Trim extra: Remove the page=1 param from links +# See https://ddnexus.github.io/pagy/extras/trim +# require 'pagy/extras/trim' + + + +# Pagy Variables +# See https://ddnexus.github.io/pagy/api/pagy#variables +# All the Pagy::VARS are set for all the Pagy instances but can be overridden +# per instance by just passing them to Pagy.new or the #pagy controller method + + +# Instance variables +# See https://ddnexus.github.io/pagy/api/pagy#instance-variables +# Pagy::VARS[:items] = 20 # default + + +# Other Variables +# See https://ddnexus.github.io/pagy/api/pagy#other-variables +# Pagy::VARS[:size] = [1,4,4,1] # default +# Pagy::VARS[:page_param] = :page # default +# Pagy::VARS[:params] = {} # default +# Pagy::VARS[:anchor] = '#anchor' # example +# Pagy::VARS[:link_extra] = 'data-remote="true"' # example + + +# Rails + +# Rails: extras assets path required by the helpers that use javascript +# (pagy*_nav_js, pagy*_combo_nav_js, and pagy_items_selector_js) +# See https://ddnexus.github.io/pagy/extras#javascript +# Rails.application.config.assets.paths << Pagy.root.join('javascripts') + + +# I18n + +# Pagy internal I18n: ~18x faster using ~10x less memory than the i18n gem +# See https://ddnexus.github.io/pagy/api/frontend#i18n +# Notice: No need to configure anything in this section if your app uses only "en" +# or if you use the i18n extra below +# +# Examples: +# load the "de" built-in locale: +# Pagy::I18n.load(locale: 'de') +# +# load the "de" locale defined in the custom file at :filepath: +# Pagy::I18n.load(locale: 'de', filepath: 'path/to/pagy-de.yml') +# +# load the "de", "en" and "es" built-in locales: +# (the first passed :locale will be used also as the default_locale) +# Pagy::I18n.load({locale: 'de'}, +# {locale: 'en'}, +# {locale: 'es'}) +# +# load the "en" built-in locale, a custom "es" locale, +# and a totally custom locale complete with a custom :pluralize proc: +# (the first passed :locale will be used also as the default_locale) +# Pagy::I18n.load({locale: 'en'}, +# {locale: 'es', filepath: 'path/to/pagy-es.yml'}, +# {locale: 'xyz', # not built-in +# filepath: 'path/to/pagy-xyz.yml', +# pluralize: lambda{|count| ... } ) + + +# I18n extra: uses the standard i18n gem which is ~18x slower using ~10x more memory +# than the default pagy internal i18n (see above) +# See https://ddnexus.github.io/pagy/extras/i18n +# require 'pagy/extras/i18n' + +# Default i18n key +# Pagy::VARS[:i18n_key] = 'pagy.item_name' # default +require 'pagy/extras/semantic' \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index ac0f88d..9aaa14b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -210,4 +210,9 @@ post 'create_order' end end + + namespace :manages do + root 'overviews#index' + resources :restaurants + end end From 5f862f47a36bc3640125898ea5e3ccc957fcca7e Mon Sep 17 00:00:00 2001 From: anhvy Date: Wed, 5 Feb 2020 00:57:40 +0700 Subject: [PATCH 20/25] chore: update bundler version --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index f740453..85e6b61 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1169,4 +1169,4 @@ RUBY VERSION ruby 2.6.1p33 BUNDLED WITH - 1.17.3 + 2.0.2 From 9216c056ca0100b1ebf518818af03e57a342ae07 Mon Sep 17 00:00:00 2001 From: anhvy Date: Wed, 5 Feb 2020 01:07:11 +0700 Subject: [PATCH 21/25] chore: temporary change background color --- app/assets/stylesheets/management.scss | 6 +++--- app/views/layouts/management.haml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/assets/stylesheets/management.scss b/app/assets/stylesheets/management.scss index 102ed69..d347aa6 100644 --- a/app/assets/stylesheets/management.scss +++ b/app/assets/stylesheets/management.scss @@ -1,8 +1,8 @@ @import 'reset'; -body { - background: #f5f7fb; -} +// body { +// background: #f5f7fb; +// } #navigation { h3 { diff --git a/app/views/layouts/management.haml b/app/views/layouts/management.haml index 5e9e6e6..2a697c3 100644 --- a/app/views/layouts/management.haml +++ b/app/views/layouts/management.haml @@ -9,7 +9,7 @@ %link{href: "https://employmenthero.com/favicon-96x96.png", rel: "icon", sizes: "96x96", type: "image/png"}/ %link{href: "https://fonts.googleapis.com/css?family=Maven+Pro:400,500,700&subset=vietnamese", rel: "stylesheet"}/ %link{href: "https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css", rel: "stylesheet"}/ - %body + %body{style: "background: #f5f7fb"} #navigation .ui.borderless.top.attached.menu .ui.container From 4b476d3e2bacd10cc6140363915166d4c7743d0e Mon Sep 17 00:00:00 2001 From: anhvy Date: Wed, 5 Feb 2020 01:20:23 +0700 Subject: [PATCH 22/25] chore: use latest bundler --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 85e6b61..e0357e0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1169,4 +1169,4 @@ RUBY VERSION ruby 2.6.1p33 BUNDLED WITH - 2.0.2 + 2.1.4 From e21a083a645628a56b9992c2558b09e03c49e9e0 Mon Sep 17 00:00:00 2001 From: anhvy Date: Wed, 5 Feb 2020 02:04:20 +0700 Subject: [PATCH 23/25] chore: upgrade to latest ruby version --- Gemfile | 2 +- Gemfile.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile b/Gemfile index c8e201e..6bf5ca5 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,6 @@ source 'https://rubygems.org' -ruby '2.6.1' +ruby '2.6.5' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '~> 5.2.3' diff --git a/Gemfile.lock b/Gemfile.lock index e0357e0..1adf3d6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1166,7 +1166,7 @@ DEPENDENCIES wombat (~> 2.8.0) RUBY VERSION - ruby 2.6.1p33 + ruby 2.6.5p114 BUNDLED WITH 2.1.4 From 1de4dcaf107cd6f6091b043eaaf4e350f35a4eaa Mon Sep 17 00:00:00 2001 From: anhvy Date: Fri, 7 Feb 2020 21:00:54 +0700 Subject: [PATCH 24/25] chore: restyle login page --- app/assets/stylesheets/main.scss | 113 +++++++++++++------------ app/assets/stylesheets/management.scss | 6 +- app/views/layouts/management.haml | 2 +- app/views/layouts/sessions.html.haml | 2 +- app/views/sessions/new.html.haml | 6 +- 5 files changed, 67 insertions(+), 62 deletions(-) diff --git a/app/assets/stylesheets/main.scss b/app/assets/stylesheets/main.scss index d097cac..e35aa56 100644 --- a/app/assets/stylesheets/main.scss +++ b/app/assets/stylesheets/main.scss @@ -6,64 +6,76 @@ body { height: 100vh; } +.sessions { + background: #ffffff; -#login { - .form { - max-width: 360px; - margin-top: 50px; + #login { + .form { + max-width: 360px; + margin-top: 3rem; - input { - color: #525f7f; - font-weight: 100; - border-radius: 0.5em; - border-color: #dfe5ea; - font-family: 'Maven Pro', sans-serif; - } + input { + color: #525f7f; + font-weight: 100; + border-radius: 0.5em; + border-color: #dfe5ea; + font-family: 'Maven Pro', sans-serif; + } - .ui.button { - width: 40%; - display: flex; - color: #27ae60; - margin-top: 2em; - padding: 0.75em 1em; - align-items: center; - border-radius: 0.5em; - justify-content: space-between; - background: rgba(68, 217, 149, 0.15); - } + .ui.button { + width: 40%; + display: flex; + color: #4093c6; + margin-top: 2em; + padding: 0.75em 1em; + align-items: center; + border-radius: 0.5em; + justify-content: space-between; + background: rgb(224, 245, 253); + } - .ui.button .feather { - height: 20px; + .ui.button .feather { + height: 20px; + } + + .ui.button { + font-weight: normal; + text-transform: uppercase; + } } - .ui.button { + .ui.header { + color: #2c3e50; + margin: 14px 0; + font-size: 32px; font-weight: normal; - text-transform: uppercase; + font-family: 'Maven Pro', sans-serif; } } - .ui.header { - color: #2c3e50; - margin: 20px 0; - font-size: 32px; - font-weight: normal; - font-family: 'Maven Pro', sans-serif; - } -} + .input-icon { + display: flex; + margin: 0em; + height: 100%; + width: 2.67142857em; + align-items: center; + justify-content: center; + position: absolute; + text-align: center; + opacity: 0.5; -.input-icon { - display: flex; - margin: 0em; - height: 100%; - width: 2.67142857em; - align-items: center; - justify-content: center; - position: absolute; - text-align: center; - opacity: 0.5; + svg { + height: 18px; + } + } - svg { - height: 18px; + .isometric { + top: 50%; + right: 0px; + width: 40%; + z-index: -1; + position: absolute; + transform: translateY(-50%); } } @@ -80,12 +92,3 @@ body { background: #f2f2f2; } } - -.isometric { - top: 50%; - right: 0px; - width: 40%; - z-index: -1; - position: absolute; - transform: translateY(-50%); -} diff --git a/app/assets/stylesheets/management.scss b/app/assets/stylesheets/management.scss index d347aa6..102ed69 100644 --- a/app/assets/stylesheets/management.scss +++ b/app/assets/stylesheets/management.scss @@ -1,8 +1,8 @@ @import 'reset'; -// body { -// background: #f5f7fb; -// } +body { + background: #f5f7fb; +} #navigation { h3 { diff --git a/app/views/layouts/management.haml b/app/views/layouts/management.haml index 2a697c3..5e9e6e6 100644 --- a/app/views/layouts/management.haml +++ b/app/views/layouts/management.haml @@ -9,7 +9,7 @@ %link{href: "https://employmenthero.com/favicon-96x96.png", rel: "icon", sizes: "96x96", type: "image/png"}/ %link{href: "https://fonts.googleapis.com/css?family=Maven+Pro:400,500,700&subset=vietnamese", rel: "stylesheet"}/ %link{href: "https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css", rel: "stylesheet"}/ - %body{style: "background: #f5f7fb"} + %body #navigation .ui.borderless.top.attached.menu .ui.container diff --git a/app/views/layouts/sessions.html.haml b/app/views/layouts/sessions.html.haml index 8db8d85..3f1d41d 100644 --- a/app/views/layouts/sessions.html.haml +++ b/app/views/layouts/sessions.html.haml @@ -8,7 +8,7 @@ %script{src: "https://unpkg.com/feather-icons"} %link{href: "https://employmenthero.com/favicon-96x96.png", rel: "icon", sizes: "96x96", type: "image/png"}/ %link{href: "https://fonts.googleapis.com/css?family=Maven+Pro:400,500,700&subset=vietnamese", rel: "stylesheet"}/ - %body + %body.sessions .ui.container= yield :javascript diff --git a/app/views/sessions/new.html.haml b/app/views/sessions/new.html.haml index e118675..5d99464 100644 --- a/app/views/sessions/new.html.haml +++ b/app/views/sessions/new.html.haml @@ -1,8 +1,10 @@ - provide(:title, "Log in") .ui.grid.middle.aligned.full-view-height .seven.wide.column#login - = image_tag "eh-canteen-logo.svg", height: 60 - %h1.ui.header EH's Lunch Ordering Services + = image_tag "lunchery-logo.svg", height: 70 + %h1.ui.header + Lunchery + .sub.header Welcome to EH's lunch ordering service. = form_for(:session, url: login_path, html: {class: "ui large form"}) do |f| .field .ui.left.icon.input From f985d153a7b221dee8c617525ff97407e9f8b95f Mon Sep 17 00:00:00 2001 From: anhvy Date: Fri, 7 Feb 2020 21:18:30 +0700 Subject: [PATCH 25/25] chore: enhance UI with simplebar --- app/assets/stylesheets/management.scss | 6 +++++- app/views/layouts/management.haml | 19 +++++++++++-------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/app/assets/stylesheets/management.scss b/app/assets/stylesheets/management.scss index 102ed69..bbea460 100644 --- a/app/assets/stylesheets/management.scss +++ b/app/assets/stylesheets/management.scss @@ -56,7 +56,11 @@ body { #management_board { .statistic .ui.segment { border-radius: 4px; - box-shadow: 0 22px 22px 0 rgba(11, 37, 75, 0.01), 0 14px 14px 0 rgba(11, 37, 75, 0.02), 0 4px 4px 0 rgba(11, 37, 75, 0.02), 0 2px 2px 0 rgba(11, 37, 75, 0.02), 0 0 0 1px rgba(11, 37, 75, 0.04); + box-shadow: 0 22px 22px 0 rgba(11, 37, 75, 0.01), + 0 14px 14px 0 rgba(11, 37, 75, 0.02), + 0 4px 4px 0 rgba(11, 37, 75, 0.02), + 0 2px 2px 0 rgba(11, 37, 75, 0.02), + 0 0 0 1px rgba(11, 37, 75, 0.04); } .data-table { diff --git a/app/views/layouts/management.haml b/app/views/layouts/management.haml index 5e9e6e6..e043f7d 100644 --- a/app/views/layouts/management.haml +++ b/app/views/layouts/management.haml @@ -5,15 +5,15 @@ = stylesheet_link_tag 'new_template', media: 'all', 'data-turbolinks-track': true = javascript_include_tag 'new_template', 'data-turbolinks-track': true = csrf_meta_tags - %script{src: "https://unpkg.com/feather-icons"} %link{href: "https://employmenthero.com/favicon-96x96.png", rel: "icon", sizes: "96x96", type: "image/png"}/ %link{href: "https://fonts.googleapis.com/css?family=Maven+Pro:400,500,700&subset=vietnamese", rel: "stylesheet"}/ + %link{href: "https://unpkg.com/simplebar@latest/dist/simplebar.css", rel: "stylesheet"}/ %link{href: "https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css", rel: "stylesheet"}/ - %body + %body{"data-simplebar": true} #navigation .ui.borderless.top.attached.menu .ui.container - .item.p-none--left.p-small--right + .item.p-small--right = image_tag "lunchery-logo.svg", width: 35, class: 'ui image' .item.horizontally.fitted %h3 Lunchery @@ -22,11 +22,11 @@ %a.middle-aligned(href="/") %i{"data-feather": "arrow-left"} Switch to dashboard - .item.p-none--right + .item .ui.basic.button Sign Out .ui.borderless.bottom.attached.menu .ui.container - = link_to manages_root_path, class: "item p-none--left #{'active' if current_page?(manages_root_path)}" do + = link_to manages_root_path, class: "item #{'active' if current_page?(manages_root_path)}" do %i{"data-feather": "home"} Overview %a.item(href="https://google.com") @@ -40,9 +40,12 @@ Users #management_board.ui.container - .p-medium--ends= yield + .p-medium--ends.p-small--sides= yield + + %script{src: "https://unpkg.com/feather-icons"} + %script{src: "https://unpkg.com/simplebar@latest/dist/simplebar.min.js"} :javascript - $(function(){ + document.addEventListener("turbolinks:load", function() { feather.replace(); - }); + })