slacker 1.0.6 → 1.0.7

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.lock CHANGED
@@ -1,28 +1,28 @@
1
- PATH
2
- remote: .
3
- specs:
4
- slacker (1.0.6)
5
- bundler (~> 1.0.15)
6
- rspec (~> 2.5.0)
7
- ruby-odbc (= 0.99994)
8
-
9
- GEM
10
- remote: http://rubygems.org/
11
- specs:
12
- diff-lcs (1.1.3)
13
- rspec (2.5.0)
14
- rspec-core (~> 2.5.0)
15
- rspec-expectations (~> 2.5.0)
16
- rspec-mocks (~> 2.5.0)
17
- rspec-core (2.5.2)
18
- rspec-expectations (2.5.0)
19
- diff-lcs (~> 1.1.2)
20
- rspec-mocks (2.5.0)
21
- ruby-odbc (0.99994)
22
-
23
- PLATFORMS
24
- ruby
25
- x86-mingw32
26
-
27
- DEPENDENCIES
28
- slacker!
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ slacker (1.0.7)
5
+ bundler (~> 1.0.15)
6
+ rspec (~> 2.5.0)
7
+ ruby-odbc (= 0.99994)
8
+
9
+ GEM
10
+ remote: http://rubygems.org/
11
+ specs:
12
+ diff-lcs (1.1.3)
13
+ rspec (2.5.0)
14
+ rspec-core (~> 2.5.0)
15
+ rspec-expectations (~> 2.5.0)
16
+ rspec-mocks (~> 2.5.0)
17
+ rspec-core (2.5.2)
18
+ rspec-expectations (2.5.0)
19
+ diff-lcs (~> 1.1.2)
20
+ rspec-mocks (2.5.0)
21
+ ruby-odbc (0.99994)
22
+
23
+ PLATFORMS
24
+ ruby
25
+ x86-mingw32
26
+
27
+ DEPENDENCIES
28
+ slacker!
data/bin/slacker CHANGED
@@ -1,29 +1,29 @@
1
- #!/usr/bin/env ruby
2
- require 'bundler/setup'
3
- require 'slacker'
4
- require 'yaml'
5
- require 'slacker/command_line_formatter'
6
-
7
- def db_config_from_file(file_path)
8
- dbconfig = nil
9
- File.open(file_path) do |dbconfig_file|
10
- dbconfig = YAML::load(dbconfig_file)
11
- end
12
- dbconfig
13
- end
14
-
15
- # Preset the application to run on the console
16
- Slacker.configure do |config|
17
- config.console_enabled = true
18
- config.formatter = Slacker::CommandLineFormatter.new($stdout)
19
-
20
- # Setup the target connection based on the contents in database.yml
21
- db_config = db_config_from_file(config.expand_path('database.yml'))
22
-
23
- config.db_server = db_config["server"]
24
- config.db_name = db_config["database"]
25
- config.db_user = db_config["user"]
26
- config.db_password = db_config["password"]
27
- end
28
-
29
- Slacker.application.run
1
+ #!/usr/bin/env ruby
2
+ require 'bundler/setup'
3
+ require 'slacker'
4
+ require 'yaml'
5
+ require 'slacker/command_line_formatter'
6
+
7
+ def db_config_from_file(file_path)
8
+ dbconfig = nil
9
+ File.open(file_path) do |dbconfig_file|
10
+ dbconfig = YAML::load(dbconfig_file)
11
+ end
12
+ dbconfig
13
+ end
14
+
15
+ # Preset the application to run on the console
16
+ Slacker.configure do |config|
17
+ config.console_enabled = true
18
+ config.formatter = Slacker::CommandLineFormatter.new($stdout)
19
+
20
+ # Setup the target connection based on the contents in database.yml
21
+ db_config = db_config_from_file(config.expand_path('database.yml'))
22
+
23
+ config.db_server = db_config["server"]
24
+ config.db_name = db_config["database"]
25
+ config.db_user = db_config["user"]
26
+ config.db_password = db_config["password"]
27
+ end
28
+
29
+ Slacker.application.run
data/bin/slacker_new CHANGED
@@ -1,34 +1,34 @@
1
- #!/usr/bin/env ruby
2
- require 'bundler/setup'
3
- require 'fileutils'
4
-
5
- def usage
6
- <<END
7
- Use slacker_new to create a new Slacker project:
8
-
9
- slacker_new <project_name>
10
- END
11
- end
12
-
13
- def project_template_path
14
- File.expand_path("#{File.dirname(__FILE__)}/../lib/slacker_new/project")
15
- end
16
-
17
- def slacker_new(project_name)
18
- files = Dir.glob("#{project_template_path}/**")
19
- FileUtils.mkdir(project_name) unless File.exist?(project_name)
20
- FileUtils.cp_r(files, project_name)
21
- end
22
-
23
- def project_template_files(project_name)
24
- files = Dir.glob("#{project_template_path}/**/*").map{|file| file.gsub(/^#{Regexp.escape(project_template_path)}\//, "./#{project_name}/")}
25
- end
26
-
27
- if ARGV.count != 1
28
- puts usage
29
- else
30
- project_name = ARGV[0]
31
- puts "Creating project #{project_name}..."
32
- slacker_new(project_name)
33
- puts project_template_files(project_name)
34
- end
1
+ #!/usr/bin/env ruby
2
+ require 'bundler/setup'
3
+ require 'fileutils'
4
+
5
+ def usage
6
+ <<END
7
+ Use slacker_new to create a new Slacker project:
8
+
9
+ slacker_new <project_name>
10
+ END
11
+ end
12
+
13
+ def project_template_path
14
+ File.expand_path("#{File.dirname(__FILE__)}/../lib/slacker_new/project")
15
+ end
16
+
17
+ def slacker_new(project_name)
18
+ files = Dir.glob("#{project_template_path}/**")
19
+ FileUtils.mkdir(project_name) unless File.exist?(project_name)
20
+ FileUtils.cp_r(files, project_name)
21
+ end
22
+
23
+ def project_template_files(project_name)
24
+ files = Dir.glob("#{project_template_path}/**/*").map{|file| file.gsub(/^#{Regexp.escape(project_template_path)}\//, "./#{project_name}/")}
25
+ end
26
+
27
+ if ARGV.count != 1
28
+ puts usage
29
+ else
30
+ project_name = ARGV[0]
31
+ puts "Creating project #{project_name}..."
32
+ slacker_new(project_name)
33
+ puts project_template_files(project_name)
34
+ end
data/lib/slacker.rb CHANGED
@@ -4,6 +4,7 @@ require 'slacker/application'
4
4
  require 'slacker/configuration'
5
5
  require 'slacker/sql'
6
6
  require 'slacker/formatter'
7
+ require 'slacker/sql_preprocessor'
7
8
  require 'csv'
8
9
  require 'erb'
9
10
 
@@ -119,8 +120,12 @@ module Slacker
119
120
  # Run a SQL query against an example
120
121
  def query_script(example, sql, log_name=nil)
121
122
  log_name ||= 'Run SQL Script'
122
- example.metadata[:sql] += ((example.metadata[:sql] == '' ? '' : "\n\n") + "-- #{log_name.split(/\r\n|\n/).join("\n-- ")}\n#{sql}")
123
- application.query_script(sql)
123
+
124
+ debuggable_sql = SqlPreprocessor.debuggable_sql(sql)
125
+ executable_sql = SqlPreprocessor.executable_sql(sql, example)
126
+
127
+ example.metadata[:sql] += ((example.metadata[:sql] == '' ? '' : "\n\n") + "-- #{log_name.split(/\r\n|\n/).join("\n-- ")}\n#{debuggable_sql}")
128
+ application.query_script(executable_sql)
124
129
  end
125
130
 
126
131
  def load_csv(example, csv, table_name, log_name = nil)
@@ -107,9 +107,9 @@ EOF
107
107
  require file_name
108
108
  module_class = Slacker::StringHelper.constantize(Slacker::StringHelper.camelize(file_name.gsub(/\.rb$/,'')))
109
109
  RSpec.configure do |config|
110
- config.include(module_class)
110
+ config.include(module_class )
111
111
  end
112
- Slacker.mixin_module(module_class)
112
+ Slacker.mixin_module(module_class )
113
113
  end
114
114
  end
115
115
  end
@@ -0,0 +1,24 @@
1
+ module Slacker
2
+ module SqlPreprocessor
3
+ IVAR_REX = /%{\s*(.*?)\s*}/
4
+
5
+ def self.executable_sql(sql, example)
6
+ # Replace all appearances of %{} with the values of the corresponding example instance variables
7
+ sql.gsub(IVAR_REX) do
8
+ ivar = $1.to_sym
9
+ instance = example.example_group_instance
10
+
11
+ if instance.instance_variable_defined?(ivar)
12
+ instance.instance_variable_get(ivar).to_s
13
+ else
14
+ raise "Example is missing instance variable #{ivar}"
15
+ end
16
+ end
17
+ end
18
+
19
+ def self.debuggable_sql(sql)
20
+ # Replace all appearances of %{} with the names of the sql variables
21
+ sql.gsub(IVAR_REX) {$1}
22
+ end
23
+ end
24
+ end
@@ -1,3 +1,3 @@
1
- module Slacker
2
- VERSION = "1.0.6"
3
- end
1
+ module Slacker
2
+ VERSION = "1.0.7"
3
+ end
@@ -1,11 +1,11 @@
1
- "x","y","power"
2
- "2","1","2"
3
- "3","2","9"
4
- "4","3","64"
5
- "5","4","625"
6
- "4","2","16"
7
- "3","3","27"
8
- "2","4","16"
9
- "1","5","1"
10
- "-1","2","1"
11
- "-2","5","-32"
1
+ "x","y","power"
2
+ "2","1","2"
3
+ "3","2","9"
4
+ "4","3","64"
5
+ "5","4","625"
6
+ "4","2","16"
7
+ "3","3","27"
8
+ "2","4","16"
9
+ "1","5","1"
10
+ "-1","2","1"
11
+ "-2","5","-32"
@@ -1,11 +1,11 @@
1
- "x","y"
2
- 2,1
3
- 3,2
4
- 4,3
5
- 5,4
6
- 4,2
7
- 3,3
8
- 2,4
9
- 1,5
10
- -1,2
11
- -2,5
1
+ "x","y"
2
+ 2,1
3
+ 3,2
4
+ 4,3
5
+ 5,4
6
+ 4,2
7
+ 3,3
8
+ 2,4
9
+ 1,5
10
+ -1,2
11
+ -2,5
@@ -1,3 +1,3 @@
1
- "p","s"
2
- 2,34
3
- 12,44
1
+ "p","s"
2
+ 2,34
3
+ 12,44
@@ -1,9 +1,9 @@
1
- # Database connection.
2
- # When Slacker is executed, it will attempt to connect to this database.
3
-
4
- # Replace the following with your connection information.
5
- # Note that at this point Slacker only works with SQL Server authentication.
6
- server: my_server
7
- database: my_database
8
- user: user_name
9
- password: password
1
+ # Database connection.
2
+ # When Slacker is executed, it will attempt to connect to this database.
3
+
4
+ # Replace the following with your connection information.
5
+ # Note that at this point Slacker only works with SQL Server authentication.
6
+ server: my_server
7
+ database: my_database
8
+ user: user_name
9
+ password: password
@@ -1,2 +1,2 @@
1
- module MyHelper
1
+ module MyHelper
2
2
  end
@@ -1,66 +1,66 @@
1
- # Method "describe" opens up an example group.
2
- describe 'My database' do
3
- # Simple inline query example.
4
- it 'contains system tables' do
5
- # Make sure we have at least one system object in the database.
6
- query("select * from sysobjects where xtype = 'S';").count.should > 0
7
- end
8
-
9
- # The same query, this time using a SQL template stored in file "sql/sample_1/sysobject.sql.erb".
10
- it 'contains system tables (take two)' do
11
- # Every (*.sql.erb) file in folder "sql" can be called as a method on object "sql".
12
- # Subfolders of folder "sql" appear as children of object "sql" with their (*.sql.erb) files automatically available as methods.
13
- sql.sample_1.sysobjects.count.should > 0
14
- end
15
-
16
- # This time we'll use a parameterized template.
17
- it 'contains system tables (take three)' do
18
- # Every template can accept parameters; see file "sql/sample_1/sysobject_with_params.sql.erb".
19
- sql.sample_1.sysobjects_with_params(:xtype => 'S').count.should > 0
20
- end
21
-
22
- # SQL Templates can contain multiple statements and can return multiple resultsets.
23
- it 'can play with numbers' do
24
- # Note that this time we're calling the template with a block which receives the results as a block parameter.
25
- sql.sample_1.play_with_numbers(:x => 2, :y => 12) do |results|
26
- # The results object contains an array of all the resultsets generated by the query script.
27
- # A resultset contains an array of records. Each record is a hash of field => value pairs.
28
-
29
- # First resultset; First record; Column "product".
30
- results[0][0][:product].should == 24
31
-
32
- # A resultset can be matched directly against an array of hashes using method "match".
33
- results[1].should match([{:x => 2, :y => 12, :sum => 14}])
34
-
35
- # Or against a CSV file stored in project's "data" folder (see file "data/sample_1/numbers_expected_output.csv").
36
- results[2].should match('sample_1/numbers_expected_output.csv')
37
-
38
- # A resultset's values can be matched one-by-one.
39
- results[2][0][:p].should == 2
40
- results[2][0][:s].should == 34
41
- results[2][1][:p].should == 12
42
- results[2][1][:s].should == 44
43
- end
44
- end
45
-
46
- # Every "it" (example) is executed in a T-SQL transaction which is rolled back once the example is complete.
47
- # No example can ever interfere with the results of another example.
48
- #
49
- # CSV files can be used to load data directly into a table.
50
- # In this example, we will create a table, populate it with data,
51
- # calculate the exponentiation of one column based on another column
52
- # and verify the results against an expected resultset stored in a CSV file.
53
- it 'can play with numbers (take two)' do
54
- # Create the table - see file "sql/sample_1/create_my_table.sql.erb".
55
- sql.sample_1.create_my_table
56
- # We can populate any table with data from the "data" folder by calling method "load_csv".
57
- # See file "data/sample_1/my_table_initial_data.csv".
58
- load_csv('sample_1/my_table_initial_data.csv', 'MyTable')
59
-
60
- # Now let's test the system scalar function Power.
61
- # We will use it in a query expression executed agaings MyTable and we
62
- # will compare the results against a CSV file - we should expect them to match.
63
- # See files "sql/sample_1/my_table_on_power.sql.erb" and "data/sample_1/my_table_expected_power_results.csv".
64
- sql.sample_1.my_table_on_power.should match('sample_1/my_table_expected_power_results.csv')
65
- end
66
- end
1
+ # Method "describe" opens up an example group.
2
+ describe 'My database' do
3
+ # Simple inline query example.
4
+ it 'contains system tables' do
5
+ # Make sure we have at least one system object in the database.
6
+ query("select * from sysobjects where xtype = 'S';").count.should > 0
7
+ end
8
+
9
+ # The same query, this time using a SQL template stored in file "sql/sample_1/sysobject.sql.erb".
10
+ it 'contains system tables (take two)' do
11
+ # Every (*.sql.erb) file in folder "sql" can be called as a method on object "sql".
12
+ # Subfolders of folder "sql" appear as children of object "sql" with their (*.sql.erb) files automatically available as methods.
13
+ sql.sample_1.sysobjects.count.should > 0
14
+ end
15
+
16
+ # This time we'll use a parameterized template.
17
+ it 'contains system tables (take three)' do
18
+ # Every template can accept parameters; see file "sql/sample_1/sysobject_with_params.sql.erb".
19
+ sql.sample_1.sysobjects_with_params(:xtype => 'S').count.should > 0
20
+ end
21
+
22
+ # SQL Templates can contain multiple statements and can return multiple resultsets.
23
+ it 'can play with numbers' do
24
+ # Note that this time we're calling the template with a block which receives the results as a block parameter.
25
+ sql.sample_1.play_with_numbers(:x => 2, :y => 12) do |results|
26
+ # The results object contains an array of all the resultsets generated by the query script.
27
+ # A resultset contains an array of records. Each record is a hash of field => value pairs.
28
+
29
+ # First resultset; First record; Column "product".
30
+ results[0][0][:product].should == 24
31
+
32
+ # A resultset can be matched directly against an array of hashes using method "match".
33
+ results[1].should match([{:x => 2, :y => 12, :sum => 14}])
34
+
35
+ # Or against a CSV file stored in project's "data" folder (see file "data/sample_1/numbers_expected_output.csv").
36
+ results[2].should match('sample_1/numbers_expected_output.csv')
37
+
38
+ # A resultset's values can be matched one-by-one.
39
+ results[2][0][:p].should == 2
40
+ results[2][0][:s].should == 34
41
+ results[2][1][:p].should == 12
42
+ results[2][1][:s].should == 44
43
+ end
44
+ end
45
+
46
+ # Every "it" (example) is executed in a T-SQL transaction which is rolled back once the example is complete.
47
+ # No example can ever interfere with the results of another example.
48
+ #
49
+ # CSV files can be used to load data directly into a table.
50
+ # In this example, we will create a table, populate it with data,
51
+ # calculate the exponentiation of one column based on another column
52
+ # and verify the results against an expected resultset stored in a CSV file.
53
+ it 'can play with numbers (take two)' do
54
+ # Create the table - see file "sql/sample_1/create_my_table.sql.erb".
55
+ sql.sample_1.create_my_table
56
+ # We can populate any table with data from the "data" folder by calling method "load_csv".
57
+ # See file "data/sample_1/my_table_initial_data.csv".
58
+ load_csv('sample_1/my_table_initial_data.csv', 'MyTable')
59
+
60
+ # Now let's test the system scalar function Power.
61
+ # We will use it in a query expression executed agaings MyTable and we
62
+ # will compare the results against a CSV file - we should expect them to match.
63
+ # See files "sql/sample_1/my_table_on_power.sql.erb" and "data/sample_1/my_table_expected_power_results.csv".
64
+ sql.sample_1.my_table_on_power.should match('sample_1/my_table_expected_power_results.csv')
65
+ end
66
+ end
@@ -1,2 +1,2 @@
1
- <%# Every parameter passed to a SQL template appears in the options hash available to the template %>
1
+ <%# Every parameter passed to a SQL template appears in the options hash available to the template %>
2
2
  select * from sysobjects where xtype = '<%= options[:xtype] %>';
data/slacker.gemspec CHANGED
@@ -1,26 +1,26 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "slacker/version"
4
-
5
- Gem::Specification.new do |s|
6
- s.name = "slacker"
7
- s.version = Slacker::VERSION
8
- s.authors = ["Vassil Kovatchev"]
9
- s.email = ["vassil.kovatchev@gmail.com"]
10
- s.homepage = "https://github.com/vassilvk/slacker/wiki"
11
- s.summary = %q{Behavior Driven Development for SQL Server}
12
- s.description = %q{RSpec-based framework for developing automated tests for SQL Server}
13
-
14
- s.rubyforge_project = "slacker"
15
-
16
- s.files = ['README.markdown', 'Rakefile', 'Gemfile', 'slacker.gemspec', 'Gemfile.lock'] + Dir.glob("{bin,lib,spec}/**/*")
17
- s.test_files = Dir.glob("spec/**/*")
18
- s.executables = ['slacker', 'slacker_new']
19
- s.require_paths = ["lib"]
20
-
21
- s.required_ruby_version = '>= 1.9.2'
22
-
23
- s.add_dependency 'bundler', '~> 1.0.15'
24
- s.add_dependency 'ruby-odbc', '= 0.99994'
25
- s.add_dependency 'rspec', '~> 2.5.0'
26
- end
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "slacker/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "slacker"
7
+ s.version = Slacker::VERSION
8
+ s.authors = ["Vassil Kovatchev"]
9
+ s.email = ["vassil.kovatchev@gmail.com"]
10
+ s.homepage = "https://github.com/vassilvk/slacker/wiki"
11
+ s.summary = %q{Behavior Driven Development for SQL Server}
12
+ s.description = %q{RSpec-based framework for developing automated tests for SQL Server}
13
+
14
+ s.rubyforge_project = "slacker"
15
+
16
+ s.files = ['README.markdown', 'Rakefile', 'Gemfile', 'slacker.gemspec', 'Gemfile.lock'] + Dir.glob("{bin,lib,spec}/**/*")
17
+ s.test_files = Dir.glob("spec/**/*")
18
+ s.executables = ['slacker', 'slacker_new']
19
+ s.require_paths = ["lib"]
20
+
21
+ s.required_ruby_version = '>= 1.9.2'
22
+
23
+ s.add_dependency 'bundler', '~> 1.0.15'
24
+ s.add_dependency 'ruby-odbc', '= 0.99994'
25
+ s.add_dependency 'rspec', '~> 2.5.0'
26
+ end
@@ -1,88 +1,88 @@
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 load_csv' do
39
- @instance.should respond_to(:touch_csv)
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 'from folders other than helpers' do
76
- @instance.sql.respond_to?(:example_1).should be_true
77
- @instance.sql.example_1.respond_to?(:helper_1).should be_true
78
- @instance.sql.example_1.helper_1.should == 'example_1/helper_1.sql called'
79
- end
80
-
81
- specify "works with deeply nested example files reflecting their location in the lookup of SQL files in the SQL folder" do
82
- @instance.sql.respond_to?(:nest).should be_true
83
- @instance.sql.nest.respond_to?(:example_1).should be_true
84
- @instance.sql.nest.example_1.respond_to?(:helper_1).should be_true
85
- @instance.sql.nest.example_1.helper_1.should == 'nest/example_1/helper_1.sql.erb called'
86
- end
87
- end
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 load_csv' do
39
+ @instance.should respond_to(:touch_csv)
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 'from folders other than helpers' do
76
+ @instance.sql.respond_to?(:example_1).should be_true
77
+ @instance.sql.example_1.respond_to?(:helper_1).should be_true
78
+ @instance.sql.example_1.helper_1.should == 'example_1/helper_1.sql called'
79
+ end
80
+
81
+ specify "works with deeply nested example files reflecting their location in the lookup of SQL files in the SQL folder" do
82
+ @instance.sql.respond_to?(:nest).should be_true
83
+ @instance.sql.nest.respond_to?(:example_1).should be_true
84
+ @instance.sql.nest.example_1.respond_to?(:helper_1).should be_true
85
+ @instance.sql.nest.example_1.helper_1.should == 'nest/example_1/helper_1.sql.erb called'
86
+ end
87
+ end
88
88
  end
@@ -1,3 +1,3 @@
1
- "Field 1","Field_2","b"
2
- 12,,""
3
- "test string",01/30/2011,8.9
1
+ "Field 1","Field_2","b"
2
+ 12,,""
3
+ "test string",01/30/2011,8.9
@@ -1,3 +1,3 @@
1
- "Field 1","Field_2","b"
2
- 12,10,11
3
- "test string",01/01/2011,8.9
1
+ "Field 1","Field_2","b"
2
+ 12,10,11
3
+ "test string",01/01/2011,8.9
@@ -1,3 +1,3 @@
1
- <%2.times do |i|%>
2
- select <%=i+1%>;
1
+ <%2.times do |i|%>
2
+ select <%=i+1%>;
3
3
  <%end%>
metadata CHANGED
@@ -1,61 +1,73 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: slacker
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.7
4
5
  prerelease:
5
- version: 1.0.6
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Vassil Kovatchev
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-11-10 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2012-06-11 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
16
15
  name: bundler
17
- prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
19
17
  none: false
20
- requirements:
18
+ requirements:
21
19
  - - ~>
22
- - !ruby/object:Gem::Version
20
+ - !ruby/object:Gem::Version
23
21
  version: 1.0.15
24
22
  type: :runtime
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
27
- name: ruby-odbc
28
23
  prerelease: false
29
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
30
25
  none: false
31
- requirements:
32
- - - "="
33
- - !ruby/object:Gem::Version
34
- version: "0.99994"
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 1.0.15
30
+ - !ruby/object:Gem::Dependency
31
+ name: ruby-odbc
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - '='
36
+ - !ruby/object:Gem::Version
37
+ version: '0.99994'
35
38
  type: :runtime
36
- version_requirements: *id002
37
- - !ruby/object:Gem::Dependency
38
- name: rspec
39
39
  prerelease: false
40
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
41
41
  none: false
42
- requirements:
42
+ requirements:
43
+ - - '='
44
+ - !ruby/object:Gem::Version
45
+ version: '0.99994'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
43
51
  - - ~>
44
- - !ruby/object:Gem::Version
52
+ - !ruby/object:Gem::Version
45
53
  version: 2.5.0
46
54
  type: :runtime
47
- version_requirements: *id003
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 2.5.0
48
62
  description: RSpec-based framework for developing automated tests for SQL Server
49
- email:
63
+ email:
50
64
  - vassil.kovatchev@gmail.com
51
- executables:
65
+ executables:
52
66
  - slacker
53
67
  - slacker_new
54
68
  extensions: []
55
-
56
69
  extra_rdoc_files: []
57
-
58
- files:
70
+ files:
59
71
  - README.markdown
60
72
  - Rakefile
61
73
  - Gemfile
@@ -63,107 +75,104 @@ files:
63
75
  - Gemfile.lock
64
76
  - bin/slacker
65
77
  - bin/slacker_new
66
- - lib/slacker/string_helper.rb
78
+ - lib/slacker/application.rb
67
79
  - lib/slacker/command_line_formatter.rb
68
- - lib/slacker/version.rb
69
- - lib/slacker/query_result_matcher.rb
70
80
  - lib/slacker/configuration.rb
71
81
  - lib/slacker/formatter.rb
82
+ - lib/slacker/query_result_matcher.rb
72
83
  - lib/slacker/rspec_ext.rb
73
84
  - lib/slacker/rspec_monkey.rb
74
85
  - lib/slacker/sql.rb
75
- - lib/slacker/application.rb
86
+ - lib/slacker/sql_preprocessor.rb
87
+ - lib/slacker/string_helper.rb
88
+ - lib/slacker/version.rb
76
89
  - lib/slacker.rb
77
- - lib/slacker_new/project/lib/helpers/my_helper.rb
78
90
  - lib/slacker_new/project/data/sample_1/my_table_expected_power_results.csv
79
91
  - lib/slacker_new/project/data/sample_1/my_table_initial_data.csv
80
92
  - lib/slacker_new/project/data/sample_1/numbers_expected_output.csv
81
- - lib/slacker_new/project/debug/failed_examples/example_001.sql
82
- - lib/slacker_new/project/debug/passed_examples/example_001.sql
93
+ - lib/slacker_new/project/database.yml
94
+ - lib/slacker_new/project/lib/helpers/my_helper.rb
95
+ - lib/slacker_new/project/spec/sample_1.rb
96
+ - lib/slacker_new/project/sql/sample_1/create_my_table.sql.erb
83
97
  - lib/slacker_new/project/sql/sample_1/my_table_on_power.sql.erb
84
98
  - lib/slacker_new/project/sql/sample_1/play_with_numbers.sql.erb
85
- - lib/slacker_new/project/sql/sample_1/sysobjects_with_params.sql.erb
86
- - lib/slacker_new/project/sql/sample_1/create_my_table.sql.erb
87
99
  - lib/slacker_new/project/sql/sample_1/sysobjects.sql.erb
88
- - lib/slacker_new/project/spec/sample_1.rb
89
- - lib/slacker_new/project/database.yml
90
- - spec/rspec_ext_spec.rb
100
+ - lib/slacker_new/project/sql/sample_1/sysobjects_with_params.sql.erb
101
+ - spec/application_spec.rb
91
102
  - spec/query_result_matcher_spec.rb
103
+ - spec/rspec_ext_spec.rb
104
+ - spec/slacker_spec.rb
92
105
  - spec/spec_helper.rb
106
+ - spec/test_files/matcher/completely_blank.csv
107
+ - spec/test_files/matcher/no_rows.csv
108
+ - spec/test_files/matcher/test_1.csv
93
109
  - spec/test_files/test_slacker_project/data/test_1.csv
94
- - spec/test_files/test_slacker_project/sql/nest/nested_1.sql.erb
95
- - spec/test_files/test_slacker_project/sql/nest/example_1/helper_1.sql.erb
96
- - spec/test_files/test_slacker_project/sql/nest/nested_2.sql.erb
97
- - spec/test_files/test_slacker_project/sql/params.sql.erb
98
- - spec/test_files/test_slacker_project/sql/nested.sql.erb
99
- - spec/test_files/test_slacker_project/sql/test_1.sql
100
- - spec/test_files/test_slacker_project/sql/multi_nested.sql.erb
101
- - spec/test_files/test_slacker_project/sql/helpers/helper_3.sql.erb
110
+ - spec/test_files/test_slacker_project/sql/example_1/helper_1.sql
111
+ - spec/test_files/test_slacker_project/sql/example_1/helper_2.sql
112
+ - spec/test_files/test_slacker_project/sql/example_1/helper_2.sql.erb
113
+ - spec/test_files/test_slacker_project/sql/helpers/helper_1.sql
102
114
  - spec/test_files/test_slacker_project/sql/helpers/helper_2.sql.erb
103
115
  - spec/test_files/test_slacker_project/sql/helpers/helper_3.sql
104
- - spec/test_files/test_slacker_project/sql/helpers/helper_1.sql
116
+ - spec/test_files/test_slacker_project/sql/helpers/helper_3.sql.erb
105
117
  - spec/test_files/test_slacker_project/sql/helpers/text_file_1.txt
106
- - spec/test_files/test_slacker_project/sql/example_1/helper_2.sql
107
- - spec/test_files/test_slacker_project/sql/example_1/helper_2.sql.erb
108
- - spec/test_files/test_slacker_project/sql/example_1/helper_1.sql
109
- - spec/test_files/test_slacker_project/sql/no_params.sql.erb
118
+ - spec/test_files/test_slacker_project/sql/multi_nested.sql.erb
119
+ - spec/test_files/test_slacker_project/sql/nest/example_1/helper_1.sql.erb
120
+ - spec/test_files/test_slacker_project/sql/nest/nested_1.sql.erb
121
+ - spec/test_files/test_slacker_project/sql/nest/nested_2.sql.erb
122
+ - spec/test_files/test_slacker_project/sql/nested.sql.erb
110
123
  - spec/test_files/test_slacker_project/sql/nested_with_params.sql.erb
111
- - spec/test_files/matcher/no_rows.csv
112
- - spec/test_files/matcher/completely_blank.csv
113
- - spec/test_files/matcher/test_1.csv
114
- - spec/slacker_spec.rb
115
- - spec/application_spec.rb
124
+ - spec/test_files/test_slacker_project/sql/no_params.sql.erb
125
+ - spec/test_files/test_slacker_project/sql/params.sql.erb
126
+ - spec/test_files/test_slacker_project/sql/test_1.sql
116
127
  homepage: https://github.com/vassilvk/slacker/wiki
117
128
  licenses: []
118
-
119
129
  post_install_message:
120
130
  rdoc_options: []
121
-
122
- require_paths:
131
+ require_paths:
123
132
  - lib
124
- required_ruby_version: !ruby/object:Gem::Requirement
133
+ required_ruby_version: !ruby/object:Gem::Requirement
125
134
  none: false
126
- requirements:
127
- - - ">="
128
- - !ruby/object:Gem::Version
135
+ requirements:
136
+ - - ! '>='
137
+ - !ruby/object:Gem::Version
129
138
  version: 1.9.2
130
- required_rubygems_version: !ruby/object:Gem::Requirement
139
+ required_rubygems_version: !ruby/object:Gem::Requirement
131
140
  none: false
132
- requirements:
133
- - - ">="
134
- - !ruby/object:Gem::Version
135
- version: "0"
141
+ requirements:
142
+ - - ! '>='
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
136
145
  requirements: []
137
-
138
146
  rubyforge_project: slacker
139
- rubygems_version: 1.8.4
147
+ rubygems_version: 1.8.24
140
148
  signing_key:
141
149
  specification_version: 3
142
150
  summary: Behavior Driven Development for SQL Server
143
- test_files:
144
- - spec/rspec_ext_spec.rb
151
+ test_files:
152
+ - spec/application_spec.rb
145
153
  - spec/query_result_matcher_spec.rb
154
+ - spec/rspec_ext_spec.rb
155
+ - spec/slacker_spec.rb
146
156
  - spec/spec_helper.rb
157
+ - spec/test_files/matcher/completely_blank.csv
158
+ - spec/test_files/matcher/no_rows.csv
159
+ - spec/test_files/matcher/test_1.csv
147
160
  - spec/test_files/test_slacker_project/data/test_1.csv
148
- - spec/test_files/test_slacker_project/sql/nest/nested_1.sql.erb
149
- - spec/test_files/test_slacker_project/sql/nest/example_1/helper_1.sql.erb
150
- - spec/test_files/test_slacker_project/sql/nest/nested_2.sql.erb
151
- - spec/test_files/test_slacker_project/sql/params.sql.erb
152
- - spec/test_files/test_slacker_project/sql/nested.sql.erb
153
- - spec/test_files/test_slacker_project/sql/test_1.sql
154
- - spec/test_files/test_slacker_project/sql/multi_nested.sql.erb
155
- - spec/test_files/test_slacker_project/sql/helpers/helper_3.sql.erb
161
+ - spec/test_files/test_slacker_project/sql/example_1/helper_1.sql
162
+ - spec/test_files/test_slacker_project/sql/example_1/helper_2.sql
163
+ - spec/test_files/test_slacker_project/sql/example_1/helper_2.sql.erb
164
+ - spec/test_files/test_slacker_project/sql/helpers/helper_1.sql
156
165
  - spec/test_files/test_slacker_project/sql/helpers/helper_2.sql.erb
157
166
  - spec/test_files/test_slacker_project/sql/helpers/helper_3.sql
158
- - spec/test_files/test_slacker_project/sql/helpers/helper_1.sql
167
+ - spec/test_files/test_slacker_project/sql/helpers/helper_3.sql.erb
159
168
  - spec/test_files/test_slacker_project/sql/helpers/text_file_1.txt
160
- - spec/test_files/test_slacker_project/sql/example_1/helper_2.sql
161
- - spec/test_files/test_slacker_project/sql/example_1/helper_2.sql.erb
162
- - spec/test_files/test_slacker_project/sql/example_1/helper_1.sql
163
- - spec/test_files/test_slacker_project/sql/no_params.sql.erb
169
+ - spec/test_files/test_slacker_project/sql/multi_nested.sql.erb
170
+ - spec/test_files/test_slacker_project/sql/nest/example_1/helper_1.sql.erb
171
+ - spec/test_files/test_slacker_project/sql/nest/nested_1.sql.erb
172
+ - spec/test_files/test_slacker_project/sql/nest/nested_2.sql.erb
173
+ - spec/test_files/test_slacker_project/sql/nested.sql.erb
164
174
  - spec/test_files/test_slacker_project/sql/nested_with_params.sql.erb
165
- - spec/test_files/matcher/no_rows.csv
166
- - spec/test_files/matcher/completely_blank.csv
167
- - spec/test_files/matcher/test_1.csv
168
- - spec/slacker_spec.rb
169
- - spec/application_spec.rb
175
+ - spec/test_files/test_slacker_project/sql/no_params.sql.erb
176
+ - spec/test_files/test_slacker_project/sql/params.sql.erb
177
+ - spec/test_files/test_slacker_project/sql/test_1.sql
178
+ has_rdoc: