adapter-simpledb 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,6 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ log/*
6
+ .rvmrc
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
@@ -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.
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require 'rspec/core/rake_task'
4
+ RSpec::Core::RakeTask.new
5
+
6
+ task :default => :spec
@@ -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,2 @@
1
+ require 'adapter/simpledb/version'
2
+ require 'adapter/simpledb'
@@ -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)
@@ -0,0 +1,5 @@
1
+ module Adapter
2
+ module SimpleDB
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
@@ -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