flounder 0.11.2 → 0.11.3
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 +4 -4
- data/flounder.gemspec +2 -2
- data/lib/flounder/postgres_utils.rb +9 -3
- data/lib/flounder/query/base.rb +5 -0
- data/qed/flounder.sql +4 -1
- data/qed/inserts.md +9 -4
- data/qed/selects.md +1 -1
- data/qed/updates.md +1 -1
- metadata +7 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f4ac07a24ace10c1749674bf6267e9a72340dbb6
|
4
|
+
data.tar.gz: 727e4e6fd344cf1af92787e82ffd18c505fe5956
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e9397d1aaef91195b6506305ba65738cebb2936cc3e1c507b5650ac3b8da2abc1ad5f221d8c36240a631621f1f1ca4d3c8b7a6261d1fc961b3f2d4200a6ce355
|
7
|
+
data.tar.gz: f48c8f2963b7ac31f16dd9e8a52d282221d39670ed12f72ac16c22e55a2d38fec7aa57523c3eaea51deb827a1ac6335fc7d24b7666033874414c2e92064f9e3f
|
data/flounder.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "flounder"
|
5
|
-
s.version = '0.11.
|
5
|
+
s.version = '0.11.3'
|
6
6
|
s.summary = "Flounder is a way to write SQL simply in Ruby. It deals with everything BUT object relational mapping. "
|
7
7
|
s.email = "kaspar.schiess@technologyastronauts.ch"
|
8
8
|
s.homepage = "https://bitbucket.org/technologyastronauts/oss_flounder"
|
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.add_runtime_dependency 'pg', '~> 0.17'
|
19
19
|
s.add_runtime_dependency 'hashie', '~> 3', '>= 3.2'
|
20
20
|
s.add_runtime_dependency 'connection_pool', '~> 2'
|
21
|
-
s.add_runtime_dependency 'pg-hstore', '~> 1.2.0'
|
21
|
+
s.add_runtime_dependency 'pg-hstore', '~> 1.2', '>= 1.2.0'
|
22
22
|
|
23
23
|
s.files = Dir['**/*']
|
24
24
|
s.test_files = Dir['qed/**/*']
|
@@ -14,7 +14,6 @@ module Flounder
|
|
14
14
|
OID_TIMESTAMP = 1114
|
15
15
|
OID_DATE = 1082
|
16
16
|
OID_TIME = 1083
|
17
|
-
OID_HSTORE = 133538
|
18
17
|
|
19
18
|
def typecast type_oid, value
|
20
19
|
return nil unless value
|
@@ -35,13 +34,20 @@ module Flounder
|
|
35
34
|
value == 't'
|
36
35
|
when OID_TEXT
|
37
36
|
value.to_s
|
38
|
-
when
|
37
|
+
when oid_hstore
|
39
38
|
PgHstore.load(value)
|
40
39
|
else
|
41
40
|
value
|
42
41
|
end
|
43
42
|
end
|
44
43
|
|
44
|
+
def oid_hstore
|
45
|
+
@oid_hstore ||= begin
|
46
|
+
result = exec("SELECT oid FROM pg_type WHERE typname='hstore'")
|
47
|
+
result.first.values.first.to_i
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
45
51
|
def type_oid_to_sym oid
|
46
52
|
case oid
|
47
53
|
when OID_TIMESTAMP
|
@@ -58,7 +64,7 @@ module Flounder
|
|
58
64
|
:string
|
59
65
|
when OID_BOOLEAN
|
60
66
|
:boolean
|
61
|
-
when
|
67
|
+
when oid_hstore
|
62
68
|
:hash
|
63
69
|
else
|
64
70
|
nil
|
data/lib/flounder/query/base.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
|
2
|
+
require 'pg_hstore'
|
2
3
|
require 'benchmark'
|
3
4
|
|
4
5
|
module Flounder::Query
|
@@ -210,6 +211,10 @@ module Flounder::Query
|
|
210
211
|
# hash that can be passed to Arel #update.
|
211
212
|
#
|
212
213
|
def transform_tuple_for_set field, value
|
214
|
+
if value.kind_of? Hash
|
215
|
+
value = PgHstore.dump(value, true)
|
216
|
+
end
|
217
|
+
|
213
218
|
placeholder = add_binding(value)
|
214
219
|
|
215
220
|
case field
|
data/qed/flounder.sql
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
-- Database fixture for these tests. Please import into a database that
|
2
2
|
-- should also be called 'flounder'.
|
3
3
|
|
4
|
+
CREATE EXTENSION IF NOT EXISTS hstore;
|
5
|
+
|
4
6
|
DROP TABLE IF EXISTS "users" CASCADE;
|
5
7
|
CREATE TABLE "users" (
|
6
8
|
"id" serial PRIMARY KEY,
|
7
|
-
"name" varchar(40) NOT NULL
|
9
|
+
"name" varchar(40) NOT NULL,
|
10
|
+
"attributes" hstore NULL
|
8
11
|
);
|
9
12
|
|
10
13
|
BEGIN;
|
data/qed/inserts.md
CHANGED
@@ -40,10 +40,15 @@ Flounder fields can be used as keys.
|
|
40
40
|
results.first.name.assert == 'Mr. Flounder Field'
|
41
41
|
~~~
|
42
42
|
|
43
|
-
|
43
|
+
## Special Types
|
44
|
+
|
45
|
+
### HSTORE
|
46
|
+
|
47
|
+
Flounder supports fields in hstore format through the `pg-hstore` gem.
|
44
48
|
|
45
49
|
~~~ruby
|
46
|
-
|
47
|
-
|
48
|
-
|
50
|
+
row = users.insert(name: 'HStore User', attributes: {foo: 'bar'}).kick.first
|
51
|
+
|
52
|
+
row = users.where(id: row.id).first
|
53
|
+
row.attributes.assert == {'foo' => 'bar'}
|
49
54
|
~~~
|
data/qed/selects.md
CHANGED
@@ -27,7 +27,7 @@ If we want to see all records, we use the `all` kicker, which has some synonyms.
|
|
27
27
|
|
28
28
|
~~~ruby
|
29
29
|
users = domain[:users].all
|
30
|
-
users.size.assert ==
|
30
|
+
users.size.assert == 7
|
31
31
|
users.assert.kind_of? Array
|
32
32
|
|
33
33
|
domain[:users].map(&:id).assert == users.map(&:id)
|
data/qed/updates.md
CHANGED
@@ -63,5 +63,5 @@ Updating multiple rows is possible.
|
|
63
63
|
~~~ruby
|
64
64
|
updated = users.update(:name => 'Update Multiple Rows').where(:name.not_eq => nil).kick
|
65
65
|
|
66
|
-
updated.map(&:name).assert == ['Update Multiple Rows']*
|
66
|
+
updated.map(&:name).assert == ['Update Multiple Rows']*7
|
67
67
|
~~~
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flounder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.11.
|
4
|
+
version: 0.11.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kaspar Schiess
|
@@ -84,6 +84,9 @@ dependencies:
|
|
84
84
|
requirement: !ruby/object:Gem::Requirement
|
85
85
|
requirements:
|
86
86
|
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '1.2'
|
89
|
+
- - ">="
|
87
90
|
- !ruby/object:Gem::Version
|
88
91
|
version: 1.2.0
|
89
92
|
type: :runtime
|
@@ -91,6 +94,9 @@ dependencies:
|
|
91
94
|
version_requirements: !ruby/object:Gem::Requirement
|
92
95
|
requirements:
|
93
96
|
- - "~>"
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '1.2'
|
99
|
+
- - ">="
|
94
100
|
- !ruby/object:Gem::Version
|
95
101
|
version: 1.2.0
|
96
102
|
description: " Flounder is the missing piece between the database and your Ruby
|