redshift-client 0.1.2 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 57e6fbf69de3d525922584318839428a561a0f6b
4
- data.tar.gz: f66fd482e6d7f9c6edce75a631797e5fd18164b6
3
+ metadata.gz: 07134341d34da433891d4a6fabe9c092d09973a1
4
+ data.tar.gz: 1fffad0d484638978060447997fdc977d0cb2aa3
5
5
  SHA512:
6
- metadata.gz: 83b406edb33a22f17bd980c97261aea3b6a7e0a4ee28c48c888f4ca2418b04952e986a11b5874b5cf0fe9fb2259755e4e4cd77c4a03d7be281a799b6a1a0236f
7
- data.tar.gz: abbe01a0b47e299370ffd150d9fd02c788bfe78a01a1b1ab17769644e80f3c232501a81c0bba784301ca0e190e49e3e3f116736e2432c7dc29c6a99b1a985b77
6
+ metadata.gz: 6c4f6be049d2d7d848367c892624fa67dc64e63f725186a9005dea738d63d7ca5ab2d4f73957ee3f13ea24654b4bfafc9368414b70900c6d86fd11593e8ca983
7
+ data.tar.gz: 1266a3424362a90776b32832de19008f8be05b161bd5205e43ab28f4adab02dd0599e527d1c09d476c98b2f743700bbe754b9ca1891eb83d65066cecb7c0a117
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Redshift::Client [![Build Status](https://travis-ci.org/dakatsuka/redshift-client.svg)](https://travis-ci.org/dakatsuka/redshift-client) [![Gem Version](https://badge.fury.io/rb/redshift-client.svg)](https://badge.fury.io/rb/redshift-client)
2
2
 
3
- The ruby client for AWS Redshift.
3
+ This gem provides a way to connect to AWS Redshift using the [ruby-pg](https://github.com/ged/ruby-pg).
4
4
 
5
5
  ## Installation
6
6
 
@@ -12,7 +12,7 @@ gem 'redshift-client'
12
12
 
13
13
  And then execute:
14
14
 
15
- $ bundle
15
+ $ bundle install
16
16
 
17
17
  Or install it yourself as:
18
18
 
@@ -20,19 +20,27 @@ Or install it yourself as:
20
20
 
21
21
  ## Usage
22
22
 
23
- Please set `REDSHIFT_URL` Env.
23
+ ### Using with your application
24
+
25
+ ```ruby
26
+ require 'rubygems'
27
+ require 'redshift/client'
28
+ ```
29
+
30
+ After that you configure the url of Redshift:
24
31
 
25
32
  ```
26
33
  $ export REDSHIFT_URL="redshift://user:password@*****.region.redshift.amazonaws.com:5439/dbname"
27
34
  ```
28
35
 
29
- ```ruby
30
- require 'redshift/client'
36
+ Please refer to the following code:
31
37
 
38
+ ```ruby
32
39
  Redshift::Client.establish_connection
33
- Redshift::Client.connection # instance of PG::Connection
34
40
 
35
- Redshift::Client.connection.exec("SELECT GETDATE()").first # => {"getdate"=>"2015-10-08 05:17:40"}
41
+ Redshift::Client.connection
42
+ Redshift::Client.connection.exec("SELECT GETDATE()").first # delegate to PG::Connection
43
+ # => {"getdate"=>"2015-10-08 05:17:40"}
36
44
  ```
37
45
 
38
46
  ## Development
@@ -43,7 +51,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
43
51
 
44
52
  ## Contributing
45
53
 
46
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/redshift-client. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](contributor-covenant.org) code of conduct.
54
+ Bug reports and pull requests are welcome on GitHub at https://github.com/dakatsuka/redshift-client. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](contributor-covenant.org) code of conduct.
47
55
 
48
56
 
49
57
  ## License
@@ -1,6 +1,7 @@
1
1
  require "redshift/client/version"
2
2
  require "redshift/client/errors"
3
3
  require "redshift/client/configuration"
4
+ require "redshift/client/connection"
4
5
  require "redshift/client/connection_handling"
5
6
 
6
7
  module Redshift
@@ -1,9 +1,11 @@
1
+ require 'uri'
2
+
1
3
  module Redshift
2
4
  module Client
3
5
  class Configuration
4
6
  attr_reader :host, :port, :user, :password, :dbname
5
7
 
6
- def self.parse(config)
8
+ def self.resolve(config = {})
7
9
  if config.empty?
8
10
  url = URI.parse(ENV["REDSHIFT_URL"])
9
11
  self.new(url.host, url.port, url.user, url.password, url.path[1..-1])
@@ -22,7 +24,7 @@ module Redshift
22
24
  @dbname = dbname
23
25
  end
24
26
 
25
- def to_hash
27
+ def params
26
28
  {
27
29
  host: @host,
28
30
  port: @port,
@@ -0,0 +1,23 @@
1
+ require 'pg'
2
+ require 'active_support/core_ext/module'
3
+
4
+ module Redshift
5
+ module Client
6
+ class Connection
7
+ attr_reader :original
8
+
9
+ def initialize(configuration)
10
+ @original = PG.connect(configuration.params)
11
+ end
12
+
13
+ delegate \
14
+ :exec,
15
+ :exec_params,
16
+ :escape,
17
+ :escape_string,
18
+ :escape_literal,
19
+ :close,
20
+ to: :original
21
+ end
22
+ end
23
+ end
@@ -1,61 +1,54 @@
1
- require 'pg'
2
- require 'uri'
1
+ require 'thread'
3
2
  require 'active_support/lazy_load_hooks'
4
3
 
5
4
  module Redshift
6
5
  module Client
7
6
  module ConnectionHandling
8
- def establish_connection(config = {})
9
- disconnect
10
- initialize_thread!
11
- configure!(config)
7
+ def establish_connection(config= {})
8
+ clear_connection!
9
+ clear_thread!
10
+
11
+ current[:configuration] = Configuration.resolve(config)
12
12
  end
13
13
 
14
- def disconnect
15
- if connected?
16
- connection.finish
17
- cleanup!
18
- end
14
+ def connection
15
+ return current[:connection] if connected?
16
+
17
+ ActiveSupport.run_load_hooks :redshift_client_connection
18
+
19
+ check_established!
20
+ current[:connection] = Connection.new(current[:configuration])
21
+ current[:connection]
19
22
  end
20
23
 
21
- def connected?
22
- !!(thread && thread[:connection])
24
+ def disconnect
25
+ clear_connection!
23
26
  end
24
27
 
25
28
  def established?
26
- !!(thread && thread[:configurations])
29
+ !! current[:configuration]
27
30
  end
28
31
 
29
- def connection
30
- ActiveSupport.run_load_hooks :redshift_client_connection unless established?
31
-
32
- if connected?
33
- thread[:connection]
34
- else
35
- connect!
36
- end
32
+ def connected?
33
+ !! current[:connection]
37
34
  end
38
35
 
39
36
  private
40
- def initialize_thread!
41
- Thread.current[:redshift] = {}
42
- end
43
-
44
- def cleanup!
45
- Thread.current[:redshift][:connection] = nil
37
+ def check_established!
38
+ raise ConnectionNotEstablished.new unless established?
46
39
  end
47
40
 
48
- def thread
49
- Thread.current[:redshift]
41
+ def clear_connection!
42
+ current[:connection] && current[:connection].close
43
+ current[:connection] = nil
50
44
  end
51
45
 
52
- def connect!
53
- raise ConnectionNotEstablished.new unless established?
54
- thread[:connection] = PG.connect(thread[:configurations].to_hash)
46
+ def clear_thread!
47
+ Thread.current[:redshift] = nil
55
48
  end
56
49
 
57
- def configure!(config)
58
- thread[:configurations] = Configuration.parse(config)
50
+ def current
51
+ Thread.current[:redshift] ||= {}
59
52
  end
60
53
  end
61
54
  end
@@ -1,5 +1,5 @@
1
1
  module Redshift
2
2
  module Client
3
- VERSION = "0.1.2"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
9
9
  spec.email = ["d.akatsuka@gmail.com"]
10
10
 
11
11
  spec.summary = %q{The ruby client for AWS Redshift.}
12
- spec.description = %q{The ruby client for AWS Redshift.}
12
+ spec.description = %q{This gem provides a way to connect to AWS Redshift using the ruby-pg.}
13
13
  spec.homepage = "https://github.com/dakatsuka/redshift-client"
14
14
  spec.license = "MIT"
15
15
 
@@ -59,8 +59,8 @@ describe Redshift::Client do
59
59
  Redshift::Client.establish_connection
60
60
  end
61
61
 
62
- it "returns PG::Connection" do
63
- expect(Redshift::Client.connection).to be_instance_of PG::Connection
62
+ it "returns an instance of connection" do
63
+ expect(Redshift::Client.connection).to be_instance_of Redshift::Client::Connection
64
64
  end
65
65
  end
66
66
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redshift-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dai Akatsuka
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-10-08 00:00:00.000000000 Z
11
+ date: 2015-10-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pg
@@ -80,7 +80,7 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
- description: The ruby client for AWS Redshift.
83
+ description: This gem provides a way to connect to AWS Redshift using the ruby-pg.
84
84
  email:
85
85
  - d.akatsuka@gmail.com
86
86
  executables: []
@@ -98,6 +98,7 @@ files:
98
98
  - bin/setup
99
99
  - lib/redshift/client.rb
100
100
  - lib/redshift/client/configuration.rb
101
+ - lib/redshift/client/connection.rb
101
102
  - lib/redshift/client/connection_handling.rb
102
103
  - lib/redshift/client/errors.rb
103
104
  - lib/redshift/client/version.rb