slacker 0.0.1
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.
- data/Gemfile +4 -0
- data/Gemfile.lock +26 -0
- data/LICENSE +3 -0
- data/README.markdown +16 -0
- data/Rakefile +11 -0
- data/bin/slacker +28 -0
- data/lib/slacker.rb +138 -0
- data/lib/slacker/application.rb +201 -0
- data/lib/slacker/command_line_formatter.rb +59 -0
- data/lib/slacker/configuration.rb +59 -0
- data/lib/slacker/formatter.rb +19 -0
- data/lib/slacker/query_result_matcher.rb +169 -0
- data/lib/slacker/rspec_ext.rb +69 -0
- data/lib/slacker/rspec_monkey.rb +7 -0
- data/lib/slacker/sql.rb +39 -0
- data/lib/slacker/string_helper.rb +17 -0
- data/lib/slacker/version.rb +3 -0
- data/slacker.gemspec +23 -0
- data/spec/application_spec.rb +14 -0
- data/spec/query_result_matcher_spec.rb +267 -0
- data/spec/rspec_ext_spec.rb +127 -0
- data/spec/slacker_spec.rb +60 -0
- data/spec/spec_helper.rb +9 -0
- data/spec/test_files/matcher/completely_blank.csv +0 -0
- data/spec/test_files/matcher/no_rows.csv +1 -0
- data/spec/test_files/matcher/test_1.csv +3 -0
- data/spec/test_files/test_slacker_project/data/test_1.csv +3 -0
- data/spec/test_files/test_slacker_project/sql/example_1/helper_1.sql +1 -0
- data/spec/test_files/test_slacker_project/sql/example_1/helper_2.sql +1 -0
- data/spec/test_files/test_slacker_project/sql/example_1/helper_2.sql.erb +1 -0
- data/spec/test_files/test_slacker_project/sql/helpers/HELPER_4.SQL +1 -0
- data/spec/test_files/test_slacker_project/sql/helpers/helper_1.sql +1 -0
- data/spec/test_files/test_slacker_project/sql/helpers/helper_2.sql.erb +1 -0
- data/spec/test_files/test_slacker_project/sql/helpers/helper_3.sql +1 -0
- data/spec/test_files/test_slacker_project/sql/helpers/helper_3.sql.erb +1 -0
- data/spec/test_files/test_slacker_project/sql/helpers/text_file_1.txt +1 -0
- data/spec/test_files/test_slacker_project/sql/multi_nested.sql.erb +1 -0
- data/spec/test_files/test_slacker_project/sql/nest/example_1/helper_1.sql.erb +1 -0
- data/spec/test_files/test_slacker_project/sql/nest/nested_1.sql.erb +2 -0
- data/spec/test_files/test_slacker_project/sql/nest/nested_2.sql.erb +1 -0
- data/spec/test_files/test_slacker_project/sql/nested.sql.erb +1 -0
- data/spec/test_files/test_slacker_project/sql/nested_with_params.sql.erb +1 -0
- data/spec/test_files/test_slacker_project/sql/no_params.sql.erb +3 -0
- data/spec/test_files/test_slacker_project/sql/params.sql.erb +2 -0
- data/spec/test_files/test_slacker_project/sql/test_1.sql +1 -0
- metadata +114 -0
@@ -0,0 +1,127 @@
|
|
1
|
+
require 'slacker'
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'ostruct'
|
4
|
+
|
5
|
+
class RSpecSlackerHost
|
6
|
+
include Slacker::RSpecExt
|
7
|
+
end
|
8
|
+
|
9
|
+
describe Slacker::RSpecExt do
|
10
|
+
before(:each) do
|
11
|
+
Slacker::configure do |config|
|
12
|
+
config.base_dir = SpecHelper.expand_test_files_path('test_slacker_project')
|
13
|
+
end
|
14
|
+
|
15
|
+
example = OpenStruct.new
|
16
|
+
example.metadata = {:sql => '', :example_group => {:file_path => SpecHelper.expand_test_files_path('test_slacker_project/spec/example_xyz.rb')}}
|
17
|
+
|
18
|
+
@instance = RSpecSlackerHost.new
|
19
|
+
@instance.stub(:example).and_return(example)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'responds to query' do
|
23
|
+
@instance.should respond_to(:query)
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'responds to match' do
|
27
|
+
@instance.should respond_to(:match)
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'responds to csv' do
|
31
|
+
@instance.should respond_to(:csv)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'responds to load_csv' do
|
35
|
+
@instance.should respond_to(:load_csv)
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'responds to result' do
|
39
|
+
@instance.should respond_to(:result)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'responds to sql' do
|
43
|
+
@instance.should respond_to(:sql)
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'responds to ghost methods' do
|
47
|
+
before(:each) do
|
48
|
+
Slacker.application.stub(:query_script) {|sql| sql}
|
49
|
+
end
|
50
|
+
|
51
|
+
specify 'described as SQL files found in the sql/helpers folder' do
|
52
|
+
@instance.sql.respond_to?(:helpers).should be_true
|
53
|
+
@instance.sql.helpers.respond_to?(:helper_1).should be_true
|
54
|
+
@instance.sql.helpers.helper_1.should == 'helpers/helper_1.sql called'
|
55
|
+
end
|
56
|
+
|
57
|
+
specify 'described as SQL.ERB files found in the sql/helpers folder' do
|
58
|
+
@instance.sql.helpers.respond_to?(:helper_2).should be_true
|
59
|
+
@instance.sql.helpers.helper_2.should == 'helpers/helper_2.sql.erb called'
|
60
|
+
end
|
61
|
+
|
62
|
+
specify 'with SQL files taking priority over SQL.ERB files' do
|
63
|
+
@instance.sql.helpers.respond_to?(:helper_3).should be_true
|
64
|
+
@instance.sql.helpers.helper_3.should == 'helpers/helper_3.sql called'
|
65
|
+
end
|
66
|
+
|
67
|
+
specify 'but ignores non-existing methods' do
|
68
|
+
@instance.sql.helpers.respond_to?(:some_bogus_method).should be_false
|
69
|
+
end
|
70
|
+
|
71
|
+
specify 'but ignores files which are not with SQL or SQL.ERB extension' do
|
72
|
+
@instance.sql.helpers.respond_to?(:text_file_1).should be_false
|
73
|
+
end
|
74
|
+
|
75
|
+
specify 'and is case insensitive' do
|
76
|
+
@instance.sql.helpers.respond_to?(:helper_4).should be_true
|
77
|
+
@instance.sql.helpers.respond_to?(:hElpEr_4).should be_true
|
78
|
+
@instance.sql.helpers.helper_4.should == 'helpers/HELPER_4.SQL called'
|
79
|
+
@instance.sql.helpers.heLpEr_4.should == 'helpers/HELPER_4.SQL called'
|
80
|
+
end
|
81
|
+
|
82
|
+
specify 'from folders other than helpers' do
|
83
|
+
@instance.sql.respond_to?(:example_1).should be_true
|
84
|
+
@instance.sql.example_1.respond_to?(:helper_1).should be_true
|
85
|
+
@instance.sql.example_1.helper_1.should == 'example_1/helper_1.sql called'
|
86
|
+
end
|
87
|
+
|
88
|
+
specify "works with deeply nested example files reflecting their location in the lookup of SQL files in the SQL folder" do
|
89
|
+
@instance.sql.respond_to?(:nest).should be_true
|
90
|
+
@instance.sql.nest.respond_to?(:example_1).should be_true
|
91
|
+
@instance.sql.nest.example_1.respond_to?(:helper_1).should be_true
|
92
|
+
@instance.sql.nest.example_1.helper_1.should == 'nest/example_1/helper_1.sql.erb called'
|
93
|
+
end
|
94
|
+
|
95
|
+
# context do
|
96
|
+
# before(:each) do
|
97
|
+
# # Fake the current example in the RSpec ext
|
98
|
+
# @example = OpenStruct.new :metadata => {:sql => ''}
|
99
|
+
# @instance.stub(:example).and_return(@example)
|
100
|
+
# end
|
101
|
+
#
|
102
|
+
# specify "with files from the current example's file folder taking priority over the helpers folder" do
|
103
|
+
# @example.metadata[:example_group] = {:file_path => SpecHelper.expand_test_files_path('test_slacker_project/spec/example_1.rb')}
|
104
|
+
# @instance.sql.respond_to?(:helper_1).should be_true
|
105
|
+
# @instance.sql.helper_1.should == 'example_1/helper_1.sql called'
|
106
|
+
# end
|
107
|
+
#
|
108
|
+
# specify "in example group giving priority to SQL files over SQL.ERB files" do
|
109
|
+
# @example.metadata[:example_group] = {:file_path => SpecHelper.expand_test_files_path('test_slacker_project/spec/example_1.rb')}
|
110
|
+
# @instance.sql.respond_to?(:helper_2).should be_true
|
111
|
+
# @instance.sql.helper_2.should == 'example_1/helper_2.sql called'
|
112
|
+
# end
|
113
|
+
#
|
114
|
+
# specify "works with deeply nested example files reflecting their location in the lookup of SQL files in the SQL folder" do
|
115
|
+
# @example.metadata[:example_group] = {:file_path => SpecHelper.expand_test_files_path('test_slacker_project/spec/nest/example_1.rb')}
|
116
|
+
# @instance.sql.respond_to?(:helper_1).should be_true
|
117
|
+
# @instance.sql.helper_1.should == 'nest/example_1/helper_1.sql.erb called'
|
118
|
+
# end
|
119
|
+
#
|
120
|
+
# specify "falls back to the global helper when there is no matching file in the example folder" do
|
121
|
+
# @example.metadata[:example_group] = {:file_path => SpecHelper.expand_test_files_path('test_slacker_project/spec/example_1.rb')}
|
122
|
+
# @instance.sql.respond_to?(:helper_3).should be_true
|
123
|
+
# @instance.sql.helper_3.should == 'helpers/helper_3.sql called'
|
124
|
+
# end
|
125
|
+
# end
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'slacker'
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Slacker do
|
5
|
+
it 'exposes a singleton application object' do
|
6
|
+
app = Slacker::application
|
7
|
+
app.should equal(Slacker::application)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'and it''s base folder can be configured through a call to configure' do
|
11
|
+
Slacker.configure do |config|
|
12
|
+
config.base_dir = 'xyz'
|
13
|
+
end
|
14
|
+
|
15
|
+
Slacker.configuration.base_dir.should == 'xyz'
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'converts a hash array to csv' do
|
19
|
+
csv = Slacker.hash_array_to_csv [{'a' => 1, 'b' => 2}, {'a' => 3, 'b' => 4}]
|
20
|
+
csv.to_csv.should == "a,b\n1,2\n3,4\n"
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'provides SQL resolution' do
|
24
|
+
before(:each) do
|
25
|
+
Slacker.configure do |config|
|
26
|
+
config.base_dir = SpecHelper.expand_test_files_path('test_slacker_project')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
specify 'which resolves to a SQL string when a non-file is sent to it' do
|
31
|
+
Slacker.sql_from_query_string("select 'abc' as xyz").should == "select 'abc' as xyz"
|
32
|
+
end
|
33
|
+
|
34
|
+
specify 'which resolves to the correct contents of a SQL file' do
|
35
|
+
Slacker.sql_from_query_string("test_1.sql").should == "select 1;"
|
36
|
+
end
|
37
|
+
|
38
|
+
context 'of an ERB file' do
|
39
|
+
specify 'with no params' do
|
40
|
+
Slacker.sql_from_query_string("no_params.sql.erb").should == "select 1;\nselect 2;\n"
|
41
|
+
end
|
42
|
+
|
43
|
+
specify 'with params' do
|
44
|
+
Slacker.sql_from_query_string("params.sql.erb", {:param1 => 11, :param2 => 12}).should == "select 11;\nselect 12;"
|
45
|
+
end
|
46
|
+
|
47
|
+
specify 'which calls another ERB file with no params' do
|
48
|
+
Slacker.sql_from_query_string("nested.sql.erb").should == "select 1;\nselect 2;\n"
|
49
|
+
end
|
50
|
+
|
51
|
+
specify 'which calls another ERB file with params' do
|
52
|
+
Slacker.sql_from_query_string("nested_with_params.sql.erb", {:param1 => 21, :param2 => 22}).should == "select 21;\nselect 22;"
|
53
|
+
end
|
54
|
+
|
55
|
+
specify 'which calls complex multi-nested file' do
|
56
|
+
Slacker.sql_from_query_string("multi_nested.sql.erb", {:seed => 1}).should == "seed 1;\nselect 3;\nselect 4;"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
data/spec/spec_helper.rb
ADDED
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
"Field 1","Field 2"
|
@@ -0,0 +1 @@
|
|
1
|
+
example_1/helper_1.sql called
|
@@ -0,0 +1 @@
|
|
1
|
+
example_1/helper_2.sql called
|
@@ -0,0 +1 @@
|
|
1
|
+
example_1/helper_2.sql.erb called
|
@@ -0,0 +1 @@
|
|
1
|
+
helpers/HELPER_4.SQL called
|
@@ -0,0 +1 @@
|
|
1
|
+
helpers/helper_1.sql called
|
@@ -0,0 +1 @@
|
|
1
|
+
helpers/helper_2.sql.erb called
|
@@ -0,0 +1 @@
|
|
1
|
+
helpers/helper_3.sql called
|
@@ -0,0 +1 @@
|
|
1
|
+
helpers/helper_3.sql.erb called
|
@@ -0,0 +1 @@
|
|
1
|
+
helpers/text_file_1.txt called
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render 'nest/nested_1.sql.erb', params %>
|
@@ -0,0 +1 @@
|
|
1
|
+
nest/example_1/helper_1.sql.erb called
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render '/params.sql.erb', {:param1 => params[:seed] + 1, :param2 => params[:seed] + 2} %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render "no_params.sql.erb" %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render 'params.sql.erb', params %>
|
@@ -0,0 +1 @@
|
|
1
|
+
select 1;
|
metadata
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: slacker
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Vassil Kovatchev
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-06-23 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: ruby-odbc
|
16
|
+
requirement: &17545896 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - =
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0.99994'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *17545896
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rspec
|
27
|
+
requirement: &17545596 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - =
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 2.5.0
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *17545596
|
36
|
+
description: RSpec-based framework for developing automated tests for SQL Server programmable
|
37
|
+
objects such as stored procedures and scalar/table functions
|
38
|
+
email:
|
39
|
+
- vassil.kovatchev@gmail.com
|
40
|
+
executables:
|
41
|
+
- slacker
|
42
|
+
extensions: []
|
43
|
+
extra_rdoc_files: []
|
44
|
+
files:
|
45
|
+
- Gemfile
|
46
|
+
- Gemfile.lock
|
47
|
+
- LICENSE
|
48
|
+
- README.markdown
|
49
|
+
- Rakefile
|
50
|
+
- bin/slacker
|
51
|
+
- lib/slacker.rb
|
52
|
+
- lib/slacker/application.rb
|
53
|
+
- lib/slacker/command_line_formatter.rb
|
54
|
+
- lib/slacker/configuration.rb
|
55
|
+
- lib/slacker/formatter.rb
|
56
|
+
- lib/slacker/query_result_matcher.rb
|
57
|
+
- lib/slacker/rspec_ext.rb
|
58
|
+
- lib/slacker/rspec_monkey.rb
|
59
|
+
- lib/slacker/sql.rb
|
60
|
+
- lib/slacker/string_helper.rb
|
61
|
+
- lib/slacker/version.rb
|
62
|
+
- slacker.gemspec
|
63
|
+
- spec/application_spec.rb
|
64
|
+
- spec/query_result_matcher_spec.rb
|
65
|
+
- spec/rspec_ext_spec.rb
|
66
|
+
- spec/slacker_spec.rb
|
67
|
+
- spec/spec_helper.rb
|
68
|
+
- spec/test_files/matcher/completely_blank.csv
|
69
|
+
- spec/test_files/matcher/no_rows.csv
|
70
|
+
- spec/test_files/matcher/test_1.csv
|
71
|
+
- spec/test_files/test_slacker_project/data/test_1.csv
|
72
|
+
- spec/test_files/test_slacker_project/sql/example_1/helper_1.sql
|
73
|
+
- spec/test_files/test_slacker_project/sql/example_1/helper_2.sql
|
74
|
+
- spec/test_files/test_slacker_project/sql/example_1/helper_2.sql.erb
|
75
|
+
- spec/test_files/test_slacker_project/sql/helpers/HELPER_4.SQL
|
76
|
+
- spec/test_files/test_slacker_project/sql/helpers/helper_1.sql
|
77
|
+
- spec/test_files/test_slacker_project/sql/helpers/helper_2.sql.erb
|
78
|
+
- spec/test_files/test_slacker_project/sql/helpers/helper_3.sql
|
79
|
+
- spec/test_files/test_slacker_project/sql/helpers/helper_3.sql.erb
|
80
|
+
- spec/test_files/test_slacker_project/sql/helpers/text_file_1.txt
|
81
|
+
- spec/test_files/test_slacker_project/sql/multi_nested.sql.erb
|
82
|
+
- spec/test_files/test_slacker_project/sql/nest/example_1/helper_1.sql.erb
|
83
|
+
- spec/test_files/test_slacker_project/sql/nest/nested_1.sql.erb
|
84
|
+
- spec/test_files/test_slacker_project/sql/nest/nested_2.sql.erb
|
85
|
+
- spec/test_files/test_slacker_project/sql/nested.sql.erb
|
86
|
+
- spec/test_files/test_slacker_project/sql/nested_with_params.sql.erb
|
87
|
+
- spec/test_files/test_slacker_project/sql/no_params.sql.erb
|
88
|
+
- spec/test_files/test_slacker_project/sql/params.sql.erb
|
89
|
+
- spec/test_files/test_slacker_project/sql/test_1.sql
|
90
|
+
homepage: https://github.com/vassilvk/slacker
|
91
|
+
licenses: []
|
92
|
+
post_install_message:
|
93
|
+
rdoc_options: []
|
94
|
+
require_paths:
|
95
|
+
- lib
|
96
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
103
|
+
none: false
|
104
|
+
requirements:
|
105
|
+
- - ! '>='
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '0'
|
108
|
+
requirements: []
|
109
|
+
rubyforge_project: slacker
|
110
|
+
rubygems_version: 1.8.4
|
111
|
+
signing_key:
|
112
|
+
specification_version: 3
|
113
|
+
summary: Behavior Driven Development for SQL Server
|
114
|
+
test_files: []
|