iron_cache 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md ADDED
@@ -0,0 +1,52 @@
1
+ IronMQ Ruby Client
2
+ -------------
3
+
4
+ Getting Started
5
+ ==============
6
+
7
+ Install the gem:
8
+
9
+ gem install iron_cache
10
+
11
+ Create an IronMQ client object:
12
+
13
+ @iron_cache = IronCache::Client.new(:token=>'MYTOKEN', :project_id=>'MYPROJECTID')
14
+
15
+ You can get your `token` and `project_id` at http://www.iron.io .
16
+
17
+
18
+ The Basics
19
+ =========
20
+
21
+ **Put** an item in the cache:
22
+
23
+ msg = @iron_cache.items.put("mykey", "hello world!")
24
+ p msg
25
+
26
+ **Get** an item from the cache:
27
+
28
+ msg = @iron_cache.items.get("mykey")
29
+ p msg
30
+
31
+ **Delete** an item from the cache:
32
+
33
+ res = msg.delete # or @iron_cache.items.delete("mykey")
34
+ p res
35
+
36
+
37
+ Queue Selection
38
+ ===============
39
+
40
+ One of the following:
41
+
42
+ 1. Pass `:cache_name=>'my_cache'` into IronCache::Client.new
43
+ 1. `@iron_cache.cache_name = 'my_cache'`
44
+ 1. Pass `:cache_name=>'my_cache'` into any post(), get(), or delete()
45
+
46
+ Queue Information
47
+ =================
48
+
49
+ cache = @iron_cache.queues.get(:name=>"my_cache")
50
+ puts "size: #{cache.size}"
51
+
52
+
data/Rakefile ADDED
@@ -0,0 +1,40 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler2'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "iron_cache"
8
+ gem.summary = "Ruby client for IronCache by www.iron.io"
9
+ gem.description = "Ruby client for IronCache by www.iron.io"
10
+ gem.email = "travis@iron.io"
11
+ gem.homepage = "http://www.iron.io"
12
+ gem.authors = ["Travis Reeder"]
13
+ gem.add_dependency 'rest-client'
14
+ gem.add_dependency 'rest', '>= 0.1.2'
15
+ #gem.add_dependency 'typhoeus'
16
+ gem.required_ruby_version = '>= 1.9'
17
+ end
18
+ Jeweler::GemcutterTasks.new
19
+ rescue LoadError
20
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler2"
21
+ end
22
+
23
+ require 'rake/testtask'
24
+ Rake::TestTask.new(:test) do |test|
25
+ test.libs << 'lib' << 'test'
26
+ test.pattern = 'test/**/test_*.rb'
27
+ test.verbose = true
28
+ end
29
+
30
+ task :default => :test
31
+
32
+ require 'rdoc/task'
33
+ Rake::RDocTask.new do |rdoc|
34
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
35
+
36
+ rdoc.rdoc_dir = 'doc'
37
+ rdoc.title = "iron_cache #{version}"
38
+ rdoc.rdoc_files.include('README*')
39
+ rdoc.rdoc_files.include('lib/**/*.rb')
40
+ end
data/VERSION.yml ADDED
@@ -0,0 +1,5 @@
1
+ ---
2
+ :major: 0
3
+ :minor: 0
4
+ :patch: 1
5
+ :build:
@@ -0,0 +1,61 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "iron_cache"
8
+ s.version = "0.0.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Travis Reeder"]
12
+ s.date = "2012-03-26"
13
+ s.description = "Ruby client for IronCache by www.iron.io"
14
+ s.email = "travis@iron.io"
15
+ s.extra_rdoc_files = [
16
+ "README.md"
17
+ ]
18
+ s.files = [
19
+ "README.md",
20
+ "Rakefile",
21
+ "VERSION.yml",
22
+ "iron_cache.gemspec",
23
+ "lib/iron_cache.rb",
24
+ "lib/iron_cache/caches.rb",
25
+ "lib/iron_cache/client.rb",
26
+ "lib/iron_cache/items.rb",
27
+ "test/Gemfile",
28
+ "test/Gemfile.lock",
29
+ "test/quick_run.rb",
30
+ "test/test_base.rb",
31
+ "test/test_iron_cache.rb",
32
+ "test/test_memcached.rb"
33
+ ]
34
+ s.homepage = "http://www.iron.io"
35
+ s.require_paths = ["lib"]
36
+ s.required_ruby_version = Gem::Requirement.new(">= 1.9")
37
+ s.rubygems_version = "1.8.15"
38
+ s.summary = "Ruby client for IronCache by www.iron.io"
39
+
40
+ if s.respond_to? :specification_version then
41
+ s.specification_version = 3
42
+
43
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
44
+ s.add_runtime_dependency(%q<rest-client>, [">= 0"])
45
+ s.add_runtime_dependency(%q<rest>, [">= 0.1.2"])
46
+ s.add_runtime_dependency(%q<rest-client>, [">= 0"])
47
+ s.add_runtime_dependency(%q<rest>, [">= 0.1.2"])
48
+ else
49
+ s.add_dependency(%q<rest-client>, [">= 0"])
50
+ s.add_dependency(%q<rest>, [">= 0.1.2"])
51
+ s.add_dependency(%q<rest-client>, [">= 0"])
52
+ s.add_dependency(%q<rest>, [">= 0.1.2"])
53
+ end
54
+ else
55
+ s.add_dependency(%q<rest-client>, [">= 0"])
56
+ s.add_dependency(%q<rest>, [">= 0.1.2"])
57
+ s.add_dependency(%q<rest-client>, [">= 0"])
58
+ s.add_dependency(%q<rest>, [">= 0.1.2"])
59
+ end
60
+ end
61
+
@@ -0,0 +1,80 @@
1
+ module IronCache
2
+ class Caches
3
+
4
+ attr_accessor :client
5
+
6
+ def initialize(client)
7
+ @client = client
8
+ end
9
+
10
+ def path(options={})
11
+ path = "/projects/#{@client.project_id}/caches"
12
+ end
13
+
14
+ def list(options={})
15
+ ret = []
16
+ res, status = @client.get("#{path(options)}", options)
17
+ res.each do |q|
18
+ #p q
19
+ q = Cache.new(self, q)
20
+ ret << q
21
+ end
22
+ ret
23
+ end
24
+
25
+ # options:
26
+ # :name => can specify an alternative queue name
27
+ def get(options={})
28
+ res, status = @client.get("#{path(options)}/#{options[:name]}")
29
+ return Cache.new(self, res)
30
+ end
31
+
32
+
33
+ end
34
+
35
+ class Cache
36
+
37
+ def initialize(queues, res)
38
+ @queues = queues
39
+ @data = res
40
+ end
41
+
42
+ def raw
43
+ @data
44
+ end
45
+
46
+ def [](key)
47
+ raw[key]
48
+ end
49
+
50
+ def id
51
+ raw["id"]
52
+ end
53
+
54
+ def name
55
+ raw["name"]
56
+ end
57
+
58
+ def size
59
+ return raw["size"] if raw["size"]
60
+ return @size if @size
61
+ q = @queues.get(:name=>name)
62
+ @size = q.size
63
+ @size
64
+ end
65
+
66
+ def total_messages
67
+ return raw["total_messages"] if raw["total_messages"]
68
+ return @total_messages if @total_messages
69
+ q = @queues.get(:name=>name)
70
+ @total_messages = q.total_messages
71
+ @total_messages
72
+ end
73
+
74
+ # def delete
75
+ # @messages.delete(self.id)
76
+ # end
77
+ end
78
+
79
+ end
80
+
@@ -0,0 +1,152 @@
1
+ require 'json'
2
+ require 'logger'
3
+ require 'rest'
4
+
5
+ module IronCache
6
+
7
+ class Client
8
+
9
+ attr_accessor :token, :project_id, :cache_name, :logger,
10
+ :scheme, :host, :port
11
+
12
+ def initialize(options={})
13
+ @logger = Logger.new(STDOUT)
14
+ @logger.level=Logger::INFO
15
+
16
+ @token = options[:token] || options['token']
17
+ @project_id = options[:project_id] || options['project_id']
18
+ @cache_name = options[:cache_name] || options['cache_name'] || "default"
19
+ @scheme = options[:scheme] || options['scheme'] || "https"
20
+ @host = options[:host] || options['host'] || "cache-aws-us-east-1.iron.io"
21
+ @port = options[:port] || options['port'] || 443
22
+
23
+ @base_url = "#{@scheme}://#{@host}:#{@port}/1"
24
+
25
+ @rest = Rest::Client.new
26
+
27
+ end
28
+
29
+ def items
30
+ return Items.new(self)
31
+ end
32
+
33
+ def cache
34
+
35
+ end
36
+
37
+ def caches
38
+ return Caches.new(self)
39
+ end
40
+
41
+ def base_url
42
+ #"#{scheme}://#{host}:#{port}/1"
43
+ @base_url
44
+ end
45
+
46
+
47
+ def full_url(path)
48
+ url = "#{base_url}#{path}"
49
+ url
50
+ end
51
+
52
+ def common_req_hash
53
+ {
54
+ :headers=>{"Content-Type" => 'application/json',
55
+ "Authorization"=>"OAuth #{@token}",
56
+ "User-Agent"=>"IronCache Ruby Client"}
57
+ }
58
+ end
59
+
60
+ def get(path, params={})
61
+ url = full_url(path)
62
+ @logger.debug 'url=' + url
63
+ req_hash = common_req_hash
64
+ req_hash[:params] = params if params
65
+ @logger.debug 'req_hash=' + req_hash.inspect
66
+ response = @rest.get(url, req_hash)
67
+ @logger.debug 'GET response=' + response.inspect
68
+ res = check_response(response)
69
+ return res, response.code
70
+ end
71
+
72
+ def post(path, params={})
73
+ url = full_url(path)
74
+ @logger.debug 'url=' + url
75
+ #response = @http_sess.post(path + "?oauth=#{@token}", {'oauth' => @token}.merge(params).to_json, {"Content-Type" => 'application/json'})
76
+ req_hash = common_req_hash
77
+ req_hash[:body] = params.to_json
78
+ response = @rest.post(url, req_hash)
79
+ @logger.debug 'POST response=' + response.inspect
80
+ res = check_response(response)
81
+ #@logger.debug 'response: ' + res.inspect
82
+ #body = response.body
83
+ #res = JSON.parse(body)
84
+ return res, response.code
85
+ end
86
+
87
+ def put(path, params={})
88
+ url = full_url(path)
89
+ @logger.debug 'url=' + url
90
+ #response = @http_sess.post(path + "?oauth=#{@token}", {'oauth' => @token}.merge(params).to_json, {"Content-Type" => 'application/json'})
91
+ req_hash = common_req_hash
92
+ req_hash[:body] = params.to_json
93
+ response = @rest.put(url, req_hash)
94
+ @logger.debug 'POST response=' + response.inspect
95
+ res = check_response(response)
96
+ #@logger.debug 'response: ' + res.inspect
97
+ #body = response.body
98
+ #res = JSON.parse(body)
99
+ return res, response.code
100
+ end
101
+
102
+
103
+
104
+ def delete(path, params={})
105
+ url = "#{base_url}#{path}"
106
+ @logger.debug 'url=' + url
107
+ req_hash = common_req_hash
108
+ req_hash[:params] = params
109
+ response = @rest.delete(url, req_hash)
110
+ res = check_response(response)
111
+ #body = response.body
112
+ #res = JSON.parse(body)
113
+ #@logger.debug 'response: ' + res.inspect
114
+ return res, response.code
115
+ end
116
+
117
+ def check_response(response)
118
+ # response.code # http status code
119
+ #response.time # time in seconds the request took
120
+ #response.headers # the http headers
121
+ #response.headers_hash # http headers put into a hash
122
+ #response.body # the response body
123
+ status = response.code
124
+ body = response.body
125
+ # todo: check content-type == application/json before parsing
126
+ @logger.debug "response code=" + status.to_s
127
+ @logger.debug "response body=" + body.inspect
128
+ res = JSON.parse(body)
129
+ if status < 400
130
+
131
+ else
132
+ raise IronCache::Error.new(res["msg"], :status=>status)
133
+ end
134
+ res
135
+ end
136
+
137
+ end
138
+
139
+ class Error < StandardError
140
+ def initialize(msg, options={})
141
+ super(msg)
142
+ @options = options
143
+ end
144
+
145
+ def status
146
+ @options[:status]
147
+ end
148
+ end
149
+
150
+
151
+ end
152
+
@@ -0,0 +1,93 @@
1
+ module IronCache
2
+ class Items
3
+
4
+ attr_accessor :client
5
+
6
+ def initialize(client)
7
+ @client = client
8
+ end
9
+
10
+ def path(key, options={})
11
+ path = "/projects/#{@client.project_id}/caches/#{options[:cache_name] || @client.cache_name}/items/#{key}"
12
+ end
13
+
14
+ # options:
15
+ # :queue_name => can specify an alternative queue name
16
+ # :timeout => amount of time before message goes back on the queue
17
+ def get(key, options={})
18
+ begin
19
+ res, status = @client.get(path(key, options), options)
20
+ @client.logger.debug "GET response: " + res.inspect
21
+ return Item.new(self, res)
22
+ rescue IronCache::Error => ex
23
+ if ex.status == 404
24
+ return nil
25
+ end
26
+ raise ex
27
+ end
28
+
29
+ end
30
+
31
+ # options:
32
+ # :cache_name => can specify an alternative queue name
33
+ # :expires_in => After this delay in seconds, message will be automatically removed from the cache.
34
+ def put(key, value, options={})
35
+ to_send = options
36
+ to_send[:body] = value
37
+ res, status = @client.put(path(key, options), to_send)
38
+ #return Message.new(self, res)
39
+ return ResponseBase.new(res)
40
+ end
41
+
42
+ def delete(key, options={})
43
+ path2 = "#{self.path(key, options)}"
44
+ res, status = @client.delete(path2)
45
+ res
46
+ end
47
+
48
+ end
49
+
50
+ class ResponseBase
51
+ def initialize(res)
52
+ @data = res
53
+ end
54
+
55
+ def raw
56
+ @data
57
+ end
58
+
59
+ def [](key)
60
+ raw[key]
61
+ end
62
+
63
+ def id
64
+ raw["id"]
65
+ end
66
+
67
+ def msg
68
+ raw["msg"]
69
+ end
70
+
71
+ end
72
+
73
+ class Item < ResponseBase
74
+
75
+ def initialize(messages, res)
76
+ super(res)
77
+ @messages = messages
78
+ end
79
+
80
+ def key
81
+ raw["key"]
82
+ end
83
+
84
+ def value
85
+ raw["value"]
86
+ end
87
+
88
+ def delete
89
+ @messages.delete(self.id)
90
+ end
91
+ end
92
+
93
+ end
data/lib/iron_cache.rb ADDED
@@ -0,0 +1,3 @@
1
+ require_relative 'iron_cache/caches'
2
+ require_relative 'iron_cache/items'
3
+ require_relative 'iron_cache/client'
data/test/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'test-unit'
4
+ gem 'concur'
data/test/Gemfile.lock ADDED
@@ -0,0 +1,38 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ addressable (2.2.6)
5
+ beanstalk-client (1.1.1)
6
+ concur (0.1.2)
7
+ em-http-request
8
+ em-http-request
9
+ eventmachine
10
+ eventmachine
11
+ faraday
12
+ faraday
13
+ cookiejar (0.3.0)
14
+ em-http-request (1.0.1)
15
+ addressable (>= 2.2.3)
16
+ cookiejar
17
+ em-socksify
18
+ eventmachine (>= 1.0.0.beta.4)
19
+ http_parser.rb (>= 0.5.3)
20
+ em-socksify (0.1.0)
21
+ eventmachine
22
+ eventmachine (1.0.0.beta.4)
23
+ faraday (0.7.5)
24
+ addressable (~> 2.2.6)
25
+ multipart-post (~> 1.1.3)
26
+ rack (>= 1.1.0, < 2)
27
+ http_parser.rb (0.5.3)
28
+ multipart-post (1.1.4)
29
+ rack (1.4.0)
30
+ test-unit (2.4.4)
31
+
32
+ PLATFORMS
33
+ ruby
34
+
35
+ DEPENDENCIES
36
+ beanstalk-client
37
+ concur
38
+ test-unit
data/test/quick_run.rb ADDED
@@ -0,0 +1,33 @@
1
+ # Put config.yml file in ~/Dropbox/configs/ironmq_gem/test/config.yml
2
+ require_relative 'test_base'
3
+
4
+ class QuickRun < TestBase
5
+
6
+ def setup
7
+ super
8
+ @client.queue_name = 'ironmq-gem-quick'
9
+ end
10
+
11
+ def test_basics
12
+ res = @client.items.post("hello world!")
13
+ assert res.id
14
+ assert res.msg
15
+ p res
16
+
17
+ res = @client.items.get()
18
+ assert res.id
19
+ assert res.body
20
+ p res
21
+
22
+ res = @client.items.delete(res["id"])
23
+ assert res.msg
24
+ p res
25
+
26
+ res = @client.items.get()
27
+ p res
28
+
29
+ end
30
+
31
+
32
+ end
33
+
data/test/test_base.rb ADDED
@@ -0,0 +1,52 @@
1
+ gem 'test-unit'
2
+ require 'test/unit'
3
+ require 'yaml'
4
+ begin
5
+ require File.join(File.dirname(__FILE__), '../lib/iron_cache')
6
+ rescue Exception => ex
7
+ puts "Could NOT load current iron_cache: " + ex.message
8
+ raise ex
9
+ end
10
+
11
+
12
+ class TestBase < Test::Unit::TestCase
13
+ def setup
14
+ puts 'setup'
15
+ # check multiple config locations
16
+ @config = load_config
17
+ puts "config=" + @config.inspect
18
+ @client = IronCache::Client.new(@config['iron'])
19
+ @client.logger.level = Logger::DEBUG
20
+ @client.cache_name = 'iron_cache_ruby_tests'
21
+
22
+ end
23
+
24
+ def load_config
25
+ # check for config
26
+ # First check if running in abt worker
27
+ if defined? $abt_config
28
+ @config = $abt_config
29
+ return @config
30
+ end
31
+ cf = File.expand_path(File.join("~", "Dropbox", "configs", "iron_cache_ruby", "test", "config.yml"))
32
+ if File.exist?(cf)
33
+ @config = YAML::load_file(cf)
34
+ return @config
35
+ end
36
+
37
+ end
38
+
39
+
40
+ def clear_queue(queue_name=nil)
41
+ #queue_name ||= @client.cache_name
42
+ #puts "clearing queue #{queue_name}"
43
+ #while res = @client.messages.get(:cache_name=>queue_name)
44
+ # p res
45
+ # puts res.body.to_s
46
+ # res.delete
47
+ #end
48
+ #puts 'cleared.'
49
+ end
50
+
51
+
52
+ end
@@ -0,0 +1,59 @@
1
+ gem 'test-unit'
2
+ require 'test/unit'
3
+ require 'beanstalk-client'
4
+ require 'yaml'
5
+ require_relative 'test_base'
6
+
7
+ class IronCacheTests < TestBase
8
+ def setup
9
+ super
10
+
11
+ end
12
+
13
+ def test_basics
14
+ @client.cache_name = 'test_basics'
15
+ clear_queue
16
+
17
+ k = "key1"
18
+ v = "hello world!"
19
+ res = @client.items.put(k, v)
20
+ # another naming option we could try:
21
+ #res = @client.cache('test_basics').items.put("key1", "hello world!")
22
+ p res
23
+ assert res.msg
24
+
25
+ res = @client.items.get(k)
26
+ p res
27
+ assert res["key"]
28
+ assert res.key
29
+ assert res.key == k
30
+ assert res.value == v
31
+
32
+ res = @client.items.delete(res.key)
33
+ p res
34
+ puts "shouldn't be any more"
35
+ res = @client.items.get(k)
36
+ p res
37
+ assert res.nil?
38
+
39
+ end
40
+
41
+ def test_expiry
42
+ @client.cache_name = 'test_basics'
43
+ clear_queue
44
+ k = "key1"
45
+ v = "hello world!"
46
+ res = @client.items.put(k, v, :expires_in=>10)
47
+
48
+ res = @client.items.get(k)
49
+ p res
50
+ assert res.key == k
51
+
52
+ sleep 11
53
+ res = @client.items.get(k)
54
+ assert res.nil?
55
+
56
+ end
57
+
58
+ end
59
+
@@ -0,0 +1,59 @@
1
+ gem 'test-unit'
2
+ require 'test/unit'
3
+ require 'beanstalk-client'
4
+ require 'yaml'
5
+ require_relative 'test_base'
6
+
7
+ class IronCacheTests < TestBase
8
+ def setup
9
+ super
10
+
11
+ end
12
+
13
+ def test_basics
14
+ @client.cache_name = 'test_basics'
15
+ clear_queue
16
+
17
+ k = "key1"
18
+ v = "hello world!"
19
+ res = @client.items.put(k, v)
20
+ # another naming option we could try:
21
+ #res = @client.cache('test_basics').items.put("key1", "hello world!")
22
+ p res
23
+ assert res.msg
24
+
25
+ res = @client.items.get(k)
26
+ p res
27
+ assert res["key"]
28
+ assert res.key
29
+ assert res.key == k
30
+ assert res.value == v
31
+
32
+ res = @client.items.delete(res.key)
33
+ p res
34
+ puts "shouldn't be any more"
35
+ res = @client.items.get(k)
36
+ p res
37
+ assert res.nil?
38
+
39
+ end
40
+
41
+ def test_expiry
42
+ @client.cache_name = 'test_basics'
43
+ clear_queue
44
+ k = "key1"
45
+ v = "hello world!"
46
+ res = @client.items.put(k, v, :expires_in=>10)
47
+
48
+ res = @client.items.get(k)
49
+ p res
50
+ assert res.key == k
51
+
52
+ sleep 11
53
+ res = @client.items.get(k)
54
+ assert res.nil?
55
+
56
+ end
57
+
58
+ end
59
+
metadata ADDED
@@ -0,0 +1,103 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: iron_cache
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Travis Reeder
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-03-26 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rest-client
16
+ requirement: &15146280 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *15146280
25
+ - !ruby/object:Gem::Dependency
26
+ name: rest
27
+ requirement: &15145660 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 0.1.2
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *15145660
36
+ - !ruby/object:Gem::Dependency
37
+ name: rest-client
38
+ requirement: &15145020 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *15145020
47
+ - !ruby/object:Gem::Dependency
48
+ name: rest
49
+ requirement: &15144420 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 0.1.2
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *15144420
58
+ description: Ruby client for IronCache by www.iron.io
59
+ email: travis@iron.io
60
+ executables: []
61
+ extensions: []
62
+ extra_rdoc_files:
63
+ - README.md
64
+ files:
65
+ - README.md
66
+ - Rakefile
67
+ - VERSION.yml
68
+ - iron_cache.gemspec
69
+ - lib/iron_cache.rb
70
+ - lib/iron_cache/caches.rb
71
+ - lib/iron_cache/client.rb
72
+ - lib/iron_cache/items.rb
73
+ - test/Gemfile
74
+ - test/Gemfile.lock
75
+ - test/quick_run.rb
76
+ - test/test_base.rb
77
+ - test/test_iron_cache.rb
78
+ - test/test_memcached.rb
79
+ homepage: http://www.iron.io
80
+ licenses: []
81
+ post_install_message:
82
+ rdoc_options: []
83
+ require_paths:
84
+ - lib
85
+ required_ruby_version: !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ! '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '1.9'
91
+ required_rubygems_version: !ruby/object:Gem::Requirement
92
+ none: false
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ requirements: []
98
+ rubyforge_project:
99
+ rubygems_version: 1.8.15
100
+ signing_key:
101
+ specification_version: 3
102
+ summary: Ruby client for IronCache by www.iron.io
103
+ test_files: []