ridgepole 0.6.5.beta14 → 0.6.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +4 -3
- data/README.md +13 -1
- data/bin/ridgepole +1 -1
- data/lib/ridgepole/client.rb +4 -4
- data/lib/ridgepole/dsl_parser.rb +5 -0
- data/lib/ridgepole/dumper.rb +14 -7
- data/lib/ridgepole/execute_expander.rb +1 -1
- data/lib/ridgepole/ext/abstract_mysql_adapter/disable_table_options.rb +3 -1
- data/lib/ridgepole/external_sql_executer.rb +1 -1
- data/lib/ridgepole/version.rb +1 -1
- data/spec/erb_helper.rb +4 -0
- data/spec/mysql/fk/migrate_change_fk_spec.rb +0 -6
- data/spec/mysql/~default_name_fk/migrate_change_fk_spec.rb +1 -7
- data/spec/mysql/~default_name_fk/migrate_create_fk_spec.rb +7 -7
- data/spec/mysql/~default_name_fk/migrate_drop_fk_spec.rb +4 -4
- data/spec/postgresql/~default_name_fk/migrate_change_fk_spec.rb +1 -1
- data/spec/postgresql/~default_name_fk/migrate_create_fk_spec.rb +7 -7
- data/spec/postgresql/~default_name_fk/migrate_drop_fk_spec.rb +4 -4
- data/spec/spec_const.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c0b8970049df58ea142eb1bc723846cb5099eb5b
|
4
|
+
data.tar.gz: 886ba18f1c6b97e60756241ec8d4d6bc7e2e5c94
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9806a409967575629a43d02b7cf9bf1ee42345a89fd7d004ab41b9c853bbc340434e5c4aa8b92db6ed707a5f26c612d3cda8c1d63ecb937ff6f1b612b1a1e110
|
7
|
+
data.tar.gz: d2491149f7e4d0f73747832c65e7b69b77232f6f6995a5845b90146e98fc94d5d058013242c2598282b12ba3d5cb3ccf2ccaac3741fe8cafe442808a0d08e557
|
data/.travis.yml
CHANGED
@@ -5,12 +5,13 @@ cache:
|
|
5
5
|
- bundler
|
6
6
|
- apt
|
7
7
|
rvm:
|
8
|
-
- 2.2.
|
9
|
-
- 2.3.
|
8
|
+
- 2.2.5
|
9
|
+
- 2.3.3
|
10
10
|
before_install:
|
11
11
|
- gem install bundler
|
12
|
-
- sudo service postgresql stop
|
13
12
|
before_script:
|
13
|
+
- sudo service mysql stop
|
14
|
+
- sudo service postgresql stop
|
14
15
|
- docker-compose up -d
|
15
16
|
- function mysql_ping { mysqladmin -u root -h 127.0.0.1 -ppassword ping > /dev/null 2> /dev/null; }
|
16
17
|
- function pg_ping { PGPASSWORD=password pg_isready -U postgres -h 127.0.0.1 > /dev/null 2> /dev/null; }
|
data/README.md
CHANGED
@@ -9,6 +9,18 @@ It defines DB schema using [Rails DSL](http://guides.rubyonrails.org/migrations.
|
|
9
9
|
[![Build Status](https://travis-ci.org/winebarrel/ridgepole.svg?branch=master)](https://travis-ci.org/winebarrel/ridgepole)
|
10
10
|
[![Coverage Status](https://coveralls.io/repos/winebarrel/ridgepole/badge.svg?branch=master)](https://coveralls.io/r/winebarrel/ridgepole?branch=master)
|
11
11
|
|
12
|
+
**Important**
|
13
|
+
|
14
|
+
Please don't use the following nameless fk:
|
15
|
+
|
16
|
+
```ruby
|
17
|
+
add_foreign_key :articles, :authors # without `name:`
|
18
|
+
```
|
19
|
+
|
20
|
+
**It is highly recommended to give a name to the fk explicitly.**
|
21
|
+
|
22
|
+
![](https://cdn.pbrd.co/images/8Ymz6nU5x.gif)
|
23
|
+
|
12
24
|
**Notice**
|
13
25
|
|
14
26
|
* `>= 0.4.8`
|
@@ -205,7 +217,7 @@ add_index "child", ["parent_id"], name: "par_ind", using: :btree
|
|
205
217
|
add_foreign_key "child", "parent", name: "child_ibfk_1"
|
206
218
|
```
|
207
219
|
|
208
|
-
**Notice:** It is recommended to give a name to the
|
220
|
+
**Notice:** **It is highly recommended to give a name to the fk explicitly.**
|
209
221
|
|
210
222
|
Please pass `--dump-with-default-fk-name` option if you want to use the nameless index.
|
211
223
|
|
data/bin/ridgepole
CHANGED
@@ -112,7 +112,7 @@ ARGV.options do |opt|
|
|
112
112
|
opt.on('', '--enable-mysql-awesome') { options[:enable_mysql_awesome] = true }
|
113
113
|
opt.on('', '--mysql-use-alter') { options[:mysql_use_alter] = true }
|
114
114
|
opt.on('', '--dump-without-table-options') { options[:dump_without_table_options] = true }
|
115
|
-
opt.on('', '--dump-with-default-fk-name') { options[:
|
115
|
+
opt.on('', '--dump-with-default-fk-name') { options[:dump_with_default_fk_name] = true }
|
116
116
|
opt.on('', '--index-removed-drop-column') { options[:index_removed_drop_column] = true }
|
117
117
|
opt.on('-r', '--require LIBS', Array) {|v| v.each {|i| require i } }
|
118
118
|
opt.on('' , '--log-file LOG_FILE') {|v| options[:log_file] = v }
|
data/lib/ridgepole/client.rb
CHANGED
@@ -22,7 +22,7 @@ class Ridgepole::Client
|
|
22
22
|
require 'ridgepole/ext/abstract_mysql_adapter/use_alter_index'
|
23
23
|
end
|
24
24
|
|
25
|
-
if @options[:
|
25
|
+
if @options[:dump_with_default_fk_name]
|
26
26
|
require 'ridgepole/ext/schema_dumper'
|
27
27
|
end
|
28
28
|
|
@@ -43,7 +43,7 @@ class Ridgepole::Client
|
|
43
43
|
logger.verbose_info('# Parse DSL')
|
44
44
|
expected_definition, expected_execute = @parser.parse(dsl, opts)
|
45
45
|
logger.verbose_info('# Load tables')
|
46
|
-
current_definition,
|
46
|
+
current_definition, _current_execute = @parser.parse(@dumper.dump, opts)
|
47
47
|
logger.verbose_info('# Compare definitions')
|
48
48
|
@diff.diff(current_definition, expected_definition, :execute => expected_execute)
|
49
49
|
end
|
@@ -53,9 +53,9 @@ class Ridgepole::Client
|
|
53
53
|
logger = Ridgepole::Logger.instance
|
54
54
|
|
55
55
|
logger.verbose_info('# Parse DSL1')
|
56
|
-
definition1,
|
56
|
+
definition1, _execute1 = load_definition(dsl_or_config1, options)
|
57
57
|
logger.verbose_info('# Parse DSL2')
|
58
|
-
definition2,
|
58
|
+
definition2, _execute2 = load_definition(dsl_or_config2, options)
|
59
59
|
|
60
60
|
logger.verbose_info('# Compare definitions')
|
61
61
|
diff = Ridgepole::Diff.new(options)
|
data/lib/ridgepole/dsl_parser.rb
CHANGED
@@ -195,6 +195,11 @@ class Ridgepole::DSLParser
|
|
195
195
|
column_name.each do |col|
|
196
196
|
options[:length][col] = index_length
|
197
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
|
198
203
|
end
|
199
204
|
|
200
205
|
@__definition[table_name][:indices][idx] = {
|
data/lib/ridgepole/dumper.rb
CHANGED
@@ -30,17 +30,24 @@ class Ridgepole::Dumper
|
|
30
30
|
ActiveRecord::SchemaDumper.ignore_tables.clear
|
31
31
|
end
|
32
32
|
|
33
|
-
dsl = stream.string.lines.select
|
33
|
+
dsl = stream.string.lines.select do |line|
|
34
34
|
line !~ /\A#/ &&
|
35
35
|
line !~ /\AActiveRecord::Schema\.define/ &&
|
36
36
|
line !~ /\Aend/
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
37
|
+
end
|
38
|
+
|
39
|
+
# XXX: for activerecord-mysql-awesome
|
40
|
+
if ActiveRecord::VERSION::MAJOR < 5
|
41
|
+
dsl = dsl.map do |line|
|
42
|
+
if @options[:dump_without_table_options] and line =~ /\A create_table /
|
43
|
+
line.gsub(/, options: ("(?:[^"]|\")*")/, '')
|
44
|
+
else
|
45
|
+
line
|
46
|
+
end
|
42
47
|
end
|
43
|
-
|
48
|
+
end
|
49
|
+
|
50
|
+
dsl = dsl.join.strip_heredoc
|
44
51
|
|
45
52
|
definitions = []
|
46
53
|
|
data/lib/ridgepole/version.rb
CHANGED
data/spec/erb_helper.rb
CHANGED
@@ -11,6 +11,10 @@ end
|
|
11
11
|
|
12
12
|
ERBh.define_method(:add_index) do |table_name, column_name, options|
|
13
13
|
if condition(:activerecord_5)
|
14
|
+
if options[:length].is_a?(Hash)
|
15
|
+
options[:length] = options[:length].symbolize_keys
|
16
|
+
end
|
17
|
+
|
14
18
|
@_erbout.sub!(/\bend\s*\z/, '')
|
15
19
|
|
16
20
|
<<-EOS
|
@@ -54,12 +54,6 @@ add_foreign_key "child", "parent", name: "child_ibfk_1"
|
|
54
54
|
expect(delta.differ?).to be_truthy
|
55
55
|
expect(subject.dump).to match_fuzzy sorted_actual_dsl
|
56
56
|
delta.migrate
|
57
|
-
|
58
|
-
# XXX:
|
59
|
-
if condition(:activerecord_5)
|
60
|
-
ActiveRecord::Base.connection.send(:create_table_info_cache).clear
|
61
|
-
end
|
62
|
-
|
63
57
|
expect(subject.dump).to match_fuzzy expected_dsl
|
64
58
|
}
|
65
59
|
end
|
@@ -47,19 +47,13 @@ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
|
|
47
47
|
|
48
48
|
before { subject.diff(actual_dsl).migrate }
|
49
49
|
|
50
|
-
subject { client(
|
50
|
+
subject { client(dump_with_default_fk_name: true) }
|
51
51
|
|
52
52
|
it {
|
53
53
|
delta = subject.diff(expected_dsl)
|
54
54
|
expect(delta.differ?).to be_truthy
|
55
55
|
expect(subject.dump).to match_fuzzy sorted_actual_dsl
|
56
56
|
delta.migrate
|
57
|
-
|
58
|
-
# XXX:
|
59
|
-
if condition(:activerecord_5)
|
60
|
-
ActiveRecord::Base.connection.send(:create_table_info_cache).clear
|
61
|
-
end
|
62
|
-
|
63
57
|
expect(subject.dump).to match_fuzzy expected_dsl
|
64
58
|
}
|
65
59
|
end
|
@@ -21,7 +21,7 @@ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
|
|
21
21
|
}
|
22
22
|
|
23
23
|
before { subject.diff(actual_dsl).migrate }
|
24
|
-
subject { client(
|
24
|
+
subject { client(dump_with_default_fk_name: true) }
|
25
25
|
|
26
26
|
it {
|
27
27
|
delta = subject.diff(expected_dsl)
|
@@ -32,7 +32,7 @@ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
|
|
32
32
|
}
|
33
33
|
|
34
34
|
it {
|
35
|
-
delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true, default_int_limit: 4,
|
35
|
+
delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true, default_int_limit: 4, dump_with_default_fk_name: true)
|
36
36
|
expect(delta.differ?).to be_truthy
|
37
37
|
expect(delta.script).to match_fuzzy <<-EOS
|
38
38
|
remove_foreign_key("child", {:name=>"fk_rails_e74ce85cbc"})
|
@@ -40,7 +40,7 @@ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
|
|
40
40
|
}
|
41
41
|
|
42
42
|
it {
|
43
|
-
delta = client(bulk_change: true,
|
43
|
+
delta = client(bulk_change: true, dump_with_default_fk_name: true).diff(expected_dsl)
|
44
44
|
expect(delta.differ?).to be_truthy
|
45
45
|
expect(subject.dump).to match_fuzzy actual_dsl
|
46
46
|
expect(delta.script).to match_fuzzy <<-EOS
|
@@ -84,7 +84,7 @@ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
|
|
84
84
|
EOS
|
85
85
|
}
|
86
86
|
|
87
|
-
subject { client(
|
87
|
+
subject { client(dump_with_default_fk_name: true) }
|
88
88
|
|
89
89
|
it {
|
90
90
|
delta = subject.diff(dsl)
|
@@ -114,7 +114,7 @@ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
|
|
114
114
|
EOS
|
115
115
|
}
|
116
116
|
|
117
|
-
subject { client(
|
117
|
+
subject { client(dump_with_default_fk_name: true) }
|
118
118
|
|
119
119
|
it {
|
120
120
|
expect {
|
@@ -140,7 +140,7 @@ add_foreign_key "child", "parent"
|
|
140
140
|
EOS
|
141
141
|
}
|
142
142
|
|
143
|
-
subject { client(
|
143
|
+
subject { client(dump_with_default_fk_name: true) }
|
144
144
|
|
145
145
|
it {
|
146
146
|
expect {
|
@@ -160,7 +160,7 @@ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
|
|
160
160
|
EOS
|
161
161
|
}
|
162
162
|
|
163
|
-
subject { client(
|
163
|
+
subject { client(dump_with_default_fk_name: true) }
|
164
164
|
|
165
165
|
it {
|
166
166
|
expect {
|
@@ -36,7 +36,7 @@ end
|
|
36
36
|
}
|
37
37
|
|
38
38
|
before { subject.diff(actual_dsl).migrate }
|
39
|
-
subject { client(
|
39
|
+
subject { client(dump_with_default_fk_name: true) }
|
40
40
|
|
41
41
|
it {
|
42
42
|
delta = subject.diff(expected_dsl)
|
@@ -47,7 +47,7 @@ end
|
|
47
47
|
}
|
48
48
|
|
49
49
|
it {
|
50
|
-
delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true, default_int_limit: 4,
|
50
|
+
delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true, default_int_limit: 4, dump_with_default_fk_name: true)
|
51
51
|
expect(delta.differ?).to be_truthy
|
52
52
|
expect(delta.script).to match_fuzzy <<-EOS
|
53
53
|
add_foreign_key("child", "parent", {:name=>"fk_rails_e74ce85cbc"})
|
@@ -55,7 +55,7 @@ end
|
|
55
55
|
}
|
56
56
|
|
57
57
|
it {
|
58
|
-
delta = client(bulk_change: true,
|
58
|
+
delta = client(bulk_change: true, dump_with_default_fk_name: true).diff(expected_dsl)
|
59
59
|
expect(delta.differ?).to be_truthy
|
60
60
|
expect(subject.dump).to match_fuzzy sorted_actual_dsl
|
61
61
|
expect(delta.script).to match_fuzzy <<-EOS
|
@@ -99,7 +99,7 @@ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
|
|
99
99
|
}
|
100
100
|
|
101
101
|
before { subject.diff(dsl).migrate }
|
102
|
-
subject { client(
|
102
|
+
subject { client(dump_with_default_fk_name: true) }
|
103
103
|
|
104
104
|
it {
|
105
105
|
delta = subject.diff('')
|
@@ -47,7 +47,7 @@ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
|
|
47
47
|
|
48
48
|
before { subject.diff(actual_dsl).migrate }
|
49
49
|
|
50
|
-
subject { client(
|
50
|
+
subject { client(dump_with_default_fk_name: true) }
|
51
51
|
|
52
52
|
it {
|
53
53
|
delta = subject.diff(expected_dsl)
|
@@ -21,7 +21,7 @@ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
|
|
21
21
|
}
|
22
22
|
|
23
23
|
before { subject.diff(actual_dsl).migrate }
|
24
|
-
subject { client(
|
24
|
+
subject { client(dump_with_default_fk_name: true) }
|
25
25
|
|
26
26
|
it {
|
27
27
|
delta = subject.diff(expected_dsl)
|
@@ -32,7 +32,7 @@ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
|
|
32
32
|
}
|
33
33
|
|
34
34
|
it {
|
35
|
-
delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true, default_int_limit: 4,
|
35
|
+
delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true, default_int_limit: 4, dump_with_default_fk_name: true)
|
36
36
|
expect(delta.differ?).to be_truthy
|
37
37
|
expect(delta.script).to match_fuzzy <<-EOS
|
38
38
|
remove_foreign_key("child", {:name=>"fk_rails_e74ce85cbc"})
|
@@ -40,7 +40,7 @@ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
|
|
40
40
|
}
|
41
41
|
|
42
42
|
it {
|
43
|
-
delta = client(bulk_change: true,
|
43
|
+
delta = client(bulk_change: true, dump_with_default_fk_name: true).diff(expected_dsl)
|
44
44
|
expect(delta.differ?).to be_truthy
|
45
45
|
expect(subject.dump).to match_fuzzy actual_dsl
|
46
46
|
expect(delta.script).to match_fuzzy <<-EOS
|
@@ -84,7 +84,7 @@ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
|
|
84
84
|
}
|
85
85
|
|
86
86
|
before { client.diff('').migrate }
|
87
|
-
subject { client(
|
87
|
+
subject { client(dump_with_default_fk_name: true) }
|
88
88
|
|
89
89
|
it {
|
90
90
|
delta = subject.diff(dsl)
|
@@ -114,7 +114,7 @@ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
|
|
114
114
|
EOS
|
115
115
|
}
|
116
116
|
|
117
|
-
subject { client(
|
117
|
+
subject { client(dump_with_default_fk_name: true) }
|
118
118
|
|
119
119
|
it {
|
120
120
|
expect {
|
@@ -140,7 +140,7 @@ add_foreign_key "child", "parent"
|
|
140
140
|
EOS
|
141
141
|
}
|
142
142
|
|
143
|
-
subject { client(
|
143
|
+
subject { client(dump_with_default_fk_name: true) }
|
144
144
|
|
145
145
|
it {
|
146
146
|
expect {
|
@@ -160,7 +160,7 @@ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
|
|
160
160
|
EOS
|
161
161
|
}
|
162
162
|
|
163
|
-
subject { client(
|
163
|
+
subject { client(dump_with_default_fk_name: true) }
|
164
164
|
|
165
165
|
it {
|
166
166
|
expect {
|
@@ -36,7 +36,7 @@ end
|
|
36
36
|
}
|
37
37
|
|
38
38
|
before { subject.diff(actual_dsl).migrate }
|
39
|
-
subject { client(
|
39
|
+
subject { client(dump_with_default_fk_name: true) }
|
40
40
|
|
41
41
|
it {
|
42
42
|
delta = subject.diff(expected_dsl)
|
@@ -47,7 +47,7 @@ end
|
|
47
47
|
}
|
48
48
|
|
49
49
|
it {
|
50
|
-
delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true, default_int_limit: 4,
|
50
|
+
delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true, default_int_limit: 4, dump_with_default_fk_name: true)
|
51
51
|
expect(delta.differ?).to be_truthy
|
52
52
|
expect(delta.script).to match_fuzzy <<-EOS
|
53
53
|
add_foreign_key("child", "parent", {:name=>"fk_rails_e74ce85cbc"})
|
@@ -55,7 +55,7 @@ end
|
|
55
55
|
}
|
56
56
|
|
57
57
|
it {
|
58
|
-
delta = client(bulk_change: true,
|
58
|
+
delta = client(bulk_change: true, dump_with_default_fk_name: true).diff(expected_dsl)
|
59
59
|
expect(delta.differ?).to be_truthy
|
60
60
|
expect(subject.dump).to match_fuzzy sorted_actual_dsl
|
61
61
|
expect(delta.script).to match_fuzzy <<-EOS
|
@@ -99,7 +99,7 @@ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
|
|
99
99
|
}
|
100
100
|
|
101
101
|
before { subject.diff(dsl).migrate }
|
102
|
-
subject { client(
|
102
|
+
subject { client(dump_with_default_fk_name: true) }
|
103
103
|
|
104
104
|
it {
|
105
105
|
delta = subject.diff('')
|
data/spec/spec_const.rb
CHANGED
@@ -3,7 +3,7 @@ TEST_MYSQL_PORT = 3306
|
|
3
3
|
TEST_MYSQL_USER = 'root'
|
4
4
|
TEST_MYSQL_PASS = 'password'
|
5
5
|
|
6
|
-
MYSQL_CLI = "
|
6
|
+
MYSQL_CLI = "mysql -h #{TEST_MYSQL_HOST} -P #{TEST_MYSQL_PORT} -u #{TEST_MYSQL_USER} -p#{TEST_MYSQL_PASS} 2>/dev/null"
|
7
7
|
|
8
8
|
TEST_PG_HOST = '127.0.0.1'
|
9
9
|
TEST_PG_PORT = 5432
|
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.5
|
4
|
+
version: 0.6.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Genki Sugawara
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -360,9 +360,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
360
360
|
version: '0'
|
361
361
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
362
362
|
requirements:
|
363
|
-
- - "
|
363
|
+
- - ">="
|
364
364
|
- !ruby/object:Gem::Version
|
365
|
-
version:
|
365
|
+
version: '0'
|
366
366
|
requirements: []
|
367
367
|
rubyforge_project:
|
368
368
|
rubygems_version: 2.5.1
|