slot_machine 0.1.0 → 0.1.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b1284fee79db641ca71f72ab2e27cb60ddcaa746
4
+ data.tar.gz: 31bde868b4da37d7212774fcf38fffb8c8a8c2a1
5
+ SHA512:
6
+ metadata.gz: 59638a38e444e119286deff086c8b946e8c8f33af5858995bba77c0837faa3aebaab4b74a58f30a74072d1a774f182e8077c7737ebf6de475d7d469f7052c69c
7
+ data.tar.gz: d149fba61a6c0edde6952ddb408bdd275a59738deb31925fe8eaad74cce2a9bf3bc897d4670a55d2b53076f11288cbeed03d95904f5a14ac3e67fa8e92a5b347
@@ -1,5 +1,13 @@
1
1
  = SlotMachine CHANGELOG
2
2
 
3
+ == Version 0.1.1 (July 10, 2013)
4
+
5
+ * Introduced SlotMachine::Slots (also Slots and TimeSlots) for addition and subtraction of slots
6
+ * Being able to match available slots within slots
7
+ * Merging ranges on initialization of a slots instance
8
+ * Accepting Time objects within TimeSlot
9
+ * Improved Bundler setup
10
+
3
11
  == Version 0.1.0 (September 16, 2012)
4
12
 
5
13
  * Initial release
data/Gemfile CHANGED
@@ -1,18 +1,7 @@
1
- source "http://rubygems.org"
1
+ source "https://rubygems.org"
2
2
 
3
3
  gemspec
4
4
 
5
- group :gem_default do
6
- gem "slot_machine", :path => "."
7
- end
8
-
9
- group :gem_development do
10
- gem "pry"
11
- end
12
-
13
- group :gem_test do
14
- gem "minitest"
15
- gem "mocha"
5
+ group :console do
16
6
  gem "pry"
17
- gem "rake"
18
7
  end
@@ -1,4 +1,4 @@
1
- Copyright (c) 2012 Paul Engel
1
+ Copyright (c) 2013 Paul Engel
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -127,7 +127,7 @@ Well that's about it! Pretty straightforward, right? Have fun playing with the `
127
127
 
128
128
  ## TODO
129
129
 
130
- * Accept Time objects within TimeSlot
130
+ * Update documentation regarding Slots, TimeSlots and Time objects
131
131
 
132
132
  ## Contact me
133
133
 
@@ -135,7 +135,7 @@ For support, remarks and requests, please mail me at [paul.engel@holder.nl](mail
135
135
 
136
136
  ## License
137
137
 
138
- Copyright (c) 2012 Paul Engel, released under the MIT license
138
+ Copyright (c) 2013 Paul Engel, released under the MIT license
139
139
 
140
140
  [http://holder.nl](http://holder.nl) - [http://codehero.es](http://codehero.es) - [http://gettopup.com](http://gettopup.com) - [http://github.com/archan937](http://github.com/archan937) - [http://twitter.com/archan937](http://twitter.com/archan937) - [paul.engel@holder.nl](mailto:paul.engel@holder.nl)
141
141
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
@@ -1,4 +1,9 @@
1
- require "slot_machine/slot"
2
1
  require "slot_machine/version"
2
+ require "slot_machine/slot"
3
+ require "slot_machine/slots"
4
+
3
5
  require "slot"
4
- require "time_slot"
6
+ require "slots"
7
+
8
+ require "time_slot"
9
+ require "time_slots"
@@ -12,6 +12,12 @@ module SlotMachine
12
12
  def self.default_interval
13
13
  @interval || 10
14
14
  end
15
+
16
+ def self.slots_class
17
+ @slots_class ||= "#{name}s".split("::").inject(Object) do |mod, name|
18
+ mod.const_get name
19
+ end
20
+ end
15
21
  end
16
22
  end
17
23
 
@@ -55,6 +61,14 @@ module SlotMachine
55
61
  match_compared to_compared, other.to_compared, interval
56
62
  end
57
63
 
64
+ def +(other)
65
+ self.class.slots_class.new(self) + other
66
+ end
67
+
68
+ def -(other)
69
+ self.class.slots_class.new(self) - other
70
+ end
71
+
58
72
  def ==(other)
59
73
  self.class == other.class && self.start == other.start && self.end == other.end && self.length == other.length
60
74
  end
@@ -72,6 +86,10 @@ module SlotMachine
72
86
 
73
87
  protected
74
88
 
89
+ def typecast(value)
90
+ value.to_s
91
+ end
92
+
75
93
  def valid?(value)
76
94
  true
77
95
  end
@@ -125,7 +143,7 @@ module SlotMachine
125
143
  end
126
144
 
127
145
  def typecast!(value, operator, compared)
128
- Integer(value.to_s).tap do |value|
146
+ Integer(typecast(value)).tap do |value|
129
147
  raise ArgumentError, "Passed value should be #{operator} #{compared} (#{value} given)" if compared && !value.send(operator, compared)
130
148
  end
131
149
  end
@@ -0,0 +1,130 @@
1
+ module SlotMachine
2
+ module Slots
3
+
4
+ def self.included(base)
5
+ base.class_eval do
6
+ def self.slot_class
7
+ @slot_class ||= name.gsub(/s$/, "").split("::").inject(Object) do |mod, name|
8
+ mod.const_get name
9
+ end
10
+ end
11
+ end
12
+ end
13
+
14
+ def initialize(*ranges_or_range_slots)
15
+ @range_slots = to_range_slots(add(ranges_or_range_slots.flatten))
16
+ end
17
+
18
+ def range_slots
19
+ @range_slots || []
20
+ end
21
+
22
+ def match(other, interval = nil)
23
+ range_slots.collect{|range_slot| range_slot.match other, interval}.flatten.uniq
24
+ end
25
+
26
+ def +(other)
27
+ unless other.is_a?(Range) || other.is_a?(Array) || other.class == self.class.slot_class || other.class == self.class
28
+ raise ArgumentError, "Either subtract a Range, an Array, #{self.class.slot_class.name} or #{self.class.name} instance (#{other.class.name} given)"
29
+ end
30
+ self.class.new add(other)
31
+ end
32
+
33
+ def -(other)
34
+ unless other.is_a?(Range) || other.is_a?(Array) || other.class == self.class.slot_class || other.class == self.class
35
+ raise ArgumentError, "Either subtract a Range, an Array, #{self.class.slot_class.name} or #{self.class.name} instance (#{other.class.name} given)"
36
+ end
37
+ self.class.new subtract(other)
38
+ end
39
+
40
+ def ==(other)
41
+ ((self.class == other.class) || (other_is_an_array = other.is_a?(Array))) && begin
42
+ range_slots.size == (other_range_slots = other_is_an_array ? other : other.range_slots).size && begin
43
+ range_slots.each_with_index do |range_slot, index|
44
+ return false unless range_slot == other_range_slots[index]
45
+ end
46
+ true
47
+ end
48
+ end
49
+ end
50
+
51
+ private
52
+
53
+ def to_range_slots(ranges_or_range_slots)
54
+ ranges_or_range_slots.flatten.collect do |range_or_range_slot|
55
+ if range_or_range_slot.class == self.class.slot_class
56
+ range_or_range_slot
57
+ elsif range_or_range_slot.is_a?(Range)
58
+ self.class.slot_class.new range_or_range_slot
59
+ else
60
+ raise ArgumentError
61
+ end
62
+ end.sort do |a, b|
63
+ [a.start, a.end] <=> [b.start, b.end]
64
+ end
65
+ end
66
+
67
+ def to_ranges(object)
68
+ begin
69
+ if object.is_a?(Range) || object.class == self.class.slot_class
70
+ [object]
71
+ elsif object.class == self.class
72
+ object.range_slots
73
+ else
74
+ object
75
+ end
76
+ end.collect do |entry|
77
+ if entry.class == self.class.slot_class
78
+ entry.start..entry.end
79
+ elsif entry.is_a?(Range)
80
+ entry
81
+ else
82
+ raise ArgumentError
83
+ end
84
+ end
85
+ end
86
+
87
+ def add(other)
88
+ *merged_ranges = (ranges = to_ranges(self).concat(to_ranges(other)).sort{|a, b| [a.first, a.last] <=> [b.first, b.last]}).shift
89
+ ranges.each do |range|
90
+ last_range = merged_ranges[-1]
91
+ if last_range.last >= range.first - 1
92
+ merged_ranges[-1] = last_range.first..[range.last, last_range.last].max
93
+ else
94
+ merged_ranges.push range
95
+ end
96
+ end
97
+ merged_ranges
98
+ end
99
+
100
+ def subtract(other)
101
+ divided_ranges = to_ranges(self)
102
+ to_ranges(other).each do |range|
103
+ divided_ranges = divided_ranges.collect do |divided_range|
104
+ if range.first <= divided_range.first && range.last > divided_range.first && range.last < divided_range.last
105
+ # | range |
106
+ # | divided_range |
107
+ range.last..divided_range.last
108
+ elsif range.first > divided_range.first && range.first < divided_range.last && range.last >= divided_range.last
109
+ # | range |
110
+ # | divided_range |
111
+ divided_range.first..range.first
112
+ elsif range.first > divided_range.first && range.last < divided_range.last
113
+ # | range |
114
+ # | divided_range |
115
+ [divided_range.first..range.first, range.last..divided_range.last]
116
+ elsif range.last <= divided_range.first || range.first >= divided_range.last
117
+ # | range |
118
+ # | divided_range |
119
+ # or
120
+ # | range |
121
+ # | divided_range |
122
+ divided_range
123
+ end
124
+ end.flatten.compact
125
+ end
126
+ divided_ranges
127
+ end
128
+
129
+ end
130
+ end
@@ -1,7 +1,7 @@
1
1
  module SlotMachine #:nodoc:
2
2
  MAJOR = 0
3
3
  MINOR = 1
4
- TINY = 0
4
+ TINY = 1
5
5
 
6
6
  VERSION = [MAJOR, MINOR, TINY].join(".")
7
7
  end
@@ -0,0 +1,3 @@
1
+ class Slots
2
+ include SlotMachine::Slots
3
+ end
@@ -7,6 +7,10 @@ class TimeSlot
7
7
 
8
8
  protected
9
9
 
10
+ def typecast(value)
11
+ value.is_a?(Time) ? value.strftime("%Y%m%d%H%M") : value.to_s
12
+ end
13
+
10
14
  def valid?(value)
11
15
  (value - (100 * (value / 100))) < 60
12
16
  end
@@ -0,0 +1,3 @@
1
+ class TimeSlots
2
+ include SlotMachine::Slots
3
+ end
@@ -1,10 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "rubygems"
4
3
  require "bundler"
5
-
6
- Bundler.require :gem_default, :gem_development
4
+ Bundler.require :default, :console
7
5
 
8
6
  puts "Loading development environment (SlotMachine #{SlotMachine::VERSION})"
9
-
10
7
  Pry.start
@@ -1,4 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
+ require File.expand_path("../lib/slot_machine/version", __FILE__)
2
3
 
3
4
  Gem::Specification.new do |gem|
4
5
  gem.authors = ["Paul Engel"]
@@ -12,5 +13,8 @@ Gem::Specification.new do |gem|
12
13
  gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
13
14
  gem.name = "slot_machine"
14
15
  gem.require_paths = ["lib"]
15
- gem.version = "0.1.0"
16
+ gem.version = SlotMachine::VERSION
17
+
18
+ gem.add_development_dependency "minitest", "4.6.2"
19
+ gem.add_development_dependency "mocha", "0.13.2"
16
20
  end
@@ -1,7 +1,6 @@
1
- require "rubygems"
2
- require "bundler"
1
+ $:.unshift File.expand_path("../../lib", __FILE__)
3
2
 
4
3
  require "minitest/unit"
5
4
  require "minitest/autorun"
6
-
7
- Bundler.require :gem_default, :gem_test
5
+ require "mocha/setup"
6
+ require "slot_machine"
@@ -14,6 +14,11 @@ module Unit
14
14
  interval 20
15
15
  end
16
16
  assert_equal 20, Slot.default_interval
17
+
18
+ Slot.class_eval do
19
+ interval 10
20
+ end
21
+ assert_equal 10, Slot.default_interval
17
22
  end
18
23
  end
19
24
 
@@ -28,8 +33,10 @@ module Unit
28
33
  assert slot.respond_to?(:end=)
29
34
  assert slot.respond_to?(:length)
30
35
  assert slot.respond_to?(:length=)
31
- assert slot.respond_to?(:to_compared)
36
+ assert slot.respond_to?(:to_compared, true)
32
37
  assert slot.respond_to?(:match)
38
+ assert slot.respond_to?(:+)
39
+ assert slot.respond_to?(:-)
33
40
  end
34
41
  end
35
42
 
@@ -75,7 +82,7 @@ module Unit
75
82
  end
76
83
 
77
84
  describe "equality" do
78
- it "should return whether it equals another objects" do
85
+ it "should return whether it equals another object" do
79
86
  slot = Slot.new 1
80
87
 
81
88
  assert !(slot == 1)
@@ -190,6 +197,20 @@ module Unit
190
197
  Slot.new(5).match(5)
191
198
  end
192
199
  end
200
+
201
+ it "should be able to add other slots" do
202
+ assert_equal Slots, (Slot.new(1..10) + (5..8)).class
203
+ assert_equal Slots, (Slot.new(1..10) + Slot.new(5..8)).class
204
+ assert_equal Slots, (Slot.new(1..10) + [5..8]).class
205
+ assert_equal Slots, (Slot.new(1..10) + Slots.new([5..8])).class
206
+ end
207
+
208
+ it "should be able to subtract other slots" do
209
+ assert_equal Slots, (Slot.new(1..10) - (5..8)).class
210
+ assert_equal Slots, (Slot.new(1..10) - Slot.new(5..8)).class
211
+ assert_equal Slots, (Slot.new(1..10) - [5..8]).class
212
+ assert_equal Slots, (Slot.new(1..10) - Slots.new([5..8])).class
213
+ end
193
214
  end
194
215
 
195
216
  describe "length slots" do
@@ -233,5 +254,6 @@ module Unit
233
254
  end
234
255
  end
235
256
  end
257
+
236
258
  end
237
259
  end
@@ -0,0 +1,117 @@
1
+ require File.expand_path("../../test_helper", __FILE__)
2
+
3
+ module Unit
4
+ class TestSlots < MiniTest::Unit::TestCase
5
+
6
+ describe Slots do
7
+ describe "instance methods" do
8
+ it "should have the expected instance methods" do
9
+ slots = Slots.new 1..10
10
+ assert slots.respond_to?(:range_slots)
11
+ end
12
+ end
13
+
14
+ describe "initialization" do
15
+ it "should accept a range" do
16
+ slots = Slots.new 10..20
17
+ assert_equal [Slot.new(10..20)], slots.range_slots
18
+ end
19
+
20
+ it "should accept ranges" do
21
+ slots = Slots.new 10..20, Slot.new(30..40)
22
+ assert_equal [Slot.new(10..20), Slot.new(30..40)], slots.range_slots
23
+
24
+ slots = Slots.new 10..20, Slot.new(22..30)
25
+ assert_equal [Slot.new(10..20), Slot.new(22..30)], slots.range_slots
26
+ end
27
+
28
+ it "should merge slots on initialization" do
29
+ slots = Slots.new 10..20, 20..30
30
+ assert_equal [Slot.new(10..30)], slots.range_slots
31
+ end
32
+
33
+ it "should raise an exception when invalid" do
34
+ assert_raises ArgumentError do
35
+ Slots.new "bar"
36
+ end
37
+ assert_raises ArgumentError do
38
+ Slots.new 1.."bar"
39
+ end
40
+ assert_raises ArgumentError do
41
+ Slots.new "bar"..1
42
+ end
43
+ assert_raises ArgumentError do
44
+ Slots.new "slot".."bar"
45
+ end
46
+ end
47
+ end
48
+
49
+ describe "equality" do
50
+ it "should return whether it equals another object" do
51
+ slots = Slots.new 1..2, 3..4
52
+
53
+ assert !(slots == Slot.new(1..2))
54
+ assert !(slots == Slots.new(1..2, 3..5))
55
+
56
+ assert_equal slots, Slots.new(3..4, 1..2)
57
+ assert_equal slots, Slots.new(1..2, 3..4)
58
+ assert_equal slots, Slots.new([1..2, 3..4])
59
+ assert_equal slots, Slots.new(Slot.new(1..2), Slot.new(3..4))
60
+ assert_equal slots, [Slot.new(1..4)]
61
+ end
62
+ end
63
+
64
+ describe "calculations" do
65
+ it "should be able to add slots" do
66
+ slots = Slots.new 0..10
67
+
68
+ assert_equal Slots, (slots + (10..20)).class
69
+ assert_equal Slots, (slots + Slot.new(10..20)).class
70
+ assert_equal Slots, (slots + Slots.new(10..20)).class
71
+
72
+ assert_equal Slots.new(0..20), (slots + (10..20))
73
+ assert_equal Slots.new(0..10, 20..30), (slots + Slot.new(20..30))
74
+ assert_equal Slots.new(0..10, 20..30, 40..60), (slots + Slots.new(20..30, 40..50) + (45..60))
75
+
76
+ assert_equal Slots.new(0..15, 20..30), (((slots + (5..15)) + (20..25)) + (24..30))
77
+ end
78
+
79
+ it "should be able to subtract slots" do
80
+ slots = Slots.new 0..30
81
+
82
+ assert_equal Slots, (slots - (10..20)).class
83
+ assert_equal Slots, (slots - Slot.new(10..20)).class
84
+ assert_equal Slots, (slots - Slots.new(10..20)).class
85
+
86
+ assert_equal Slots.new(0..10, 20..30), (slots - (10..20))
87
+ assert_equal Slots.new(0..10, 20..30), (slots - Slot.new(10..20))
88
+ assert_equal Slots.new(0..10, 20..30), (slots - Slots.new(10..20, 30..40))
89
+
90
+ assert_equal Slots.new(0..5, 10..20, 25..30), (((slots - (20..25)) - (5..10)) - (20..22))
91
+ end
92
+
93
+ it "should be able to match available slots" do
94
+ slots = Slots.new(0..10, 15..40, 50..65)
95
+
96
+ assert_equal [
97
+ Slot.new(0..10),
98
+ Slot.new(15..25),
99
+ Slot.new(25..35),
100
+ Slot.new(50..60)
101
+ ], slots.match(10)
102
+
103
+ assert_equal [
104
+ Slot.new(0..10),
105
+ Slot.new(15..25),
106
+ Slot.new(20..30),
107
+ Slot.new(25..35),
108
+ Slot.new(30..40),
109
+ Slot.new(50..60),
110
+ Slot.new(55..65)
111
+ ], slots.match(10, 5)
112
+ end
113
+ end
114
+ end
115
+
116
+ end
117
+ end
@@ -1,5 +1,7 @@
1
1
  require File.expand_path("../../test_helper", __FILE__)
2
2
 
3
+ require "time"
4
+
3
5
  module Unit
4
6
  class TestTimeSlot < MiniTest::Unit::TestCase
5
7
 
@@ -15,6 +17,17 @@ module Unit
15
17
  end
16
18
  end
17
19
 
20
+ it "should accept time objects" do
21
+ assert_equal [
22
+ 198208010859,
23
+ 198208010900,
24
+ 198208010901,
25
+ 198208010902,
26
+ 198208010903,
27
+ 198208010904
28
+ ], TimeSlot.new(Time.parse("1982-08-01 08:59")..Time.parse("1982-08-01 09:05")).send(:to_compared)
29
+ end
30
+
18
31
  it "should represent itself as an array when invoking to_compared" do
19
32
  assert_equal 10 , TimeSlot.new(855..905).send(:to_compared).size
20
33
  assert_equal 222, TimeSlot.new(955..1337).send(:to_compared).size
@@ -42,6 +55,13 @@ module Unit
42
55
  TimeSlot.new(1109..1149)
43
56
  ], time_slot.match(40, 18)
44
57
 
58
+ assert_equal [
59
+ TimeSlot.new(198208011015..198208011055),
60
+ TimeSlot.new(198208011033..198208011113),
61
+ TimeSlot.new(198208011051..198208011131),
62
+ TimeSlot.new(198208011109..198208011149)
63
+ ], TimeSlot.new(Time.parse("1982-08-01 10:15")..Time.parse("1982-08-01 12:00")).match(40, 18)
64
+
45
65
  assert_equal [], time_slot.match(945..1005)
46
66
  assert_equal [], time_slot.match(1205..1225)
47
67
  assert_equal [TimeSlot.new(1015..1200)], time_slot.match(1015..1200)
@@ -0,0 +1,54 @@
1
+ require File.expand_path("../../test_helper", __FILE__)
2
+
3
+ module Unit
4
+ class TestTimeSlots < MiniTest::Unit::TestCase
5
+
6
+ describe TimeSlots do
7
+ it "should merge slots on initialization" do
8
+ time_slots = TimeSlots.new 1015..1100, 1100..1115
9
+ assert_equal [TimeSlot.new(1015..1115)], time_slots.range_slots
10
+ end
11
+
12
+ it "should be able to add slots" do
13
+ time_slot = TimeSlot.new 1015..1100
14
+
15
+ assert_equal TimeSlots.new(1015..1130), (time_slot + (1055..1130))
16
+ assert_equal TimeSlots.new(1015..1130), (time_slot + TimeSlot.new(1055..1130))
17
+ assert_equal TimeSlots.new(1015..1130, 1145..1200), (time_slot + TimeSlots.new(1055..1130, 1145..1200))
18
+ end
19
+
20
+ it "should be able to subtract slots" do
21
+ time_slot = TimeSlot.new 1015..1100
22
+
23
+ assert_equal TimeSlots.new(1015..1030, 1045..1100), (time_slot - (1030..1045))
24
+ assert_equal TimeSlots.new(1015..1055), (time_slot - TimeSlot.new(1055..1130))
25
+ assert_equal TimeSlots.new(1015..1045, 1055..1100), (time_slot - TimeSlots.new(1045..1055, 1145..1200))
26
+ end
27
+
28
+ it "should be able to match available slots" do
29
+ time_slots = TimeSlots.new(1015..1100, 1230..1337)
30
+
31
+ assert_equal [
32
+ TimeSlot.new(1015..1035),
33
+ TimeSlot.new(1030..1050),
34
+ TimeSlot.new(1230..1250),
35
+ TimeSlot.new(1245..1305),
36
+ TimeSlot.new(1300..1320),
37
+ TimeSlot.new(1315..1335)
38
+ ], time_slots.match(20)
39
+
40
+ assert_equal [
41
+ TimeSlot.new(1015..1035),
42
+ TimeSlot.new(1025..1045),
43
+ TimeSlot.new(1035..1055),
44
+ TimeSlot.new(1230..1250),
45
+ TimeSlot.new(1240..1300),
46
+ TimeSlot.new(1250..1310),
47
+ TimeSlot.new(1300..1320),
48
+ TimeSlot.new(1310..1330)
49
+ ], time_slots.match(20, 10)
50
+ end
51
+ end
52
+
53
+ end
54
+ end
metadata CHANGED
@@ -1,33 +1,53 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: slot_machine
3
- version: !ruby/object:Gem::Version
4
- hash: 27
5
- prerelease:
6
- segments:
7
- - 0
8
- - 1
9
- - 0
10
- version: 0.1.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Paul Engel
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2012-09-15 00:00:00 Z
19
- dependencies: []
20
-
21
- description: One of the classic programming problems is the determination of time slot availability. Very often this is used within scheduling / calendar programs. SlotMachine is a very small Ruby gem which can do the job for you. It does not only focuses on time slots, but also slots in general.
22
- email:
11
+ date: 2013-07-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: minitest
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 4.6.2
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 4.6.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: mocha
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 0.13.2
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 0.13.2
41
+ description: One of the classic programming problems is the determination of time
42
+ slot availability. Very often this is used within scheduling / calendar programs.
43
+ SlotMachine is a very small Ruby gem which can do the job for you. It does not only
44
+ focuses on time slots, but also slots in general.
45
+ email:
23
46
  - paul.engel@holder.nl
24
47
  executables: []
25
-
26
48
  extensions: []
27
-
28
49
  extra_rdoc_files: []
29
-
30
- files:
50
+ files:
31
51
  - .gitignore
32
52
  - .travis.yml
33
53
  - CHANGELOG.rdoc
@@ -39,47 +59,44 @@ files:
39
59
  - lib/slot.rb
40
60
  - lib/slot_machine.rb
41
61
  - lib/slot_machine/slot.rb
62
+ - lib/slot_machine/slots.rb
42
63
  - lib/slot_machine/version.rb
64
+ - lib/slots.rb
43
65
  - lib/time_slot.rb
66
+ - lib/time_slots.rb
44
67
  - script/console
45
68
  - slot_machine.gemspec
46
69
  - test/test_helper.rb
47
70
  - test/unit/test_slot.rb
71
+ - test/unit/test_slots.rb
48
72
  - test/unit/test_time_slot.rb
73
+ - test/unit/test_time_slots.rb
49
74
  homepage: https://github.com/archan937/slot_machine
50
75
  licenses: []
51
-
76
+ metadata: {}
52
77
  post_install_message:
53
78
  rdoc_options: []
54
-
55
- require_paths:
79
+ require_paths:
56
80
  - lib
57
- required_ruby_version: !ruby/object:Gem::Requirement
58
- none: false
59
- requirements:
60
- - - ">="
61
- - !ruby/object:Gem::Version
62
- hash: 3
63
- segments:
64
- - 0
65
- version: "0"
66
- required_rubygems_version: !ruby/object:Gem::Requirement
67
- none: false
68
- requirements:
69
- - - ">="
70
- - !ruby/object:Gem::Version
71
- hash: 3
72
- segments:
73
- - 0
74
- version: "0"
81
+ required_ruby_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
75
91
  requirements: []
76
-
77
92
  rubyforge_project:
78
- rubygems_version: 1.8.24
93
+ rubygems_version: 2.0.3
79
94
  signing_key:
80
- specification_version: 3
95
+ specification_version: 4
81
96
  summary: Ruby gem for matching available slots (time slots are also supported)
82
- test_files:
97
+ test_files:
83
98
  - test/test_helper.rb
84
99
  - test/unit/test_slot.rb
100
+ - test/unit/test_slots.rb
85
101
  - test/unit/test_time_slot.rb
102
+ - test/unit/test_time_slots.rb