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.
@@ -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