Skip to content

Instantly share code, notes, and snippets.

@vsizov
Forked from daddz/file_queue.rb
Created November 6, 2012 13:47
Show Gist options
  • Select an option

  • Save vsizov/4024830 to your computer and use it in GitHub Desktop.

Select an option

Save vsizov/4024830 to your computer and use it in GitHub Desktop.

Revisions

  1. @daddz daddz revised this gist Apr 1, 2010. 1 changed file with 42 additions and 42 deletions.
    84 changes: 42 additions & 42 deletions file_queue.rb
    Original 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 initialize(file_name)
    @file_name = file_name
    end

    def push(obj)
    safe_open('a') do |file|
    file.write(obj + "\n")
    end
    end
    def push(obj)
    safe_open('a') do |file|
    file.write(obj + "\n")
    end
    end

    alias << push
    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 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 length
    count = 0
    safe_open('r') do |file|
    count = file.read.count("\n")
    end
    count
    end

    def empty?
    return length == 0
    end
    def empty?
    return length == 0
    end

    def clear
    safe_open('w') do |file| end
    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
    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
  2. @daddz daddz created this gist Apr 1, 2010.
    52 changes: 52 additions & 0 deletions file_queue.rb
    Original 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