dumbo 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 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