storing 0.0.1
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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/Guardfile +9 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/lib/storing/abstract_adaptor.rb +23 -0
- data/lib/storing/dataset.rb +74 -0
- data/lib/storing/entity_store.rb +64 -0
- data/lib/storing/exceptions.rb +6 -0
- data/lib/storing/postgres/abstract_queries/abstract_query.rb +9 -0
- data/lib/storing/postgres/abstract_queries/abstract_select_query.rb +27 -0
- data/lib/storing/postgres/adaptor.rb +58 -0
- data/lib/storing/postgres/queries/delete_query.rb +16 -0
- data/lib/storing/postgres/queries/insert_query.rb +16 -0
- data/lib/storing/postgres/queries/update_query.rb +17 -0
- data/lib/storing/version.rb +3 -0
- data/lib/storing.rb +4 -0
- data/spec/dataset_spec.rb +89 -0
- data/spec/entity_store_spec.rb +71 -0
- data/spec/postgres/adaptor/delete_query_spec.rb +11 -0
- data/spec/postgres/adaptor/insert_query_spec.rb +11 -0
- data/spec/postgres/adaptor/update_query_spec.rb +13 -0
- data/spec/postgres/adaptor_spec.rb +54 -0
- data/spec/spec_helper.rb +20 -0
- data/storing.gemspec +28 -0
- metadata +175 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: cb9e623717833ee559b94a421d1e9d5dc09abd16
|
4
|
+
data.tar.gz: 5bf793aecad4f3feee07cfc09addec3f04b58aec
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 37b4a7c8a7a4fc734c58cdcbc803193b13aedca68fe1e7d6e4c90f4224044b168a8b4a0c88e1db39a019f4e94223bc6ad88efe28f0357fcbb1e67d8ce419d210
|
7
|
+
data.tar.gz: f98e2341b7d7e01c5cd11a821f24fe1a59d9d270a9623f9e90437440fb82e01b7c3bfa9ceefe278e9d7add9a5c3bf3317d38d656ea96e808b9edb080b5edd730
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
guard :minitest, :all_on_start => false do
|
5
|
+
# with Minitest::Spec
|
6
|
+
watch(%r{^spec/(.*)_spec\.rb})
|
7
|
+
watch(%r{^lib/(.+)\.rb}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
8
|
+
watch(%r{^spec/spec_helper\.rb}) { 'spec' }
|
9
|
+
end
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Erik Lott
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# Storing
|
2
|
+
|
3
|
+
TODO: Write a gem description
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'storing'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install storing
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
TODO: Write usage instructions here
|
22
|
+
|
23
|
+
## Contributing
|
24
|
+
|
25
|
+
1. Fork it
|
26
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Storing
|
2
|
+
class AbstractAdaptor
|
3
|
+
def query query_obj
|
4
|
+
raise NotImplementedError
|
5
|
+
end
|
6
|
+
|
7
|
+
def insert table_name, params={}
|
8
|
+
raise NotImplementedError
|
9
|
+
end
|
10
|
+
|
11
|
+
def update table_name, conditions={}, params={}
|
12
|
+
raise NotImplementedError
|
13
|
+
end
|
14
|
+
|
15
|
+
def delete table_name, conditions={}
|
16
|
+
raise NotImplementedError
|
17
|
+
end
|
18
|
+
|
19
|
+
def transaction &block
|
20
|
+
raise NotImplementedError
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'storing/exceptions'
|
2
|
+
|
3
|
+
module Storing
|
4
|
+
class Dataset
|
5
|
+
class PrimaryKey
|
6
|
+
def self.from_hash key, params={}
|
7
|
+
keys = [*key]
|
8
|
+
values = params.values_at(*keys)
|
9
|
+
new(keys, values)
|
10
|
+
end
|
11
|
+
|
12
|
+
attr_reader :key, :value
|
13
|
+
|
14
|
+
def initialize key, value=nil
|
15
|
+
@key = key
|
16
|
+
@value = value
|
17
|
+
end
|
18
|
+
|
19
|
+
def to_hash
|
20
|
+
output = {}
|
21
|
+
keys.length.times do |i|
|
22
|
+
output[keys[i]] = values[i]
|
23
|
+
end
|
24
|
+
output
|
25
|
+
end
|
26
|
+
|
27
|
+
def reject_from params={}
|
28
|
+
params.reject{ |k,v| keys.include?(k) }
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def keys
|
34
|
+
[*key]
|
35
|
+
end
|
36
|
+
|
37
|
+
def values
|
38
|
+
[*value]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
attr_reader :adaptor, :table_name, :primary_key_column
|
43
|
+
|
44
|
+
def initialize adaptor, table_name, primary_key_column
|
45
|
+
@adaptor = adaptor
|
46
|
+
@table_name = table_name
|
47
|
+
@primary_key_column = primary_key_column
|
48
|
+
end
|
49
|
+
|
50
|
+
def insert params={}
|
51
|
+
primary_key_value = adaptor.insert(table_name, params)
|
52
|
+
::Storing::Dataset::PrimaryKey.new(primary_key_column, primary_key_value).to_hash
|
53
|
+
end
|
54
|
+
|
55
|
+
def update params={}
|
56
|
+
primary_key = ::Storing::Dataset::PrimaryKey.from_hash(primary_key_column, params)
|
57
|
+
filtered_params = primary_key.reject_from(params)
|
58
|
+
update_where(primary_key.to_hash, filtered_params)
|
59
|
+
end
|
60
|
+
|
61
|
+
def update_where conditions={}, params={}
|
62
|
+
adaptor.update(table_name, conditions, params)
|
63
|
+
end
|
64
|
+
|
65
|
+
def delete params={}
|
66
|
+
primary_key = ::Storing::Dataset::PrimaryKey.from_hash(primary_key_column, params)
|
67
|
+
delete_where(primary_key.to_hash)
|
68
|
+
end
|
69
|
+
|
70
|
+
def delete_where conditions={}
|
71
|
+
adaptor.delete(table_name, conditions)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'storing/exceptions'
|
2
|
+
require 'storing/dataset'
|
3
|
+
|
4
|
+
module Storing
|
5
|
+
class EntityStore
|
6
|
+
module Extension
|
7
|
+
def self.included(base)
|
8
|
+
base.extend ClassMethods
|
9
|
+
end
|
10
|
+
|
11
|
+
module ClassMethods
|
12
|
+
def set_primary_key val
|
13
|
+
@primary_key = val
|
14
|
+
end
|
15
|
+
|
16
|
+
def primary_key
|
17
|
+
@primary_key || raise(MissingPrimaryKey, 'primary key not assigned')
|
18
|
+
end
|
19
|
+
|
20
|
+
def set_table_name val
|
21
|
+
@table_name = val
|
22
|
+
end
|
23
|
+
|
24
|
+
def table_name
|
25
|
+
@table_name || raise(MissingTableName, 'table name not assigned')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
attr_reader :adaptor
|
30
|
+
|
31
|
+
def initialize adaptor
|
32
|
+
@adaptor = adaptor
|
33
|
+
end
|
34
|
+
|
35
|
+
def insert *args
|
36
|
+
dataset.insert *args
|
37
|
+
end
|
38
|
+
|
39
|
+
def update *args
|
40
|
+
dataset.update *args
|
41
|
+
end
|
42
|
+
|
43
|
+
def update_where *args
|
44
|
+
dataset.update_where *args
|
45
|
+
end
|
46
|
+
|
47
|
+
def delete *args
|
48
|
+
dataset.delete *args
|
49
|
+
end
|
50
|
+
|
51
|
+
def delete_where *args
|
52
|
+
dataset.delete_where *args
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def dataset
|
58
|
+
::Storing::Dataset.new(adaptor, self.class.table_name, self.class.primary_key)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
include Extension
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'storing/postgres/abstract_queries/abstract_query'
|
2
|
+
|
3
|
+
module Storing
|
4
|
+
module Postgres
|
5
|
+
class AbstractSelectQuery < AbstractQuery
|
6
|
+
attr_reader :query_object
|
7
|
+
|
8
|
+
def initialize query_object=nil
|
9
|
+
@query_object = query_object
|
10
|
+
end
|
11
|
+
|
12
|
+
def query database
|
13
|
+
raise NotImplementedError
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_sql database
|
17
|
+
query(database).select_sql
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def call_query_chain database
|
23
|
+
query_object ? query_object.query(database) : database
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'sequel'
|
2
|
+
require 'storing/abstract_adaptor'
|
3
|
+
require 'storing/postgres/queries/insert_query'
|
4
|
+
require 'storing/postgres/queries/update_query'
|
5
|
+
require 'storing/postgres/queries/delete_query'
|
6
|
+
|
7
|
+
module Storing
|
8
|
+
module Postgres
|
9
|
+
class Adaptor < ::Storing::AbstractAdaptor
|
10
|
+
QUERY_METHOD_MAP = {
|
11
|
+
:select => :all,
|
12
|
+
:insert => :insert,
|
13
|
+
:update => :update,
|
14
|
+
:delete => :delete
|
15
|
+
}.freeze
|
16
|
+
|
17
|
+
attr_reader :database
|
18
|
+
|
19
|
+
def connect *args
|
20
|
+
new Sequel.postgres(*args)
|
21
|
+
end
|
22
|
+
|
23
|
+
def initialize database
|
24
|
+
@database = database
|
25
|
+
end
|
26
|
+
|
27
|
+
def query query_object
|
28
|
+
execute_query(query_object, :select)
|
29
|
+
end
|
30
|
+
|
31
|
+
def insert table_name, params={}
|
32
|
+
execute_query(InsertQuery.new(table_name, params), :insert)
|
33
|
+
end
|
34
|
+
|
35
|
+
def update table_name, conditions={}, params={}
|
36
|
+
execute_query(UpdateQuery.new(table_name, conditions, params), :update)
|
37
|
+
end
|
38
|
+
|
39
|
+
def delete table_name, conditions={}
|
40
|
+
execute_query(DeleteQuery.new(table_name, conditions), :delete)
|
41
|
+
end
|
42
|
+
|
43
|
+
def transaction
|
44
|
+
database.transaction
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def execute_query query_object, type=:select
|
50
|
+
execute(query_object.to_sql(database), type)
|
51
|
+
end
|
52
|
+
|
53
|
+
def execute sql, type=:select
|
54
|
+
database[sql].send(QUERY_METHOD_MAP.fetch(type))
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'storing/postgres/abstract_queries/abstract_query'
|
2
|
+
|
3
|
+
module Storing
|
4
|
+
module Postgres
|
5
|
+
class DeleteQuery < ::Storing::Postgres::AbstractQuery
|
6
|
+
def initialize table_name, conditions={}
|
7
|
+
@table_name = table_name
|
8
|
+
@conditions = conditions
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_sql database
|
12
|
+
database[@table_name].where(@conditions).delete_sql
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'storing/postgres/abstract_queries/abstract_query'
|
2
|
+
|
3
|
+
module Storing
|
4
|
+
module Postgres
|
5
|
+
class InsertQuery < ::Storing::Postgres::AbstractQuery
|
6
|
+
def initialize table_name, params={}
|
7
|
+
@table_name = table_name
|
8
|
+
@params = params
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_sql database
|
12
|
+
database[@table_name].insert_sql(@params)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'storing/postgres/abstract_queries/abstract_query'
|
2
|
+
|
3
|
+
module Storing
|
4
|
+
module Postgres
|
5
|
+
class UpdateQuery < ::Storing::Postgres::AbstractQuery
|
6
|
+
def initialize table_name, conditions={}, params={}
|
7
|
+
@table_name = table_name
|
8
|
+
@conditions = conditions
|
9
|
+
@params = params
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_sql database
|
13
|
+
database[@table_name].where(@conditions).update_sql(@params)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/storing.rb
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'storing/dataset'
|
3
|
+
|
4
|
+
describe Storing::Dataset do
|
5
|
+
let(:table_name){ 'users' }
|
6
|
+
let(:adaptor){ stub }
|
7
|
+
let(:primary_key_column){ [:user_id, :user_type] }
|
8
|
+
let(:store){ Storing::Dataset.new(adaptor, table_name, primary_key_column) }
|
9
|
+
|
10
|
+
describe "#insert" do
|
11
|
+
let(:params){stub}
|
12
|
+
|
13
|
+
it "passes params to adaptor" do
|
14
|
+
adaptor.expects(:insert).with(table_name, params).returns([123, 'person'])
|
15
|
+
store.insert(params)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "returns primary key hash" do
|
19
|
+
adaptor.expects(:insert).returns([123, 'person'])
|
20
|
+
store.insert(params).must_equal({:user_id=>123, :user_type=>"person"})
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "#update" do
|
25
|
+
it "formats params and delegates to update_where method" do
|
26
|
+
params = {:user_id => 123, :user_type => "person", :first_name => 'john', :last_name => 'doe'}
|
27
|
+
store.expects(:update_where).with({:user_id => 123, :user_type => "person"}, {:first_name => 'john', :last_name => 'doe'})
|
28
|
+
store.update(params)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "#update_where" do
|
33
|
+
it "delegates to adaptor" do
|
34
|
+
adaptor_response = stub
|
35
|
+
params = stub
|
36
|
+
where = stub
|
37
|
+
adaptor.expects(:update).with(table_name, where, params).returns(adaptor_response)
|
38
|
+
store.update_where(where, params).must_equal(adaptor_response)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "#delete" do
|
43
|
+
it "delegates to delete_where method" do
|
44
|
+
params = {:user_id => 123, :user_type => "person", :first_name => 'john', :last_name => 'doe'}
|
45
|
+
store.expects(:delete_where).with({:user_id => 123, :user_type => "person"})
|
46
|
+
store.delete(params)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "#delete_where" do
|
51
|
+
it "delegates to adaptor" do
|
52
|
+
adaptor_response = stub
|
53
|
+
where = stub
|
54
|
+
adaptor.expects(:delete).with(table_name, where).returns(adaptor_response)
|
55
|
+
store.delete_where(where).must_equal(adaptor_response)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe Storing::Dataset::PrimaryKey do
|
61
|
+
describe "#to_hash" do
|
62
|
+
it "returns hash version of primary key" do
|
63
|
+
pk = Storing::Dataset::PrimaryKey.new(:user_id, 123)
|
64
|
+
pk.to_hash.must_equal({:user_id => 123})
|
65
|
+
|
66
|
+
pk = Storing::Dataset::PrimaryKey.new([:user_id, :user_type], [123, 'person'])
|
67
|
+
pk.to_hash.must_equal({:user_id=>123, :user_type=>"person"})
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe "::from_hash" do
|
72
|
+
it "creates pk from hash" do
|
73
|
+
pk = Storing::Dataset::PrimaryKey.from_hash(:user_id, :user_id => 123, :name => 'john doe')
|
74
|
+
pk.key.must_equal [:user_id]
|
75
|
+
pk.value.must_equal [123]
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "#reject_from" do
|
80
|
+
it "removes primary key from params" do
|
81
|
+
pk = Storing::Dataset::PrimaryKey.new([:user_id, :user_type])
|
82
|
+
pk.reject_from({
|
83
|
+
:user_id => 123,
|
84
|
+
:user_type => 'person',
|
85
|
+
:name => 'john doe'
|
86
|
+
}).must_equal({:name => 'john doe'})
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'storing/entity_store'
|
3
|
+
|
4
|
+
describe Storing::EntityStore::Extension do
|
5
|
+
let(:adaptor){stub}
|
6
|
+
let(:store_class) do
|
7
|
+
Class.new{
|
8
|
+
include Storing::EntityStore::Extension
|
9
|
+
set_table_name :user
|
10
|
+
set_primary_key :user_id
|
11
|
+
}
|
12
|
+
end
|
13
|
+
let(:store) { store_class.new(adaptor) }
|
14
|
+
|
15
|
+
describe "::set_primary_key" do
|
16
|
+
it "sets primary key on class" do
|
17
|
+
store_class.set_primary_key :subscription_id
|
18
|
+
store_class.primary_key.must_equal :subscription_id
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "::set_table_name" do
|
23
|
+
it "sets primary key on class" do
|
24
|
+
store_class.set_table_name :subscription
|
25
|
+
store_class.table_name.must_equal :subscription
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "instance methods" do
|
30
|
+
let(:dataset){ stub }
|
31
|
+
|
32
|
+
before do
|
33
|
+
store.expects(:dataset).returns(dataset)
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "#insert" do
|
37
|
+
it "delegates to dataset" do
|
38
|
+
dataset.expects(:insert).with('blah')
|
39
|
+
store.insert('blah')
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "#update" do
|
44
|
+
it "delegates to dataset" do
|
45
|
+
dataset.expects(:update).with('blah')
|
46
|
+
store.update('blah')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "#update_where" do
|
51
|
+
it "delegates to dataset" do
|
52
|
+
dataset.expects(:update_where).with('blah')
|
53
|
+
store.update_where('blah')
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "#delete" do
|
58
|
+
it "delegates to dataset" do
|
59
|
+
dataset.expects(:delete).with('blah')
|
60
|
+
store.delete('blah')
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "#delete_where" do
|
65
|
+
it "delegates to dataset" do
|
66
|
+
dataset.expects(:delete_where).with('blah')
|
67
|
+
store.delete_where('blah')
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'storing/postgres/queries/delete_query'
|
3
|
+
|
4
|
+
describe Storing::Postgres::DeleteQuery do
|
5
|
+
describe "to_sql" do
|
6
|
+
it "returns insert sql" do
|
7
|
+
query = Storing::Postgres::DeleteQuery.new(:user, :user_id => 123)
|
8
|
+
query.to_sql(DB).must_equal "DELETE FROM \"user\" WHERE (\"user_id\" = 123)"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'storing/postgres/queries/insert_query'
|
3
|
+
|
4
|
+
describe Storing::Postgres::InsertQuery do
|
5
|
+
describe "to_sql" do
|
6
|
+
it "returns insert sql" do
|
7
|
+
query = Storing::Postgres::InsertQuery.new(:user, :user_id => 123, :name => 'John Doe', :age => 35)
|
8
|
+
query.to_sql(DB).must_equal "INSERT INTO \"user\" (\"user_id\", \"name\", \"age\") VALUES (123, 'John Doe', 35)"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'storing/postgres/queries/update_query'
|
3
|
+
|
4
|
+
describe Storing::Postgres::UpdateQuery do
|
5
|
+
describe "to_sql" do
|
6
|
+
it "returns insert sql" do
|
7
|
+
conditions = {:user_id => 123}
|
8
|
+
params = {:name => 'John Doe', :age => 35}
|
9
|
+
query = Storing::Postgres::UpdateQuery.new(:user, conditions, params)
|
10
|
+
query.to_sql(DB).must_equal "UPDATE \"user\" SET \"name\" = 'John Doe', \"age\" = 35 WHERE (\"user_id\" = 123)"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'storing/postgres/adaptor'
|
3
|
+
|
4
|
+
describe Storing::Postgres::Adaptor do
|
5
|
+
describe "#insert" do
|
6
|
+
it "delegates to execute_query method" do
|
7
|
+
table_name = stub
|
8
|
+
params = stub
|
9
|
+
query_object = stub
|
10
|
+
|
11
|
+
Storing::Postgres::InsertQuery.expects(:new).with(table_name, params).returns(query_object)
|
12
|
+
adaptor = Storing::Postgres::Adaptor.new(DB)
|
13
|
+
adaptor.expects(:execute_query).with(query_object, :insert)
|
14
|
+
adaptor.insert(table_name, params)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#update" do
|
19
|
+
it "delegates to execute_query method" do
|
20
|
+
table_name = stub
|
21
|
+
conditions = stub
|
22
|
+
params = stub
|
23
|
+
query_object = stub
|
24
|
+
|
25
|
+
Storing::Postgres::UpdateQuery.expects(:new).with(table_name, conditions, params).returns(query_object)
|
26
|
+
adaptor = Storing::Postgres::Adaptor.new(DB)
|
27
|
+
adaptor.expects(:execute_query).with(query_object, :update)
|
28
|
+
adaptor.update(table_name, conditions, params)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "#delete" do
|
33
|
+
it "delegates to execute_query method" do
|
34
|
+
table_name = stub
|
35
|
+
conditions = stub
|
36
|
+
query_object = stub
|
37
|
+
|
38
|
+
Storing::Postgres::DeleteQuery.expects(:new).with(table_name, conditions).returns(query_object)
|
39
|
+
adaptor = Storing::Postgres::Adaptor.new(DB)
|
40
|
+
adaptor.expects(:execute_query).with(query_object, :delete)
|
41
|
+
adaptor.delete(table_name, conditions)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "#query" do
|
46
|
+
it "delegates to execute_query method" do
|
47
|
+
query_object = stub
|
48
|
+
|
49
|
+
adaptor = Storing::Postgres::Adaptor.new(DB)
|
50
|
+
adaptor.expects(:execute_query).with(query_object, :select)
|
51
|
+
adaptor.query(query_object)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'mocha/setup'
|
3
|
+
require 'sequel'
|
4
|
+
|
5
|
+
DB = Sequel.connect("postgres://admin:Zbx8L9W33E@localhost/gazou_postgres_test", :encoding => 'unicode')
|
6
|
+
|
7
|
+
require 'database_cleaner'
|
8
|
+
|
9
|
+
DatabaseCleaner.strategy = :transaction
|
10
|
+
|
11
|
+
class MiniTest::Spec
|
12
|
+
before :each do
|
13
|
+
DatabaseCleaner.start
|
14
|
+
DB[:source_type].insert(:source_type_code => 'S3', :name => 'amazons3source')
|
15
|
+
end
|
16
|
+
|
17
|
+
after :each do
|
18
|
+
DatabaseCleaner.clean
|
19
|
+
end
|
20
|
+
end
|
data/storing.gemspec
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'storing/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "storing"
|
8
|
+
spec.version = Storing::VERSION
|
9
|
+
spec.authors = ["Erik Lott"]
|
10
|
+
spec.email = ["erik.lott@kodio.com"]
|
11
|
+
spec.description = %q{Minimal storage interface}
|
12
|
+
spec.summary = %q{General storage interface}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
spec.add_development_dependency "guard-minitest", "~> 2.0.0"
|
24
|
+
spec.add_development_dependency "mocha", "~> 0.14.0"
|
25
|
+
spec.add_development_dependency "database_cleaner", "~> 1.2.0"
|
26
|
+
spec.add_development_dependency "sequel", "~> 4.3.0"
|
27
|
+
spec.add_development_dependency "pg", "~> 0.17.0"
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,175 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: storing
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Erik Lott
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-10-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: guard-minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 2.0.0
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 2.0.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: mocha
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.14.0
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.14.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: database_cleaner
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 1.2.0
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.2.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: sequel
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 4.3.0
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ~>
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 4.3.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: pg
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ~>
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 0.17.0
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ~>
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 0.17.0
|
111
|
+
description: Minimal storage interface
|
112
|
+
email:
|
113
|
+
- erik.lott@kodio.com
|
114
|
+
executables: []
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- .gitignore
|
119
|
+
- Gemfile
|
120
|
+
- Guardfile
|
121
|
+
- LICENSE.txt
|
122
|
+
- README.md
|
123
|
+
- Rakefile
|
124
|
+
- lib/storing.rb
|
125
|
+
- lib/storing/abstract_adaptor.rb
|
126
|
+
- lib/storing/dataset.rb
|
127
|
+
- lib/storing/entity_store.rb
|
128
|
+
- lib/storing/exceptions.rb
|
129
|
+
- lib/storing/postgres/abstract_queries/abstract_query.rb
|
130
|
+
- lib/storing/postgres/abstract_queries/abstract_select_query.rb
|
131
|
+
- lib/storing/postgres/adaptor.rb
|
132
|
+
- lib/storing/postgres/queries/delete_query.rb
|
133
|
+
- lib/storing/postgres/queries/insert_query.rb
|
134
|
+
- lib/storing/postgres/queries/update_query.rb
|
135
|
+
- lib/storing/version.rb
|
136
|
+
- spec/dataset_spec.rb
|
137
|
+
- spec/entity_store_spec.rb
|
138
|
+
- spec/postgres/adaptor/delete_query_spec.rb
|
139
|
+
- spec/postgres/adaptor/insert_query_spec.rb
|
140
|
+
- spec/postgres/adaptor/update_query_spec.rb
|
141
|
+
- spec/postgres/adaptor_spec.rb
|
142
|
+
- spec/spec_helper.rb
|
143
|
+
- storing.gemspec
|
144
|
+
homepage: ''
|
145
|
+
licenses:
|
146
|
+
- MIT
|
147
|
+
metadata: {}
|
148
|
+
post_install_message:
|
149
|
+
rdoc_options: []
|
150
|
+
require_paths:
|
151
|
+
- lib
|
152
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
153
|
+
requirements:
|
154
|
+
- - '>='
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
version: '0'
|
157
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
158
|
+
requirements:
|
159
|
+
- - '>='
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
version: '0'
|
162
|
+
requirements: []
|
163
|
+
rubyforge_project:
|
164
|
+
rubygems_version: 2.0.7
|
165
|
+
signing_key:
|
166
|
+
specification_version: 4
|
167
|
+
summary: General storage interface
|
168
|
+
test_files:
|
169
|
+
- spec/dataset_spec.rb
|
170
|
+
- spec/entity_store_spec.rb
|
171
|
+
- spec/postgres/adaptor/delete_query_spec.rb
|
172
|
+
- spec/postgres/adaptor/insert_query_spec.rb
|
173
|
+
- spec/postgres/adaptor/update_query_spec.rb
|
174
|
+
- spec/postgres/adaptor_spec.rb
|
175
|
+
- spec/spec_helper.rb
|