ridgepole 0.6.6.beta → 0.6.6.beta2

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: 43b2e1e6fe82bc1adaecdf2e03682a3bd1756e2d
4
- data.tar.gz: 30ca92eea9cd6296e88293671a04d2511a4b3141
3
+ metadata.gz: 0df6fb1b72b3ab0c234c0f8b72c216dcff83b8c8
4
+ data.tar.gz: bf7df0782ede514d34dfaa0338b208b25b70005c
5
5
  SHA512:
6
- metadata.gz: 6eef1346bb2cbd9884ebe22728fbb22456e393fb2fdc39b44d274f6bad03d5bffed364131216fa37500e2498ce87760786adb6e4e1141b288fe0e9327d5f9936
7
- data.tar.gz: 073a3053fd3a2a2932d34cb03fc7122f13a283d50d7e73bca56c0bea03b7035f6d494d62d6724d1224163eadbfa53faa84c94357a428b1d6129517cea135b55e
6
+ metadata.gz: dc45bcdfc390d0f8fb556ca0e3fd8c3825cfea3de88acf76e5436fc96288aea717e141b97a4afd1ff61a17655b9636bf5e57aecef5f2f90cb14460e674610c64
7
+ data.tar.gz: '088b3823dcdd796f3f8b1d49b78135f37a0afe8c479552ca63ddd33983fe37c9f5697e38b85cb7024e0d7ee773e8c32bafc20a850674046c584f818f770fb4a8'
@@ -18,6 +18,8 @@ require 'ridgepole/default_limit'
18
18
  require 'ridgepole/delta'
19
19
  require 'ridgepole/diff'
20
20
  require 'ridgepole/dsl_parser'
21
+ require 'ridgepole/dsl_parser/context'
22
+ require 'ridgepole/dsl_parser/table_definition'
21
23
  require 'ridgepole/dumper'
22
24
  require 'ridgepole/execute_expander'
23
25
  require 'ridgepole/external_sql_executer'
@@ -1,255 +1,4 @@
1
1
  class Ridgepole::DSLParser
2
- class Context
3
- class TableDefinition
4
- attr_reader :__definition
5
-
6
- def initialize(table_name, base)
7
- @__definition = {}
8
- @table_name = table_name
9
- @base = base
10
- end
11
-
12
- def column(name, type, options = {})
13
- name = name.to_s
14
-
15
- @__definition[name] = {
16
- :type => type,
17
- :options => options,
18
- }
19
- end
20
-
21
- TYPES = [
22
- # https://github.com/rails/rails/blob/v4.2.1/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb#L274
23
- :string,
24
- :text,
25
- :integer,
26
- :bigint,
27
- :float,
28
- :decimal,
29
- :datetime,
30
- :timestamp,
31
- :time,
32
- :date,
33
- :binary,
34
- :boolean,
35
-
36
- # https://github.com/rails/rails/blob/v4.2.1/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb#L79
37
- :daterange,
38
- :numrange,
39
- :tsrange,
40
- :tstzrange,
41
- :int4range,
42
- :int8range,
43
- :binary,
44
- :boolean,
45
- :bigint,
46
- :xml,
47
- :tsvector,
48
- :hstore,
49
- :inet,
50
- :cidr,
51
- :macaddr,
52
- :uuid,
53
- :json,
54
- :jsonb,
55
- :ltree,
56
- :citext,
57
- :point,
58
- :bit,
59
- :bit_varying,
60
- :money,
61
- ].uniq
62
-
63
- TYPES.each do |column_type|
64
- define_method column_type do |*args|
65
- options = args.extract_options!
66
- column_names = args
67
- column_names.each {|name| column(name, column_type, options) }
68
- end
69
- end
70
-
71
- ALIAS_TYPES = {
72
- # https://github.com/rails/rails/blob/v5.0.0.rc1/activerecord/lib/active_record/connection_adapters/mysql/schema_definitions.rb
73
- tinyblob: [:blob, {limit: 255}],
74
- mediumblob: [:binary, {limit: 16777215}],
75
- longblob: [:binary, {limit: 4294967295}],
76
- tinytext: [:text, {limit: 255}],
77
- mediumtext: [:text, {limit: 16777215}],
78
- longtext: [:text, {limit: 4294967295}],
79
- unsigned_integer: [:integer, {unsigned: true}],
80
- unsigned_bigint: [:bigint, {unsigned: true}],
81
- unsigned_float: [:float, {limit: 24, unsigned: true}],
82
- unsigned_decimal: [:decimal, {precision: 10, unsigned: true}],
83
- }
84
-
85
- # XXX:
86
- def blob(*args)
87
- options = args.extract_options!
88
- options = {limit: 65535}.merge(options)
89
- column_names = args
90
-
91
- column_names.each do |name|
92
- column_type = (0..0xff).include?(options[:limit]) ? :blob : :binary
93
- column(name, column_type, options)
94
- end
95
- end
96
-
97
- ALIAS_TYPES.each do |alias_type, (column_type, default_options)|
98
- define_method alias_type do |*args|
99
- options = args.extract_options!
100
- options = default_options.merge(options)
101
- column_names = args
102
- column_names.each {|name| column(name, column_type, options) }
103
- end
104
- end
105
-
106
- def index(name, options = {})
107
- @base.add_index(@table_name, name, options)
108
- end
109
-
110
- def timestamps(*args)
111
- options = {:null => false}.merge(args.extract_options!)
112
- column(:created_at, :datetime, options)
113
- column(:updated_at, :datetime, options)
114
- end
115
-
116
- def references(*args)
117
- options = args.extract_options!
118
- polymorphic = options.delete(:polymorphic)
119
- index_options = options.delete(:index)
120
- type = options.delete(:type) || :integer
121
-
122
- args.each do |col|
123
- column("#{col}_id", type, options)
124
- column("#{col}_type", :string, polymorphic.is_a?(Hash) ? polymorphic : options) if polymorphic
125
- if index_options
126
- index("#{col}_id", index_options.is_a?(Hash) ? index_options : {})
127
- index("#{col}_type", index_options.is_a?(Hash) ? index_options : {}) if polymorphic
128
- end
129
- end
130
- end
131
- alias :belongs_to :references
132
- end
133
-
134
- attr_reader :__definition
135
- attr_reader :__execute
136
-
137
- def initialize(opts = {})
138
- @__working_dir = File.expand_path(opts[:path] ? File.dirname(opts[:path]) : Dir.pwd)
139
- @__definition = {}
140
- @__execute = []
141
- end
142
-
143
- def self.eval(dsl, opts = {})
144
- ctx = self.new(opts)
145
-
146
- if opts[:path]
147
- ctx.instance_eval(dsl, opts[:path])
148
- else
149
- ctx.instance_eval(dsl)
150
- end
151
-
152
- [ctx.__definition, ctx.__execute]
153
- end
154
-
155
- def create_table(table_name, options = {})
156
- table_name = table_name.to_s
157
- table_definition = TableDefinition.new(table_name, self)
158
-
159
- if options[:primary_key] and options[:primary_key].is_a?(Symbol)
160
- options[:primary_key] = options[:primary_key].to_s
161
- end
162
-
163
- yield(table_definition)
164
- @__definition[table_name] ||= {}
165
-
166
- if @__definition[table_name][:definition]
167
- raise "Table `#{table_name}` already defined"
168
- end
169
-
170
- @__definition[table_name][:definition] = table_definition.__definition
171
- options.delete(:force)
172
- @__definition[table_name][:options] = options
173
- end
174
-
175
- def add_index(table_name, column_name, options = {})
176
- table_name = table_name.to_s
177
- # Keep column_name for expression index support
178
- # https://github.com/rails/rails/pull/23393
179
- unless column_name.is_a?(String) && /\W/ === column_name
180
- column_name = [column_name].flatten.map {|i| i.to_s }
181
- end
182
- options[:name] = options[:name].to_s if options[:name]
183
- @__definition[table_name] ||= {}
184
- @__definition[table_name][:indices] ||= {}
185
- idx = options[:name] || column_name
186
-
187
- if @__definition[table_name][:indices][idx]
188
- raise "Index `#{table_name}(#{idx})` already defined"
189
- end
190
-
191
- if options[:length].is_a?(Numeric)
192
- index_length = options[:length]
193
- options[:length] = {}
194
-
195
- column_name.each do |col|
196
- options[:length][col] = index_length
197
- end
198
-
199
- # XXX: fix for https://github.com/rails/rails/commit/5025fd3a99c68f95bdd6fd43f382c62e9653236b
200
- if ActiveRecord::VERSION::MAJOR >= 6 or (ActiveRecord::VERSION::MAJOR == 5 and (ActiveRecord::VERSION::MINOR >= 1 or ActiveRecord::VERSION::TINY >= 1))
201
- options[:length] = options[:length].symbolize_keys
202
- end
203
- end
204
-
205
- @__definition[table_name][:indices][idx] = {
206
- :column_name => column_name,
207
- :options => options,
208
- }
209
- end
210
-
211
- def add_foreign_key(from_table, to_table, options = {})
212
- unless options[:name]
213
- raise "Foreign key name in `#{from_table}` is undefined"
214
- end
215
-
216
- from_table = from_table.to_s
217
- to_table = to_table.to_s
218
- options[:name] = options[:name].to_s
219
- @__definition[from_table] ||= {}
220
- @__definition[from_table][:foreign_keys] ||= {}
221
- idx = options[:name]
222
-
223
- if @__definition[from_table][:foreign_keys][idx]
224
- raise "Foreign Key `#{from_table}(#{idx})` already defined"
225
- end
226
-
227
- @__definition[from_table][:foreign_keys][idx] = {
228
- :to_table => to_table,
229
- :options => options,
230
- }
231
- end
232
-
233
- def require(file)
234
- schemafile = (file =~ %r|\A/|) ? file : File.join(@__working_dir, file)
235
-
236
- if File.exist?(schemafile)
237
- instance_eval(File.read(schemafile), schemafile)
238
- elsif File.exist?(schemafile + '.rb')
239
- instance_eval(File.read(schemafile + '.rb'), schemafile + '.rb')
240
- else
241
- Kernel.require(file)
242
- end
243
- end
244
-
245
- def execute(sql, name = nil, &cond)
246
- @__execute << {
247
- :sql => sql,
248
- :condition => cond,
249
- }
250
- end
251
- end
252
-
253
2
  def initialize(options = {})
254
3
  @options = options
255
4
  end
@@ -0,0 +1,121 @@
1
+ class Ridgepole::DSLParser
2
+ class Context
3
+ attr_reader :__definition
4
+ attr_reader :__execute
5
+
6
+ def initialize(opts = {})
7
+ @__working_dir = File.expand_path(opts[:path] ? File.dirname(opts[:path]) : Dir.pwd)
8
+ @__definition = {}
9
+ @__execute = []
10
+ end
11
+
12
+ def self.eval(dsl, opts = {})
13
+ ctx = self.new(opts)
14
+
15
+ if opts[:path]
16
+ ctx.instance_eval(dsl, opts[:path])
17
+ else
18
+ ctx.instance_eval(dsl)
19
+ end
20
+
21
+ [ctx.__definition, ctx.__execute]
22
+ end
23
+
24
+ def create_table(table_name, options = {})
25
+ table_name = table_name.to_s
26
+ table_definition = TableDefinition.new(table_name, self)
27
+
28
+ if options[:primary_key] and options[:primary_key].is_a?(Symbol)
29
+ options[:primary_key] = options[:primary_key].to_s
30
+ end
31
+
32
+ yield(table_definition)
33
+ @__definition[table_name] ||= {}
34
+
35
+ if @__definition[table_name][:definition]
36
+ raise "Table `#{table_name}` already defined"
37
+ end
38
+
39
+ @__definition[table_name][:definition] = table_definition.__definition
40
+ options.delete(:force)
41
+ @__definition[table_name][:options] = options
42
+ end
43
+
44
+ def add_index(table_name, column_name, options = {})
45
+ table_name = table_name.to_s
46
+ # Keep column_name for expression index support
47
+ # https://github.com/rails/rails/pull/23393
48
+ unless column_name.is_a?(String) && /\W/ === column_name
49
+ column_name = [column_name].flatten.map {|i| i.to_s }
50
+ end
51
+ options[:name] = options[:name].to_s if options[:name]
52
+ @__definition[table_name] ||= {}
53
+ @__definition[table_name][:indices] ||= {}
54
+ idx = options[:name] || column_name
55
+
56
+ if @__definition[table_name][:indices][idx]
57
+ raise "Index `#{table_name}(#{idx})` already defined"
58
+ end
59
+
60
+ if options[:length].is_a?(Numeric)
61
+ index_length = options[:length]
62
+ options[:length] = {}
63
+
64
+ column_name.each do |col|
65
+ options[:length][col] = index_length
66
+ end
67
+
68
+ # XXX: fix for https://github.com/rails/rails/commit/5025fd3a99c68f95bdd6fd43f382c62e9653236b
69
+ if ActiveRecord::VERSION::MAJOR >= 6 or (ActiveRecord::VERSION::MAJOR == 5 and (ActiveRecord::VERSION::MINOR >= 1 or ActiveRecord::VERSION::TINY >= 1))
70
+ options[:length] = options[:length].symbolize_keys
71
+ end
72
+ end
73
+
74
+ @__definition[table_name][:indices][idx] = {
75
+ :column_name => column_name,
76
+ :options => options,
77
+ }
78
+ end
79
+
80
+ def add_foreign_key(from_table, to_table, options = {})
81
+ unless options[:name]
82
+ raise "Foreign key name in `#{from_table}` is undefined"
83
+ end
84
+
85
+ from_table = from_table.to_s
86
+ to_table = to_table.to_s
87
+ options[:name] = options[:name].to_s
88
+ @__definition[from_table] ||= {}
89
+ @__definition[from_table][:foreign_keys] ||= {}
90
+ idx = options[:name]
91
+
92
+ if @__definition[from_table][:foreign_keys][idx]
93
+ raise "Foreign Key `#{from_table}(#{idx})` already defined"
94
+ end
95
+
96
+ @__definition[from_table][:foreign_keys][idx] = {
97
+ :to_table => to_table,
98
+ :options => options,
99
+ }
100
+ end
101
+
102
+ def require(file)
103
+ schemafile = (file =~ %r|\A/|) ? file : File.join(@__working_dir, file)
104
+
105
+ if File.exist?(schemafile)
106
+ instance_eval(File.read(schemafile), schemafile)
107
+ elsif File.exist?(schemafile + '.rb')
108
+ instance_eval(File.read(schemafile + '.rb'), schemafile + '.rb')
109
+ else
110
+ Kernel.require(file)
111
+ end
112
+ end
113
+
114
+ def execute(sql, name = nil, &cond)
115
+ @__execute << {
116
+ :sql => sql,
117
+ :condition => cond,
118
+ }
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,132 @@
1
+ class Ridgepole::DSLParser
2
+ class TableDefinition
3
+ attr_reader :__definition
4
+
5
+ def initialize(table_name, base)
6
+ @__definition = {}
7
+ @table_name = table_name
8
+ @base = base
9
+ end
10
+
11
+ def column(name, type, options = {})
12
+ name = name.to_s
13
+
14
+ @__definition[name] = {
15
+ :type => type,
16
+ :options => options,
17
+ }
18
+ end
19
+
20
+ TYPES = [
21
+ # https://github.com/rails/rails/blob/v4.2.1/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb#L274
22
+ :string,
23
+ :text,
24
+ :integer,
25
+ :bigint,
26
+ :float,
27
+ :decimal,
28
+ :datetime,
29
+ :timestamp,
30
+ :time,
31
+ :date,
32
+ :binary,
33
+ :boolean,
34
+
35
+ # https://github.com/rails/rails/blob/v4.2.1/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb#L79
36
+ :daterange,
37
+ :numrange,
38
+ :tsrange,
39
+ :tstzrange,
40
+ :int4range,
41
+ :int8range,
42
+ :binary,
43
+ :boolean,
44
+ :bigint,
45
+ :xml,
46
+ :tsvector,
47
+ :hstore,
48
+ :inet,
49
+ :cidr,
50
+ :macaddr,
51
+ :uuid,
52
+ :json,
53
+ :jsonb,
54
+ :ltree,
55
+ :citext,
56
+ :point,
57
+ :bit,
58
+ :bit_varying,
59
+ :money,
60
+ ].uniq
61
+
62
+ TYPES.each do |column_type|
63
+ define_method column_type do |*args|
64
+ options = args.extract_options!
65
+ column_names = args
66
+ column_names.each {|name| column(name, column_type, options) }
67
+ end
68
+ end
69
+
70
+ ALIAS_TYPES = {
71
+ # https://github.com/rails/rails/blob/v5.0.0.rc1/activerecord/lib/active_record/connection_adapters/mysql/schema_definitions.rb
72
+ tinyblob: [:blob, {limit: 255}],
73
+ mediumblob: [:binary, {limit: 16777215}],
74
+ longblob: [:binary, {limit: 4294967295}],
75
+ tinytext: [:text, {limit: 255}],
76
+ mediumtext: [:text, {limit: 16777215}],
77
+ longtext: [:text, {limit: 4294967295}],
78
+ unsigned_integer: [:integer, {unsigned: true}],
79
+ unsigned_bigint: [:bigint, {unsigned: true}],
80
+ unsigned_float: [:float, {limit: 24, unsigned: true}],
81
+ unsigned_decimal: [:decimal, {precision: 10, unsigned: true}],
82
+ }
83
+
84
+ # XXX:
85
+ def blob(*args)
86
+ options = args.extract_options!
87
+ options = {limit: 65535}.merge(options)
88
+ column_names = args
89
+
90
+ column_names.each do |name|
91
+ column_type = (0..0xff).include?(options[:limit]) ? :blob : :binary
92
+ column(name, column_type, options)
93
+ end
94
+ end
95
+
96
+ ALIAS_TYPES.each do |alias_type, (column_type, default_options)|
97
+ define_method alias_type do |*args|
98
+ options = args.extract_options!
99
+ options = default_options.merge(options)
100
+ column_names = args
101
+ column_names.each {|name| column(name, column_type, options) }
102
+ end
103
+ end
104
+
105
+ def index(name, options = {})
106
+ @base.add_index(@table_name, name, options)
107
+ end
108
+
109
+ def timestamps(*args)
110
+ options = {:null => false}.merge(args.extract_options!)
111
+ column(:created_at, :datetime, options)
112
+ column(:updated_at, :datetime, options)
113
+ end
114
+
115
+ def references(*args)
116
+ options = args.extract_options!
117
+ polymorphic = options.delete(:polymorphic)
118
+ index_options = options.delete(:index)
119
+ type = options.delete(:type) || :integer
120
+
121
+ args.each do |col|
122
+ column("#{col}_id", type, options)
123
+ column("#{col}_type", :string, polymorphic.is_a?(Hash) ? polymorphic : options) if polymorphic
124
+ if index_options
125
+ index("#{col}_id", index_options.is_a?(Hash) ? index_options : {})
126
+ index("#{col}_type", index_options.is_a?(Hash) ? index_options : {}) if polymorphic
127
+ end
128
+ end
129
+ end
130
+ alias :belongs_to :references
131
+ end
132
+ end
@@ -1,3 +1,3 @@
1
1
  module Ridgepole
2
- VERSION = '0.6.6.beta'
2
+ VERSION = '0.6.6.beta2'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ridgepole
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.6.beta
4
+ version: 0.6.6.beta2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-02 00:00:00.000000000 Z
11
+ date: 2017-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -226,6 +226,8 @@ files:
226
226
  - lib/ridgepole/delta.rb
227
227
  - lib/ridgepole/diff.rb
228
228
  - lib/ridgepole/dsl_parser.rb
229
+ - lib/ridgepole/dsl_parser/context.rb
230
+ - lib/ridgepole/dsl_parser/table_definition.rb
229
231
  - lib/ridgepole/dumper.rb
230
232
  - lib/ridgepole/execute_expander.rb
231
233
  - lib/ridgepole/ext/abstract_mysql_adapter/disable_table_options.rb