juno 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 (67) hide show
  1. data/.gitignore +4 -0
  2. data/.travis.yml +25 -0
  3. data/Gemfile +19 -0
  4. data/LICENSE +20 -0
  5. data/README.md +83 -0
  6. data/Rakefile +15 -0
  7. data/SPEC.md +95 -0
  8. data/juno.gemspec +22 -0
  9. data/lib/juno.rb +31 -0
  10. data/lib/juno/activerecord.rb +58 -0
  11. data/lib/juno/base.rb +113 -0
  12. data/lib/juno/couch.rb +43 -0
  13. data/lib/juno/datamapper.rb +63 -0
  14. data/lib/juno/dbm.rb +15 -0
  15. data/lib/juno/expires.rb +45 -0
  16. data/lib/juno/file.rb +62 -0
  17. data/lib/juno/gdbm.rb +15 -0
  18. data/lib/juno/hashfile.rb +12 -0
  19. data/lib/juno/localmemcache.rb +16 -0
  20. data/lib/juno/memcached.rb +7 -0
  21. data/lib/juno/memcached_dalli.rb +55 -0
  22. data/lib/juno/memcached_native.rb +56 -0
  23. data/lib/juno/memory.rb +7 -0
  24. data/lib/juno/mongodb.rb +43 -0
  25. data/lib/juno/proxy.rb +5 -0
  26. data/lib/juno/pstore.rb +49 -0
  27. data/lib/juno/redis.rb +34 -0
  28. data/lib/juno/riak.rb +45 -0
  29. data/lib/juno/sdbm.rb +15 -0
  30. data/lib/juno/sequel.rb +51 -0
  31. data/lib/juno/sqlite.rb +50 -0
  32. data/lib/juno/tokyocabinet.rb +36 -0
  33. data/lib/juno/version.rb +3 -0
  34. data/lib/juno/yaml.rb +9 -0
  35. data/test/helper.rb +182 -0
  36. data/test/test_active_record.rb +36 -0
  37. data/test/test_couch.rb +13 -0
  38. data/test/test_datamapper.rb +64 -0
  39. data/test/test_dbm.rb +13 -0
  40. data/test/test_expires.rb +10 -0
  41. data/test/test_file.rb +9 -0
  42. data/test/test_gdbm.rb +13 -0
  43. data/test/test_hashfile.rb +9 -0
  44. data/test/test_localmemcache.rb +13 -0
  45. data/test/test_memcached.rb +15 -0
  46. data/test/test_memcached_dalli.rb +15 -0
  47. data/test/test_memcached_native.rb +15 -0
  48. data/test/test_memory.rb +9 -0
  49. data/test/test_mongodb.rb +13 -0
  50. data/test/test_proxy.rb +9 -0
  51. data/test/test_pstore.rb +9 -0
  52. data/test/test_redis.rb +13 -0
  53. data/test/test_riak.rb +13 -0
  54. data/test/test_sdbm.rb +13 -0
  55. data/test/test_sequel.rb +13 -0
  56. data/test/test_sqlite.rb +13 -0
  57. data/test/test_tokyocabinet.rb +13 -0
  58. data/test/test_yaml.rb +9 -0
  59. data/unsupported/benchmarks.rb +234 -0
  60. data/unsupported/cassandra.rb +45 -0
  61. data/unsupported/fog.rb +60 -0
  62. data/unsupported/test_cassandra.rb +13 -0
  63. data/unsupported/test_rackspace.rb +15 -0
  64. data/unsupported/test_s3.rb +15 -0
  65. data/unsupported/test_tokyotyrant.rb +13 -0
  66. data/unsupported/tokyotyrant.rb +29 -0
  67. metadata +165 -0
@@ -0,0 +1,45 @@
1
+ # Copyright: 2011 TMX Credit
2
+ # Author: Potapov Sergey (aka Blake)
3
+
4
+ require 'cassandra'
5
+
6
+ module Juno
7
+ class Cassandra < Base
8
+ def initialize(options = {})
9
+ options[:keyspace] ||= 'Juno'
10
+ options[:host] ||= '127.0.0.1'
11
+ options[:port] ||= 9160
12
+ @client = ::Cassandra.new(options[:keyspace], "#{options[:host]}:#{options[:port]}")
13
+ @column_family = options[:column_family] || :Juno
14
+ end
15
+
16
+ def key?(key, options = {})
17
+ key = key_for(key)
18
+ @client.exists?(@column_family, key)
19
+ end
20
+
21
+ def [](key)
22
+ key = key_for(key)
23
+ deserialize(@client.get(@column_family, key)['value'])
24
+ end
25
+
26
+ def delete(key, options = {})
27
+ key = key_for(key)
28
+ value = self[key]
29
+ @client.remove(@column_family, key)
30
+ value
31
+ end
32
+
33
+ def store(key, value, options = {})
34
+ key = key_for(key)
35
+ @client.insert(@column_family, key, {'value' => serialize(value)})
36
+ end
37
+
38
+ def clear(options = {})
39
+ @client.each_key(@column_family) do |key|
40
+ delete(key)
41
+ end
42
+ nil
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,60 @@
1
+ require 'fog'
2
+
3
+ module Juno
4
+ class Fog < Base
5
+ def initialize(options = {})
6
+ bucket = options.delete(:namespace)
7
+ cloud = options.delete(:cloud).new(options)
8
+ @directory = cloud.directories.create(:key => bucket)
9
+ end
10
+
11
+ def key?(key, options = {})
12
+ !@directory.files.head(key_for(key)).nil?
13
+ end
14
+
15
+ def [](key)
16
+ if value = get(key)
17
+ deserialize(value.body)
18
+ end
19
+ end
20
+
21
+ def delete(key, options = {})
22
+ value = get(key)
23
+ if value
24
+ value.destroy
25
+ deserialize(value.body)
26
+ end
27
+ end
28
+
29
+ def store(key, value, options = {})
30
+ @directory.files.create(:key => key_for(key), :body => serialize(value))
31
+ end
32
+
33
+ def clear(options = {})
34
+ @directory.files.all.each do |file|
35
+ file.destroy
36
+ end
37
+ nil
38
+ end
39
+
40
+ private
41
+
42
+ def get(key)
43
+ @directory.files.get(key_for(key))
44
+ end
45
+ end
46
+
47
+ class S3 < Fog
48
+ def initialize(options = {})
49
+ options[:cloud] = ::Fog::AWS::S3
50
+ super
51
+ end
52
+ end
53
+
54
+ class Rackspace < Fog
55
+ def initialize(options = {})
56
+ options[:cloud] = ::Fog::Rackspace::Files
57
+ super
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,13 @@
1
+ require 'helper'
2
+
3
+ begin
4
+ describe Juno::Cassandra do
5
+ def new_store
6
+ Juno::Cassandra.new
7
+ end
8
+
9
+ class_eval(&JunoSpecification)
10
+ end
11
+ rescue LoadError => ex
12
+ puts "Juno::Cassandra not tested: #{ex.message}"
13
+ end
@@ -0,0 +1,15 @@
1
+ require 'helper'
2
+
3
+ begin
4
+ describe Juno::Rackspace do
5
+ def new_store
6
+ Juno::Rackspace.new(:rackspace_username => ENV['RACKSPACE_USERNAME'] || 'mocked',
7
+ :rackspace_api_key => ENV['RACKSPACE_APIKEY'] || 'mocked',
8
+ :namespace => 'TESTING')
9
+ end
10
+
11
+ class_eval(&JunoSpecification)
12
+ end
13
+ rescue LoadError => ex
14
+ puts "Juno::Rackspace not tested: #{ex.message}"
15
+ end
@@ -0,0 +1,15 @@
1
+ require 'helper'
2
+
3
+ begin
4
+ describe Juno::S3 do
5
+ def new_store
6
+ Juno::S3.new(:aws_access_key_id => ENV['S3_KEY'] || 'mocked',
7
+ :aws_secret_access_key => ENV['S3_SECRET'] || 'mocked',
8
+ :namespace => 'TESTING')
9
+ end
10
+
11
+ class_eval(&JunoSpecification)
12
+ end
13
+ rescue LoadError => ex
14
+ puts "Juno::S3 not tested: #{ex.message}"
15
+ end
@@ -0,0 +1,13 @@
1
+ require 'helper'
2
+
3
+ begin
4
+ describe Juno::TokyoTyrant do
5
+ def new_store
6
+ Juno::TokyoTyrant.new(:host => '127.0.0.1', :port => 1978)
7
+ end
8
+
9
+ class_eval(&JunoSpecification)
10
+ end
11
+ rescue LoadError => ex
12
+ puts "Juno::TokyoTyrant not tested: #{ex.message}"
13
+ end
@@ -0,0 +1,29 @@
1
+ require 'tokyotyrant'
2
+
3
+ # FIXME: TokyoTyrant is obsolete, it is replaced by KyotoTycoon
4
+ module Juno
5
+ class TokyoTyrant < Base
6
+ def initialize(options = {})
7
+ raise 'No option :host specified' unless options[:host]
8
+ raise 'No option :port specified' unless options[:port]
9
+ @store = ::TokyoTyrant::RDB.new
10
+ unless @store.open(options[:host], options[:port])
11
+ raise @hash.errmsg(@hash.ecode)
12
+ end
13
+ end
14
+
15
+ def key?(key, options = {})
16
+ !!self[key]
17
+ end
18
+
19
+ def store(key, value, options = {})
20
+ @store.put(key_for(key), serialize(value))
21
+ end
22
+
23
+ def delete(key, options = {})
24
+ value = self[key]
25
+ @hash.delete(key_for(key))
26
+ value
27
+ end
28
+ end
29
+ end
metadata ADDED
@@ -0,0 +1,165 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: juno
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Yehuda Katz
9
+ - Derek Kastner
10
+ - Daniel Mendler
11
+ autorequire:
12
+ bindir: bin
13
+ cert_chain: []
14
+ date: 2012-11-19 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: rake
18
+ requirement: &19508020 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ! '>='
22
+ - !ruby/object:Gem::Version
23
+ version: '0'
24
+ type: :development
25
+ prerelease: false
26
+ version_requirements: *19508020
27
+ - !ruby/object:Gem::Dependency
28
+ name: minitest
29
+ requirement: &19507540 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: *19507540
38
+ description: A unified interface to key/value stores (moneta replacement)
39
+ email:
40
+ - wycats@gmail.com
41
+ - dkastner@gmail.com
42
+ - mail@daniel-mendler.de
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files:
46
+ - README.md
47
+ - SPEC.md
48
+ - LICENSE
49
+ files:
50
+ - .gitignore
51
+ - .travis.yml
52
+ - Gemfile
53
+ - LICENSE
54
+ - README.md
55
+ - Rakefile
56
+ - SPEC.md
57
+ - juno.gemspec
58
+ - lib/juno.rb
59
+ - lib/juno/activerecord.rb
60
+ - lib/juno/base.rb
61
+ - lib/juno/couch.rb
62
+ - lib/juno/datamapper.rb
63
+ - lib/juno/dbm.rb
64
+ - lib/juno/expires.rb
65
+ - lib/juno/file.rb
66
+ - lib/juno/gdbm.rb
67
+ - lib/juno/hashfile.rb
68
+ - lib/juno/localmemcache.rb
69
+ - lib/juno/memcached.rb
70
+ - lib/juno/memcached_dalli.rb
71
+ - lib/juno/memcached_native.rb
72
+ - lib/juno/memory.rb
73
+ - lib/juno/mongodb.rb
74
+ - lib/juno/proxy.rb
75
+ - lib/juno/pstore.rb
76
+ - lib/juno/redis.rb
77
+ - lib/juno/riak.rb
78
+ - lib/juno/sdbm.rb
79
+ - lib/juno/sequel.rb
80
+ - lib/juno/sqlite.rb
81
+ - lib/juno/tokyocabinet.rb
82
+ - lib/juno/version.rb
83
+ - lib/juno/yaml.rb
84
+ - test/helper.rb
85
+ - test/test_active_record.rb
86
+ - test/test_couch.rb
87
+ - test/test_datamapper.rb
88
+ - test/test_dbm.rb
89
+ - test/test_expires.rb
90
+ - test/test_file.rb
91
+ - test/test_gdbm.rb
92
+ - test/test_hashfile.rb
93
+ - test/test_localmemcache.rb
94
+ - test/test_memcached.rb
95
+ - test/test_memcached_dalli.rb
96
+ - test/test_memcached_native.rb
97
+ - test/test_memory.rb
98
+ - test/test_mongodb.rb
99
+ - test/test_proxy.rb
100
+ - test/test_pstore.rb
101
+ - test/test_redis.rb
102
+ - test/test_riak.rb
103
+ - test/test_sdbm.rb
104
+ - test/test_sequel.rb
105
+ - test/test_sqlite.rb
106
+ - test/test_tokyocabinet.rb
107
+ - test/test_yaml.rb
108
+ - unsupported/benchmarks.rb
109
+ - unsupported/cassandra.rb
110
+ - unsupported/fog.rb
111
+ - unsupported/test_cassandra.rb
112
+ - unsupported/test_rackspace.rb
113
+ - unsupported/test_s3.rb
114
+ - unsupported/test_tokyotyrant.rb
115
+ - unsupported/tokyotyrant.rb
116
+ homepage: http://github.com/minad/juno
117
+ licenses: []
118
+ post_install_message:
119
+ rdoc_options: []
120
+ require_paths:
121
+ - lib
122
+ required_ruby_version: !ruby/object:Gem::Requirement
123
+ none: false
124
+ requirements:
125
+ - - ! '>='
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ required_rubygems_version: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ requirements: []
135
+ rubyforge_project:
136
+ rubygems_version: 1.8.15
137
+ signing_key:
138
+ specification_version: 3
139
+ summary: A unified interface to key/value stores, including MongoDB, Redis, Tokyo,
140
+ and ActiveRecord
141
+ test_files:
142
+ - test/helper.rb
143
+ - test/test_active_record.rb
144
+ - test/test_couch.rb
145
+ - test/test_datamapper.rb
146
+ - test/test_dbm.rb
147
+ - test/test_expires.rb
148
+ - test/test_file.rb
149
+ - test/test_gdbm.rb
150
+ - test/test_hashfile.rb
151
+ - test/test_localmemcache.rb
152
+ - test/test_memcached.rb
153
+ - test/test_memcached_dalli.rb
154
+ - test/test_memcached_native.rb
155
+ - test/test_memory.rb
156
+ - test/test_mongodb.rb
157
+ - test/test_proxy.rb
158
+ - test/test_pstore.rb
159
+ - test/test_redis.rb
160
+ - test/test_riak.rb
161
+ - test/test_sdbm.rb
162
+ - test/test_sequel.rb
163
+ - test/test_sqlite.rb
164
+ - test/test_tokyocabinet.rb
165
+ - test/test_yaml.rb