slot_machine 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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