diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000..e015b314 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,14 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Debug Local File", + "type": "Ruby", + "request": "launch", + "program": "${workspaceRoot}/main.rb" + } + ] +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 00000000..1970f9f1 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,17 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "label": "Build Ruby", + "type": "shell", + "command": "ruby bin/run.rb", + "problemMatcher": [], + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} \ No newline at end of file diff --git a/1 b/1 new file mode 100644 index 00000000..e76afbaa --- /dev/null +++ b/1 @@ -0,0 +1,190 @@ +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/forwardable.rb:116: warning: already initialized constant Forwardable::VERSION +/home/shreyamohak/.rvm/gems/ruby-2.6.1/gems/forwardable-1.3.1/lib/forwardable/version.rb:3: warning: previous definition of VERSION was here +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/forwardable.rb:117: warning: already initialized constant Forwardable::FORWARDABLE_VERSION +/home/shreyamohak/.rvm/gems/ruby-2.6.1/gems/forwardable-1.3.1/lib/forwardable/version.rb:4: warning: previous definition of FORWARDABLE_VERSION was here +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_AIO_LISTIO_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_AIO_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_AIO_PRIO_DELTA_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_ARG_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_ATEXIT_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_BC_BASE_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_BC_DIM_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_BC_SCALE_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_BC_STRING_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_CHILD_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_CLK_TCK +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_COLL_WEIGHTS_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_DELAYTIMER_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_EXPR_NEST_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_HOST_NAME_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_IOV_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_LINE_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_LOGIN_NAME_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_NGROUPS_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_GETGR_R_SIZE_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_GETPW_R_SIZE_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_MQ_OPEN_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_MQ_PRIO_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_OPEN_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_ADVISORY_INFO +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_BARRIERS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_ASYNCHRONOUS_IO +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_CLOCK_SELECTION +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_CPUTIME +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_FSYNC +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_IPV6 +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_JOB_CONTROL +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_MAPPED_FILES +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_MEMLOCK +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_MEMLOCK_RANGE +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_MEMORY_PROTECTION +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_MESSAGE_PASSING +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_MONOTONIC_CLOCK +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_PRIORITIZED_IO +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_PRIORITY_SCHEDULING +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_RAW_SOCKETS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_READER_WRITER_LOCKS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_REALTIME_SIGNALS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_REGEXP +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_SAVED_IDS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_SEMAPHORES +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_SHARED_MEMORY_OBJECTS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_SHELL +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_SPAWN +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_SPIN_LOCKS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_SPORADIC_SERVER +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_SS_REPL_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_SYNCHRONIZED_IO +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_THREAD_ATTR_STACKADDR +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_THREAD_ATTR_STACKSIZE +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_THREAD_CPUTIME +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_THREAD_PRIO_INHERIT +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_THREAD_PRIO_PROTECT +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_THREAD_PRIORITY_SCHEDULING +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_THREAD_PROCESS_SHARED +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_THREAD_ROBUST_PRIO_INHERIT +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_THREAD_ROBUST_PRIO_PROTECT +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_THREAD_SAFE_FUNCTIONS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_THREAD_SPORADIC_SERVER +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_THREADS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_TIMEOUTS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_TIMERS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_TRACE +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_TRACE_EVENT_FILTER +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_TRACE_EVENT_NAME_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_TRACE_INHERIT +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_TRACE_LOG +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_TRACE_NAME_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_TRACE_SYS_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_TRACE_USER_EVENT_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_TYPED_MEMORY_OBJECTS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_VERSION +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_V7_ILP32_OFF32 +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_V7_ILP32_OFFBIG +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_V7_LP64_OFF64 +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_V7_LPBIG_OFFBIG +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_V6_ILP32_OFF32 +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_V6_ILP32_OFFBIG +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_V6_LP64_OFF64 +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_V6_LPBIG_OFFBIG +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_2_C_BIND +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_2_C_DEV +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_2_CHAR_TERM +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_2_FORT_DEV +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_2_FORT_RUN +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_2_LOCALEDEF +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_2_PBS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_2_PBS_ACCOUNTING +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_2_PBS_CHECKPOINT +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_2_PBS_LOCATE +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_2_PBS_MESSAGE +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_2_PBS_TRACK +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_2_SW_DEV +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_2_UPE +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_2_VERSION +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_PAGE_SIZE +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_PAGESIZE +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_THREAD_DESTRUCTOR_ITERATIONS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_THREAD_KEYS_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_THREAD_STACK_MIN +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_THREAD_THREADS_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_RE_DUP_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_RTSIG_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_SEM_NSEMS_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_SEM_VALUE_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_SIGQUEUE_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_STREAM_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_SYMLOOP_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_TIMER_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_TTY_NAME_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_TZNAME_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_XOPEN_CRYPT +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_XOPEN_ENH_I18N +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_XOPEN_REALTIME +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_XOPEN_REALTIME_THREADS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_XOPEN_SHM +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_XOPEN_STREAMS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_XOPEN_UNIX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_XOPEN_VERSION +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_PHYS_PAGES +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_AVPHYS_PAGES +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_NPROCESSORS_CONF +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::SC_NPROCESSORS_ONLN +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_PATH +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_POSIX_V7_ILP32_OFF32_CFLAGS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_POSIX_V7_ILP32_OFF32_LDFLAGS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_POSIX_V7_ILP32_OFF32_LIBS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_POSIX_V7_ILP32_OFFBIG_CFLAGS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_POSIX_V7_ILP32_OFFBIG_LIBS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_POSIX_V7_LP64_OFF64_CFLAGS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_POSIX_V7_LP64_OFF64_LDFLAGS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_POSIX_V7_LP64_OFF64_LIBS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_POSIX_V7_LPBIG_OFFBIG_LIBS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_POSIX_V7_WIDTH_RESTRICTED_ENVS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_V7_ENV +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_POSIX_V6_ILP32_OFF32_CFLAGS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_POSIX_V6_ILP32_OFF32_LDFLAGS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_POSIX_V6_ILP32_OFF32_LIBS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_POSIX_V6_ILP32_OFFBIG_CFLAGS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_POSIX_V6_ILP32_OFFBIG_LIBS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_POSIX_V6_LP64_OFF64_CFLAGS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_POSIX_V6_LP64_OFF64_LDFLAGS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_POSIX_V6_LP64_OFF64_LIBS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_POSIX_V6_LPBIG_OFFBIG_LIBS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_POSIX_V6_WIDTH_RESTRICTED_ENVS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_V6_ENV +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_GNU_LIBC_VERSION +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::CS_GNU_LIBPTHREAD_VERSION +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::PC_FILESIZEBITS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::PC_LINK_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::PC_MAX_CANON +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::PC_MAX_INPUT +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::PC_NAME_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::PC_PATH_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::PC_PIPE_BUF +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::PC_2_SYMLINKS +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::PC_ALLOC_SIZE_MIN +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::PC_REC_INCR_XFER_SIZE +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::PC_REC_MAX_XFER_SIZE +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::PC_REC_MIN_XFER_SIZE +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::PC_REC_XFER_ALIGN +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::PC_SYMLINK_MAX +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::PC_CHOWN_RESTRICTED +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::PC_NO_TRUNC +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::PC_VDISABLE +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::PC_ASYNC_IO +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::PC_PRIO_IO +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Etc::PC_SYNC_IO +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Struct::Passwd +/home/shreyamohak/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/x86_64-linux/etc.so: warning: already initialized constant Struct::Group +bin/run.rb:2:in `require_relative': /home/shreyamohak/flatiron/week3/ruby-project-guidelines/bin/cli.rb:154: syntax error, unexpected ':', expecting end (SyntaxError) +...name, password: user_password): +... ^ +/home/shreyamohak/flatiron/week3/ruby-project-guidelines/bin/cli.rb:234: syntax error, unexpected end-of-input, expecting end + from bin/run.rb:2:in `
' diff --git a/Customer b/Customer new file mode 100644 index 00000000..f2d34265 --- /dev/null +++ b/Customer @@ -0,0 +1,378 @@ +=> [#, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + #, + # 5.2' gem "sinatra-activerecord" -gem "sqlite3" +gem "sqlite3", '~> 1.3.6' gem "pry" gem "require_all" +gem "faker" +gem "rake" +gem "tty-prompt" +gem "pastel" +gem "tty-progressbar" +gem "tty-spinner" +gem 'tty-font' +gem 'tty-table' +gem 'date' +gem 'rest-client' +gem 'json' +gem 'colorize' +gem 'lolize' +gem "tty-table" +gem "rubocopy" diff --git a/Gemfile.lock b/Gemfile.lock index 9589226d..25c32d9e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,56 +1,131 @@ GEM remote: https://rubygems.org/ specs: - activemodel (6.0.3.1) - activesupport (= 6.0.3.1) - activerecord (6.0.3.1) - activemodel (= 6.0.3.1) - activesupport (= 6.0.3.1) - activesupport (6.0.3.1) + activemodel (5.2.4.4) + activesupport (= 5.2.4.4) + activerecord (5.2.4.4) + activemodel (= 5.2.4.4) + activesupport (= 5.2.4.4) + arel (>= 9.0) + activesupport (5.2.4.4) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 0.7, < 2) minitest (~> 5.1) tzinfo (~> 1.1) - zeitwerk (~> 2.2, >= 2.2.2) - coderay (1.1.1) - concurrent-ruby (1.1.6) - i18n (1.8.2) + arel (9.0.0) + coderay (1.1.3) + colorize (0.8.1) + concurrent-ruby (1.1.7) + date (3.0.1) + domain_name (0.5.20190701) + unf (>= 0.0.5, < 1.0.0) + equatable (0.6.1) + faker (2.15.1) + i18n (>= 1.6, < 2) + http-accept (1.7.0) + http-cookie (1.0.3) + domain_name (~> 0.5) + i18n (1.8.5) concurrent-ruby (~> 1.0) - method_source (0.8.2) - minitest (5.14.1) - mustermann (1.0.3) - pry (0.10.4) - coderay (~> 1.1.0) - method_source (~> 0.8.1) - slop (~> 3.4) + json (2.3.1) + lolize (0.0.3) + paint (~> 0.8.3) + method_source (1.0.0) + mime-types (3.3.1) + mime-types-data (~> 3.2015) + mime-types-data (3.2020.1104) + minitest (5.14.2) + mustermann (1.1.1) + ruby2_keywords (~> 0.0.1) + necromancer (0.6.0) + netrc (0.11.0) + paint (0.8.7) + pastel (0.8.0) + tty-color (~> 0.5) + pry (0.13.1) + coderay (~> 1.1) + method_source (~> 1.0) rack (2.2.3) - rack-protection (2.0.7) + rack-protection (2.1.0) rack - require_all (1.3.3) - sinatra (2.0.7) + rake (13.0.1) + require_all (3.0.0) + rest-client (2.1.0) + http-accept (>= 1.7.0, < 2.0) + http-cookie (>= 1.0.2, < 2.0) + mime-types (>= 1.16, < 4.0) + netrc (~> 0.8) + ruby2_keywords (0.0.2) + sinatra (2.1.0) mustermann (~> 1.0) - rack (~> 2.0) - rack-protection (= 2.0.7) + rack (~> 2.2) + rack-protection (= 2.1.0) tilt (~> 2.0) - sinatra-activerecord (2.0.12) - activerecord (>= 3.2) + sinatra-activerecord (2.0.21) + activerecord (>= 4.1) sinatra (>= 1.0) - slop (3.6.0) sqlite3 (1.3.13) + strings-ansi (0.1.0) thread_safe (0.3.6) tilt (2.0.10) - tzinfo (1.2.7) + tty-color (0.6.0) + tty-cursor (0.7.1) + tty-font (0.5.0) + tty-progressbar (0.17.0) + strings-ansi (~> 0.1.0) + tty-cursor (~> 0.7) + tty-screen (~> 0.7) + unicode-display_width (~> 1.6) + tty-prompt (0.22.0) + pastel (~> 0.8) + tty-reader (~> 0.8) + tty-reader (0.8.0) + tty-cursor (~> 0.7) + tty-screen (~> 0.8) + wisper (~> 2.0) + tty-screen (0.8.1) + tty-spinner (0.9.3) + tty-cursor (~> 0.7) + tty-table (0.3.0) + equatable (~> 0.5) + necromancer (~> 0.3) + pastel (~> 0.4) + tty-screen (~> 0.2) + unicode_utils (~> 1.4.0) + verse (~> 0.4) + tzinfo (1.2.8) thread_safe (~> 0.1) - zeitwerk (2.3.0) + unf (0.1.4) + unf_ext + unf_ext (0.0.7.7) + unicode-display_width (1.7.0) + unicode_utils (1.4.0) + verse (0.4.0) + unicode_utils (~> 1.4.0) + wisper (2.0.1) PLATFORMS ruby DEPENDENCIES + activerecord (~> 5.2) + colorize + date + faker + json + lolize + pastel pry + rake require_all + rest-client sinatra-activerecord - sqlite3 + sqlite3 (~> 1.3.6) + tty-font + tty-progressbar + tty-prompt + tty-spinner + tty-table BUNDLED WITH - 1.14.6 + 1.17.3 diff --git a/app/models/customer.rb b/app/models/customer.rb new file mode 100644 index 00000000..a7f8c277 --- /dev/null +++ b/app/models/customer.rb @@ -0,0 +1,4 @@ +class Customer < ActiveRecord::Base + has_many :orders + has_many :foods, through: :orders +end \ No newline at end of file diff --git a/app/models/food.rb b/app/models/food.rb new file mode 100644 index 00000000..a8e7cd5e --- /dev/null +++ b/app/models/food.rb @@ -0,0 +1,4 @@ +class Food < ActiveRecord::Base + has_many :orders + has_many :customers, through: :orders +end \ No newline at end of file diff --git a/app/models/order.rb b/app/models/order.rb new file mode 100644 index 00000000..d5c52a14 --- /dev/null +++ b/app/models/order.rb @@ -0,0 +1,4 @@ +class Order < ActiveRecord::Base + belongs_to :customer + belongs_to :food +end diff --git a/bin/cli.rb b/bin/cli.rb new file mode 100644 index 00000000..4f32e7c9 --- /dev/null +++ b/bin/cli.rb @@ -0,0 +1,396 @@ +require 'io/console' +require 'tty-prompt' +require 'pry' +require 'colorize' +require 'lolize' +require "tty-table" + +class CLI + + attr_reader :prompt, :font + attr_accessor :customer, :cart + + def main_menu + system 'clear' + @font = TTY::Font.new + @pastel = Pastel.new + opener + puts @pastel.cyan(@font.write(" Shopping Cart !!")) + puts " + dMo + yMN` + :MM+ + mMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNh + +MMs+++++++++++++++++++++++++++++++sMM+ + `MMy yMM` + yMN` `NMy + :MM+ /MM: + mMm-----------------------------dMm + +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMo + `NMy`````````````````````````````` + yMN` + -MMdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh+ + +yyyMMMMMMMdyyyyyyyyMMMMMMMdyyyys/ + `mMm+:/hMM: `mMm+:/hMM/ + /MM: `NMy :MM/ NMh + `mMm+:/hMN: `dMNo:/hMM: + `+dNMNms. +hNMMms. + \n".lines.map { |line| line.center(100) }.join("").cyan + opener + prompt = TTY::Prompt.new + choices = ['🔹Login'.green ,'🔹Signup'.yellow, '🔹Exit'.red] # '🔹Update Name Info', '🔹Delete Account' + choice = prompt.select("\n 🔹Welcome to Shopping Cart, please make a selection🔹\n", choices) # do not use multi_select it leaves an octogon symble + + if choice == '🔹Login'.green + attempts = 0 + login(attempts) + elsif choice == '🔹Signup'.yellow + signup + elsif choice == '🔹Exit'.red + exit + end + end + + def signup + system 'clear' + puts "Enter user name" + user_name = gets.chomp + puts "Enter password" + user_password = STDIN.noecho(&:gets).chomp + if !Customer.exists?(name: user_name) + Customer.create(name: user_name , password: user_password) + puts "Thank you for joining us for a fantastic shopping experience" + sleep(1) + shopping + else + puts "Oops! This user name is already taken!" + + prompt = TTY::Prompt.new + choices = ['🔹Sign-Up With Different User Name'.green , '🔹Login'.yellow,'🔹Exit'.red] + choice = prompt.select("\n ? \n",choices) + if choice == '🔹Login'.yellow + attempts = 0 + login(attempts) + elsif choice == '🔹Sign-Up With Different User Name'.green + signup + elsif choice == '🔹Exit'.red + exit + end + end + # accept user_name & password -> update the table with new user if user name is unique else retry + # go to shopping method - TBD + end + + + def login(attempts=0) + attempts = 0 + system 'clear' + puts" + + + .-/+oooo+/-. + `:sdNMMNmddddmNMMNds:` + :yNMms/-` `-/smMNy: + /mMmo. .omMm/ + -dMm/ -oyhhyo- /mMd- + /NMy` .dMMMMMMMMd. `yMN/ + /MM+ `NMMMMMMMMMMN` +MM/ + .NMs -MMMMMMMMMMMM- sMN. + sMN` dMMMMMMMMMMd `NMs + mMy `oNMMMMMMNo` yMm + MMo -+oo+- oMM + mMy `.----.` yMm + sMN` -ohmMMMMMMMMMMmho- `NMs + .NMs :dMMMMMMMMMMMMMMMMMMd: sMN. + /MMo .MMMMMMMMMMMMMMMMMMMMMM. oMM/ + /NMy` :MMMMMMMMMMMMMMMMMMMMMM: `yMN/ + .dMN+:MMMMMMMMMMMMMMMMMMMMMM:+NMd. + /mMNMMMMMMMMMMMMMMMMMMMMMMNMm/ + :yNMMMMMMMMMMMMMMMMMMMMNy: + `:sdNMMMMMMMMMMMMNds:` + .-/+oooo+/-. \n ".lines.map { |line| line.center(100) }.join("").magenta.bold + if attempts < 3 + puts "Enter user name" + user_name = gets.chomp + puts "Enter password" + user_password = STDIN.noecho(&:gets).chomp + if Customer.exists?(name: user_name, password: user_password) + shopping + return + else + puts "Invalid User Name or Password" + attempts += 1 + + prompt = TTY::Prompt.new + choices = ['🔹Re-Login' ,'🔹Forgot User Name/Password', '🔹Exit'] + choice = prompt.select("\n ? \n",choices) + if choice == '🔹Re-Login' + login(attempts) + elsif choice == '🔹Forgot User Name/Password' + puts "Sign-Up" + signup + elsif choice == '🔹Exit' + exit + end + end + else + puts "Maximum number of login attempts exceeded. Try again later!" + end + end + + # After 3 attempts - prints max login attempts over -> Advanced -> Do a timestamp-based entry + # Forgot password + # gets user_name & password -> check if password matches user_name in table else 1. Error Msg 2. Exit 3. Re-login 4. Reset Password -> Signup + # shopping + + + def shopping + puts 'yay' + prompt = TTY::Prompt.new + choices = [ '🔹View Profile'.blue, '🔹View Cart'.green, '🔹Get To Shopping'.yellow,'🔹Checkout'.white, '🔹Exit'.red] + system 'clear' + choice = prompt.select("\n 🔹Welcome Back!!🔹 \n", choices) + if choice == '🔹View Profile'.blue + profile + elsif choice == '🔹View Cart'.green + view_cart + elsif choice == '🔹Get To Shopping'.yellow + go_to_shopping + elsif choice == '🔹Checkout'.white + checkout + elsif choice == '🔹Exit'.red + exit + end + end + + + def profile + system 'clear' + puts" + + + .-/+oooo+/-. + `:sdNMMNmddddmNMMNds:` + :yNMms/-` `-/smMNy: + /mMmo. .omMm/ + -dMm/ -oyhhyo- /mMd- + /NMy` .dMMMMMMMMd. `yMN/ + /MM+ `NMMMMMMMMMMN` +MM/ + .NMs -MMMMMMMMMMMM- sMN. + sMN` dMMMMMMMMMMd `NMs + mMy `oNMMMMMMNo` yMm + MMo -+oo+- oMM + mMy `.----.` yMm + sMN` -ohmMMMMMMMMMMmho- `NMs + .NMs :dMMMMMMMMMMMMMMMMMMd: sMN. + /MMo .MMMMMMMMMMMMMMMMMMMMMM. oMM/ + /NMy` :MMMMMMMMMMMMMMMMMMMMMM: `yMN/ + .dMN+:MMMMMMMMMMMMMMMMMMMMMM:+NMd. + /mMNMMMMMMMMMMMMMMMMMMMMMMNMm/ + :yNMMMMMMMMMMMMMMMMMMMMNy: + `:sdNMMMMMMMMMMMMNds:` + .-/+oooo+/-. \n ".lines.map { |line| line.center(100) }.join("").magenta.bold + prompt = TTY::Prompt.new + choices = ['🔹Reset User Name' ,'🔹Reset Password', '🔹Delete Account', '🔹Exit'] + choice = prompt.select("\n ? \n",choices) + if choice == '🔹Reset User Name' + puts "Enter new user name" + user_name = gets.chomp + Customer.update_attribute(name, user_name) + elsif choice == '🔹Reset Password' + puts "Enter new password" + user_password = STDIN.noecho(&:gets).chomp + Customer.update_attribute(password, user_password) + elsif choice == '🔹Delete Account' + puts "Enter your user name" + user_name = gets.chomp + puts "Enter your password" + user_password = STDIN.noecho(&:gets).chomp + Customer.exists?(name: user_name, password: user_password) + User.destroy_all(name: user_name) + puts "Account Deleted. We hope to see you again soon!" + exit + elsif choice == '🔹Exit' + exit + end + end + + + def go_to_shopping(cart = []) + system 'clear' + colorizer = Lolize::Colorizer.new + colorizer.write " + `oddddo` + `oddssssddo` + -mym` `mym- + :dhd. .dhd: + :dhd. .dhd: + `odhs shdo` + /mhd dhm/ + :hdh- -hhh: +...........omdd..............ddmo........... +mhhhhhhyssssssssssssssssssssssssssssyhhhhhhm +msoooooo/::::::::::::::::::::::::::/oooooosm +msoooooo+::::::::::::::::::::::::::+oooooosm ++hsoooosss+++:::::::::::::::o/:::::+ooooosh+ +myooooyyo+ohoo/ooo/ooo/ooo/o/+oo++sysoooym +myoooossysoyoy+hsh/dsd/hsh+y+yososhhyoooym +ohsooos+///////////d//:h+////////+shyoosho +dyoooo+:::::::::://::://::::::::/+ssooyd +dyoooo/::::::+ysy::::::::::::::::/ooooyd +-hyoo+:::::::+hso/+sy/:ysy+:::::::+ooyh- +dyoo+:::::::+ysy/ysys/ysh+:::::::+ooyd +yyso+:::::::::::::::::osy+:::::::+osyy +hyo+::::::::::::::::::::::::::::+oyh +hyo+::::::::::::::::::::::::::::+oyh +:yy+////++++++++++++++++++++////+yy: +ymddddyooooooooooooooooooooyddddmy \n ".lines.map { |line| line.center(100) }.join("") + prompt = TTY::Prompt.new + choices = ['🔹Fruits'.blue, '🔹Vegetables'.green, '🔹Spices','🔹View Cart'.yellow, '🔹Checkout'.magenta, '🔹Exit'.red] + choice = prompt.select("\n Select an Aisle! \n", choices) + if choice == '🔹Fruits'.blue + prompt = TTY::Prompt.new + fruit_choices = Food.where(category: "Fruits").map{|fruit| fruit.name} + fruits = prompt.multi_select("Use Space Bar |____| to select/unselect Fruits, and hit Enter when done.", fruit_choices) + cart << fruits + puts "\n\n #{fruits.join(",")} has/have been added to your cart" + sleep(1) + go_to_shopping(cart.flatten) + elsif choice == '🔹Vegetables'.green + prompt = TTY::Prompt.new + vegetable_choices = Food.where(category: "Vegetables").map{|veg| veg.name} + vegetables = prompt.multi_select("Use Space Bar |____| to select/unselect Vegetables, and hit Enter when done.", vegetable_choices) + puts "\n\n #{vegetables.join(",")} has/have been added to your cart" + sleep(1) + cart << vegetables + go_to_shopping(cart.flatten) + elsif choice == '🔹Spices' + prompt = TTY::Prompt.new + spice_choices = Food.where(category: "Spices").map{|spice| spice.name} + spices = prompt.multi_select("Use Space Bar |____| to select/unselect Spices, and hit Enter when done.", spice_choices) + puts "\n\n #{spices.join(",")} has/have been added to your cart" + sleep(1) + cart << spices + go_to_shopping(cart.flatten) + elsif choice == '🔹View Cart'.yellow + view_cart(cart.flatten) + elsif choice == '🔹Checkout'.magenta + checkout(cart) + elsif choice == '🔹Exit'.red and cart.length == 0 + exit + end + # # choose from aisles choices = [fruits, vegetables, spices, meats, delete items] + # # select foods from aisle and display prices and emojis + # # added to cart -> optional to add quantity + # # at the end of aisles, go back to aisle choices + # go_back + # cart = [] + #shopping + end + + + def view_cart(cart=[]) + if cart.length == 0 + puts "Your cart is empty. Go back to shopping.\n Re-directing back to shopping" + sleep(1) + go_to_shopping(cart) + else + puts "Your cart has #{cart} inside.\n Re-directing back to shopping" + sleep(5) + go_to_shopping(cart) + end + end + + # } + # cart = [] + # total = calculates total + # checkout + # go_back + + + def checkout(cart=[]) + prompt = TTY::Prompt.new + choices = ['🔹Remove & Add', '🔹View Receipt', '🔹Exit'] + choice = prompt.select('\n Select an option \n', choices) + if choice == '🔹Remove & Add' + remove_and_add + elsif choice == '🔹View Receipt' + view_receipt(cart) + elsif choice == '🔹Exit' + exit + end + + # customer.food.each{|food| + # puts "Fruits #{}" + # puts "Vegetables #{}" + # puts "Spices #{}" + # have a price and food list and a grand total + + # show receipt + #update cart/remove stuff if need be + ## be able to select items out of the cart + # exit + # go_back + end + + + def view_receipt(cart=[]) + categories = [] + cart.uniq.each do |food_item| + categories << Food.find_by(name: food_item).category + end + prices = [] + cart.uniq.each do |food_item| + prices << Food.find_by(name: food_item).price + end + quantities = cart.uniq.each.map{|ele| cart.count(ele)} + total = [] + iter = 0 + while iter < cart.uniq.length do + total << prices[iter]*quantities[iter] + iter += 1 + end + table_array = [] + index = 0 + while index < cart.length do + table_array << [cart.uniq[index],categories[index],prices[index],quantities[index],total[index]] + index += 1 + end + table = TTY::Table.new(%w[Item Category Price/Item Quantity Total], + table_array) + colorizer = Lolize::Colorizer.new + colorizer.write table.render(:ascii, alignments: %i[center]) do |renderer| + renderer.border.separator = :each_row + end + + colorizer.write "\n\n Thank you for shopping with us.\n Your grand total is = #{total.sum}\n\n" + + end + + def remove_and_add(cart=[]) + #trash = [] + puts 'YOU ARE NOW REMOVING ITEMS FROM A CART' + prompt = TTY::Prompt.new + choices = cart + choice = prompt.multi_select('\n \n', choices) + #cart.delete(choice) + choice.select{|deleted_item| cart.delete(deleted_item)} + puts cart + + end + + + def exit + puts "**********" + puts "Good Bye!" + puts "**********" + end + + def opener + puts "\n 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 🔹 \n " + end + +end + + + diff --git a/bin/run.rb b/bin/run.rb index cf08c338..30ca2280 100644 --- a/bin/run.rb +++ b/bin/run.rb @@ -1,5 +1,7 @@ require_relative '../config/environment' +require_relative '../bin/cli.rb' +#puts "HELLO WORLD" - -puts "HELLO WORLD" +cli = CLI.new +cli.main_menu() diff --git a/config/environment.rb b/config/environment.rb index 4dbe13e5..d816fd23 100644 --- a/config/environment.rb +++ b/config/environment.rb @@ -2,4 +2,11 @@ Bundler.require ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: 'db/development.db') + +ActiveRecord::Base.logger = nil + + +ActiveRecord::Base.logger = nil + require_all 'lib' +require_all 'app' \ No newline at end of file diff --git a/db/migrate/20201202221901_create_orders.rb b/db/migrate/20201202221901_create_orders.rb new file mode 100644 index 00000000..28010be7 --- /dev/null +++ b/db/migrate/20201202221901_create_orders.rb @@ -0,0 +1,13 @@ +class CreateOrders < ActiveRecord::Migration[5.2] + def change + create_table :orders do |t| + t.integer :customer_id + t.integer :food_id + t.integer :quantity + t.integer :total + t.timestamp + + end + + end +end diff --git a/db/migrate/20201202224028_create_foods.rb b/db/migrate/20201202224028_create_foods.rb new file mode 100644 index 00000000..71f94ca3 --- /dev/null +++ b/db/migrate/20201202224028_create_foods.rb @@ -0,0 +1,11 @@ +class CreateFoods < ActiveRecord::Migration[5.2] + def change + create_table :foods do |t| + t.string :name + t.string :category + t.integer :price + t.timestamps + end + + end +end diff --git a/db/migrate/20201202224240_create_customers.rb b/db/migrate/20201202224240_create_customers.rb new file mode 100644 index 00000000..c6b0f4b4 --- /dev/null +++ b/db/migrate/20201202224240_create_customers.rb @@ -0,0 +1,11 @@ +class CreateCustomers < ActiveRecord::Migration[5.2] + def change + create_table :customers do |t| + t.string :name + t.string :password + + t.timestamp + end + + end +end diff --git a/db/schema.rb b/db/schema.rb new file mode 100644 index 00000000..ceff928c --- /dev/null +++ b/db/schema.rb @@ -0,0 +1,35 @@ +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 2020_12_02_224240) do + + create_table "customers", force: :cascade do |t| + t.string "name" + t.string "password" + end + + create_table "foods", force: :cascade do |t| + t.string "name" + t.string "category" + t.integer "price" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "orders", force: :cascade do |t| + t.integer "customer_id" + t.integer "food_id" + t.integer "quantity" + t.integer "total" + end + +end diff --git a/db/seeds.rb b/db/seeds.rb new file mode 100644 index 00000000..7173a5ab --- /dev/null +++ b/db/seeds.rb @@ -0,0 +1,102 @@ +require_relative "../config/environment.rb" +require_relative "../app/models/customer.rb" +require_relative "../app/models/food.rb" +require_relative "../app/models/order.rb" +require 'net/http' +require 'open-uri' +require 'json' + +# foods = GetFoods.new +# puts foods.food_school + +Order.destroy_all +Customer.destroy_all +Food.destroy_all + +puts "Customer" + +20.times do + Customer.create( + name: Faker::Name.name, + password: Faker::Barcode.ean + ) +end + + +Customer.create(name:'Dan', password:'123') +Customer.create(name:'Tee', password:'321') +Customer.create(name:'Bob', password:'111') + +Food.create(name: 'Methi', category: 'Spices', price: 3) +Food.create(name: 'Rosemary', category: 'Spices', price: 1) +Food.create(name: 'Parsnip', category: 'Vegetables', price: 4) +Food.create(name: 'Apple', category: "Fruits", price: 2) + + +Order.create(customer_id: Customer.all.sample.id, food_id: Food.all.sample.id, quantity: 2) +Order.create(customer_id: Customer.all.sample.id, food_id: Food.all.sample.id, quantity: 2) +Order.create(customer_id: Customer.all.sample.id, food_id: Food.all.sample.id, quantity: 2) + +puts "Food" + + + + + +# 30.times do +# Food.create( +# name: Faker::Food.fruits, +# price: rand(20..180), +# category: "Fruits" +# ) +# end + +# 30.times do +# Food.create( +# name: Faker::Food.vegetables, +# price: rand(20..180), +# category: "Vegetables" +# ) +# end + +# 30.times do +# Food.create( +# name: Faker::Food.spice, +# price: rand(20..180), +# category: "Spice" +# ) +# end + + + + +#Faker::Food.vegetables +#Faker::Food.spice +#Faker::Food.fruits + +# 60.times do +# Order.create( +# customer_id: Customer.all.sample.id, +# food_id: Food.all.sample.id, +# quantity: rand(1..20), +# #total: Food.all.map{|foo| foo.price if foo.id == self.food_id} * self.quantity +# ) +# end + +# #Custome(name: "Dan") +# #Food.create(name: "Apple", price: 1 ) +# Order.create(customer_id: 180, food_id: 831, quantity:10) +# #total: Food.all.map{|foo| foo.price if foo.id == self.food_id} * self.quantity + + + + + + + + +# c1 = Customer.create(name:'Dan') + +# f1 = Food.create(name:'pie',price: 2) + +