adapter-simpledb 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.
- data/.gitignore +6 -0
- data/Gemfile +12 -0
- data/README.rdoc +32 -0
- data/Rakefile +6 -0
- data/adapter-simpledb.gemspec +23 -0
- data/lib/adapter-simpledb.rb +2 -0
- data/lib/adapter/simpledb.rb +56 -0
- data/lib/adapter/simpledb/version.rb +5 -0
- data/spec/helper.rb +31 -0
- data/spec/simpledb_spec.rb +43 -0
- metadata +85 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
source "http://rubygems.org"
|
2
|
+
|
3
|
+
# Specify your gem's dependencies in adapter-simpledb.gemspec
|
4
|
+
gemspec
|
5
|
+
|
6
|
+
group :development do
|
7
|
+
gem 'rake'
|
8
|
+
gem 'rspec', '~> 2.3'
|
9
|
+
gem 'log_buddy', '~> 0.5.0'
|
10
|
+
gem 'ruby-debug', :platform => :ruby_18
|
11
|
+
gem 'ruby-debug19', :platform => :ruby_19, :require => 'ruby-debug'
|
12
|
+
end
|
data/README.rdoc
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
= adapter-smipledb
|
2
|
+
|
3
|
+
Amazon SimpleDB adapter for adapter gem.
|
4
|
+
|
5
|
+
require 'adapter/simpledb'
|
6
|
+
|
7
|
+
client = Fog::AWS::SimpleDB.new(
|
8
|
+
:aws_access_key_id => ENV['S3_KEY'],
|
9
|
+
:aws_secret_access_key => ENV['S3_SECRET']
|
10
|
+
)
|
11
|
+
adapter = Adapter[:simpledb].new(client, :domain => 'my-collection', :consistent_read => true)
|
12
|
+
adapter.clear
|
13
|
+
|
14
|
+
adapter.write('foo', 'bar')
|
15
|
+
puts 'Should be bar: ' + adapter.read('foo').inspect
|
16
|
+
|
17
|
+
adapter.delete('foo')
|
18
|
+
puts 'Should be nil: ' + adapter.read('foo').inspect
|
19
|
+
|
20
|
+
adapter.write('foo', 'bar')
|
21
|
+
adapter.clear
|
22
|
+
puts 'Should be nil: ' + adapter.read('foo').inspect
|
23
|
+
|
24
|
+
puts 'Should be bar: ' + adapter.fetch('foo', 'bar')
|
25
|
+
|
26
|
+
== Note on Patches/Pull Requests
|
27
|
+
|
28
|
+
* Fork the project.
|
29
|
+
* Make your feature addition or bug fix.
|
30
|
+
* Add tests for it. This is important so we don't break it in a future version unintentionally.
|
31
|
+
* Commit, do not mess with Rakefile, version, or history. (if you want to have your own version, that is fine, but bump version in a commit by itself so we can ignore when we pull)
|
32
|
+
* Send us a pull request. Bonus points for topic branches.
|
data/Rakefile
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "adapter/simpledb/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "adapter-simpledb"
|
7
|
+
s.version = Adapter::SimpleDB::VERSION
|
8
|
+
s.authors = ["Daniel Morrison"]
|
9
|
+
s.email = ["daniel@collectiveidea.com"]
|
10
|
+
s.homepage = "https://github.com/collectiveidea/adapter-simpledb"
|
11
|
+
s.summary = %q{Adapter for Amazon SimpleDB}
|
12
|
+
s.description = %q{Adapter for Amazon SimpleDB}
|
13
|
+
|
14
|
+
s.rubyforge_project = "adapter-simpledb"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_dependency 'adapter', '~>0.5.1'
|
22
|
+
s.add_dependency 'fog', '~>1.0.0'
|
23
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'adapter'
|
2
|
+
require 'fog/aws/simpledb'
|
3
|
+
|
4
|
+
module Adapter
|
5
|
+
module SimpleDB
|
6
|
+
NonHashValueKeyName = '_value'
|
7
|
+
ArrayFillName = '_array'
|
8
|
+
|
9
|
+
def read(key)
|
10
|
+
decode(client.get_attributes(domain, key_for(key), 'ConsistentRead' => options[:consistent_read]))
|
11
|
+
end
|
12
|
+
|
13
|
+
def write(key, value)
|
14
|
+
encoded_value = encode(value)
|
15
|
+
client.put_attributes(domain, key_for(key), encoded_value, :replace => encoded_value.keys)
|
16
|
+
end
|
17
|
+
|
18
|
+
def delete(key)
|
19
|
+
read(key).tap { client.delete_attributes(domain, key_for(key)) }
|
20
|
+
end
|
21
|
+
|
22
|
+
def clear
|
23
|
+
client.delete_domain(domain)
|
24
|
+
client.create_domain(domain)
|
25
|
+
end
|
26
|
+
|
27
|
+
def encode(value)
|
28
|
+
value.is_a?(Hash) ? value : {NonHashValueKeyName => value}
|
29
|
+
value.each {|key, v| v.unshift(ArrayFillName) if v.is_a?(Array) }
|
30
|
+
end
|
31
|
+
|
32
|
+
def decode(value)
|
33
|
+
value = value.body['Attributes']
|
34
|
+
return if value.nil? || value == {}
|
35
|
+
value = fix_arrays(value)
|
36
|
+
value.key?(NonHashValueKeyName) ? value[NonHashValueKeyName] : value
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
def domain
|
41
|
+
options[:domain] || raise('no :domain specified')
|
42
|
+
end
|
43
|
+
|
44
|
+
def fix_arrays(hash)
|
45
|
+
hash.each do |key, value|
|
46
|
+
if value.first == ArrayFillName
|
47
|
+
value.shift
|
48
|
+
else
|
49
|
+
hash[key] = value.first
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
Adapter.define(:simpledb, Adapter::SimpleDB)
|
data/spec/helper.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
$:.unshift(File.expand_path('../../lib', __FILE__))
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler'
|
5
|
+
|
6
|
+
Bundler.require(:default, :development)
|
7
|
+
|
8
|
+
require 'pathname'
|
9
|
+
require 'logger'
|
10
|
+
|
11
|
+
root_path = Pathname(__FILE__).dirname.join('..').expand_path
|
12
|
+
lib_path = root_path.join('lib')
|
13
|
+
log_path = root_path.join('log')
|
14
|
+
log_path.mkpath
|
15
|
+
|
16
|
+
require 'adapter/spec/an_adapter'
|
17
|
+
require 'adapter/spec/json_adapter'
|
18
|
+
require 'adapter/spec/types'
|
19
|
+
|
20
|
+
require 'adapter-simpledb'
|
21
|
+
|
22
|
+
shared_examples_for "a SimpleDB adapter" do
|
23
|
+
it_should_behave_like 'a json adapter'
|
24
|
+
end
|
25
|
+
|
26
|
+
logger = Logger.new(log_path.join('test.log'))
|
27
|
+
LogBuddy.init(:logger => logger)
|
28
|
+
|
29
|
+
RSpec.configure do |c|
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe "SimpleDB adapter" do
|
4
|
+
before do
|
5
|
+
raise "Set your S3_KEY and S3_SECRET" unless ENV['S3_KEY'] && ENV['S3_SECRET']
|
6
|
+
@client = Fog::AWS::SimpleDB.new(
|
7
|
+
:aws_access_key_id => ENV['S3_KEY'],
|
8
|
+
:aws_secret_access_key => ENV['S3_SECRET']
|
9
|
+
)
|
10
|
+
|
11
|
+
@domain = 'adapter-simpledb-spec'
|
12
|
+
# Need to use :consistent_read => true or we wil likely get failures
|
13
|
+
@adapter = Adapter[:simpledb].new(@client, :domain => @domain, :consistent_read => true)
|
14
|
+
@adapter.clear
|
15
|
+
end
|
16
|
+
|
17
|
+
let(:adapter) { @adapter }
|
18
|
+
let(:client) { @client }
|
19
|
+
let(:domain) { @domain }
|
20
|
+
|
21
|
+
it_should_behave_like 'a SimpleDB adapter'
|
22
|
+
|
23
|
+
it "stores arrays of multiple elements correctly" do
|
24
|
+
adapter.write('foo', 'bacon' => ['chunky', 'tasty'])
|
25
|
+
adapter.read('foo').should == {'bacon' => ['chunky', 'tasty']}
|
26
|
+
end
|
27
|
+
|
28
|
+
it "stores arrays of a single element correctly" do
|
29
|
+
adapter.write('foo', 'bacon' => ['chunky'])
|
30
|
+
adapter.read('foo').should == {'bacon' => ['chunky']}
|
31
|
+
end
|
32
|
+
|
33
|
+
it "stores an empty array correctly" do
|
34
|
+
adapter.write('foo', 'bacon' => [])
|
35
|
+
adapter.read('foo').should == {'bacon' => []}
|
36
|
+
end
|
37
|
+
|
38
|
+
it "replaces values instead of appending" do
|
39
|
+
adapter.write('foo', 'bacon' => 'chunky')
|
40
|
+
adapter.write('foo', 'bacon' => 'tasty')
|
41
|
+
adapter.read('foo').should == {'bacon' => 'tasty'}
|
42
|
+
end
|
43
|
+
end
|
metadata
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: adapter-simpledb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Daniel Morrison
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-10-11 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: adapter
|
16
|
+
requirement: &70319721434180 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.5.1
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70319721434180
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: fog
|
27
|
+
requirement: &70319721433260 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.0.0
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70319721433260
|
36
|
+
description: Adapter for Amazon SimpleDB
|
37
|
+
email:
|
38
|
+
- daniel@collectiveidea.com
|
39
|
+
executables: []
|
40
|
+
extensions: []
|
41
|
+
extra_rdoc_files: []
|
42
|
+
files:
|
43
|
+
- .gitignore
|
44
|
+
- Gemfile
|
45
|
+
- README.rdoc
|
46
|
+
- Rakefile
|
47
|
+
- adapter-simpledb.gemspec
|
48
|
+
- lib/adapter-simpledb.rb
|
49
|
+
- lib/adapter/simpledb.rb
|
50
|
+
- lib/adapter/simpledb/version.rb
|
51
|
+
- spec/helper.rb
|
52
|
+
- spec/simpledb_spec.rb
|
53
|
+
homepage: https://github.com/collectiveidea/adapter-simpledb
|
54
|
+
licenses: []
|
55
|
+
post_install_message:
|
56
|
+
rdoc_options: []
|
57
|
+
require_paths:
|
58
|
+
- lib
|
59
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
+
none: false
|
61
|
+
requirements:
|
62
|
+
- - ! '>='
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '0'
|
65
|
+
segments:
|
66
|
+
- 0
|
67
|
+
hash: -645252348841906306
|
68
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
70
|
+
requirements:
|
71
|
+
- - ! '>='
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
74
|
+
segments:
|
75
|
+
- 0
|
76
|
+
hash: -645252348841906306
|
77
|
+
requirements: []
|
78
|
+
rubyforge_project: adapter-simpledb
|
79
|
+
rubygems_version: 1.8.10
|
80
|
+
signing_key:
|
81
|
+
specification_version: 3
|
82
|
+
summary: Adapter for Amazon SimpleDB
|
83
|
+
test_files:
|
84
|
+
- spec/helper.rb
|
85
|
+
- spec/simpledb_spec.rb
|