dumbo 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 82e2e9299fa177d4e41fdc7b8c3417476190fff8
4
- data.tar.gz: 5cf24b1b10829fcacf94016bd2fd29e21ab005d1
3
+ metadata.gz: 903d02a43533f1f95400a32a0b0f0fdc230b032b
4
+ data.tar.gz: 2bcf26adc162ab1521515902618fc7759d003e11
5
5
  SHA512:
6
- metadata.gz: d08e465e241b15fb5796af82ecbe8480e37e22be2728bf96255e7cd00fee75e9d17073889dcead4af350eb9a22755e628267e59b23ebdfdd2977e552e6d6a2ee
7
- data.tar.gz: 23e9fa7f1b2433e0d4c0641fe432c08674bbb3171bf66083c5dc032d7655acec3b0c93a3bf4523cdab21961499526bdf66f009a431c87df0dbc573e6f6b6b319
6
+ metadata.gz: 33dbebf49a41de6a31803291e7153d6aa2ef04251ff46ce0b19c78bee24e703b863eee58f89ebf13e879e8dec28e573da870086cc818651c5ea7665dd410c6df
7
+ data.tar.gz: adb6de0010e5354250c4c59373827a0b5177516cbbe2f55cdb3e0662a0593b649510752fc2f01d963c825323bfe2e65cd6b1933c2e348c2716d6a07a00cf12da
data/bin/dumbo CHANGED
@@ -6,8 +6,32 @@ require 'fileutils'
6
6
  require 'pathname'
7
7
 
8
8
  module Cli
9
+ class Generate < Thor
10
+ desc 'spec <name>', 'Add a new spec file named <name> as spec/<name>_spec.rb'
11
+ def spec(name)
12
+ file_name = "spec/#{name}_spec.rb"
13
+ if File.exist?(file_name)
14
+ say_status('already exists', file_name, :yellow)
15
+ return
16
+ end
17
+
18
+ File.open("spec/#{name}_spec.rb", 'w') do |f|
19
+ f.puts <<-EOF.gsub(' ','')
20
+ require 'spec_helper'
21
+
22
+ describe '#{name}' do
23
+ before do
24
+ install_extension
25
+ end
26
+ end
27
+ EOF
28
+ end
29
+ say_status('create', file_name)
30
+ end
31
+ end
32
+
9
33
  class Dumbo < Thor
10
- desc 'new name', 'creates a new extension skeleton'
34
+ desc 'new <name>', 'creates a new extension skeleton'
11
35
 
12
36
  def new(name, initial_version = '0.0.1')
13
37
  mkdir("#{name}/sql")
@@ -51,6 +75,11 @@ module Cli
51
75
  STR
52
76
  end
53
77
 
78
+ desc "g GENERATOR args", "generates files for the given generator"
79
+ subcommand "g", Generate
80
+
81
+
82
+
54
83
  no_commands do
55
84
  def mkdir(path, silent_skip = false)
56
85
  if File.directory?(path)
@@ -24,7 +24,12 @@ module Dumbo
24
24
 
25
25
  desc 'installs the extension'
26
26
  task :install do
27
- system('make clean && make && make install')
27
+ cmd = if ENV['DUMBO_USE_SUDO']
28
+ 'make clean && make && sudo make install'
29
+ else
30
+ 'make clean && make && make install'
31
+ end
32
+ system(cmd)
28
33
  end
29
34
 
30
35
  desc 'concatenates files'
@@ -70,6 +75,10 @@ module Dumbo
70
75
  desc 'creates regression tests from specs and runs them'
71
76
  task regression: ['all', 'db:test:prepare'] do
72
77
  ENV['DUMBO_REGRESSION'] = 'true'
78
+
79
+ FileUtils.mkdir_p('test/sql/')
80
+ FileUtils.mkdir_p('test/expected/')
81
+
73
82
  RSpec::Core::RakeTask.new(:spec).run_task(false)
74
83
 
75
84
  if $?.success?
@@ -40,7 +40,11 @@ module Dumbo
40
40
  end
41
41
 
42
42
  def query(sql)
43
- ActiveRecord::Base.connection.select_all(sql, 'SQL', [])
43
+ begin
44
+ ActiveRecord::Base.connection.select_all(sql, 'SQL', [])
45
+ rescue ActiveRecord::StatementInvalid => e
46
+ e
47
+ end
44
48
  end
45
49
 
46
50
  def create(table_name, values)
@@ -2,7 +2,7 @@ module Dumbo
2
2
  module Matchers
3
3
 
4
4
  # test a query result against an expectation
5
- # e.g.
5
+ # example
6
6
  # query("SELECT COUNT(*) FROM users").should match '3'
7
7
  # query("SELECT id, name FROM users").should match ['1', 'foo'] ,['2', 'bar'] ,['3', 'baz']
8
8
  # query("SELECT id, name FROM users").should match_with_header ['id', 'name'], ['1', 'foo'] ,['2', 'bar'] ,['3', 'baz']
@@ -21,8 +21,42 @@ module Dumbo
21
21
  QueryMatcher.new(flat_expected(expected), ordered: true )
22
22
  end
23
23
 
24
+ # test a query result against an error
25
+ # example
26
+ # query("SELECT 'foo'::date").should throw_error('ERROR: invalid input syntax for type date: "foo"')
27
+
28
+ def throw_error(expected)
29
+ ErrorMatcher.new(expected)
30
+ end
31
+
24
32
  def flat_expected(expected)
25
- expected.size == 1 ? expected.first.to_s : expected.map(&:to_s)
33
+ expected = expected.map{|e| e.nil? || e.kind_of?(Array) ? e : e.to_s}
34
+ expected.size == 1 ? expected.first : expected
35
+ end
36
+
37
+ class ErrorMatcher < RSpec::Matchers::BuiltIn::BaseMatcher
38
+ attr_reader :actual, :expected, :options, :actual_message
39
+
40
+ private
41
+
42
+ def match(expected, actual)
43
+ return false unless is_error?
44
+ @actual_message = @actual.message.split("\n").first.gsub(/^PG::InternalError: */,'')
45
+ actual_message.gsub(/^ERROR: */,'') == expected.gsub(/^ERROR: */,'')
46
+ end
47
+
48
+ def is_error?
49
+ actual.kind_of?(ActiveRecord::StatementInvalid)
50
+ end
51
+
52
+ def failure_message_when_not_error
53
+ "\nexpected error #{expected} but nothing was raised"
54
+ end
55
+
56
+ def failure_message
57
+ return "\nexpected error #{expected} but nothing was raised" unless is_error?
58
+ "expected ERROR: #{expected} got #{actual_message}"
59
+ end
26
60
  end
27
61
 
28
62
  class QueryMatcher < RSpec::Matchers::BuiltIn::ContainExactly
@@ -34,6 +68,7 @@ module Dumbo
34
68
  end
35
69
 
36
70
  def matches?(actual)
71
+ raise actual if actual.kind_of?(Exception)
37
72
  @actual = actual
38
73
  convert_actual
39
74
  convert_expected
@@ -1,4 +1,6 @@
1
1
  RSpec.configure do |config|
2
+ config.order = 'defined'
3
+
2
4
  config.before(:all) do |e|
3
5
  path = self.class.metadata[:file_path]
4
6
  test_file = Pathname.new(path).basename.sub_ext('.sql').sub('_spec','')
@@ -1,3 +1,3 @@
1
1
  module Dumbo
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
3
3
  end
@@ -3,4 +3,10 @@ EXTENSION = <%=ext_name%>
3
3
  PG_CONFIG ?= pg_config
4
4
  DATA = $(wildcard *--*.sql)
5
5
  PGXS := $(shell $(PG_CONFIG) --pgxs)
6
- include $(PGXS)
6
+ MODULE_big = <%=ext_name%>
7
+ OBJS = $(patsubst %.c,%.o,$(wildcard src/*.c))
8
+ TESTS = $(wildcard test/sql/*.sql)
9
+ REGRESS = $(patsubst test/sql/%.sql,%,$(TESTS))
10
+ REGRESS_OPTS = --inputdir=test --load-language=plpgsql
11
+ include $(PGXS)
12
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dumbo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Manuel Kniep
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-24 00:00:00.000000000 Z
11
+ date: 2014-07-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -179,7 +179,6 @@ files:
179
179
  - spec/operator_spec.rb
180
180
  - spec/spec_helper.rb
181
181
  - spec/support/extension_helper.rb
182
- - spec/support/silence_unknown_oid.rb
183
182
  - spec/type_spec.rb
184
183
  - template/Gemfile
185
184
  - template/Makefile.erb
@@ -228,5 +227,4 @@ test_files:
228
227
  - spec/operator_spec.rb
229
228
  - spec/spec_helper.rb
230
229
  - spec/support/extension_helper.rb
231
- - spec/support/silence_unknown_oid.rb
232
230
  - spec/type_spec.rb
@@ -1,12 +0,0 @@
1
- module ActiveRecord
2
- module ConnectionAdapters
3
- class PostgreSQLAdapter
4
- module DatabaseStatements
5
- def warn(msg)
6
- return if msg =~ /^unknown OID/
7
- super
8
- end
9
- end
10
- end
11
- end
12
- end