hammock 0.3.7 → 0.3.8

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,8 @@
1
+ == 0.3.8 2009-06-05
2
+ Added LambdaAlias dep to RouteDrawingHooks, for Hammock.load_models.
3
+ Added LambdaComposition component.
4
+
5
+
1
6
  == 0.3.7 2009-06-05
2
7
  Rewrote hammock loading code to use nestable dependencies instead of the LoadFirst constant.
3
8
  Replaced Hammock::Aliases with the Hammock:LambdaAlias component.
data/Manifest.txt CHANGED
@@ -4,6 +4,7 @@ Manifest.txt
4
4
  README.rdoc
5
5
  Rakefile
6
6
  hammock.gemspec
7
+ init.rb
7
8
  lib/hammock.rb
8
9
  lib/hammock/ajaxinate.rb
9
10
  lib/hammock/callback.rb
@@ -14,6 +15,8 @@ lib/hammock/controller_attributes.rb
14
15
  lib/hammock/export_scope.rb
15
16
  lib/hammock/hamlink_to.rb
16
17
  lib/hammock/javascript_buffer.rb
18
+ lib/hammock/lambda_alias.rb
19
+ lib/hammock/lambda_composition.rb
17
20
  lib/hammock/logging.rb
18
21
  lib/hammock/model_attributes.rb
19
22
  lib/hammock/model_logging.rb
@@ -27,6 +30,7 @@ lib/hammock/monkey_patches/numeric.rb
27
30
  lib/hammock/monkey_patches/object.rb
28
31
  lib/hammock/monkey_patches/route_set.rb
29
32
  lib/hammock/monkey_patches/string.rb
33
+ lib/hammock/mutex.rb
30
34
  lib/hammock/overrides.rb
31
35
  lib/hammock/resource_mapping_hooks.rb
32
36
  lib/hammock/resource_retrieval.rb
data/hammock.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{hammock}
5
- s.version = "0.3.7"
5
+ s.version = "0.3.8"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Ben Hoskings"]
data/init.rb ADDED
@@ -0,0 +1,3 @@
1
+ # This loads hammock when it's present as a plugin.
2
+ # As a gem, it's loaded from lib/hammock.rb.
3
+ Hammock::IncludeTarget.send :include, Hammock
@@ -0,0 +1,12 @@
1
+ module Hammock
2
+ module LambdaAlias
3
+ MixInto = Kernel
4
+
5
+ def self.included base # :nodoc:
6
+ base.class_eval {
7
+ alias :L :lambda
8
+ }
9
+ end
10
+
11
+ end
12
+ end
@@ -0,0 +1,26 @@
1
+ module Hammock
2
+ module LambdaComposition
3
+ MixInto = Proc
4
+
5
+ def self.included base # :nodoc:
6
+ base.send :include, InstanceMethods
7
+ base.send :extend, ClassMethods
8
+ end
9
+
10
+ module ClassMethods
11
+
12
+ def self.compose f, g
13
+ L{|*args| f[g[*args]] }
14
+ end
15
+
16
+ end
17
+
18
+ module InstanceMethods
19
+
20
+ def * g
21
+ Proc.compose self, g
22
+ end
23
+
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,45 @@
1
+ module Hammock
2
+ module Mutex
3
+ MixInto = ActiveRecord::Base
4
+
5
+ def self.included base # :nodoc:
6
+ base.send :include, InstanceMethods
7
+ base.send :extend, ClassMethods
8
+ end
9
+
10
+ module ClassMethods
11
+ end
12
+
13
+ module InstanceMethods
14
+
15
+ # Yield to the block after obtaining a column lock on +self+.
16
+ #
17
+ # The column lock is obtained by trying to set the given column to the
18
+ # current time. Since the check is done within UPDATE conditions and not
19
+ # a separate SELECT, it is atomic.
20
+ #
21
+ # After +block+ returns, the column is reset to NULL, at which point
22
+ # the lock can be obtained by other calls to +#mutex+. The NULL update is
23
+ # done within an +ensure+ block, so an exception within +block+ won't
24
+ # cause a stuck mutex.
25
+ #
26
+ # Example:
27
+ # @photo.mutex(:regenerating_thumbnails_at) { <some operation> }
28
+ def mutex column, &block
29
+ L{
30
+ sleep 1 and redo if self.class.update_all(
31
+ ["#{connection.quote_column_name(column)} = ?", Time.now],
32
+ ["#{connection.quote_column_name(self.class.primary_key)} = ? AND #{connection.quote_column_name(column)} IS NULL", id]
33
+ ).zero?
34
+ yield
35
+ }.call
36
+ ensure
37
+ self.class.update_all(
38
+ ["#{connection.quote_column_name(column)} = ?", nil],
39
+ ["#{connection.quote_column_name(self.class.primary_key)} = ?", id]
40
+ )
41
+ end
42
+
43
+ end
44
+ end
45
+ end
@@ -1,7 +1,7 @@
1
1
  module Hammock
2
2
  module RouteDrawingHooks
3
3
  MixInto = ActionController::Routing::RouteSet
4
- Deps = [ModulePatches]
4
+ Deps = [LambdaAlias, ModulePatches]
5
5
 
6
6
  def self.included base # :nodoc:
7
7
  base.send :include, Methods
data/lib/hammock.rb CHANGED
@@ -4,7 +4,7 @@ require 'ambition'
4
4
  require 'ambition/adapters/active_record'
5
5
 
6
6
  module Hammock
7
- VERSION = '0.3.7'
7
+ VERSION = '0.3.8'
8
8
  IncludeTarget = ActionController::Base
9
9
 
10
10
  def self.included base # :nodoc:
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hammock
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.7
4
+ version: 0.3.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Hoskings
@@ -81,6 +81,7 @@ files:
81
81
  - README.rdoc
82
82
  - Rakefile
83
83
  - hammock.gemspec
84
+ - init.rb
84
85
  - lib/hammock.rb
85
86
  - lib/hammock/ajaxinate.rb
86
87
  - lib/hammock/callback.rb
@@ -91,6 +92,8 @@ files:
91
92
  - lib/hammock/export_scope.rb
92
93
  - lib/hammock/hamlink_to.rb
93
94
  - lib/hammock/javascript_buffer.rb
95
+ - lib/hammock/lambda_alias.rb
96
+ - lib/hammock/lambda_composition.rb
94
97
  - lib/hammock/logging.rb
95
98
  - lib/hammock/model_attributes.rb
96
99
  - lib/hammock/model_logging.rb
@@ -104,6 +107,7 @@ files:
104
107
  - lib/hammock/monkey_patches/object.rb
105
108
  - lib/hammock/monkey_patches/route_set.rb
106
109
  - lib/hammock/monkey_patches/string.rb
110
+ - lib/hammock/mutex.rb
107
111
  - lib/hammock/overrides.rb
108
112
  - lib/hammock/resource_mapping_hooks.rb
109
113
  - lib/hammock/resource_retrieval.rb