ruby-scheduler 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.bundle/config +2 -0
- data/.gitignore +8 -0
- data/.rspec +1 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +34 -0
- data/README.md +118 -0
- data/Rakefile +2 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/exec-scheduler.sh +3 -0
- data/helpers/schedule_helper.rb +13 -0
- data/lib/ruby/scheduler.rb +79 -0
- data/lib/ruby/scheduler/meeting.rb +85 -0
- data/lib/ruby/scheduler/schedule.rb +173 -0
- data/lib/ruby/scheduler/version.rb +5 -0
- data/ruby-scheduler.gemspec +25 -0
- data/test-scheduler.sh +9 -0
- data/vendor/ruby/2.6.0/bin/htmldiff +29 -0
- data/vendor/ruby/2.6.0/bin/ldiff +29 -0
- data/vendor/ruby/2.6.0/bin/rake +27 -0
- data/vendor/ruby/2.6.0/bin/rspec +27 -0
- data/vendor/ruby/2.6.0/cache/diff-lcs-1.3.gem +0 -0
- data/vendor/ruby/2.6.0/cache/rake-12.3.3.gem +0 -0
- data/vendor/ruby/2.6.0/cache/rspec-3.9.0.gem +0 -0
- data/vendor/ruby/2.6.0/cache/rspec-core-3.9.1.gem +0 -0
- data/vendor/ruby/2.6.0/cache/rspec-expectations-3.9.0.gem +0 -0
- data/vendor/ruby/2.6.0/cache/rspec-mocks-3.9.1.gem +0 -0
- data/vendor/ruby/2.6.0/cache/rspec-support-3.9.2.gem +0 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/.rspec +1 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/Code-of-Conduct.md +74 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/Contributing.md +83 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/History.md +220 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/License.md +39 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/Manifest.txt +37 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/README.rdoc +84 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/Rakefile +57 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/autotest/discover.rb +1 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/bin/htmldiff +32 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/bin/ldiff +6 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/docs/COPYING.txt +339 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/docs/artistic.txt +127 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/lib/diff-lcs.rb +3 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/lib/diff/lcs.rb +725 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/lib/diff/lcs/array.rb +7 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/lib/diff/lcs/block.rb +37 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/lib/diff/lcs/callbacks.rb +322 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/lib/diff/lcs/change.rb +181 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/lib/diff/lcs/htmldiff.rb +149 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/lib/diff/lcs/hunk.rb +276 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/lib/diff/lcs/internals.rb +307 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/lib/diff/lcs/ldiff.rb +167 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/lib/diff/lcs/string.rb +5 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/spec/change_spec.rb +65 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/spec/diff_spec.rb +47 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/spec/fixtures/ds1.csv +50 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/spec/fixtures/ds2.csv +51 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/spec/hunk_spec.rb +72 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/spec/issues_spec.rb +49 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/spec/lcs_spec.rb +56 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/spec/ldiff_spec.rb +47 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/spec/patch_spec.rb +422 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/spec/sdiff_spec.rb +214 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/spec/spec_helper.rb +321 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/spec/traverse_balanced_spec.rb +310 -0
- data/vendor/ruby/2.6.0/gems/diff-lcs-1.3/spec/traverse_sequences_spec.rb +139 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/CONTRIBUTING.rdoc +43 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/Gemfile +3 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/History.rdoc +2344 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/MIT-LICENSE +21 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/README.rdoc +156 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/Rakefile +41 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/azure-pipelines.yml +11 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/bin/bundle +105 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/bin/console +7 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/bin/rake +29 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/bin/rdoc +29 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/bin/rubocop +29 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/bin/setup +6 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/doc/command_line_usage.rdoc +158 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/doc/example/Rakefile1 +38 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/doc/example/Rakefile2 +35 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/doc/example/a.c +6 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/doc/example/b.c +6 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/doc/example/main.c +11 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/doc/glossary.rdoc +42 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/doc/jamis.rb +592 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/doc/proto_rake.rdoc +127 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/doc/rake.1 +156 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/doc/rakefile.rdoc +622 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/doc/rational.rdoc +151 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/exe/rake +27 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake.rb +71 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/application.rb +824 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/backtrace.rb +24 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/clean.rb +78 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/cloneable.rb +17 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/cpu_counter.rb +107 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/default_loader.rb +15 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/dsl_definition.rb +195 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/early_time.rb +22 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/ext/core.rb +26 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/ext/string.rb +176 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/file_creation_task.rb +25 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/file_list.rb +435 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/file_task.rb +54 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/file_utils.rb +137 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/file_utils_ext.rb +145 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/invocation_chain.rb +57 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/invocation_exception_mixin.rb +17 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/late_time.rb +18 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/linked_list.rb +112 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/loaders/makefile.rb +54 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/multi_task.rb +14 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/name_space.rb +38 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/packagetask.rb +207 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/phony.rb +16 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/private_reader.rb +21 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/promise.rb +100 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/pseudo_status.rb +30 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/rake_module.rb +67 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/rake_test_loader.rb +27 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/rule_recursion_overflow_error.rb +20 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/scope.rb +43 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/task.rb +413 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/task_argument_error.rb +8 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/task_arguments.rb +109 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/task_manager.rb +324 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/tasklib.rb +12 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/testtask.rb +224 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/thread_history_display.rb +49 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/thread_pool.rb +163 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/trace_output.rb +23 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/version.rb +10 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/lib/rake/win32.rb +51 -0
- data/vendor/ruby/2.6.0/gems/rake-12.3.3/rake.gemspec +42 -0
- data/vendor/ruby/2.6.0/gems/rspec-3.9.0/LICENSE.md +27 -0
- data/vendor/ruby/2.6.0/gems/rspec-3.9.0/README.md +43 -0
- data/vendor/ruby/2.6.0/gems/rspec-3.9.0/lib/rspec.rb +3 -0
- data/vendor/ruby/2.6.0/gems/rspec-3.9.0/lib/rspec/version.rb +5 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/.document +5 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/.yardopts +8 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/Changelog.md +2274 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/LICENSE.md +26 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/README.md +384 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/exe/rspec +4 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/autorun.rb +3 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core.rb +186 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/backtrace_formatter.rb +65 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/bisect/coordinator.rb +62 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/bisect/example_minimizer.rb +173 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/bisect/fork_runner.rb +135 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/bisect/server.rb +61 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/bisect/shell_command.rb +126 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/bisect/shell_runner.rb +73 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/bisect/utilities.rb +58 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/configuration.rb +2336 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/configuration_options.rb +233 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/did_you_mean.rb +46 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/drb.rb +113 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/dsl.rb +98 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/example.rb +656 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/example_group.rb +889 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/example_status_persister.rb +235 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/filter_manager.rb +231 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/flat_map.rb +20 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters.rb +272 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/base_bisect_formatter.rb +45 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/base_formatter.rb +70 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/base_text_formatter.rb +75 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/bisect_drb_formatter.rb +29 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/bisect_progress_formatter.rb +157 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/console_codes.rb +68 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/deprecation_formatter.rb +223 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/documentation_formatter.rb +102 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/exception_presenter.rb +508 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/failure_list_formatter.rb +23 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/fallback_message_formatter.rb +28 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/helpers.rb +110 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/html_formatter.rb +153 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/html_printer.rb +414 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/html_snippet_extractor.rb +120 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/json_formatter.rb +102 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/profile_formatter.rb +68 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/progress_formatter.rb +29 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/protocol.rb +182 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/snippet_extractor.rb +134 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/syntax_highlighter.rb +91 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/hooks.rb +632 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/invocations.rb +87 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/memoized_helpers.rb +554 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/metadata.rb +498 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/metadata_filter.rb +255 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/minitest_assertions_adapter.rb +31 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/mocking_adapters/flexmock.rb +31 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/mocking_adapters/mocha.rb +57 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/mocking_adapters/null.rb +14 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/mocking_adapters/rr.rb +31 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/mocking_adapters/rspec.rb +32 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/notifications.rb +521 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/option_parser.rb +316 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/ordering.rb +158 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/output_wrapper.rb +29 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/pending.rb +165 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/profiler.rb +34 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/project_initializer.rb +48 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/project_initializer/.rspec +1 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/project_initializer/spec/spec_helper.rb +100 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/rake_task.rb +188 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/reporter.rb +265 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/ruby_project.rb +53 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/runner.rb +204 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/sandbox.rb +37 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/set.rb +54 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/shared_context.rb +55 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/shared_example_group.rb +269 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/shell_escape.rb +49 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/test_unit_assertions_adapter.rb +30 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/version.rb +9 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/warnings.rb +40 -0
- data/vendor/ruby/2.6.0/gems/rspec-core-3.9.1/lib/rspec/core/world.rb +275 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/.document +5 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/.yardopts +6 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/Changelog.md +1170 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/LICENSE.md +25 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/README.md +320 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/expectations.rb +82 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/expectations/block_snippet_extractor.rb +253 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/expectations/configuration.rb +215 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/expectations/expectation_target.rb +127 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/expectations/fail_with.rb +39 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/expectations/failure_aggregator.rb +194 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/expectations/handler.rb +170 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/expectations/minitest_integration.rb +58 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/expectations/syntax.rb +132 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/expectations/version.rb +8 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers.rb +1038 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/aliased_matcher.rb +116 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in.rb +52 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/all.rb +86 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/base_matcher.rb +193 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/be.rb +288 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/be_between.rb +77 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/be_instance_of.rb +26 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/be_kind_of.rb +20 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/be_within.rb +72 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/change.rb +428 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/compound.rb +276 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/contain_exactly.rb +302 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/cover.rb +24 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/eq.rb +40 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/eql.rb +34 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/equal.rb +81 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/exist.rb +90 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/has.rb +103 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/have_attributes.rb +114 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/include.rb +149 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/match.rb +106 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/operators.rb +128 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/output.rb +200 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/raise_error.rb +230 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/respond_to.rb +174 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/satisfy.rb +60 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/start_or_end_with.rb +94 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/throw_symbol.rb +132 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/yield.rb +432 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/composable.rb +171 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/dsl.rb +534 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/english_phrasing.rb +58 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/expecteds_for_multiple_diffs.rb +82 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/fail_matchers.rb +42 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/generated_descriptions.rb +41 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/matcher_delegator.rb +35 -0
- data/vendor/ruby/2.6.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/matcher_protocol.rb +99 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/.document +5 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/.yardopts +6 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/Changelog.md +1133 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/LICENSE.md +25 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/README.md +463 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks.rb +130 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance.rb +11 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/chain.rb +111 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/error_generator.rb +31 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/expect_chain_chain.rb +31 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/expectation_chain.rb +50 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/message_chains.rb +83 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/proxy.rb +116 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/recorder.rb +294 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/stub_chain.rb +51 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/stub_chain_chain.rb +23 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/argument_list_matcher.rb +100 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/argument_matchers.rb +322 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/configuration.rb +212 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/error_generator.rb +369 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/example_methods.rb +434 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/instance_method_stasher.rb +146 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/marshal_extension.rb +41 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/matchers/expectation_customization.rb +20 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/matchers/have_received.rb +134 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/matchers/receive.rb +132 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/matchers/receive_message_chain.rb +82 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/matchers/receive_messages.rb +77 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/message_chain.rb +87 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/message_expectation.rb +751 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/method_double.rb +287 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/method_reference.rb +202 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/minitest_integration.rb +68 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/mutate_const.rb +339 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/object_reference.rb +149 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/order_group.rb +81 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/proxy.rb +503 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/space.rb +238 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/standalone.rb +3 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/syntax.rb +325 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/targets.rb +124 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/test_double.rb +171 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/verifying_double.rb +129 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/verifying_message_expectation.rb +54 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/verifying_proxy.rb +220 -0
- data/vendor/ruby/2.6.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/version.rb +9 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/Changelog.md +292 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/LICENSE.md +23 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/README.md +40 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support.rb +149 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/caller_filter.rb +83 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/comparable_version.rb +46 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/differ.rb +215 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/directory_maker.rb +63 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/encoded_string.rb +161 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/fuzzy_matcher.rb +48 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/hunk_generator.rb +47 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/matcher_definition.rb +42 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/method_signature_verifier.rb +438 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/mutex.rb +73 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/object_formatter.rb +275 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/recursive_const_methods.rb +76 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/reentrant_mutex.rb +53 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/ruby_features.rb +185 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/source.rb +75 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/source/location.rb +21 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/source/node.rb +110 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/source/token.rb +87 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/spec.rb +81 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/spec/deprecation_helpers.rb +64 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/spec/formatting_support.rb +9 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/spec/in_sub_process.rb +69 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/spec/library_wide_checks.rb +150 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/spec/shell_out.rb +89 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/spec/stderr_splitter.rb +67 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/spec/string_matcher.rb +46 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/spec/with_isolated_directory.rb +13 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/spec/with_isolated_stderr.rb +13 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/version.rb +7 -0
- data/vendor/ruby/2.6.0/gems/rspec-support-3.9.2/lib/rspec/support/warnings.rb +39 -0
- data/vendor/ruby/2.6.0/specifications/diff-lcs-1.3.gemspec +61 -0
- data/vendor/ruby/2.6.0/specifications/rake-12.3.3.gemspec +49 -0
- data/vendor/ruby/2.6.0/specifications/rspec-3.9.0.gemspec +43 -0
- data/vendor/ruby/2.6.0/specifications/rspec-core-3.9.1.gemspec +63 -0
- data/vendor/ruby/2.6.0/specifications/rspec-expectations-3.9.0.gemspec +51 -0
- data/vendor/ruby/2.6.0/specifications/rspec-mocks-3.9.1.gemspec +51 -0
- data/vendor/ruby/2.6.0/specifications/rspec-support-3.9.2.gemspec +39 -0
- metadata +419 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c8ea947aa1ab9a3cc95c7ff37f7c88cf6a3648503359b8d24360a972d145f61b
|
4
|
+
data.tar.gz: 292a91c4d24504f8721885735be772590599c9d4a28c69a9dc7ce3ac4b76d1e8
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3b3a0364d8c20262ad30c6049c2f1440efaae5ede5563e365a6914ff1d89fb76a9c5a546c90d779175bdd004a2ab8b6f353add4723a27bf7e3da371613614869
|
7
|
+
data.tar.gz: ff2151a3d00007b92297aef51d8482d31aeb1c2594cda21c67e4038dadab3bd463ea68f842369d554cda59400a05cc671eec21dccc6b3505ca0a3d6e166b7f75
|
data/.bundle/config
ADDED
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--format documentation
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
ruby-scheduler (0.1.0)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
diff-lcs (1.3)
|
10
|
+
rake (12.3.3)
|
11
|
+
rspec (3.9.0)
|
12
|
+
rspec-core (~> 3.9.0)
|
13
|
+
rspec-expectations (~> 3.9.0)
|
14
|
+
rspec-mocks (~> 3.9.0)
|
15
|
+
rspec-core (3.9.1)
|
16
|
+
rspec-support (~> 3.9.1)
|
17
|
+
rspec-expectations (3.9.0)
|
18
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
19
|
+
rspec-support (~> 3.9.0)
|
20
|
+
rspec-mocks (3.9.1)
|
21
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
22
|
+
rspec-support (~> 3.9.0)
|
23
|
+
rspec-support (3.9.2)
|
24
|
+
|
25
|
+
PLATFORMS
|
26
|
+
ruby
|
27
|
+
|
28
|
+
DEPENDENCIES
|
29
|
+
rake (~> 12.0)
|
30
|
+
rspec
|
31
|
+
ruby-scheduler!
|
32
|
+
|
33
|
+
BUNDLED WITH
|
34
|
+
2.1.4
|
data/README.md
ADDED
@@ -0,0 +1,118 @@
|
|
1
|
+
# Ruby Scheduler
|
2
|
+
|
3
|
+
Your product owner is asking you to implement a new feature in the calendar system
|
4
|
+
that is in your scheduling tool. The feature needs to support arranging a set of
|
5
|
+
meetings within an 8 hour day in a way that makes them work, and let the user know
|
6
|
+
if the meetings cannot fit into the day.
|
7
|
+
|
8
|
+
For this feature there will be two kinds of meetings, on-site meetings and off-site
|
9
|
+
meetings. On-site meetings can be scheduled back to back with no gaps in between
|
10
|
+
them, but off-site meetings must have 30 minutes of travel time padded to either
|
11
|
+
end. This travel time however can overlap for back to back off-site meetings, and can
|
12
|
+
extend past the start and end of the day.
|
13
|
+
|
14
|
+
# Run Scheduler
|
15
|
+
To run the scheduler
|
16
|
+
```
|
17
|
+
exec-scheduler
|
18
|
+
```
|
19
|
+
|
20
|
+
or
|
21
|
+
```
|
22
|
+
ruby lib/ruby/scheduler.rb
|
23
|
+
```
|
24
|
+
|
25
|
+
# Tests
|
26
|
+
To run the tests suite
|
27
|
+
```
|
28
|
+
test-scheduler
|
29
|
+
```
|
30
|
+
|
31
|
+
or to run a specific test file
|
32
|
+
```
|
33
|
+
bundle exec rspec spec/lib/scheduler_spec.rb
|
34
|
+
bundle exec rspec spec/lib/scheduler/meeting_spec.rb
|
35
|
+
bundle exec rspec spec/lib/schedulder/schedule_spec.rb
|
36
|
+
bundle exec rspec spec/helpers/scheduler_helper_spec.rb
|
37
|
+
```
|
38
|
+
|
39
|
+
# Examples
|
40
|
+
|
41
|
+
```
|
42
|
+
Given a set of meetings (below is an example of a set of meetings):
|
43
|
+
{
|
44
|
+
{ name: “Meeting 1”, duration: 3, type: :onsite },
|
45
|
+
{ name: “Meeting 2”, duration: 2, type: :offsite },
|
46
|
+
{ name: “Meeting 3”, duration: 1, type: :offsite },
|
47
|
+
{ name: “Meeting 4”, duration: 0.5, type: :onsite }
|
48
|
+
}
|
49
|
+
```
|
50
|
+
|
51
|
+
You must write code to determine if these meetings can fit into a 9 to 5 schedule,
|
52
|
+
and propose a layout for those meetings in a format like this:
|
53
|
+
```
|
54
|
+
9:00 - 12:00 - Meeting 1
|
55
|
+
12:00 - 12:30 - Meeting 4
|
56
|
+
1:00 - 3:00 - Meeting 2
|
57
|
+
3:30 - 4:30 - Meeting 3
|
58
|
+
```
|
59
|
+
|
60
|
+
## Here are a few example sets for you to test against:
|
61
|
+
|
62
|
+
Example 1:
|
63
|
+
```
|
64
|
+
{
|
65
|
+
{ name: “Meeting 1”, duration: 1.5, type: :onsite },
|
66
|
+
{ name: “Meeting 2”, duration: 2, type: :offsite },
|
67
|
+
{ name: “Meeting 3”, duration: 1, type: :onsite },
|
68
|
+
{ name: “Meeting 4”, duration: 1, type: :offsite },
|
69
|
+
{ name: “Meeting 5”, duration: 1, type: :offsite },
|
70
|
+
}
|
71
|
+
```
|
72
|
+
Yes, can fit. One possible solution would be:
|
73
|
+
```
|
74
|
+
9:00 - 10:30 - Meeting 1
|
75
|
+
10:30 - 11:30 - Meeting 3
|
76
|
+
12:00 - 1:00 - Meeting 5
|
77
|
+
1:30 - 2:30 - Meeting 4
|
78
|
+
3:00 - 5:00 - Meeting 2
|
79
|
+
```
|
80
|
+
|
81
|
+
Example 2:
|
82
|
+
```
|
83
|
+
{
|
84
|
+
{ name: “Meeting 1”, duration: 4, type: :offsite },
|
85
|
+
{ name: “Meeting 2”, duration: 4, type: :offsite }
|
86
|
+
}
|
87
|
+
```
|
88
|
+
No, can’t fit.
|
89
|
+
|
90
|
+
Example 3:
|
91
|
+
```
|
92
|
+
{
|
93
|
+
{ name: “Meeting 1”, duration: 0.5, type: :offsite },
|
94
|
+
{ name: “Meeting 2”, duration: 0.5, type: :onsite },
|
95
|
+
{ name: “Meeting 3”, duration: 2.5, type: :offsite },
|
96
|
+
{ name: “Meeting 4”, duration: 3, type: :onsite }
|
97
|
+
}
|
98
|
+
```
|
99
|
+
Yes, can fit. One possible solution would be:
|
100
|
+
```
|
101
|
+
9:00 - 9:30 - Meeting 2
|
102
|
+
10:00 - 10:30 - Meeting 1
|
103
|
+
11:00 - 2:00 - Meeting 4
|
104
|
+
2:30 - 5:00 - Meeting 3
|
105
|
+
```
|
106
|
+
|
107
|
+
## Instructions
|
108
|
+
|
109
|
+
. Write the solution in Ruby.
|
110
|
+
|
111
|
+
. Put the code up on Github, Bitbucket, etc…
|
112
|
+
|
113
|
+
. Commit early and often so we can see progress as you work through the solution.
|
114
|
+
|
115
|
+
. No need to create a complex UI, just a command line application is enough.
|
116
|
+
|
117
|
+
. The data samples can be hardcoded into the solution, no need to read in external
|
118
|
+
data.
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "ruby/scheduler"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
data/exec-scheduler.sh
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
require_relative './scheduler/schedule.rb'
|
2
|
+
require_relative './scheduler/meeting.rb'
|
3
|
+
|
4
|
+
module Scheduler
|
5
|
+
|
6
|
+
# This module should execute the project task.
|
7
|
+
# Given a schedule, ptimize the meetings, to
|
8
|
+
# fit them within a business day.
|
9
|
+
# Input:
|
10
|
+
# - Schedule object
|
11
|
+
# Output:
|
12
|
+
# - String
|
13
|
+
MEETINGS = {
|
14
|
+
example_1: [{
|
15
|
+
name: 'Meeting 1',
|
16
|
+
duration: 1.5,
|
17
|
+
type: :onsite,
|
18
|
+
}, {
|
19
|
+
name: 'Meeting 2',
|
20
|
+
duration: 2,
|
21
|
+
type: :offsite
|
22
|
+
}, {
|
23
|
+
name: 'Meeting 3',
|
24
|
+
duration: 1,
|
25
|
+
type: :onsite
|
26
|
+
}, {
|
27
|
+
name: 'Meeting 4',
|
28
|
+
duration: 1,
|
29
|
+
type: :offsite
|
30
|
+
}, {
|
31
|
+
name: 'Meeting 5',
|
32
|
+
duration: 1,
|
33
|
+
type: :offsite
|
34
|
+
}],
|
35
|
+
example_2: [{
|
36
|
+
name: 'Meeting 1',
|
37
|
+
duration: 4,
|
38
|
+
type: :offsite
|
39
|
+
}, {
|
40
|
+
name: 'Meeting 2',
|
41
|
+
duration: 4,
|
42
|
+
type: :offsite
|
43
|
+
}],
|
44
|
+
example_3: [{
|
45
|
+
name: 'Meeting 1',
|
46
|
+
duration: 0.5,
|
47
|
+
type: :offsite
|
48
|
+
}, {
|
49
|
+
name: 'Meeting 2',
|
50
|
+
duration: 0.5,
|
51
|
+
type: :onsite
|
52
|
+
}, {
|
53
|
+
name: 'Meeting 3',
|
54
|
+
duration: 2.5,
|
55
|
+
type: :offsite
|
56
|
+
}, {
|
57
|
+
name: 'Meeting 4',
|
58
|
+
duration: 3,
|
59
|
+
type: :onsite
|
60
|
+
}]
|
61
|
+
}
|
62
|
+
|
63
|
+
def self.run(meetings = nil)
|
64
|
+
puts "Execute file"
|
65
|
+
if meetings.nil?
|
66
|
+
meetings = MEETINGS[:example_1]
|
67
|
+
end
|
68
|
+
schedule = Scheduler::Schedule.new({
|
69
|
+
meetings: meetings
|
70
|
+
})
|
71
|
+
|
72
|
+
schedule.reschedule
|
73
|
+
return schedule
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
schedule = Scheduler.run()
|
79
|
+
puts schedule
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# RoR configuration would autoload the lib and helpers directories
|
2
|
+
require_relative '../../../helpers/schedule_helper'
|
3
|
+
|
4
|
+
module Scheduler
|
5
|
+
|
6
|
+
class Meeting
|
7
|
+
# name, duration, type, start_time, end_time
|
8
|
+
include ScheduleHelper
|
9
|
+
|
10
|
+
attr_reader :name, :duration, :type
|
11
|
+
attr_accessor :start_time, :end_time
|
12
|
+
|
13
|
+
VALID_TYPES = [:offsite, :onsite]
|
14
|
+
|
15
|
+
# Initialize Meeting object
|
16
|
+
def initialize(params = {})
|
17
|
+
@name = params.fetch(:name, nil)
|
18
|
+
@duration = params.fetch(:duration, 0)
|
19
|
+
@type = params.fetch(:type, nil)
|
20
|
+
@start_time = params.fetch(:start_time, nil)
|
21
|
+
@end_time = params.fetch(:end_time, nil)
|
22
|
+
|
23
|
+
validate!
|
24
|
+
end
|
25
|
+
|
26
|
+
## Setter methods
|
27
|
+
# Setter method for start_time attribute
|
28
|
+
# Input:
|
29
|
+
# - Time
|
30
|
+
def set_start_time(start_time)
|
31
|
+
@start_time = start_time
|
32
|
+
end
|
33
|
+
|
34
|
+
# Setter method for end_time attribute
|
35
|
+
# Input:
|
36
|
+
# - NONE
|
37
|
+
def set_end_time
|
38
|
+
return unless start_time
|
39
|
+
@end_time = start_time + to_seconds(duration)
|
40
|
+
end
|
41
|
+
|
42
|
+
## Conditional methods
|
43
|
+
# Conditional method to check if type is offsite
|
44
|
+
# Output:
|
45
|
+
# - boolean
|
46
|
+
def offsite?
|
47
|
+
type == :offsite
|
48
|
+
end
|
49
|
+
|
50
|
+
## Additonal class methods
|
51
|
+
# Calculate next meeting start_time
|
52
|
+
# Output:
|
53
|
+
# - Time
|
54
|
+
def next_start_time
|
55
|
+
end_time + to_seconds(offsite_buffer)
|
56
|
+
end
|
57
|
+
|
58
|
+
# Calcuate offsite buffer for travel (30 minutes)
|
59
|
+
# Output:
|
60
|
+
# - Integer
|
61
|
+
def offsite_buffer
|
62
|
+
offsite? ? 0.5 : 0.0
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
# Method to check valid parameters
|
68
|
+
# Output:
|
69
|
+
# - boolean
|
70
|
+
def valid?
|
71
|
+
@name.is_a? String
|
72
|
+
@duration.is_a? (Integer || Float)
|
73
|
+
@type.is_a? Symbol
|
74
|
+
VALID_TYPES.include? @type
|
75
|
+
end
|
76
|
+
|
77
|
+
# Method to raise error if invalid parameters
|
78
|
+
# Note: Would use RoR ActiveRecord validations if this were
|
79
|
+
# a rails application. Could also use dry-rb gem validations.
|
80
|
+
def validate!
|
81
|
+
raise ArgumentError.new("Invalid Params") unless valid?
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
@@ -0,0 +1,173 @@
|
|
1
|
+
# RoR configuration would autoload the lib and helpers directories
|
2
|
+
require_relative './meeting'
|
3
|
+
|
4
|
+
module Scheduler
|
5
|
+
|
6
|
+
class Schedule
|
7
|
+
# meetings
|
8
|
+
# Offsite meeting buffer can extend past the end of the day
|
9
|
+
DAY_LENGTH = {
|
10
|
+
all_offsite: 9,
|
11
|
+
any_offsite: 8.5,
|
12
|
+
no_offsite: 8
|
13
|
+
}
|
14
|
+
|
15
|
+
attr_accessor :meetings
|
16
|
+
|
17
|
+
# Initialize a Schedule of Meeting objects.
|
18
|
+
def initialize(params = {})
|
19
|
+
@meetings = []
|
20
|
+
meetings_arr = params.fetch(:meetings, nil)
|
21
|
+
meetings_arr.each do |meeting|
|
22
|
+
meeting_object = Meeting.new(meeting)
|
23
|
+
@meetings << meeting_object
|
24
|
+
end
|
25
|
+
|
26
|
+
validate!
|
27
|
+
end
|
28
|
+
|
29
|
+
## Overriden methods
|
30
|
+
# Override `to_s` method to print expected message provided in README.
|
31
|
+
# Output:
|
32
|
+
# - String
|
33
|
+
def to_s
|
34
|
+
valid = valid_meeting_schedule? ? "Valid Schedule\n" : "Invalid Schedule\n"
|
35
|
+
meeting_str = meetings.reduce(valid) do |str, meeting|
|
36
|
+
str += meeting.start_time&.strftime("%I:%M %p") || 'none'
|
37
|
+
str += ' - '
|
38
|
+
str += meeting.end_time&.strftime("%I:%M %p") || 'none'
|
39
|
+
str += ' - '
|
40
|
+
str += meeting.name
|
41
|
+
str += "\n"
|
42
|
+
end
|
43
|
+
meeting_str
|
44
|
+
end
|
45
|
+
|
46
|
+
## Setter methods
|
47
|
+
# Set a meeting schedule using an optimal meeting order
|
48
|
+
# Note: Would consider using Trailblazer to construct
|
49
|
+
# a contract and operation.
|
50
|
+
def reschedule
|
51
|
+
set_meeting_order
|
52
|
+
|
53
|
+
meetings.first.set_start_time(first_start_time)
|
54
|
+
|
55
|
+
meetings.each_with_index do |meeting, index|
|
56
|
+
if meeting.start_time.nil?
|
57
|
+
previous_meeting = meetings[index - 1]
|
58
|
+
next_start_time = previous_meeting.next_start_time
|
59
|
+
meeting.set_start_time(next_start_time)
|
60
|
+
end
|
61
|
+
meeting.set_end_time
|
62
|
+
end
|
63
|
+
@meetings = meetings
|
64
|
+
self
|
65
|
+
end
|
66
|
+
|
67
|
+
## Conditional methods
|
68
|
+
# Check if any time left after meetings
|
69
|
+
# Output:
|
70
|
+
# - boolean
|
71
|
+
def valid_meeting_schedule?
|
72
|
+
time_left_in_day >= 0
|
73
|
+
end
|
74
|
+
|
75
|
+
# Check if all meetings are offsite
|
76
|
+
# Note: If RoR application, I would use the ActiveRecord scope method
|
77
|
+
# Output:
|
78
|
+
# - boolean
|
79
|
+
def all_offsite_meetings?
|
80
|
+
meetings.all? { |meeting| meeting.offsite? }
|
81
|
+
end
|
82
|
+
|
83
|
+
# Check if any meetings are offsite
|
84
|
+
# Note: If RoR application, I would use the ActiveRecord scope method
|
85
|
+
# Output:
|
86
|
+
# - boolean
|
87
|
+
def any_offsite_meetings?
|
88
|
+
meetings.any? { |meeting| meeting.offsite? }
|
89
|
+
end
|
90
|
+
|
91
|
+
# Additional class methods
|
92
|
+
# Calculate total meeting time for both onsite and offsite meetings
|
93
|
+
def total_meeting_time
|
94
|
+
calculate_total_duration(offsite_meetings, offsite: true) + calculate_total_duration(onsite_meetings, offsite: false)
|
95
|
+
end
|
96
|
+
|
97
|
+
private
|
98
|
+
|
99
|
+
# Get start time for first meeting
|
100
|
+
def first_start_time
|
101
|
+
time = Time.now
|
102
|
+
Time.new(time.year, time.month, time.day, 9, 0, 0, "-05:00")
|
103
|
+
end
|
104
|
+
|
105
|
+
# Determine total time in day given whether or not
|
106
|
+
# there consist any offsite meetings.
|
107
|
+
def time_left_in_day
|
108
|
+
if all_offsite_meetings?
|
109
|
+
day_length = DAY_LENGTH[:all_offsite]
|
110
|
+
elsif any_offsite_meetings?
|
111
|
+
day_length = DAY_LENGTH[:any_offsite]
|
112
|
+
else
|
113
|
+
day_length = DAY_LENGTH[:no_offsite]
|
114
|
+
end
|
115
|
+
day_length - total_meeting_time
|
116
|
+
end
|
117
|
+
|
118
|
+
# Place offsite before onsite meetings for an
|
119
|
+
# optimal meeting order
|
120
|
+
# Output:
|
121
|
+
# - Array
|
122
|
+
def optimal_meeting_order
|
123
|
+
offsite_meetings + onsite_meetings
|
124
|
+
end
|
125
|
+
|
126
|
+
# Select offsite meetings from all meetings
|
127
|
+
# Output:
|
128
|
+
# - Array
|
129
|
+
def offsite_meetings
|
130
|
+
meetings.select { |meeting| meeting.offsite? }
|
131
|
+
end
|
132
|
+
|
133
|
+
# Select onsite meetings from all meetings
|
134
|
+
# Output:
|
135
|
+
# - Array
|
136
|
+
def onsite_meetings
|
137
|
+
meetings.select{ |meeting| !meeting.offsite? }
|
138
|
+
end
|
139
|
+
|
140
|
+
# Set an optimal meeting order
|
141
|
+
def set_meeting_order
|
142
|
+
@meetings = optimal_meeting_order
|
143
|
+
end
|
144
|
+
|
145
|
+
# Calculate total meeting time and buffer for selected meetings
|
146
|
+
# Note: This does not use the same methods as reschedule - refactor
|
147
|
+
# to reuse those methods for consistency
|
148
|
+
# Input:
|
149
|
+
# - Array of Meetings
|
150
|
+
# - boolean
|
151
|
+
# Output:
|
152
|
+
# - Float
|
153
|
+
def calculate_total_duration(selected_meetings, offsite:)
|
154
|
+
start_buffer = offsite ? 0.5 : 0
|
155
|
+
selected_meetings.reduce(start_buffer) { |sum, meeting| offsite ? sum + (meeting.duration + 0.5) : sum + meeting.duration }
|
156
|
+
end
|
157
|
+
|
158
|
+
# Method to check valid parameters
|
159
|
+
# Output:
|
160
|
+
# - boolean
|
161
|
+
def valid?
|
162
|
+
meetings.is_a? Array
|
163
|
+
end
|
164
|
+
|
165
|
+
# Method to raise error if invalid parameters
|
166
|
+
# Note: Would use RoR ActiveRecord validations if this were
|
167
|
+
# a rails application. Could also use dry-rb gem validations
|
168
|
+
def validate!
|
169
|
+
raise ArgumentError.new("Invalid Params") unless valid?
|
170
|
+
end
|
171
|
+
|
172
|
+
end
|
173
|
+
end
|