flex_pg 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/flex_pg.rb +69 -0
  3. metadata +57 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3ebdf95739af9dde6360e3d3c2d416fe6ef9a04e
4
+ data.tar.gz: eb369e8b9d698029ac3057664a25fc8f8ed4ce78
5
+ SHA512:
6
+ metadata.gz: 57cf0e76f1124e9f920e92276624e776f45a95324e7dde9626600f781e9ac07a82aa73cad324c14db690a0a77313bbc3882d1b690a29627427be15121eb08029
7
+ data.tar.gz: f97ce42d87a21d198767fafef01b7960df12859f1c8c0f302a5c1d25146732cbbe3bf1c95f6cb328607a0890775e57882a57b088003558721f6f8ec8b5b42ae3
data/lib/flex_pg.rb ADDED
@@ -0,0 +1,69 @@
1
+ require 'sequel'
2
+
3
+ class FlexPG
4
+
5
+ def initialize (args)
6
+ @db = Sequel.postgres(args)
7
+ @db.extension :pg_array
8
+ @db.extension :pg_hstore
9
+ end
10
+
11
+ def method_missing (method, *args, &block)
12
+ @db.send(method, *args, &block)
13
+ end
14
+
15
+ def [] (symbol)
16
+ FlexDS.new({db: @db, table: symbol})
17
+ end
18
+
19
+ end
20
+
21
+ class FlexPG
22
+
23
+ class FlexDS
24
+
25
+ def initialize (args)
26
+ @database = args[:db]
27
+ @table_name = args[:table]
28
+ end
29
+
30
+ def upsert (details)
31
+
32
+ outcome = table.insert_ignore.insert(details)
33
+
34
+ unless outcome.nil?
35
+ puts 'insert successful'
36
+ return outcome
37
+ end
38
+
39
+ puts 'possible conflict...'
40
+
41
+ columns = @database.indexes(@table_name).to_a.first.to_a[1][:columns]
42
+
43
+ selector = columns.inject({}) { |acc, key|
44
+ acc.store(key, details[key])
45
+ acc
46
+ }
47
+ p_key = primary_key
48
+ conflict_id = @database[@table_name].where(selector).first[p_key]
49
+ outcome = table.where(p_key => conflict_id).update(details)
50
+ puts 'update successful' unless outcome == 0
51
+ outcome
52
+
53
+ end
54
+
55
+ def primary_key
56
+ @database.primary_key(@table_name).to_sym
57
+ end
58
+
59
+ def table
60
+ @database[@table_name]
61
+ end
62
+
63
+ def method_missing (method, *args, &block)
64
+ @database[@table_name].send(method, *args, &block)
65
+ end
66
+
67
+ end
68
+
69
+ end
metadata ADDED
@@ -0,0 +1,57 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: flex_pg
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Eugene Lai
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sequel
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: To do
28
+ email: ejt.lai@gmail.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - lib/flex_pg.rb
34
+ homepage:
35
+ licenses: []
36
+ metadata: {}
37
+ post_install_message:
38
+ rdoc_options: []
39
+ require_paths:
40
+ - lib
41
+ required_ruby_version: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ required_rubygems_version: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: '0'
51
+ requirements: []
52
+ rubyforge_project:
53
+ rubygems_version: 2.5.2
54
+ signing_key:
55
+ specification_version: 4
56
+ summary: A powerful wrapper for Sequel postgres functions
57
+ test_files: []