Sha256: 675926fbaddd29c55520830a618d7c5f6d41f9a96034763e455d84babe6bbfcc

Contents?: true

Size: 1.9 KB

Versions: 3

Compression:

Stored size: 1.9 KB

Contents

= Synchronizable

Synchronizable is a gem that provides an easy module-based mechanism
for making any object thread-safe with an instance-level lock. This
gem was originally inspired from Mike Perham's dalli gem, which provides
a ThreadSafe module for his memcached client. However, that solution
is not currently generic. This gem attempts to provide a generic solution
that can work with any object (including classes/modules) in your system.

== Installation

Synchronizable is available as a RubyGem:

    gem install synchronizable

== Examples

=== Making an instance synchronizable

    class Foo
      def bar
      end

      def baz
      end
    end

    foo = Foo.new
    # the foo instance now has all methods synchronized / thread-safe
    foo.extend(Synchronizable)

=== Making a class synchronizable

    # note that classes are objects in Ruby and can also be synchronized
    class Bar
      def self.foo
      end
    end

    # only class/singleton methods will become synchronized
    Bar.extend(Synchronizable)

=== Utilizing the #synchronize method to protect a block

    # the synchronize method takes a block and executes it
    # in a thread-safe manner
    s = "this is a test"
    s.extend(Synchronizable)
    s.synchronize do
      s.gsub!('i', 'x')
      s.slice!(0, 5)
    end

== Note on Patches/Pull Requests

* Fork the project.
* Make your feature addition or bug fix.
* Add tests for it. This is important so I don't break it in a future version unintentionally.
* Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
* Send me a pull request. Bonus points for topic branches.

== Authors

* Ryan LeCompte

== Credits

* Mike Perham (inspired from ThreadSafety module in https://github.com/mperham/dalli)

== Copyright

Copyright (c) 2011 Ryan LeCompte. See LICENSE for
further details.

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
synchronizable-0.0.4 README.rdoc
synchronizable-0.0.3 README.rdoc
synchronizable-0.0.2 README.rdoc