schema_monkey 0.1.1 → 0.2.0

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: c4534a8c95816c85a333de4434a6860c6cf88355
4
- data.tar.gz: 40790953a4bc72e089e6b98d8c6f05ed60b0a325
3
+ metadata.gz: 64213e6bb8ad8a77e11fb2f07d485297cfde3274
4
+ data.tar.gz: e565725ac60a6c33273d17361a298e645c75534c
5
5
  SHA512:
6
- metadata.gz: dc39a71f177831f7a2990d4094f1f12ce4dbc35b0f9dab09fe44dde5607f01379a6200aa3f0188eff9f7210e66a21b43f196923e5b19e4d1de0210ae3bdd7a63
7
- data.tar.gz: 61853f39c37f937e9dfc61c1cf2603f30bc9c0775b268284de3191a68fd63ced74db388735c2466a903adc102d2e091d6fbdec0c987b2c1e057fc5b638d4eaeb
6
+ metadata.gz: 7db8563d4c8d9c15b3be4ba2e8f81b1a0bcdfb3ce438591984e6157891957ca6bbd09734116b6f044a061c883bca2ff8b53a03035f693f1615d4cb08adf874c1
7
+ data.tar.gz: 1132f8762ff275080817795e6744348352dbed392f9ac742a7ddeece6e9d39973b3c30ef9e1e9cae34bc82467a2679cb0ac53743aa76758b7a8aa2204c64b883
@@ -14,13 +14,13 @@ module SchemaMonkey
14
14
  end
15
15
 
16
16
  def indexes_with_schema_monkey(table_name, query_name=nil)
17
- Middleware::Query::Indexes.start connection: self, table_name: table_name, query_name: query_name do |env|
17
+ Middleware::Query::Indexes.start connection: self, table_name: table_name, query_name: query_name, index_definitions: [] do |env|
18
18
  env.index_definitions += indexes_without_schema_monkey env.table_name, env.query_name
19
19
  end
20
20
  end
21
21
 
22
22
  def tables_with_schema_monkey(query_name=nil, database=nil, like=nil)
23
- Middleware::Query::Tables.start connection: self, query_name: query_name, database: database, like: like do |env|
23
+ Middleware::Query::Tables.start connection: self, query_name: query_name, database: database, like: like, tables: [] do |env|
24
24
  env.tables += tables_without_schema_monkey env.query_name, env.database, env.like
25
25
  end
26
26
  end
@@ -20,7 +20,7 @@ module SchemaMonkey
20
20
  end
21
21
 
22
22
  def indexes_with_schema_monkey(table_name, query_name=nil)
23
- Middleware::Query::Indexes.start connection: self, table_name: table_name, query_name: query_name do |env|
23
+ Middleware::Query::Indexes.start connection: self, table_name: table_name, query_name: query_name, index_definitions: [] do |env|
24
24
  env.index_definitions += indexes_without_schema_monkey env.table_name, env.query_name
25
25
  end
26
26
  end
@@ -14,13 +14,13 @@ module SchemaMonkey
14
14
  end
15
15
 
16
16
  def indexes_with_schema_monkey(table_name, query_name=nil)
17
- Middleware::Query::Indexes.start connection: self, table_name: table_name, query_name: query_name do |env|
17
+ Middleware::Query::Indexes.start connection: self, table_name: table_name, query_name: query_name, index_definitions: [] do |env|
18
18
  env.index_definitions += indexes_without_schema_monkey env.table_name, env.query_name
19
19
  end
20
20
  end
21
21
 
22
22
  def tables_with_schema_monkey(query_name=nil, table_name=nil)
23
- Middleware::Query::Tables.start connection: self, query_name: query_name, table_name: table_name do |env|
23
+ Middleware::Query::Tables.start connection: self, query_name: query_name, table_name: table_name, tables: [] do |env|
24
24
  env.tables += tables_without_schema_monkey env.query_name, env.table_name
25
25
  end
26
26
  end
@@ -48,15 +48,22 @@ module SchemaMonkey
48
48
  @dependencies[tablename].sort.uniq.reject{|t| @dumper.ignored? t}.each(&block)
49
49
  end
50
50
 
51
- class Table < KeyStruct[:name, :pname, :options, :columns, statements: [], trailer: []]
51
+ class Table < KeyStruct[:name, :pname, :options, :columns, :indexes, :statements, :trailer]
52
+ def initialize(*args)
53
+ super
54
+ self.columns ||= []
55
+ self.indexes ||= []
56
+ self.statements ||= []
57
+ self.trailer ||= []
58
+ end
52
59
 
53
60
  def assemble(stream)
54
61
  stream.write " create_table #{pname.inspect}"
55
62
  stream.write ", #{options}" unless options.blank?
56
63
  stream.puts " do |t|"
57
- typelen = @columns.map{|col| col.type.length}.max
58
- namelen = @columns.map{|col| col.name.length}.max
59
- @columns.each do |column|
64
+ typelen = columns.map{|col| col.type.length}.max
65
+ namelen = columns.map{|col| col.name.length}.max
66
+ columns.each do |column|
60
67
  stream.write " "
61
68
  column.assemble(stream, typelen, namelen)
62
69
  stream.puts ""
@@ -65,6 +72,11 @@ module SchemaMonkey
65
72
  stream.puts " #{statement}"
66
73
  end
67
74
  stream.puts " end"
75
+ indexes.each do |index|
76
+ stream.write " add_index #{pname.inspect}, "
77
+ index.assemble(stream)
78
+ stream.puts ""
79
+ end
68
80
  trailer.each do |statement|
69
81
  stream.puts " #{statement}"
70
82
  end
@@ -95,6 +107,21 @@ module SchemaMonkey
95
107
  stream.write "# #{comments}" unless comments.blank?
96
108
  end
97
109
  end
110
+
111
+ class Index < KeyStruct[:name, :columns, :options]
112
+
113
+ def add_option(option)
114
+ self.options = [options, option].reject(&:blank?).join(', ')
115
+ end
116
+
117
+ def assemble(stream)
118
+ stream.write [
119
+ columns.inspect,
120
+ "name: #{name.inspect}",
121
+ options
122
+ ].reject(&:blank?).join(", ")
123
+ end
124
+ end
98
125
  end
99
126
  end
100
127
 
@@ -106,6 +133,7 @@ module SchemaMonkey
106
133
  alias_method_chain :table, :schema_monkey
107
134
  alias_method_chain :foreign_keys, :schema_monkey
108
135
  alias_method_chain :trailer, :schema_monkey
136
+ alias_method_chain :indexes, :schema_monkey
109
137
  public :ignored?
110
138
  end
111
139
  end
@@ -132,7 +160,7 @@ module SchemaMonkey
132
160
  Middleware::Dumper::Extensions.start dumper: self, connection: @connection, extensions: @dump.extensions do |env|
133
161
  stream = StringIO.new
134
162
  extensions_without_schema_monkey(stream)
135
- @dump.extensions << stream.string unless stream.string.blank?
163
+ env.dump.extensions << stream.string unless stream.string.blank?
136
164
  end
137
165
  end
138
166
 
@@ -174,6 +202,26 @@ module SchemaMonkey
174
202
  }
175
203
  end
176
204
  end
205
+
206
+ def indexes_with_schema_monkey(table, _)
207
+ Middleware::Dumper::Indexes.start dumper: self, connection: @connection, dump: @dump, table: @dump.tables[table] do |env|
208
+ stream = StringIO.new
209
+ indexes_without_schema_monkey(env.table.name, stream)
210
+ env.table.indexes += stream.string.split("\n").map { |string|
211
+ m = string.strip.match %r{
212
+ ^
213
+ add_index \s*
214
+ [:'"](?<table>[^'"\s]+)['"]? \s* , \s*
215
+ (?<columns>.*) \s*
216
+ name: \s* [:'"](?<name>[^'"\s]+)['"]? \s*
217
+ (, \s* (?<options>.*))?
218
+ $
219
+ }x
220
+ columns = m[:columns].tr(%q{[]'":}, '').strip.split(/\s*,\s*/)
221
+ Dump::Table::Index.new name: m[:name], columns: columns, options: m[:options]
222
+ }
223
+ end
224
+ end
177
225
  end
178
226
  end
179
227
  end
@@ -48,12 +48,12 @@ module SchemaMonkey
48
48
  extend Stack
49
49
  # :database and :like are only for mysql
50
50
  # :table_name is only for sqlite3
51
- Env = KeyStruct[:connection, :query_name, :table_name, :database, :like, tables: []]
51
+ Env = KeyStruct[:connection, :query_name, :table_name, :database, :like, :tables]
52
52
  end
53
53
 
54
54
  module Indexes
55
55
  extend Stack
56
- Env = KeyStruct[:connection, :table_name, :query_name, index_definitions: []]
56
+ Env = KeyStruct[:connection, :table_name, :query_name, :index_definitions]
57
57
  end
58
58
  end
59
59
 
@@ -95,6 +95,10 @@ module SchemaMonkey
95
95
  extend Stack
96
96
  Env = KeyStruct[:dumper, :connection, :dump, :table]
97
97
  end
98
+ module Indexes
99
+ extend Stack
100
+ Env = KeyStruct[:dumper, :connection, :dump, :table]
101
+ end
98
102
  end
99
103
 
100
104
  module Model
@@ -39,9 +39,9 @@ module SchemaMonkey
39
39
  modules << parent if opts.and_self
40
40
  modules += parent.constants.reject{|c| parent.autoload? c}.map{|c| parent.const_get(c)}.select(&it.is_a?(Module))
41
41
  modules.reject! &it.to_s =~ opts.reject if opts.reject
42
+ modules += modules.flat_map { |mod| get_modules(mod, reject: opts.reject, recursive: true) } if opts.recursive
42
43
  modules.select! &it.to_s =~ opts.match if opts.match
43
44
  modules.select! &it.respond_to?(opts.respond_to) if opts.respond_to
44
- modules += modules.flat_map { |mod| get_modules(mod, opts.except(:prefix, :and_self)) } if opts.recursive
45
45
  modules
46
46
  end
47
47
  end
@@ -1,3 +1,3 @@
1
1
  module SchemaMonkey
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schema_monkey
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ronen barzel