esod-client 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. data/EXAMPLES +140 -0
  2. data/GEM_RELEASE +19 -0
  3. data/README +10 -0
  4. data/Rakefile +14 -0
  5. data/VERSION +1 -0
  6. data/esod-client.gemspec +118 -0
  7. data/esod-client.rb +35 -0
  8. data/lib/activesupport-2.2.2/CHANGELOG +1257 -0
  9. data/lib/activesupport-2.2.2/README +43 -0
  10. data/lib/activesupport-2.2.2/README.CFT +2 -0
  11. data/lib/activesupport-2.2.2/lib/active_support.rb +26 -0
  12. data/lib/activesupport-2.2.2/lib/active_support/base64.rb +33 -0
  13. data/lib/activesupport-2.2.2/lib/active_support/basic_object.rb +24 -0
  14. data/lib/activesupport-2.2.2/lib/active_support/buffered_logger.rb +122 -0
  15. data/lib/activesupport-2.2.2/lib/active_support/cache.rb +223 -0
  16. data/lib/activesupport-2.2.2/lib/active_support/cache/compressed_mem_cache_store.rb +20 -0
  17. data/lib/activesupport-2.2.2/lib/active_support/cache/drb_store.rb +15 -0
  18. data/lib/activesupport-2.2.2/lib/active_support/cache/file_store.rb +72 -0
  19. data/lib/activesupport-2.2.2/lib/active_support/cache/mem_cache_store.rb +127 -0
  20. data/lib/activesupport-2.2.2/lib/active_support/cache/memory_store.rb +52 -0
  21. data/lib/activesupport-2.2.2/lib/active_support/cache/synchronized_memory_store.rb +47 -0
  22. data/lib/activesupport-2.2.2/lib/active_support/callbacks.rb +280 -0
  23. data/lib/activesupport-2.2.2/lib/active_support/core_ext.rb +6 -0
  24. data/lib/activesupport-2.2.2/lib/active_support/core_ext/hash.rb +14 -0
  25. data/lib/activesupport-2.2.2/lib/active_support/core_ext/hash/conversions.rb +259 -0
  26. data/lib/activesupport-2.2.2/lib/active_support/core_ext/hash/deep_merge.rb +23 -0
  27. data/lib/activesupport-2.2.2/lib/active_support/core_ext/hash/diff.rb +19 -0
  28. data/lib/activesupport-2.2.2/lib/active_support/core_ext/hash/except.rb +25 -0
  29. data/lib/activesupport-2.2.2/lib/active_support/core_ext/hash/indifferent_access.rb +137 -0
  30. data/lib/activesupport-2.2.2/lib/active_support/core_ext/hash/keys.rb +52 -0
  31. data/lib/activesupport-2.2.2/lib/active_support/core_ext/hash/reverse_merge.rb +35 -0
  32. data/lib/activesupport-2.2.2/lib/active_support/core_ext/hash/slice.rb +33 -0
  33. data/lib/activesupport-2.2.2/lib/active_support/vendor.rb +14 -0
  34. data/lib/activesupport-2.2.2/lib/active_support/vendor/builder-2.1.2/blankslate.rb +113 -0
  35. data/lib/activesupport-2.2.2/lib/active_support/vendor/builder-2.1.2/builder.rb +13 -0
  36. data/lib/activesupport-2.2.2/lib/active_support/vendor/builder-2.1.2/builder/blankslate.rb +20 -0
  37. data/lib/activesupport-2.2.2/lib/active_support/vendor/builder-2.1.2/builder/css.rb +250 -0
  38. data/lib/activesupport-2.2.2/lib/active_support/vendor/builder-2.1.2/builder/xchar.rb +115 -0
  39. data/lib/activesupport-2.2.2/lib/active_support/vendor/builder-2.1.2/builder/xmlbase.rb +139 -0
  40. data/lib/activesupport-2.2.2/lib/active_support/vendor/builder-2.1.2/builder/xmlevents.rb +63 -0
  41. data/lib/activesupport-2.2.2/lib/active_support/vendor/builder-2.1.2/builder/xmlmarkup.rb +328 -0
  42. data/lib/activesupport-2.2.2/lib/active_support/vendor/xml-simple-1.0.11/xmlsimple.rb +1021 -0
  43. data/lib/activesupport-2.2.2/lib/activesupport.rb +1 -0
  44. data/lib/esodclient/esodclient.rb +22 -0
  45. data/lib/hash.rb +22 -0
  46. data/lib/mime-types-1.16/History.txt +107 -0
  47. data/lib/mime-types-1.16/Install.txt +17 -0
  48. data/lib/mime-types-1.16/Licence.txt +15 -0
  49. data/lib/mime-types-1.16/Manifest.txt +12 -0
  50. data/lib/mime-types-1.16/README.txt +28 -0
  51. data/lib/mime-types-1.16/Rakefile +316 -0
  52. data/lib/mime-types-1.16/lib/mime/types.rb +751 -0
  53. data/lib/mime-types-1.16/lib/mime/types.rb.data +1324 -0
  54. data/lib/mime-types-1.16/mime-types.gemspec +43 -0
  55. data/lib/mime-types-1.16/setup.rb +1585 -0
  56. data/lib/mime-types-1.16/test/test_mime_type.rb +356 -0
  57. data/lib/mime-types-1.16/test/test_mime_types.rb +122 -0
  58. data/lib/rest-client-1.2.0/README.rdoc +102 -0
  59. data/lib/rest-client-1.2.0/Rakefile +57 -0
  60. data/lib/rest-client-1.2.0/VERSION +1 -0
  61. data/lib/rest-client-1.2.0/bin/restclient +87 -0
  62. data/lib/rest-client-1.2.0/lib/rest_client.rb +2 -0
  63. data/lib/rest-client-1.2.0/lib/restclient.rb +108 -0
  64. data/lib/rest-client-1.2.0/lib/restclient/exceptions.rb +89 -0
  65. data/lib/rest-client-1.2.0/lib/restclient/mixin/response.rb +48 -0
  66. data/lib/rest-client-1.2.0/lib/restclient/net_http_ext.rb +21 -0
  67. data/lib/rest-client-1.2.0/lib/restclient/payload.rb +178 -0
  68. data/lib/rest-client-1.2.0/lib/restclient/raw_response.rb +30 -0
  69. data/lib/rest-client-1.2.0/lib/restclient/request.rb +287 -0
  70. data/lib/rest-client-1.2.0/lib/restclient/resource.rb +146 -0
  71. data/lib/rest-client-1.2.0/lib/restclient/response.rb +20 -0
  72. data/lib/rest-client-1.2.0/spec/base.rb +10 -0
  73. data/lib/rest-client-1.2.0/spec/exceptions_spec.rb +65 -0
  74. data/lib/rest-client-1.2.0/spec/master_shake.jpg +0 -0
  75. data/lib/rest-client-1.2.0/spec/mixin/response_spec.rb +46 -0
  76. data/lib/rest-client-1.2.0/spec/payload_spec.rb +131 -0
  77. data/lib/rest-client-1.2.0/spec/raw_response_spec.rb +17 -0
  78. data/lib/rest-client-1.2.0/spec/request_spec.rb +521 -0
  79. data/lib/rest-client-1.2.0/spec/resource_spec.rb +75 -0
  80. data/lib/rest-client-1.2.0/spec/response_spec.rb +21 -0
  81. data/lib/rest-client-1.2.0/spec/restclient_spec.rb +53 -0
  82. data/lib/trollop/trollop.rb +735 -0
  83. metadata +137 -0
@@ -0,0 +1,43 @@
1
+ = Active Support -- Utility classes and standard library extensions from Rails
2
+
3
+ Active Support is a collection of various utility classes and standard library extensions that were found useful
4
+ for Rails. All these additions have hence been collected in this bundle as way to gather all that sugar that makes
5
+ Ruby sweeter.
6
+
7
+
8
+ == Download
9
+
10
+ The latest version of Active Support can be found at
11
+
12
+ * http://rubyforge.org/project/showfiles.php?group_id=182
13
+
14
+ Documentation can be found at
15
+
16
+ * http://as.rubyonrails.com
17
+
18
+
19
+ == Installation
20
+
21
+ The preferred method of installing Active Support is through its GEM file. You'll need to have
22
+ RubyGems[http://rubygems.rubyforge.org/wiki/wiki.pl] installed for that, though. If you have it,
23
+ then use:
24
+
25
+ % [sudo] gem install activesupport-1.0.0.gem
26
+
27
+
28
+ == License
29
+
30
+ Active Support is released under the MIT license.
31
+
32
+
33
+ == Support
34
+
35
+ The Active Support homepage is http://www.rubyonrails.com. You can find the Active Support
36
+ RubyForge page at http://rubyforge.org/projects/activesupport. And as Jim from Rake says:
37
+
38
+ Feel free to submit commits or feature requests. If you send a patch,
39
+ remember to update the corresponding unit tests. If fact, I prefer
40
+ new feature to be submitted in the form of new unit tests.
41
+
42
+ For other information, feel free to ask on the ruby-talk mailing list
43
+ (which is mirrored to comp.lang.ruby) or contact mailto:david@loudthinking.com.
@@ -0,0 +1,2 @@
1
+ Note: this activesupport dir has been stripped down to the essentials required for this project, namely
2
+ support for Hash.from_xml, to improve loading time.
@@ -0,0 +1,26 @@
1
+ #--
2
+ # Copyright (c) 2005 David Heinemeier Hansson
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #++
23
+
24
+ require 'active_support/vendor'
25
+ require 'active_support/basic_object'
26
+ require 'active_support/core_ext'
@@ -0,0 +1,33 @@
1
+ begin
2
+ require 'base64'
3
+ rescue LoadError
4
+ end
5
+
6
+ module ActiveSupport
7
+ if defined? ::Base64
8
+ Base64 = ::Base64
9
+ else
10
+ # Base64 provides utility methods for encoding and de-coding binary data
11
+ # using a base 64 representation. A base 64 representation of binary data
12
+ # consists entirely of printable US-ASCII characters. The Base64 module
13
+ # is included in Ruby 1.8, but has been removed in Ruby 1.9.
14
+ module Base64
15
+ # Encodes a string to its base 64 representation. Each 60 characters of
16
+ # output is separated by a newline character.
17
+ #
18
+ # ActiveSupport::Base64.encode64("Original unencoded string")
19
+ # # => "T3JpZ2luYWwgdW5lbmNvZGVkIHN0cmluZw==\n"
20
+ def self.encode64(data)
21
+ [data].pack("m")
22
+ end
23
+
24
+ # Decodes a base 64 encoded string to its original representation.
25
+ #
26
+ # ActiveSupport::Base64.decode64("T3JpZ2luYWwgdW5lbmNvZGVkIHN0cmluZw==")
27
+ # # => "Original unencoded string"
28
+ def self.decode64(data)
29
+ data.unpack("m").first
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,24 @@
1
+ # A base class with no predefined methods that tries to behave like Builder's
2
+ # BlankSlate in Ruby 1.9. In Ruby pre-1.9, this is actually the
3
+ # Builder::BlankSlate class.
4
+ #
5
+ # Ruby 1.9 introduces BasicObject which differs slightly from Builder's
6
+ # BlankSlate that has been used so far. ActiveSupport::BasicObject provides a
7
+ # barebones base class that emulates Builder::BlankSlate while still relying on
8
+ # Ruby 1.9's BasicObject in Ruby 1.9.
9
+ module ActiveSupport
10
+ if defined? ::BasicObject
11
+ class BasicObject < ::BasicObject
12
+ undef_method :==
13
+ undef_method :equal?
14
+
15
+ # Let ActiveSupport::BasicObject at least raise exceptions.
16
+ def raise(*args)
17
+ ::Object.send(:raise, *args)
18
+ end
19
+ end
20
+ else
21
+ require 'blankslate'
22
+ BasicObject = BlankSlate
23
+ end
24
+ end
@@ -0,0 +1,122 @@
1
+ module ActiveSupport
2
+ # Inspired by the buffered logger idea by Ezra
3
+ class BufferedLogger
4
+ module Severity
5
+ DEBUG = 0
6
+ INFO = 1
7
+ WARN = 2
8
+ ERROR = 3
9
+ FATAL = 4
10
+ UNKNOWN = 5
11
+ end
12
+ include Severity
13
+
14
+ MAX_BUFFER_SIZE = 1000
15
+
16
+ # Set to false to disable the silencer
17
+ cattr_accessor :silencer
18
+ self.silencer = true
19
+
20
+ # Silences the logger for the duration of the block.
21
+ def silence(temporary_level = ERROR)
22
+ if silencer
23
+ begin
24
+ old_logger_level, self.level = level, temporary_level
25
+ yield self
26
+ ensure
27
+ self.level = old_logger_level
28
+ end
29
+ else
30
+ yield self
31
+ end
32
+ end
33
+
34
+ attr_accessor :level
35
+ attr_reader :auto_flushing
36
+
37
+ def initialize(log, level = DEBUG)
38
+ @level = level
39
+ @buffer = {}
40
+ @auto_flushing = 1
41
+ @guard = Mutex.new
42
+
43
+ if log.respond_to?(:write)
44
+ @log = log
45
+ elsif File.exist?(log)
46
+ @log = open(log, (File::WRONLY | File::APPEND))
47
+ @log.sync = true
48
+ else
49
+ FileUtils.mkdir_p(File.dirname(log))
50
+ @log = open(log, (File::WRONLY | File::APPEND | File::CREAT))
51
+ @log.sync = true
52
+ @log.write("# Logfile created on %s" % [Time.now.to_s])
53
+ end
54
+ end
55
+
56
+ def add(severity, message = nil, progname = nil, &block)
57
+ return if @level > severity
58
+ message = (message || (block && block.call) || progname).to_s
59
+ # If a newline is necessary then create a new message ending with a newline.
60
+ # Ensures that the original message is not mutated.
61
+ message = "#{message}\n" unless message[-1] == ?\n
62
+ buffer << message
63
+ auto_flush
64
+ message
65
+ end
66
+
67
+ for severity in Severity.constants
68
+ class_eval <<-EOT, __FILE__, __LINE__
69
+ def #{severity.downcase}(message = nil, progname = nil, &block)
70
+ add(#{severity}, message, progname, &block)
71
+ end
72
+
73
+ def #{severity.downcase}?
74
+ #{severity} >= @level
75
+ end
76
+ EOT
77
+ end
78
+
79
+ # Set the auto-flush period. Set to true to flush after every log message,
80
+ # to an integer to flush every N messages, or to false, nil, or zero to
81
+ # never auto-flush. If you turn auto-flushing off, be sure to regularly
82
+ # flush the log yourself -- it will eat up memory until you do.
83
+ def auto_flushing=(period)
84
+ @auto_flushing =
85
+ case period
86
+ when true; 1
87
+ when false, nil, 0; MAX_BUFFER_SIZE
88
+ when Integer; period
89
+ else raise ArgumentError, "Unrecognized auto_flushing period: #{period.inspect}"
90
+ end
91
+ end
92
+
93
+ def flush
94
+ @guard.synchronize do
95
+ unless buffer.empty?
96
+ old_buffer = buffer
97
+ clear_buffer
98
+ @log.write(old_buffer.join)
99
+ end
100
+ end
101
+ end
102
+
103
+ def close
104
+ flush
105
+ @log.close if @log.respond_to?(:close)
106
+ @log = nil
107
+ end
108
+
109
+ protected
110
+ def auto_flush
111
+ flush if buffer.size >= @auto_flushing
112
+ end
113
+
114
+ def buffer
115
+ @buffer[Thread.current] ||= []
116
+ end
117
+
118
+ def clear_buffer
119
+ @buffer.delete(Thread.current)
120
+ end
121
+ end
122
+ end
@@ -0,0 +1,223 @@
1
+ require 'benchmark'
2
+
3
+ module ActiveSupport
4
+ # See ActiveSupport::Cache::Store for documentation.
5
+ module Cache
6
+ # Creates a new CacheStore object according to the given options.
7
+ #
8
+ # If no arguments are passed to this method, then a new
9
+ # ActiveSupport::Cache::MemoryStore object will be returned.
10
+ #
11
+ # If you pass a Symbol as the first argument, then a corresponding cache
12
+ # store class under the ActiveSupport::Cache namespace will be created.
13
+ # For example:
14
+ #
15
+ # ActiveSupport::Cache.lookup_store(:memory_store)
16
+ # # => returns a new ActiveSupport::Cache::MemoryStore object
17
+ #
18
+ # ActiveSupport::Cache.lookup_store(:drb_store)
19
+ # # => returns a new ActiveSupport::Cache::DRbStore object
20
+ #
21
+ # Any additional arguments will be passed to the corresponding cache store
22
+ # class's constructor:
23
+ #
24
+ # ActiveSupport::Cache.lookup_store(:file_store, "/tmp/cache")
25
+ # # => same as: ActiveSupport::Cache::FileStore.new("/tmp/cache")
26
+ #
27
+ # If the first argument is not a Symbol, then it will simply be returned:
28
+ #
29
+ # ActiveSupport::Cache.lookup_store(MyOwnCacheStore.new)
30
+ # # => returns MyOwnCacheStore.new
31
+ def self.lookup_store(*store_option)
32
+ store, *parameters = *([ store_option ].flatten)
33
+
34
+ case store
35
+ when Symbol
36
+ store_class_name = (store == :drb_store ? "DRbStore" : store.to_s.camelize)
37
+ store_class = ActiveSupport::Cache.const_get(store_class_name)
38
+ store_class.new(*parameters)
39
+ when nil
40
+ ActiveSupport::Cache::MemoryStore.new
41
+ else
42
+ store
43
+ end
44
+ end
45
+
46
+ def self.expand_cache_key(key, namespace = nil)
47
+ expanded_cache_key = namespace ? "#{namespace}/" : ""
48
+
49
+ if ENV["RAILS_CACHE_ID"] || ENV["RAILS_APP_VERSION"]
50
+ expanded_cache_key << "#{ENV["RAILS_CACHE_ID"] || ENV["RAILS_APP_VERSION"]}/"
51
+ end
52
+
53
+ expanded_cache_key << case
54
+ when key.respond_to?(:cache_key)
55
+ key.cache_key
56
+ when key.is_a?(Array)
57
+ key.collect { |element| expand_cache_key(element) }.to_param
58
+ when key
59
+ key.to_param
60
+ end.to_s
61
+
62
+ expanded_cache_key
63
+ end
64
+
65
+ # An abstract cache store class. There are multiple cache store
66
+ # implementations, each having its own additional features. See the classes
67
+ # under the ActiveSupport::Cache module, e.g.
68
+ # ActiveSupport::Cache::MemCacheStore. MemCacheStore is currently the most
69
+ # popular cache store for large production websites.
70
+ #
71
+ # ActiveSupport::Cache::Store is meant for caching strings. Some cache
72
+ # store implementations, like MemoryStore, are able to cache arbitrary
73
+ # Ruby objects, but don't count on every cache store to be able to do that.
74
+ #
75
+ # cache = ActiveSupport::Cache::MemoryStore.new
76
+ #
77
+ # cache.read("city") # => nil
78
+ # cache.write("city", "Duckburgh")
79
+ # cache.read("city") # => "Duckburgh"
80
+ class Store
81
+ cattr_accessor :logger
82
+
83
+ def silence!
84
+ @silence = true
85
+ self
86
+ end
87
+
88
+ # Fetches data from the cache, using the given key. If there is data in
89
+ # the cache with the given key, then that data is returned.
90
+ #
91
+ # If there is no such data in the cache (a cache miss occurred), then
92
+ # then nil will be returned. However, if a block has been passed, then
93
+ # that block will be run in the event of a cache miss. The return value
94
+ # of the block will be written to the cache under the given cache key,
95
+ # and that return value will be returned.
96
+ #
97
+ # cache.write("today", "Monday")
98
+ # cache.fetch("today") # => "Monday"
99
+ #
100
+ # cache.fetch("city") # => nil
101
+ # cache.fetch("city") do
102
+ # "Duckburgh"
103
+ # end
104
+ # cache.fetch("city") # => "Duckburgh"
105
+ #
106
+ # You may also specify additional options via the +options+ argument.
107
+ # Setting <tt>:force => true</tt> will force a cache miss:
108
+ #
109
+ # cache.write("today", "Monday")
110
+ # cache.fetch("today", :force => true) # => nil
111
+ #
112
+ # Other options will be handled by the specific cache store implementation.
113
+ # Internally, #fetch calls #read, and calls #write on a cache miss.
114
+ # +options+ will be passed to the #read and #write calls.
115
+ #
116
+ # For example, MemCacheStore's #write method supports the +:expires_in+
117
+ # option, which tells the memcached server to automatically expire the
118
+ # cache item after a certain period. We can use this option with #fetch
119
+ # too:
120
+ #
121
+ # cache = ActiveSupport::Cache::MemCacheStore.new
122
+ # cache.fetch("foo", :force => true, :expires_in => 5.seconds) do
123
+ # "bar"
124
+ # end
125
+ # cache.fetch("foo") # => "bar"
126
+ # sleep(6)
127
+ # cache.fetch("foo") # => nil
128
+ def fetch(key, options = {})
129
+ @logger_off = true
130
+ if !options[:force] && value = read(key, options)
131
+ @logger_off = false
132
+ log("hit", key, options)
133
+ value
134
+ elsif block_given?
135
+ @logger_off = false
136
+ log("miss", key, options)
137
+
138
+ value = nil
139
+ seconds = Benchmark.realtime { value = yield }
140
+
141
+ @logger_off = true
142
+ write(key, value, options)
143
+ @logger_off = false
144
+
145
+ log("write (will save #{'%.2f' % (seconds * 1000)}ms)", key, nil)
146
+
147
+ value
148
+ end
149
+ end
150
+
151
+ # Fetches data from the cache, using the given key. If there is data in
152
+ # the cache with the given key, then that data is returned. Otherwise,
153
+ # nil is returned.
154
+ #
155
+ # You may also specify additional options via the +options+ argument.
156
+ # The specific cache store implementation will decide what to do with
157
+ # +options+.
158
+ def read(key, options = nil)
159
+ log("read", key, options)
160
+ end
161
+
162
+ # Writes the given value to the cache, with the given key.
163
+ #
164
+ # You may also specify additional options via the +options+ argument.
165
+ # The specific cache store implementation will decide what to do with
166
+ # +options+.
167
+ #
168
+ # For example, MemCacheStore supports the +:expires_in+ option, which
169
+ # tells the memcached server to automatically expire the cache item after
170
+ # a certain period:
171
+ #
172
+ # cache = ActiveSupport::Cache::MemCacheStore.new
173
+ # cache.write("foo", "bar", :expires_in => 5.seconds)
174
+ # cache.read("foo") # => "bar"
175
+ # sleep(6)
176
+ # cache.read("foo") # => nil
177
+ def write(key, value, options = nil)
178
+ log("write", key, options)
179
+ end
180
+
181
+ def delete(key, options = nil)
182
+ log("delete", key, options)
183
+ end
184
+
185
+ def delete_matched(matcher, options = nil)
186
+ log("delete matched", matcher.inspect, options)
187
+ end
188
+
189
+ def exist?(key, options = nil)
190
+ log("exist?", key, options)
191
+ end
192
+
193
+ def increment(key, amount = 1)
194
+ log("incrementing", key, amount)
195
+ if num = read(key)
196
+ write(key, num + amount)
197
+ else
198
+ nil
199
+ end
200
+ end
201
+
202
+ def decrement(key, amount = 1)
203
+ log("decrementing", key, amount)
204
+ if num = read(key)
205
+ write(key, num - amount)
206
+ else
207
+ nil
208
+ end
209
+ end
210
+
211
+ private
212
+ def log(operation, key, options)
213
+ logger.debug("Cache #{operation}: #{key}#{options ? " (#{options.inspect})" : ""}") if logger && !@silence && !@logger_off
214
+ end
215
+ end
216
+ end
217
+ end
218
+
219
+ require 'active_support/cache/file_store'
220
+ require 'active_support/cache/memory_store'
221
+ require 'active_support/cache/drb_store'
222
+ require 'active_support/cache/mem_cache_store'
223
+ require 'active_support/cache/compressed_mem_cache_store'