mode 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +1 -0
  3. data/.travis.yml +1 -0
  4. data/bin/mode +3 -8
  5. data/lib/connect.rb +13 -0
  6. data/lib/mode.rb +18 -5
  7. data/lib/mode/api/link.rb +4 -0
  8. data/lib/mode/api/request.rb +20 -10
  9. data/lib/mode/auth/access_token.rb +16 -0
  10. data/lib/mode/cli/connect.rb +1 -1
  11. data/lib/mode/commands/analyze_field.rb +1 -3
  12. data/lib/mode/commands/connect.rb +24 -49
  13. data/lib/mode/commands/helpers.rb +23 -18
  14. data/lib/mode/commands/import.rb +2 -4
  15. data/lib/mode/commands/login.rb +88 -25
  16. data/lib/mode/config.rb +60 -2
  17. data/lib/mode/connector/connect.rb +11 -0
  18. data/lib/mode/connector/daemon.rb +54 -12
  19. data/lib/mode/connector/daemonizer.rb +107 -0
  20. data/lib/mode/connector/data_source.rb +36 -9
  21. data/lib/mode/connector/scheduler.rb +6 -5
  22. data/lib/mode/connector/uploader.rb +3 -4
  23. data/lib/mode/version.rb +1 -1
  24. data/mode.gemspec +7 -4
  25. data/spec/api/request_spec.rb +9 -6
  26. data/spec/commands/connect_spec.rb +45 -59
  27. data/spec/commands/helpers_spec.rb +9 -22
  28. data/spec/commands/import_spec.rb +5 -0
  29. data/spec/commands/login_spec.rb +87 -76
  30. data/spec/config_spec.rb +9 -0
  31. data/spec/connector/daemon_spec.rb +11 -6
  32. data/spec/connector/daemonizer_spec.rb +106 -0
  33. data/spec/connector/data_source_spec.rb +15 -17
  34. data/spec/connector/registrar_spec.rb +5 -6
  35. data/spec/connector/scheduler_spec.rb +3 -2
  36. data/spec/connector/uploader_spec.rb +9 -9
  37. metadata +65 -65
  38. data/lib/mode/configurable.rb +0 -46
  39. data/lib/mode/connector/config.rb +0 -31
  40. data/spec/connector/config_spec.rb +0 -46
@@ -26,6 +26,15 @@ describe Mode::Config do
26
26
  File.read(config.path).should == config.send(:to_yaml)
27
27
  end
28
28
 
29
+ it "should initialize with data sources" do
30
+ config = Mode::Config.init(tmpdir)
31
+ config.data_sources << Mode::Connector::DataSource.new('test', {})
32
+ config.save
33
+
34
+ config = Mode::Config.new(tmpdir)
35
+ config.data_sources.length.should == 1
36
+ end
37
+
29
38
  it "should have FILENAME" do
30
39
  Mode::Config::default_filename.should == 'config.yml'
31
40
  end
@@ -1,7 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mode::Connector::Daemon do
4
- let(:working_dir) { Dir.mktmpdir }
4
+ let(:tmpdir) { Dir.mktmpdir }
5
+ let(:config) { Mode::Config.init(tmpdir) }
6
+
7
+ let(:daemon) { Mode::Connector::Daemon.new }
5
8
  let(:scheduler) { double(:scheduler, :start! => true, :stop! => true) }
6
9
 
7
10
  before do
@@ -9,22 +12,24 @@ describe Mode::Connector::Daemon do
9
12
  end
10
13
 
11
14
  it "starts a daemon" do
12
- daemon = Mode::Connector::Daemon.new(:working_dir => working_dir)
15
+ daemon.stub(:config).and_return(config)
16
+
13
17
  Mode::Connector::Scheduler.should_receive(:new).and_return(scheduler)
14
18
 
15
19
  begin
16
- daemon.start([5, []])
20
+ daemon.start
17
21
  ensure
18
22
  daemon.stop
19
23
  end
20
24
  end
21
25
 
22
26
  it "logs errors on failure" do
23
- daemon = Mode::Connector::Daemon.new(:working_dir => working_dir)
24
- Mode::Connector::Scheduler.should_receive(:new).and_raise(StandardError.new("BREAK"))
27
+ daemon.stub(:config).and_return(config)
28
+
29
+ daemon.should_receive(:scheduler).and_raise(StandardError.new("BREAK"))
25
30
 
26
31
  Mode::Logger.instance.should_receive(:error)
27
32
 
28
- daemon.start([5, []])
33
+ daemon.start
29
34
  end
30
35
  end
@@ -0,0 +1,106 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mode::Connector::Daemonizer do
4
+ let(:tmpdir) { Dir.mktmpdir }
5
+ let(:pid_file) { File.join(tmpdir, 'connect.pid') }
6
+ let(:executable) { File.join(tmpdir, 'executable') }
7
+
8
+ before do
9
+ STDERR.stub(:puts)
10
+ STDOUT.stub(:puts)
11
+
12
+ initialize_logger
13
+ FileUtils.touch(pid_file)
14
+ FileUtils.touch(executable)
15
+ File.chmod(0755, executable)
16
+ end
17
+
18
+ it "initializes" do
19
+ daemonizer = Mode::Connector::Daemonizer.new(
20
+ :pid_file => pid_file, :executable => executable)
21
+
22
+ daemonizer.args.should == []
23
+ daemonizer.timeout.should == 10
24
+ daemonizer.pid_file.should == pid_file
25
+ daemonizer.executable.should == executable
26
+ end
27
+
28
+ describe "#alive?" do
29
+ it 'returns true if process is alive' do
30
+ daemonizer = Mode::Connector::Daemonizer.new(
31
+ :pid_file => pid_file, :executable => executable)
32
+
33
+ Process.should_receive(:kill).and_return(true)
34
+
35
+ daemonizer.alive?.should == true
36
+ end
37
+
38
+ it 'returns false if the process is dead' do
39
+ daemonizer = Mode::Connector::Daemonizer.new(
40
+ :pid_file => pid_file, :executable => executable)
41
+
42
+ Process.should_receive(:kill).and_raise(Errno::ESRCH.new)
43
+
44
+ daemonizer.alive?.should == false
45
+ end
46
+
47
+ it 'returns false if the process cannot be queried' do
48
+ daemonizer = Mode::Connector::Daemonizer.new(
49
+ :pid_file => pid_file, :executable => executable)
50
+
51
+ Process.should_receive(:kill).and_raise(Errno::EPERM.new)
52
+
53
+ daemonizer.alive?.should == false
54
+ end
55
+ end
56
+
57
+ it 'starts the daemon' do
58
+ daemonizer = Mode::Connector::Daemonizer.new(
59
+ :pid_file => pid_file, :executable => executable)
60
+ daemonizer.should_receive(:alive?).and_return(false)
61
+
62
+ Spoon.should_receive(:spawnp).with(executable).and_return(:pid)
63
+
64
+ daemonizer.start
65
+ end
66
+
67
+ it 'stops the daemon' do
68
+ daemonizer = Mode::Connector::Daemonizer.new(
69
+ :pid_file => pid_file, :executable => executable)
70
+ daemonizer.should_receive(:alive?).and_return(true, false)
71
+
72
+ Process.should_receive(:kill).with("TERM", 0).and_return(true)
73
+
74
+ daemonizer.stop
75
+ end
76
+
77
+ it "forcefully stops the daemon after timeout" do
78
+ daemonizer = Mode::Connector::Daemonizer.new(
79
+ :pid_file => pid_file, :executable => executable)
80
+
81
+ daemonizer.should_receive(:alive?).and_return(true, false)
82
+
83
+ Process.should_receive(:kill).with("KILL", 0).and_return(true)
84
+ Timeout.should_receive(:timeout).with(10).and_raise(Timeout::Error.new)
85
+
86
+ daemonizer.stop
87
+ end
88
+
89
+ it 'restarts the daemon' do
90
+ daemonizer = Mode::Connector::Daemonizer.new(
91
+ :pid_file => pid_file, :executable => executable)
92
+
93
+ daemonizer.should_receive(:stop)
94
+ daemonizer.should_receive(:start)
95
+
96
+ daemonizer.restart
97
+ end
98
+
99
+ it 'has default file paths' do
100
+ daemonizer = Mode::Connector::Daemonizer.new(
101
+ :pid_file => pid_file, :executable => executable)
102
+
103
+ daemonizer.send(:default_pid_file).should =~ /connect.pid/
104
+ daemonizer.send(:default_executable).should =~ /connect.rb/
105
+ end
106
+ end
@@ -21,6 +21,8 @@ describe Mode::Connector::DataSource do
21
21
  }
22
22
  }
23
23
 
24
+ let(:conn) { double(:conn, :extension => true) }
25
+
24
26
  it "initializes with props" do
25
27
  source = Mode::Connector::DataSource.new('dev', props)
26
28
  source.adapter.should == 'postgres'
@@ -39,35 +41,31 @@ describe Mode::Connector::DataSource do
39
41
  source.send(:connection_url).should == "postgres://postgres@localhost/warehouse"
40
42
  end
41
43
 
44
+ it 'has a jdbc connection url' do
45
+ source = Mode::Connector::DataSource.new('dev', props.merge('adapter' => 'jdbc:redshift'))
46
+ source.send(:connection_url).should == "jdbc:postgresql://localhost/warehouse?user=postgres"
47
+ end
48
+
42
49
  it "has a connection" do
43
50
  source = Mode::Connector::DataSource.new('dev', props)
44
- Sequel.should_receive(:connect).and_return(:connect)
45
- source.connection.should == :connect
51
+ Sequel.should_receive(:connect).and_return(conn)
52
+ source.connection.should == conn
46
53
  end
47
54
 
48
55
  it 'has a connection for redshift' do
49
56
  source = Mode::Connector::DataSource.new('dev', redprops)
50
- Sequel.should_receive(:connect).and_return(:connect)
51
- source.connection.should == :connect
52
- end
53
-
54
- it 'has a connection dataset' do
55
- source = Mode::Connector::DataSource.new('dev', props)
56
-
57
- dataset = double(:dataset, :with_sql => :dataset)
58
- connection = double(:connection, :dataset => dataset)
59
- Sequel.should_receive(:connect).and_return(connection)
60
- dataset = source.send(:connection_dataset, "SELECT * FROM fake")
61
-
62
- dataset.should == :dataset
57
+ Sequel.should_receive(:connect).and_return(conn)
58
+ source.connection.should == conn
63
59
  end
64
60
 
65
61
  it "fetches results from dataset" do
66
62
  source = Mode::Connector::DataSource.new('dev', props)
67
63
 
68
64
  dataset = double(:dataset)
69
- dataset.should_receive(:each).and_yield({'cnt' => 5})
70
- source.should_receive(:connection_dataset).with("SELECT 1").and_return(dataset)
65
+ connection = double(:conn, :dataset => dataset)
66
+ dataset.should_receive(:fetch_rows).with("SELECT 1").and_yield({'cnt' => 5})
67
+
68
+ source.should_receive(:connection).and_return(connection)
71
69
 
72
70
  source.select("SELECT 1") do |row|
73
71
  row['cnt'].should == 5
@@ -4,8 +4,8 @@ describe Mode::Connector::Registrar do
4
4
  let(:tmpdir) { Dir.mktmpdir }
5
5
 
6
6
  let(:username) { 'besquared' }
7
- let(:access_token) { 'access_token '}
8
- let(:config) { Mode::Connector::Config.init(tmpdir) }
7
+ let(:password) { 'token_password '}
8
+ let(:config) { Mode::Config.init(tmpdir) }
9
9
  let(:path) { Mode::API::Request.data_source_connection_path }
10
10
 
11
11
  let(:props) {
@@ -22,10 +22,9 @@ describe Mode::Connector::Registrar do
22
22
  initialize_logger
23
23
 
24
24
  Mode::API::Request.configure('test', {
25
- :port => 80,
26
- :credentials => {
27
- :username => username,
28
- :access_token => access_token
25
+ 'credentials' => {
26
+ 'username' => username,
27
+ 'password' => password
29
28
  }
30
29
  })
31
30
 
@@ -21,11 +21,12 @@ describe Mode::Connector::Scheduler do
21
21
  rufus = double(:rufus)
22
22
  Rufus::Scheduler.should_receive(:new).and_return(rufus)
23
23
 
24
- rufus.should_receive(:every).and_return(true)
24
+ rufus.should_receive(:interval).and_return(true)
25
25
  rufus.should_receive(:join).and_return(true)
26
26
  rufus.should_receive(:stop).and_return(true)
27
27
 
28
- Sequel.should_receive(:connect).and_return(:connect)
28
+ conn = double(:conn, :extension => true)
29
+ Sequel.should_receive(:connect).and_return(conn)
29
30
 
30
31
  scheduler = Mode::Connector::Scheduler.new(data_sources)
31
32
 
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe Mode::Connector::Uploader do
4
4
  let(:tmpdir) { Dir.mktmpdir }
5
5
  let(:outpath) { File.join(tmpdir, 'data.csv') }
6
- let(:execution_path) { Mode::API::Request.data_source_connection_path }
6
+ let(:runs_path) { Mode::API::Request.data_source_connection_path }
7
7
 
8
8
  let(:dataset) {
9
9
  double(:dataset,
@@ -13,7 +13,7 @@ describe Mode::Connector::Uploader do
13
13
  'int' => :integer,
14
14
  'float' => :number
15
15
  }
16
- )
16
+ )
17
17
  }
18
18
 
19
19
  before do
@@ -22,15 +22,15 @@ describe Mode::Connector::Uploader do
22
22
  end
23
23
 
24
24
  it "initializes with a dataset" do
25
- uploader = Mode::Connector::Uploader.new(execution_path, dataset)
25
+ uploader = Mode::Connector::Uploader.new(runs_path, dataset)
26
26
  uploader.dataset.should_not == nil
27
27
  end
28
28
 
29
29
  it "sends a dataset and columns" do
30
- uploader = Mode::Connector::Uploader.new(execution_path, dataset)
30
+ uploader = Mode::Connector::Uploader.new(runs_path, dataset)
31
31
 
32
- Mode::API::Request.should_receive(:put).with(execution_path,
33
- :execution => {
32
+ Mode::API::Request.should_receive(:put).with(runs_path,
33
+ :report_run => {
34
34
  :dataset => {
35
35
  :count => 0,
36
36
  :columns => an_instance_of(String),
@@ -43,8 +43,8 @@ describe Mode::Connector::Uploader do
43
43
  end
44
44
 
45
45
  it "sends error message and detail" do
46
- Mode::API::Request.should_receive(:put).with(execution_path,
47
- :execution => {
46
+ Mode::API::Request.should_receive(:put).with(runs_path,
47
+ :report_run => {
48
48
  :error => {
49
49
  :message => "message",
50
50
  :detail => "detailed"
@@ -52,6 +52,6 @@ describe Mode::Connector::Uploader do
52
52
  }
53
53
  )
54
54
 
55
- Mode::Connector::Uploader.send(:error!, execution_path, "message", "detailed")
55
+ Mode::Connector::Uploader.send(:error!, runs_path, "message", "detailed")
56
56
  end
57
57
  end
metadata CHANGED
@@ -1,225 +1,225 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mode
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mode Analytics
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-20 00:00:00.000000000 Z
11
+ date: 2014-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
15
+ version_requirements: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
15
20
  requirement: !ruby/object:Gem::Requirement
16
21
  requirements:
17
22
  - - '>='
18
23
  - !ruby/object:Gem::Version
19
24
  version: '0'
20
- type: :runtime
21
25
  prerelease: false
26
+ type: :runtime
27
+ - !ruby/object:Gem::Dependency
28
+ name: terminal-table
22
29
  version_requirements: !ruby/object:Gem::Requirement
23
30
  requirements:
24
31
  - - '>='
25
32
  - !ruby/object:Gem::Version
26
33
  version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: terminal-table
29
34
  requirement: !ruby/object:Gem::Requirement
30
35
  requirements:
31
36
  - - '>='
32
37
  - !ruby/object:Gem::Version
33
38
  version: '0'
34
- type: :runtime
35
39
  prerelease: false
40
+ type: :runtime
41
+ - !ruby/object:Gem::Dependency
42
+ name: data_kit
36
43
  version_requirements: !ruby/object:Gem::Requirement
37
44
  requirements:
38
45
  - - '>='
39
46
  - !ruby/object:Gem::Version
40
47
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: data_kit
43
48
  requirement: !ruby/object:Gem::Requirement
44
49
  requirements:
45
50
  - - '>='
46
51
  - !ruby/object:Gem::Version
47
52
  version: '0'
48
- type: :runtime
49
53
  prerelease: false
54
+ type: :runtime
55
+ - !ruby/object:Gem::Dependency
56
+ name: data_package
50
57
  version_requirements: !ruby/object:Gem::Requirement
51
58
  requirements:
52
59
  - - '>='
53
60
  - !ruby/object:Gem::Version
54
61
  version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: data_package
57
62
  requirement: !ruby/object:Gem::Requirement
58
63
  requirements:
59
64
  - - '>='
60
65
  - !ruby/object:Gem::Version
61
66
  version: '0'
62
- type: :runtime
63
67
  prerelease: false
68
+ type: :runtime
69
+ - !ruby/object:Gem::Dependency
70
+ name: faraday
64
71
  version_requirements: !ruby/object:Gem::Requirement
65
72
  requirements:
66
73
  - - '>='
67
74
  - !ruby/object:Gem::Version
68
75
  version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: faraday
71
76
  requirement: !ruby/object:Gem::Requirement
72
77
  requirements:
73
78
  - - '>='
74
79
  - !ruby/object:Gem::Version
75
80
  version: '0'
76
- type: :runtime
77
81
  prerelease: false
82
+ type: :runtime
83
+ - !ruby/object:Gem::Dependency
84
+ name: uri_template
78
85
  version_requirements: !ruby/object:Gem::Requirement
79
86
  requirements:
80
87
  - - '>='
81
88
  - !ruby/object:Gem::Version
82
89
  version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: uri_template
85
90
  requirement: !ruby/object:Gem::Requirement
86
91
  requirements:
87
92
  - - '>='
88
93
  - !ruby/object:Gem::Version
89
94
  version: '0'
90
- type: :runtime
91
95
  prerelease: false
96
+ type: :runtime
97
+ - !ruby/object:Gem::Dependency
98
+ name: sequel
92
99
  version_requirements: !ruby/object:Gem::Requirement
93
100
  requirements:
94
101
  - - '>='
95
102
  - !ruby/object:Gem::Version
96
103
  version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: sequel
99
104
  requirement: !ruby/object:Gem::Requirement
100
105
  requirements:
101
106
  - - '>='
102
107
  - !ruby/object:Gem::Version
103
108
  version: '0'
104
- type: :runtime
105
109
  prerelease: false
110
+ type: :runtime
111
+ - !ruby/object:Gem::Dependency
112
+ name: spoon
106
113
  version_requirements: !ruby/object:Gem::Requirement
107
114
  requirements:
108
115
  - - '>='
109
116
  - !ruby/object:Gem::Version
110
117
  version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: daemon-spawn
113
118
  requirement: !ruby/object:Gem::Requirement
114
119
  requirements:
115
120
  - - '>='
116
121
  - !ruby/object:Gem::Version
117
122
  version: '0'
118
- type: :runtime
119
123
  prerelease: false
124
+ type: :runtime
125
+ - !ruby/object:Gem::Dependency
126
+ name: rufus-scheduler
120
127
  version_requirements: !ruby/object:Gem::Requirement
121
128
  requirements:
122
129
  - - '>='
123
130
  - !ruby/object:Gem::Version
124
131
  version: '0'
125
- - !ruby/object:Gem::Dependency
126
- name: rufus-scheduler
127
132
  requirement: !ruby/object:Gem::Requirement
128
133
  requirements:
129
134
  - - '>='
130
135
  - !ruby/object:Gem::Version
131
136
  version: '0'
132
- type: :runtime
133
137
  prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - '>='
137
- - !ruby/object:Gem::Version
138
- version: '0'
138
+ type: :runtime
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: bundler
141
- requirement: !ruby/object:Gem::Requirement
141
+ version_requirements: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - ~>
144
144
  - !ruby/object:Gem::Version
145
145
  version: '1.3'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
146
+ requirement: !ruby/object:Gem::Requirement
149
147
  requirements:
150
148
  - - ~>
151
149
  - !ruby/object:Gem::Version
152
150
  version: '1.3'
151
+ prerelease: false
152
+ type: :development
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: rake
155
+ version_requirements: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
155
160
  requirement: !ruby/object:Gem::Requirement
156
161
  requirements:
157
162
  - - '>='
158
163
  - !ruby/object:Gem::Version
159
164
  version: '0'
160
- type: :development
161
165
  prerelease: false
166
+ type: :development
167
+ - !ruby/object:Gem::Dependency
168
+ name: profile
162
169
  version_requirements: !ruby/object:Gem::Requirement
163
170
  requirements:
164
171
  - - '>='
165
172
  - !ruby/object:Gem::Version
166
173
  version: '0'
167
- - !ruby/object:Gem::Dependency
168
- name: profile
169
174
  requirement: !ruby/object:Gem::Requirement
170
175
  requirements:
171
176
  - - '>='
172
177
  - !ruby/object:Gem::Version
173
178
  version: '0'
174
- type: :development
175
179
  prerelease: false
180
+ type: :development
181
+ - !ruby/object:Gem::Dependency
182
+ name: rspec
176
183
  version_requirements: !ruby/object:Gem::Requirement
177
184
  requirements:
178
185
  - - '>='
179
186
  - !ruby/object:Gem::Version
180
187
  version: '0'
181
- - !ruby/object:Gem::Dependency
182
- name: rspec
183
188
  requirement: !ruby/object:Gem::Requirement
184
189
  requirements:
185
190
  - - '>='
186
191
  - !ruby/object:Gem::Version
187
192
  version: '0'
188
- type: :development
189
193
  prerelease: false
194
+ type: :development
195
+ - !ruby/object:Gem::Dependency
196
+ name: simplecov
190
197
  version_requirements: !ruby/object:Gem::Requirement
191
198
  requirements:
192
199
  - - '>='
193
200
  - !ruby/object:Gem::Version
194
201
  version: '0'
195
- - !ruby/object:Gem::Dependency
196
- name: ruby-prof
197
202
  requirement: !ruby/object:Gem::Requirement
198
203
  requirements:
199
204
  - - '>='
200
205
  - !ruby/object:Gem::Version
201
206
  version: '0'
202
- type: :development
203
207
  prerelease: false
208
+ type: :development
209
+ - !ruby/object:Gem::Dependency
210
+ name: warbler
204
211
  version_requirements: !ruby/object:Gem::Requirement
205
212
  requirements:
206
213
  - - '>='
207
214
  - !ruby/object:Gem::Version
208
215
  version: '0'
209
- - !ruby/object:Gem::Dependency
210
- name: simplecov
211
216
  requirement: !ruby/object:Gem::Requirement
212
217
  requirements:
213
218
  - - '>='
214
219
  - !ruby/object:Gem::Version
215
220
  version: '0'
216
- type: :development
217
221
  prerelease: false
218
- version_requirements: !ruby/object:Gem::Requirement
219
- requirements:
220
- - - '>='
221
- - !ruby/object:Gem::Version
222
- version: '0'
222
+ type: :development
223
223
  description: CLI and Libraries for Mode Analytics
224
224
  email:
225
225
  - support@modeanalytics.com
@@ -236,6 +236,7 @@ files:
236
236
  - README.md
237
237
  - Rakefile
238
238
  - bin/mode
239
+ - lib/connect.rb
239
240
  - lib/mode.rb
240
241
  - lib/mode/api/form.rb
241
242
  - lib/mode/api/link.rb
@@ -257,9 +258,9 @@ files:
257
258
  - lib/mode/commands/import.rb
258
259
  - lib/mode/commands/login.rb
259
260
  - lib/mode/config.rb
260
- - lib/mode/configurable.rb
261
- - lib/mode/connector/config.rb
261
+ - lib/mode/connector/connect.rb
262
262
  - lib/mode/connector/daemon.rb
263
+ - lib/mode/connector/daemonizer.rb
263
264
  - lib/mode/connector/data_source.rb
264
265
  - lib/mode/connector/dataset.rb
265
266
  - lib/mode/connector/message.rb
@@ -285,8 +286,8 @@ files:
285
286
  - spec/commands/import_spec.rb
286
287
  - spec/commands/login_spec.rb
287
288
  - spec/config_spec.rb
288
- - spec/connector/config_spec.rb
289
289
  - spec/connector/daemon_spec.rb
290
+ - spec/connector/daemonizer_spec.rb
290
291
  - spec/connector/data_source_spec.rb
291
292
  - spec/connector/message_spec.rb
292
293
  - spec/connector/poller_spec.rb
@@ -311,7 +312,7 @@ homepage: http://www.modeanalytics.com/
311
312
  licenses:
312
313
  - MIT
313
314
  metadata: {}
314
- post_install_message:
315
+ post_install_message:
315
316
  rdoc_options: []
316
317
  require_paths:
317
318
  - lib
@@ -326,12 +327,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
326
327
  - !ruby/object:Gem::Version
327
328
  version: '0'
328
329
  requirements: []
329
- rubyforge_project:
330
- rubygems_version: 2.0.14
331
- signing_key:
330
+ rubyforge_project:
331
+ rubygems_version: 2.1.9
332
+ signing_key:
332
333
  specification_version: 4
333
- summary: Provides a command line interface and ruby libraries to the Mode Analytics
334
- Service
334
+ summary: Provides a command line interface and ruby libraries to the Mode Analytics Service
335
335
  test_files:
336
336
  - spec/api/form_spec.rb
337
337
  - spec/api/link_spec.rb
@@ -345,8 +345,8 @@ test_files:
345
345
  - spec/commands/import_spec.rb
346
346
  - spec/commands/login_spec.rb
347
347
  - spec/config_spec.rb
348
- - spec/connector/config_spec.rb
349
348
  - spec/connector/daemon_spec.rb
349
+ - spec/connector/daemonizer_spec.rb
350
350
  - spec/connector/data_source_spec.rb
351
351
  - spec/connector/message_spec.rb
352
352
  - spec/connector/poller_spec.rb