iron_cache 0.0.4 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,26 +1,29 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- iron_cache (0.0.3)
5
- iron_core
4
+ iron_cache (0.1.0)
5
+ iron_core (>= 0.1.4)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- iron_core (0.1.3)
10
+ ffi (1.0.11)
11
+ iron_core (0.1.4)
11
12
  bundler (> 1.0.0)
12
13
  rest
13
14
  rest-client
14
15
  memcache-client (1.8.5)
15
- mime-types (1.18)
16
+ mime-types (1.19)
16
17
  rake (0.9.2.2)
17
- rest (0.3.0)
18
- rest-client
19
- rest-client
18
+ rest (1.0.0)
19
+ rest-client (>= 0.3.0)
20
20
  rest-client (1.6.7)
21
21
  mime-types (>= 1.16)
22
- test-unit (2.4.8)
23
- uber_config (0.0.1)
22
+ test-unit (2.5.0)
23
+ typhoeus (0.4.2)
24
+ ffi (~> 1.0)
25
+ mime-types (~> 1.18)
26
+ uber_config (0.0.3)
24
27
 
25
28
  PLATFORMS
26
29
  ruby
@@ -30,4 +33,5 @@ DEPENDENCIES
30
33
  memcache-client
31
34
  rake
32
35
  test-unit
36
+ typhoeus
33
37
  uber_config
data/README.md CHANGED
@@ -1,52 +1,53 @@
1
- IronMQ Ruby Client
1
+ IronCache Ruby Client
2
2
  -------------
3
3
 
4
4
  Getting Started
5
5
  ==============
6
6
 
7
- Install the gem:
7
+ 1. Install the gem:
8
8
 
9
9
  gem install iron_cache
10
10
 
11
- Create an IronCache client object:
11
+ 2. Setup your Iron.io credentials: http://dev.iron.io/articles/configuration/
12
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 .
13
+ 3. Create an IronCache client object:
16
14
 
15
+ @client = IronCache::Client.new
17
16
 
18
17
  The Basics
19
18
  =========
20
19
 
20
+ **Get a cache object**
21
+
22
+ You can have as many caches as you want, each with their own unique set of items.
23
+
24
+ @cache = @client.cache("my_cache")
25
+
26
+ Now you can use it:
27
+
21
28
  **Put** an item in the cache:
22
29
 
23
- msg = @iron_cache.items.put("mykey", "hello world!")
30
+ msg = @cache.put("mykey", "hello world!")
24
31
  p msg
25
32
 
26
33
  **Get** an item from the cache:
27
34
 
28
- msg = @iron_cache.items.get("mykey")
35
+ msg = @cache.get("mykey")
29
36
  p msg
30
37
 
31
38
  **Delete** an item from the cache:
32
39
 
33
- res = msg.delete # or @iron_cache.items.delete("mykey")
40
+ res = msg.delete # or @cache.delete("mykey")
34
41
  p res
35
42
 
43
+ **Increment** an item in the cache:
36
44
 
37
- Cache 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
+ msg = @cache.increment("mycounter", 1)
46
+ p res
45
47
 
46
48
  Cache Information
47
49
  =================
48
50
 
49
- cache = @iron_cache.queues.get(:name=>"my_cache")
50
- puts "size: #{cache.size}"
51
+ cache = @iron_cache.cache("my_cache")
52
+ puts "name: #{cache.name}"
51
53
 
52
-
data/Rakefile CHANGED
@@ -1,26 +1,6 @@
1
1
  require 'rubygems'
2
2
  require 'rake'
3
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 'iron_core'
14
- gem.add_dependency 'rest-client'
15
- gem.add_dependency 'rest', '>= 0.1.2'
16
- #gem.add_dependency 'typhoeus'
17
- gem.required_ruby_version = '>= 1.9'
18
- end
19
- Jeweler::GemcutterTasks.new
20
- rescue LoadError
21
- puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler2"
22
- end
23
-
24
4
  require 'rake/testtask'
25
5
  Rake::TestTask.new(:test) do |test|
26
6
  test.libs << 'lib' << 'test'
data/iron_cache.gemspec CHANGED
@@ -16,12 +16,13 @@ Gem::Specification.new do |gem|
16
16
 
17
17
  gem.required_rubygems_version = ">= 1.3.6"
18
18
  gem.required_ruby_version = Gem::Requirement.new(">= 1.9")
19
- gem.add_runtime_dependency "iron_core"
19
+ gem.add_runtime_dependency "iron_core", ">= 0.1.4"
20
20
 
21
21
  gem.add_development_dependency "test-unit"
22
22
  gem.add_development_dependency "rake"
23
23
  gem.add_development_dependency "memcache-client"
24
24
  gem.add_development_dependency "uber_config"
25
+ gem.add_development_dependency "typhoeus"
25
26
 
26
27
 
27
28
  end
@@ -11,17 +11,21 @@ module IronCache
11
11
 
12
12
  def path(options={})
13
13
  path = "projects/#{@client.project_id}/caches"
14
+ if options[:name]
15
+ path << "/#{URI.escape(options[:name])}"
16
+ end
17
+ path
14
18
  end
15
19
 
16
20
  def list(options={})
17
21
  ret = []
18
22
  res = @client.get("#{path(options)}", options)
19
- p res
23
+ @client.logger.debug res.inspect
20
24
  parsed = @client.parse_response(res, true)
21
- p parsed
25
+ @client.logger.debug parsed.inspect
22
26
  parsed.each do |q|
23
- #p q
24
- q = Cache.new(self, q)
27
+ @client.logger.debug "cache: " + q.inspect
28
+ q = Cache.new(@client, q)
25
29
  ret << q
26
30
  end
27
31
  ret
@@ -30,8 +34,12 @@ module IronCache
30
34
  # options:
31
35
  # :name => can specify an alternative queue name
32
36
  def get(options={})
33
- res, status = @client.get("#{path(options)}/#{URI.escape options[:name]}")
34
- return Cache.new(self, res)
37
+ if options.is_a?(String)
38
+ options = {:name=>options}
39
+ end
40
+ options[:name] ||= @client.cache_name
41
+ res = @client.parse_response(@client.get("#{path(options)}"))
42
+ Cache.new(@client, res)
35
43
  end
36
44
 
37
45
 
@@ -39,8 +47,8 @@ module IronCache
39
47
 
40
48
  class Cache
41
49
 
42
- def initialize(queues, res)
43
- @queues = queues
50
+ def initialize(client, res)
51
+ @client = client
44
52
  @data = res
45
53
  end
46
54
 
@@ -60,25 +68,39 @@ module IronCache
60
68
  raw["name"]
61
69
  end
62
70
 
63
- def size
64
- return raw["size"] if raw["size"]
65
- return @size if @size
66
- q = @queues.get(:name=>name)
67
- @size = q.size
68
- @size
71
+ # Used if lazy loading
72
+ def load_cache
73
+ q = @client.caches.get(:name=>name)
74
+ @client.logger.debug "GOT Q: " + q.inspect
75
+ @data = q.raw
76
+ q
77
+ end
78
+
79
+ # not supported in API yet
80
+ #def size
81
+ # return raw["size"] if raw["size"]
82
+ # return @size if @size
83
+ # q = load_cache()
84
+ # @size = q.size
85
+ # @size
86
+ #end
87
+
88
+ def put(k, v, options={})
89
+ @client.items.put(k, v, options.merge(:cache_name=>name))
90
+ end
91
+
92
+ def get(k, options={})
93
+ @client.items.get(k, options.merge(:cache_name=>name))
94
+ end
95
+
96
+ def delete(k, options={})
97
+ @client.items.delete(k, options.merge(:cache_name=>name))
69
98
  end
70
99
 
71
- def total_messages
72
- return raw["total_messages"] if raw["total_messages"]
73
- return @total_messages if @total_messages
74
- q = @queues.get(:name=>name)
75
- @total_messages = q.total_messages
76
- @total_messages
100
+ def increment(k, amount=1, options={})
101
+ @client.items.increment(k, amount, options.merge(:cache_name=>name))
77
102
  end
78
103
 
79
- # def delete
80
- # @messages.delete(self.id)
81
- # end
82
104
  end
83
105
 
84
106
  end
@@ -9,27 +9,25 @@ module IronCache
9
9
 
10
10
  AWS_US_EAST_HOST = "cache-aws-us-east-1.iron.io"
11
11
 
12
- def self.version
13
-
14
- end
15
-
16
12
  attr_accessor :cache_name, :logger
17
13
 
18
14
  def initialize(options={})
19
15
  super("cache", options)
20
16
 
21
17
  @logger = Logger.new(STDOUT)
18
+ @logger.level = Logger::INFO
22
19
 
23
20
  @cache_name = options[:cache_name] || options['cache_name'] || "default"
24
21
 
25
- load_from_hash(:scheme => 'https',
22
+ load_from_hash('defaults', {
23
+ :scheme => 'https',
26
24
  :host => AWS_US_EAST_HOST,
27
25
  :port => 443,
28
26
  :api_version => 1,
29
- :user_agent => 'iron_cache_ruby-' + IronCache::VERSION + ' (iron_core_ruby-' + IronCore.version + ')')
27
+ :user_agent => 'iron_cache_ruby-' + IronCache::VERSION + ' (iron_core_ruby-' + IronCore.version + ')'})
30
28
 
31
29
  if (not @token) || (not @project_id)
32
- IronCore::Logger.error 'IronWorkerNG', 'Both token and project_id must be specified'
30
+ IronCore::Logger.error 'IronCache', 'Both token and project_id must be specified'
33
31
  raise IronCore::IronError.new('Both token and project_id must be specified')
34
32
  end
35
33
 
@@ -40,8 +38,8 @@ module IronCache
40
38
  return Items.new(self)
41
39
  end
42
40
 
43
- def cache
44
-
41
+ def cache(name)
42
+ return Cache.new(self, {"name"=>name})
45
43
  end
46
44
 
47
45
  def caches
@@ -10,7 +10,7 @@ module IronCache
10
10
  end
11
11
 
12
12
  def path(key, options={})
13
- path = "projects/#{@client.project_id}/caches/#{URI.escape(options[:cache_name] || @client.cache_name)}/items/#{URI.escape key}"
13
+ path = "projects/#{@client.project_id}/caches/#{URI.escape(options[:cache_name] || @client.cache_name)}/items/#{URI.escape key}#{'/increment' if options[:increment] == true}"
14
14
  end
15
15
 
16
16
  # options:
@@ -23,7 +23,7 @@ module IronCache
23
23
  json = @client.parse_response(res, true)
24
24
  return Item.new(self, json)
25
25
  rescue IronCore::IronResponseError => ex
26
- p ex
26
+ @client.logger.debug ex.inspect
27
27
  if ex.code == 404
28
28
  return nil
29
29
  end
@@ -43,6 +43,17 @@ module IronCache
43
43
  #return Message.new(self, res)
44
44
  return ResponseBase.new(json)
45
45
  end
46
+
47
+ # options:
48
+ # :cache_name => can specify an alternative queue name
49
+ def increment(key, amount=1, options={})
50
+ options = options.merge(:increment => true)
51
+ res = @client.post(path(key, options), {:amount => amount})
52
+ hash = @client.parse_response(res, true)
53
+ @client.logger.debug "increment response: " + hash.inspect
54
+ hash["key"] ||= key
55
+ return Item.new(self, hash)
56
+ end
46
57
 
47
58
  def delete(key, options={})
48
59
  path2 = "#{self.path(key, options)}"
@@ -67,9 +78,9 @@ module IronCache
67
78
  raw[key]
68
79
  end
69
80
 
70
- def id
71
- raw["id"]
72
- end
81
+ #def id
82
+ # raw["id"]
83
+ #end
73
84
 
74
85
  def msg
75
86
  raw["msg"]
@@ -93,7 +104,7 @@ module IronCache
93
104
  end
94
105
 
95
106
  def delete
96
- @messages.delete(self.id)
107
+ @messages.delete(self.key)
97
108
  end
98
109
  end
99
110
 
@@ -1,3 +1,3 @@
1
1
  module IronCache
2
- VERSION = "0.0.4"
2
+ VERSION = "1.0.0"
3
3
  end
data/test/quick_run.rb CHANGED
@@ -1,4 +1,3 @@
1
- # Put config.yml file in ~/Dropbox/configs/ironmq_gem/test/config.yml
2
1
  require_relative 'test_base'
3
2
 
4
3
  class QuickRun < TestBase
data/test/test_base.rb CHANGED
@@ -33,5 +33,4 @@ class TestBase < Test::Unit::TestCase
33
33
  #puts 'cleared.'
34
34
  end
35
35
 
36
-
37
36
  end
@@ -8,6 +8,17 @@ class IronCacheTests < TestBase
8
8
  super
9
9
 
10
10
  end
11
+ def test_performance_put_message
12
+ @client.cache_name = 'test_basics'
13
+ res = @client.items.put("key", "value")
14
+ end
15
+
16
+ def test_performance_put_100_messages
17
+ @client.cache_name = 'test_basics'
18
+ 100.times do
19
+ res = @client.items.put("key", "value")
20
+ end
21
+ end
11
22
 
12
23
  def test_basics
13
24
  @client.cache_name = 'test_basics'
@@ -35,6 +46,43 @@ class IronCacheTests < TestBase
35
46
  p res
36
47
  assert res.nil?
37
48
 
49
+ # new style of referencing cache
50
+ cache = @client.cache("test_basics")
51
+ res = cache.put(k,v)
52
+ p res
53
+ assert res.msg
54
+
55
+ res = cache.get(k)
56
+ p res
57
+ assert res["key"]
58
+ assert res.key
59
+ assert res.key == k
60
+ assert res.value == v
61
+
62
+ res = cache.delete(k)
63
+ p res
64
+ puts "shouldn't be any more"
65
+ res = cache.get(k)
66
+ p res
67
+ assert res.nil?
68
+
69
+ # test delete by item
70
+ res = cache.put(k,v)
71
+ p res
72
+ assert res.msg
73
+
74
+ res = cache.get(k)
75
+ p res
76
+ assert res.value
77
+ res = res.delete
78
+ p res
79
+ puts "shouldn't be any more"
80
+ res = cache.get(k)
81
+ p res
82
+ assert res.nil?
83
+
84
+
85
+
38
86
  end
39
87
 
40
88
  def test_caches
@@ -44,6 +92,17 @@ class IronCacheTests < TestBase
44
92
  assert caches.is_a?(Array)
45
93
  assert caches.size > 0
46
94
  assert caches[0].name
95
+ #assert caches[0].size
96
+
97
+ cache = @client.caches.get(caches[0].name)
98
+ p cache
99
+ assert cache.name
100
+ #assert cache.size
101
+
102
+ cache = @client.cache(caches[0])
103
+ p cache
104
+ assert cache.name
105
+ #assert cache.size
47
106
 
48
107
  end
49
108
 
@@ -64,5 +123,51 @@ class IronCacheTests < TestBase
64
123
 
65
124
  end
66
125
 
126
+ def test_incrementors
127
+ @client.cache_name = 'test_incrementors'
128
+ clear_queue
129
+ k = "incr1"
130
+ v = 1
131
+ res = @client.items.put(k, v)
132
+ p res
133
+
134
+ res = @client.items.get(k)
135
+ p res
136
+ assert res.key == k
137
+ assert res.value == v, "value #{res.value.inspect} does not equal v: #{v.inspect}"
138
+
139
+ incr_by = 10
140
+ res = @client.items.increment(k, incr_by)
141
+ res = @client.items.get(k)
142
+ assert res.value == (v + incr_by)
143
+
144
+ res = @client.items.increment(k, -6)
145
+ assert res.value == 5
146
+
147
+ res.delete
148
+
149
+ # new style
150
+ cache = @client.cache("test_incrementors")
151
+ res = cache.put(k, v)
152
+ p res
153
+
154
+ res = cache.get(k)
155
+ p res
156
+ assert res.key == k
157
+ assert res.value == v, "value #{res.value.inspect} does not equal v: #{v.inspect}"
158
+
159
+ incr_by = 10
160
+ res = cache.increment(k, incr_by)
161
+ res = cache.get(k)
162
+ assert res.value == (v + incr_by)
163
+
164
+ res = cache.increment(k, -6)
165
+ assert res.value == 5
166
+
167
+ res.delete
168
+
169
+
170
+ end
171
+
67
172
  end
68
173
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iron_cache
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-15 00:00:00.000000000 Z
12
+ date: 2012-06-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: iron_core
@@ -18,7 +18,7 @@ dependencies:
18
18
  requirements:
19
19
  - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: '0'
21
+ version: 0.1.4
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
- version: '0'
29
+ version: 0.1.4
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: test-unit
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -91,6 +91,22 @@ dependencies:
91
91
  - - ! '>='
92
92
  - !ruby/object:Gem::Version
93
93
  version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: typhoeus
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
94
110
  description: Ruby client for IronCache by www.iron.io
95
111
  email:
96
112
  - treeder@gmail.com