mode 0.0.8 → 0.0.9

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: 03a5f9840967c0b0a7b461ff7ebbef1ceee872f6
4
- data.tar.gz: d207b4e636caaf13e1c43ae76aa86e556aba7825
3
+ metadata.gz: e7d69ae05d944f46182074adaa084e4b22454862
4
+ data.tar.gz: 111e422dca6963652e892f4543f6b91d13d4bf1e
5
5
  SHA512:
6
- metadata.gz: da0837b3b8b33c55de80fba1d1ecfc2b16dc47831658f5fee2da7387bff8fba4ea6022a3732b30b020fe8379a66624a8bfd9b53e31d006850eba8a17a3301fda
7
- data.tar.gz: 2aff0e732ef9fa57dfec9702e41b14c3377a6a8fe3eded36e05c17c0d7e4a0ae82102b8cab4778878a0b6f8bfaee7d724987ec7f045e92a8cb7a789a70a81243
6
+ metadata.gz: f33ca37d31a1966328a8dadaef02eb0337aac0fcd28be3473b8d21ee50f777023132cfa886641a96b97804bc6d18e640c1bc3f6f101b9d7cc6344158f30a3acd
7
+ data.tar.gz: df765cb61dd992ec67ce3cd3fe11a04a65d8d45927ca0cb43a6ffa338a487211e5421e2fd24525e53d8c962671597bb34280b54c8ddf2eb594e6b39a5777502d
@@ -1,11 +1,20 @@
1
1
  module Mode
2
2
  module CLI
3
3
  class Base < Thor
4
- desc "connect start|stop|restart [-c CONCURRENCY]", "Connect external databases to Mode"
4
+ desc "connect COMMAND [-c CONCURRENCY]", "Connect external databases to Mode"
5
+ long_desc <<-LONGDESC
6
+ The connect command allows you to connect external databases to Mode's cloud tools.
7
+ This will make the data in these databases queryable and the schemas indexed and searchable.
8
+
9
+ Support values for COMMAND: start, stop, restart, status, verify
10
+ LONGDESC
5
11
  option :concurrency, :aliases => :c, :default => 4
6
12
  option :host, :default => 'www.modeanalytics.com'
7
- def connect(command)
8
- if ['start', 'stop', 'restart'].include?(command)
13
+ def connect(command = 'start')
14
+ if command == 'verify'
15
+ Mode::Commands::Connect.new(command, options).verify!
16
+ say "Success! All config and connectivity checks passed"
17
+ elsif ['start', 'status', 'stop', 'restart'].include?(command)
9
18
  Mode::Commands::Connect.new(command, options).execute
10
19
  else
11
20
  say "Error: valid commands for connect are start, stop and restart"
@@ -6,31 +6,44 @@ module Mode
6
6
 
7
7
  attr_reader :command
8
8
  attr_reader :concurrency
9
- attr_reader :configuration
10
9
 
11
10
  def initialize(command, options = {})
12
11
  @command = command
13
12
  @concurrency = options[:concurrency] || 4
14
-
15
- validate!
16
-
17
- @configuration = Mode::Connector::Config.new(config_dir)
18
13
  end
19
14
 
20
15
  def execute
16
+ validate_config!
21
17
  register! if ['start', 'restart'].include?(command)
22
18
  spawn!
23
19
  end
24
20
 
21
+ def verify!
22
+ validate_config!
23
+ configuration.data_sources.each do |data_source|
24
+ begin
25
+ unless data_source.connection.test_connection
26
+ raise StandardError.new("Unknown connection error")
27
+ end
28
+ rescue => err
29
+ raise "Error: Cannot connect to #{data_source.name}. #{err.message}"
30
+ end
31
+ end
32
+ end
33
+
25
34
  private
26
35
 
27
- def validate!
36
+ def validate_config!
28
37
  require_config!
29
38
  require_credentials!
30
39
  require_connect_config!
31
40
  configure_api_requests!
32
41
  end
33
42
 
43
+ def configuration
44
+ @configuration ||= Mode::Connector::Config.new(config_dir)
45
+ end
46
+
34
47
  def register!
35
48
  Mode::Connector::Registrar.new(configuration).perform!
36
49
  end
@@ -38,7 +51,7 @@ module Mode
38
51
  def spawn!
39
52
  if command == 'restart'
40
53
  spawn_restart!
41
- elsif ['stop', 'start'].include?(command)
54
+ elsif ['stop', 'status', 'start'].include?(command)
42
55
  spawn_command!(command)
43
56
  else
44
57
  raise "Unknown command #{command}"
@@ -65,7 +65,6 @@ module Mode
65
65
 
66
66
  if redshift?
67
67
  opts.merge!({
68
- :sslmode => ssl_mode,
69
68
  :client_min_messages => '',
70
69
  :force_standard_strings => false
71
70
  })
@@ -78,10 +77,16 @@ module Mode
78
77
  opts
79
78
  end
80
79
 
80
+ def port_segment
81
+ port.nil? ? nil : ":#{port}"
82
+ end
83
+
84
+ def password_segment
85
+ password.nil? ? nil : ":#{password}"
86
+ end
87
+
81
88
  def connection_url
82
- port_segment = port.nil? ? nil : ":#{port}"
83
- password_segment = password.nil? ? nil : ":#{password}"
84
- "#{adapter}://#{username}#{password_segment}@#{host}#{port_segment}/#{database}"
89
+ "#{adapter}://#{username}#{password_segment}@#{host}#{port_segment}/#{database}"
85
90
  end
86
91
 
87
92
  def connection_dataset(query)
@@ -1,3 +1,3 @@
1
1
  module Mode
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
@@ -2,8 +2,19 @@ require 'spec_helper'
2
2
 
3
3
  describe Mode::Commands::Connect do
4
4
  let(:tmpdir) { Dir.mktmpdir }
5
- let(:config) { Mode::Connector::Config.init(tmpdir) }
6
-
5
+ let(:config) { Mode::Config.init(tmpdir) }
6
+ let(:connect_config) { Mode::Connector::Config.init(tmpdir) }
7
+
8
+ let(:data_source) {
9
+ Mode::Connector::DataSource.new('testdb', {
10
+ 'adapter' => 'postgres',
11
+ 'host' => 'localhost',
12
+ 'username' => 'postgres',
13
+ 'database' => 'warehouse',
14
+ 'password' => nil
15
+ })
16
+ }
17
+
7
18
  before do
8
19
  initialize_logger
9
20
  end
@@ -13,12 +24,11 @@ describe Mode::Commands::Connect do
13
24
 
14
25
  connect.command.should == 'start'
15
26
  connect.concurrency.should == 4
16
- connect.configuration.should_not == nil
17
27
  end
18
28
 
19
29
  it "registers connector" do
20
30
  connect = Mode::Commands::Connect.new('start')
21
-
31
+
22
32
  registrar = double(:registrar, :perform! => true)
23
33
  Mode::Connector::Registrar.should_receive(:new).and_return(registrar)
24
34
 
@@ -43,6 +53,7 @@ describe Mode::Commands::Connect do
43
53
 
44
54
  it 'spawns with the start command' do
45
55
  connect = Mode::Commands::Connect.new('start')
56
+
46
57
  Mode::Connector::Daemon.should_receive(:spawn!).and_return(true)
47
58
 
48
59
  connect.send(:spawn!)
@@ -50,6 +61,7 @@ describe Mode::Commands::Connect do
50
61
 
51
62
  it 'spawns with the restart command' do
52
63
  connect = Mode::Commands::Connect.new('restart')
64
+
53
65
  Mode::Connector::Daemon.should_receive(:spawn!).twice.and_return(true)
54
66
 
55
67
  connect.send(:spawn!)
@@ -57,6 +69,7 @@ describe Mode::Commands::Connect do
57
69
 
58
70
  it 'spawns with the stop command' do
59
71
  connect = Mode::Commands::Connect.new('stop')
72
+
60
73
  Mode::Connector::Daemon.should_receive(:spawn!).and_return(true)
61
74
 
62
75
  connect.send(:spawn!)
@@ -64,6 +77,7 @@ describe Mode::Commands::Connect do
64
77
 
65
78
  it 'raises on spawn if the command is unrecognized' do
66
79
  connect = Mode::Commands::Connect.new('fake')
80
+
67
81
  Mode::Connector::Daemon.should_not_receive(:spawn!)
68
82
 
69
83
  expect { connect.send(:spawn!) }.to raise_error
@@ -77,4 +91,34 @@ describe Mode::Commands::Connect do
77
91
 
78
92
  connect.execute
79
93
  end
94
+
95
+ it 'verifies configuration and connectivity' do
96
+ connect = Mode::Commands::Connect.new('verify')
97
+
98
+ connect.stub(:config_dir).and_return(tmpdir)
99
+ connect.should_receive(:validate_config!).and_return(true)
100
+
101
+ conn = double(:conn, :test_connection => true)
102
+ sources = double(:source, :connection => conn)
103
+ config = double(:config, :data_sources => [sources])
104
+
105
+ connect.should_receive(:configuration).and_return(config)
106
+
107
+ connect.verify!
108
+ end
109
+
110
+ it 'should raise if a connection fails to connect' do
111
+ connect = Mode::Commands::Connect.new('verify')
112
+
113
+ connect.stub(:config_dir).and_return(tmpdir)
114
+ connect.should_receive(:validate_config!).and_return(true)
115
+
116
+ conn = double(:conn, :test_connection => false)
117
+ sources = double(:source, :name => 'name', :connection => conn)
118
+ config = double(:config, :data_sources => [sources])
119
+
120
+ connect.should_receive(:configuration).and_return(config)
121
+
122
+ expect { connect.verify! }.to raise_error
123
+ end
80
124
  end
@@ -168,6 +168,7 @@ describe Mode::Commands::Login do
168
168
  command = Mode::Commands::Login.new(:test => true)
169
169
  Mode::API::Request.should_receive(:get).with(:access_tokens).and_return(tokens_resource)
170
170
 
171
+ command.stub(:say)
171
172
  command.should_receive(:ask).and_return("2")
172
173
 
173
174
  chosen_token = command.send(:choose_access_token)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mode
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mode Analytics
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-19 00:00:00.000000000 Z
11
+ date: 2014-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor