hairtrigger 0.2.13 → 0.2.14

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,6 @@
1
1
  module HairTrigger
2
2
  module SchemaDumper
3
+
3
4
  def trailer_with_triggers(stream)
4
5
  orig_show_warnings = Builder.show_warnings
5
6
  Builder.show_warnings = false # we already show them when running the migration
@@ -10,13 +11,15 @@ module HairTrigger
10
11
  end
11
12
 
12
13
  def triggers(stream)
13
- @connection = ActiveRecord::Base.connection
14
14
  @adapter_name = @connection.adapter_name.downcase.to_sym
15
15
 
16
- db_triggers = @connection.triggers; nil
16
+ all_triggers = @connection.triggers
17
17
  db_trigger_warnings = {}
18
+ migration_trigger_builders = []
19
+
20
+ db_triggers = whitelist_triggers(all_triggers)
18
21
 
19
- migration_triggers = HairTrigger.current_migrations(:in_rake_task => true, :previous_schema => self.class.previous_schema).map do |(name, builder)|
22
+ migration_triggers = HairTrigger.current_migrations(:in_rake_task => true, :previous_schema => self.class.previous_schema).map do |(_, builder)|
20
23
  definitions = []
21
24
  builder.generate.each do |statement|
22
25
  if statement =~ /\ACREATE(.*TRIGGER| FUNCTION) ([^ \n]+)/
@@ -30,12 +33,13 @@ module HairTrigger
30
33
  next unless migration[:definitions].all? do |(name, definition, type)|
31
34
  db_triggers[name] && (db_trigger_warnings[name] = true) && db_triggers[name] == normalize_trigger(name, definition, type)
32
35
  end
33
- migration[:definitions].each do |(name, trigger, type)|
36
+
37
+ migration[:definitions].each do |(name, _, _)|
34
38
  db_triggers.delete(name)
35
39
  db_trigger_warnings.delete(name)
36
40
  end
37
41
 
38
- stream.print migration[:builder].to_ruby(' ', false) + "\n\n"
42
+ migration_trigger_builders << migration[:builder]
39
43
  end
40
44
 
41
45
  db_triggers.to_a.sort_by{ |t| (t.first + 'a').sub(/\(/, '_') }.each do |(name, definition)|
@@ -51,10 +55,11 @@ module HairTrigger
51
55
  stream.print " execute(#{definition.inspect})\n\n"
52
56
  end
53
57
  end
58
+
59
+ migration_trigger_builders.each { |builder| stream.print builder.to_ruby(' ', false) + "\n\n" }
54
60
  end
55
61
 
56
62
  def normalize_trigger(name, definition, type)
57
- @connection = ActiveRecord::Base.connection
58
63
  @adapter_name = @connection.adapter_name.downcase.to_sym
59
64
 
60
65
  return definition unless @adapter_name == :postgresql
@@ -79,6 +84,12 @@ module HairTrigger
79
84
  definition
80
85
  end
81
86
 
87
+ def whitelist_triggers(triggers)
88
+ triggers.reject do |name, source|
89
+ ActiveRecord::SchemaDumper.ignore_tables.any? { |ignored_table_name| source =~ /ON\s+#{@connection.quote_table_name(ignored_table_name)}\s/ }
90
+ end
91
+ end
92
+
82
93
  def self.included(base)
83
94
  base.class_eval do
84
95
  alias_method_chain :trailer, :triggers
@@ -1,5 +1,5 @@
1
1
  module HairTrigger
2
- VERSION = "0.2.13"
2
+ VERSION = "0.2.14"
3
3
 
4
4
  def VERSION.<=>(other)
5
5
  split(/\./).map(&:to_i) <=> other.split(/\./).map(&:to_i)
@@ -44,6 +44,26 @@ describe "schema dumping" do
44
44
  schema_rb.should match(/bob_count \+ 1/)
45
45
  schema_rb.should_not match(/bob_count \+ 2/)
46
46
  end
47
+
48
+ it 'should take in consideration active record schema dumper ignore_tables option with regexp' do
49
+ ActiveRecord::SchemaDumper.ignore_tables = [/users/]
50
+
51
+ dump_schema.should_not match(/create_trigger/)
52
+ end
53
+
54
+ it 'should take in consideration active record schema dumper ignore_tables option with string' do
55
+ ActiveRecord::SchemaDumper.ignore_tables = ['users']
56
+
57
+ dump_schema.should_not match(/create_trigger/)
58
+ end
59
+
60
+ it 'should take in consideration active record schema dumper ignore_tables option with partial string' do
61
+ ActiveRecord::SchemaDumper.ignore_tables = ['user']
62
+
63
+ dump_schema.should match(/create_trigger/)
64
+ end
65
+
66
+
47
67
  end
48
68
 
49
69
  context "with schema.rb" do
@@ -79,6 +99,26 @@ describe "schema dumping" do
79
99
  schema_rb.should match(/bob_count \+ 1/)
80
100
  schema_rb.should_not match(/bob_count \+ 2/)
81
101
  end
102
+
103
+ it 'should take in consideration active record schema dumper ignore_tables option with regexp' do
104
+ ActiveRecord::SchemaDumper.ignore_tables = [/users/]
105
+
106
+ dump_schema.should_not match(/create_trigger/)
107
+ end
108
+
109
+ it 'should take in consideration active record schema dumper ignore_tables option with string' do
110
+ ActiveRecord::SchemaDumper.ignore_tables = ['users']
111
+
112
+ dump_schema.should_not match(/create_trigger/)
113
+ end
114
+
115
+ it 'should take in consideration active record schema dumper ignore_tables option with partial string' do
116
+ ActiveRecord::SchemaDumper.ignore_tables = ['user']
117
+
118
+ dump_schema.should match(/create_trigger/)
119
+ end
120
+
82
121
  end
122
+
83
123
  end
84
124
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hairtrigger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.13
4
+ version: 0.2.14
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-04-28 00:00:00.000000000 Z
12
+ date: 2015-05-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord