-
-
Save vsizov/4024830 to your computer and use it in GitHub Desktop.
Revisions
-
daddz revised this gist
Apr 1, 2010 . 1 changed file with 42 additions and 42 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,52 +1,52 @@ class FileQueue def initialize(file_name) @file_name = file_name end def push(obj) safe_open('a') do |file| file.write(obj + "\n") end end alias << push def pop value = nil rest = nil safe_open('r') do |file| value = file.gets rest = file.read end safe_open('w+') do |file| file.write(rest) end value end def length count = 0 safe_open('r') do |file| count = file.read.count("\n") end count end def empty? return length == 0 end def clear safe_open('w') do |file| end end private def safe_open(mode) File.open(@file_name, mode) do |file| file.flock(File::LOCK_EX) yield file file.flock(File::LOCK_UN) end end end -
daddz created this gist
Apr 1, 2010 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,52 @@ class FileQueue def initialize(file_name) @file_name = file_name end def push(obj) safe_open('a') do |file| file.write(obj + "\n") end end alias << push def pop value = nil rest = nil safe_open('r') do |file| value = file.gets rest = file.read end safe_open('w+') do |file| file.write(rest) end value end def length count = 0 safe_open('r') do |file| count = file.read.count("\n") end count end def empty? return length == 0 end def clear safe_open('w') do |file| end end private def safe_open(mode) File.open(@file_name, mode) do |file| file.flock(File::LOCK_EX) yield file file.flock(File::LOCK_UN) end end end