aboutsummaryrefslogtreecommitdiff
path: root/tapelibrary.rb
diff options
context:
space:
mode:
Diffstat (limited to 'tapelibrary.rb')
-rw-r--r--tapelibrary.rb48
1 files changed, 48 insertions, 0 deletions
diff --git a/tapelibrary.rb b/tapelibrary.rb
new file mode 100644
index 0000000..daf0e2e
--- /dev/null
+++ b/tapelibrary.rb
@@ -0,0 +1,48 @@
+require 'rubygems'
+require 'docile'
+
+Library = Struct.new(:name, :tapes)
+
+class LibraryBuilder
+ def initialize name
+ @name = name
+ @nextslot = 1
+ @tapes = Hash.new
+ end
+ def tape name, opts = {}
+ slot = opts[:slot]
+ if slot.nil? then
+ @tapes[name] = @nextslot
+ @nextslot += 1
+ else
+ @nextslot += 1 if slot == @nextslot
+ @tapes[name] = slot
+ end
+ end
+ def build
+ Library.new @name, @tapes
+ end
+end
+
+def library name, &block
+ Docile.dsl_eval(LibraryBuilder.new(name), &block).build
+end
+
+Robot = Struct.new(:name, :libraries)
+
+class RobotBuilder
+ def initialize name
+ @name = name
+ @libraries = Hash.new
+ end
+ def uselibrary name, library
+ @libraries[name] = library
+ end
+ def build
+ Robot.new @name, @libraries
+ end
+end
+
+def robot name, &block
+ Docile.dsl_eval(RobotBuilder.new(name), &block).build
+end