slacker 1.0.15 → 1.0.16

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: 3a49d641b5a1472c597ad1d9e43cd77d5123b8ff
4
- data.tar.gz: 155efc3e2c4a0edf77d068bc0671cd4426b98c80
3
+ metadata.gz: e066024e6fc217c813e00bb3554ac60bf89dac3f
4
+ data.tar.gz: a51a29aeea274ca3324f483d285cc3fc4d807a97
5
5
  SHA512:
6
- metadata.gz: 6cd59135f982ce7e95a99c4aba462dbb494e06414d8cb8c3e98e2c935fbd65272ab365bc4f3a52df985bf8f97bf318db6442482cb8692dfe24ca93904502f56c
7
- data.tar.gz: 4be6cfd40fce2b90c6a51759ec1e302473a9688e86c77ccb37a1e176c83c8ba6fc06a7fbd4f2a62539bc3bf2f5a4decc81ad3413a78c0ceb88b2bfa2515bdc1e
6
+ metadata.gz: e0f12d147aa478cf430eae96ce578956602d87fae99b3df3b5ebbf9528a3b53edf6a6d7afe208b4e79cd41e68f58dc94e828ecdd362df950e120c288bc9c4f29
7
+ data.tar.gz: d11db9e0dd45aa62ffbca4033ac6db5cc64433e31ad745aa9c970b486749496d33e97686564c4f83fdc46367b29f6264672b0a6531a9237f685b47c297d1250a
data/bin/slacker CHANGED
@@ -23,6 +23,12 @@ Slacker.configure do |config|
23
23
  config.db_name = db_config["database"]
24
24
  config.db_user = db_config["user"]
25
25
  config.db_password = db_config["password"]
26
+ if !!db_config["port"]
27
+ config.db_port = db_config["port"]
28
+ end
29
+ if !!db_config["driver"]
30
+ config.db_driver = db_config["driver"]
31
+ end
26
32
  end
27
33
 
28
34
  if Slacker.application.run
@@ -5,6 +5,7 @@ require 'slacker/rspec_monkey'
5
5
  require 'slacker/rspec_ext'
6
6
  require 'slacker/string_helper'
7
7
  require 'odbc'
8
+ require 'tiny_tds'
8
9
 
9
10
  module Slacker
10
11
  class Application
@@ -25,12 +26,18 @@ set ansi_nulls on;
25
26
  set concat_null_yields_null on;
26
27
  EOF
27
28
 
29
+ ODBC_DRIVER = 'odbc'
30
+ TINYTDS_DRIVER = 'tiny_tds'
31
+
28
32
  def initialize(configuration)
29
33
  @configuration = configuration
30
34
  @temp_folders = ['debug/passed_examples', 'debug/failed_examples']
31
35
  @target_folder_structure = ['data', 'debug/passed_examples', 'debug/failed_examples', 'sql', 'spec', 'lib', 'lib/helpers']
32
36
  @error_message = ''
33
- @database = ODBC::Database.new
37
+ case @configuration.db_driver
38
+ when ODBC_DRIVER
39
+ @database = ODBC::Database.new
40
+ end
34
41
  end
35
42
 
36
43
  def print_connection_message
@@ -49,8 +56,8 @@ EOF
49
56
  run_rspec
50
57
  false # Return false to be stored in error (effectively indicating no error).
51
58
  end
52
- ensure
53
- cleanup_after_run
59
+ ensure
60
+ cleanup_after_run
54
61
  end
55
62
 
56
63
  if @configuration.console_enabled
@@ -73,13 +80,23 @@ EOF
73
80
 
74
81
  # Configure Slacker
75
82
  def configure
76
- configure_db
83
+ case @configuration.db_driver
84
+ when ODBC_DRIVER
85
+ configure_db_odbc
86
+ when TINYTDS_DRIVER
87
+ configure_db_tiny_tds
88
+ end
77
89
  configure_rspec
78
90
  configure_misc
79
91
  end
80
92
 
81
93
  def cleanup_after_run
82
- @database.disconnect if (@database && @database.connected?)
94
+ case @configuration.db_driver
95
+ when ODBC_DRIVER
96
+ @database.disconnect if (@database && @database.connected?)
97
+ when TINYTDS_DRIVER
98
+ @database.close if (@database && @database.active?)
99
+ end
83
100
  end
84
101
 
85
102
  def cleanup_folders
@@ -121,7 +138,7 @@ EOF
121
138
  end
122
139
 
123
140
  # Configure database connection
124
- def configure_db
141
+ def configure_db_odbc
125
142
  drv = ODBC::Driver.new
126
143
  drv.name = 'Driver1'
127
144
  drv.attrs.tap do |a|
@@ -140,8 +157,27 @@ EOF
140
157
  end
141
158
  end
142
159
 
160
+ def configure_db_tiny_tds
161
+ begin
162
+ @database = TinyTds::Client.new :username => @configuration.db_user, :password => @configuration.db_password,
163
+ :host => @configuration.db_server, :database => @configuration.db_name, :port => @configuration.db_port
164
+ @database.query_options[:symbolize_keys] = true
165
+ rescue TinyTds::Error => e
166
+ throw_error("#{e}")
167
+ end
168
+ end
169
+
143
170
  # Run a script against the currently configured database
144
171
  def query_script(sql)
172
+ case @configuration.db_driver
173
+ when ODBC_DRIVER
174
+ query_script_odbc(sql)
175
+ when TINYTDS_DRIVER
176
+ query_script_tiny_tds(sql)
177
+ end
178
+ end
179
+
180
+ def query_script_odbc(sql)
145
181
  results = []
146
182
  begin
147
183
  st = @database.run(sql)
@@ -152,12 +188,22 @@ EOF
152
188
  results << rows
153
189
  end
154
190
  end while(st.more_results)
155
- ensure
156
- st.drop unless st.nil?
191
+ ensure
192
+ st.drop unless st.nil?
157
193
  end
158
194
  results.count > 1 ? results : results.first
159
195
  end
160
196
 
197
+ def query_script_tiny_tds(sql)
198
+ results = []
199
+ st = @database.execute(sql)
200
+ if st.fields
201
+ rows = st.each :as => :hash
202
+ results << rows
203
+ end
204
+ results.count > 1 ? results : results.first
205
+ end
206
+
161
207
  # Customize RSpec
162
208
  def configure_rspec
163
209
  before_proc = lambda do |example|
@@ -1,6 +1,6 @@
1
1
  module Slacker
2
2
  class Configuration
3
- attr_accessor :base_dir, :error_stream, :output_stream, :formatter, :db_server, :db_name, :db_user, :db_password, :console_enabled
3
+ attr_accessor :base_dir, :error_stream, :output_stream, :formatter, :db_server, :db_name, :db_user, :db_password, :db_port, :db_driver, :console_enabled
4
4
 
5
5
  def initialize
6
6
  @console_enabled = true
@@ -13,6 +13,8 @@ module Slacker
13
13
  @db_name = nil
14
14
  @db_user = nil
15
15
  @db_password = nil
16
+ @db_port = 1433
17
+ @db_driver = 'odbc'
16
18
  end
17
19
 
18
20
  def expand_path(path)
@@ -2,6 +2,7 @@ require 'csv'
2
2
 
3
3
  module Slacker
4
4
  DATE_FORMAT = "%m/%d/%Y"
5
+ DATETIME_FORMAT = '%Y-%m-%dT%H:%M:%S'
5
6
 
6
7
  class QueryResultMatcher
7
8
  def initialize(golden_master)
@@ -102,6 +103,10 @@ module Slacker
102
103
  (!!Time.strptime(master_val, DATE_FORMAT) rescue false) && Time.strptime(master_val, DATE_FORMAT) == ODBC::to_time(subject_val)
103
104
  when Float
104
105
  (!!Float(master_val) rescue false) && Float(master_val) == subject_val
106
+ when BigDecimal
107
+ (!!BigDecimal(master_val) rescue false) && BigDecimal(master_val) == BigDecimal(subject_val)
108
+ when Time
109
+ (!!DateTime.strptime(DateTime.parse(master_val).to_s, DATETIME_FORMAT) rescue false) && DateTime.strptime(DateTime.parse(master_val).to_s, DATETIME_FORMAT) == DateTime.strptime(DateTime.parse(subject_val.to_s).to_s, DATETIME_FORMAT)
105
110
  else
106
111
  subject_val.to_s == master_val.to_s
107
112
  end
@@ -1,3 +1,3 @@
1
1
  module Slacker
2
- VERSION = "1.0.15"
2
+ VERSION = "1.0.16"
3
3
  end
@@ -3,7 +3,12 @@
3
3
 
4
4
  # Replace the following with your connection information.
5
5
  # Note that at this point Slacker only works with SQL Server authentication.
6
+
7
+ # Slacker supports odbc and tiny_tds drivers
8
+
6
9
  server: my_server
7
10
  database: my_database
8
11
  user: user_name
9
12
  password: password
13
+ port: 1433
14
+ driver: odbc #or tiny_tds
data/slacker.gemspec CHANGED
@@ -22,6 +22,7 @@ Gem::Specification.new do |s|
22
22
  s.required_ruby_version = '>= 1.9.2'
23
23
 
24
24
  s.add_dependency 'bundler', '~> 1.0', '>= 1.0.15'
25
- s.add_dependency 'ruby-odbc', '= 0.99997'
25
+ s.add_dependency 'ruby-odbc', '= 0.99998'
26
26
  s.add_dependency 'rspec', '~> 3.0'
27
+ s.add_dependency 'tiny_tds', '~>2.0'
27
28
  end
@@ -231,6 +231,17 @@ describe Slacker::QueryResultMatcher do
231
231
  it_behaves_like 'single-value-based matcher'
232
232
  end
233
233
 
234
+ describe 'BigDecimal point-based golden master' do
235
+ before(:each) do
236
+ @subject = [{'Field 1' => -3.12e-5, 'Field_2' => 12}]
237
+ @correct_golden_master = -0.0000312
238
+ @wrong_value_golden_master = -0.0000317
239
+ @wrong_type_golden_master = 15
240
+ end
241
+
242
+ it_behaves_like 'single-value-based matcher'
243
+ end
244
+
234
245
  describe 'Date-based golden master' do
235
246
  before(:each) do
236
247
  @subject = [{'Field 1' => Time.parse('1/1/2011'), 'Field_2' => 12}]
@@ -242,6 +253,19 @@ describe Slacker::QueryResultMatcher do
242
253
  it_behaves_like 'single-value-based matcher'
243
254
  end
244
255
 
256
+ describe 'DateTime2-based golden master' do
257
+ before(:each) do
258
+ @subject = [{'Field 1' => Time.parse('2017-01-01.000000'), 'Field_2' => 12}]
259
+ @correct_golden_master = Time.parse('2017-01-01 00:00:00')
260
+ @wrong_value_golden_master = Time.parse('2017-02-01.000000')
261
+ @wrong_type_golden_master = 'whatever'
262
+ end
263
+
264
+ it_behaves_like 'single-value-based matcher'
265
+ end
266
+
267
+
268
+
245
269
  describe 'Nil-based golden master' do
246
270
  before(:each) do
247
271
  @subject = [{'Field 1' => nil, 'Field_2' => 12}]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slacker
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.15
4
+ version: 1.0.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vassil Kovatchev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-27 00:00:00.000000000 Z
11
+ date: 2017-08-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -36,14 +36,14 @@ dependencies:
36
36
  requirements:
37
37
  - - '='
38
38
  - !ruby/object:Gem::Version
39
- version: '0.99997'
39
+ version: '0.99998'
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - '='
45
45
  - !ruby/object:Gem::Version
46
- version: '0.99997'
46
+ version: '0.99998'
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
49
  requirement: !ruby/object:Gem::Requirement
@@ -58,6 +58,20 @@ dependencies:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
60
  version: '3.0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: tiny_tds
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '2.0'
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '2.0'
61
75
  description: RSpec-based framework for developing automated tests for SQL Server
62
76
  email:
63
77
  - vassil.kovatchev@gmail.com
@@ -144,7 +158,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
144
158
  version: '0'
145
159
  requirements: []
146
160
  rubyforge_project: slacker
147
- rubygems_version: 2.6.7
161
+ rubygems_version: 2.5.2
148
162
  signing_key:
149
163
  specification_version: 4
150
164
  summary: Behavior Driven Development for SQL Server