slacker 1.0.6 → 1.0.7

Sign up to get free protection for your applications and to get access to all the features.
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: