liquigen 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -0
- data/Gemfile.lock +1 -1
- data/README.md +160 -7
- data/bin/liquigen +96 -12
- data/lib/liquigen.rb +16 -0
- data/lib/liquigen/add_column.rb +14 -0
- data/lib/liquigen/change_set.rb +15 -4
- data/lib/liquigen/create_index.rb +15 -0
- data/lib/liquigen/create_table.rb +1 -1
- data/lib/liquigen/drop_table.rb +11 -0
- data/lib/liquigen/handlers/add_column.rb +26 -0
- data/lib/liquigen/handlers/add_index.rb +34 -0
- data/lib/liquigen/handlers/base.rb +20 -4
- data/lib/liquigen/handlers/change_type.rb +29 -0
- data/lib/liquigen/handlers/create_table.rb +10 -3
- data/lib/liquigen/handlers/drop_table.rb +26 -0
- data/lib/liquigen/handlers/rename_column.rb +31 -0
- data/lib/liquigen/handlers/rename_table.rb +29 -0
- data/lib/liquigen/handlers/sql.rb +26 -0
- data/lib/liquigen/modify_data_type.rb +15 -0
- data/lib/liquigen/rename_column.rb +17 -0
- data/lib/liquigen/rename_table.rb +13 -0
- data/lib/liquigen/sql.rb +11 -0
- data/lib/liquigen/version.rb +1 -1
- data/spec/liquigen/change_set_spec.rb +10 -0
- data/spec/liquigen/handlers/add_column_spec.rb +18 -0
- data/spec/liquigen/handlers/add_index_spec.rb +18 -0
- data/spec/liquigen/handlers/change_type_spec.rb +18 -0
- data/spec/liquigen/{handler_spec.rb → handlers/create_table_spec.rb} +40 -4
- data/spec/liquigen/handlers/drop_table_spec.rb +18 -0
- data/spec/liquigen/handlers/rename_column_spec.rb +18 -0
- data/spec/liquigen/handlers/rename_table_spec.rb +18 -0
- data/spec/liquigen/handlers/sql_spec.rb +18 -0
- metadata +25 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 828dd9e9045d6e0c612b17f2919d0d23573d3ccade3d7a665bde8abe6b889302
|
4
|
+
data.tar.gz: 362285b1394e2f66155d596a72330de7a7e62cbacf8fa2bc08096c16da1b5277
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1db59837bafb0cc1d511ddb086ebee6a09f944d2f99fce5ab12199cfb8c2f51c966710c28c774d2aee85a0d0b5236c8b069e9b83081db836e06f426d29578a5
|
7
|
+
data.tar.gz: 2e9352ce87d00eb6cd02690859dfbe1c2a5b52c2944219c3b04aa8ee0b0109099dbc7abbf20aa83ee9570cc6cd33cf76efcdefe1d0a908957b7d97859dad51e4
|
data/.rubocop.yml
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -4,7 +4,9 @@ Comparing with ruby, java sucks.
|
|
4
4
|
|
5
5
|
It is a simple tool for java liquibase script generation.
|
6
6
|
|
7
|
-
Only support mysql db
|
7
|
+
Only support mysql db. And it is not a perfect tool, can help to create basic content with simple name. Please change the generated content manually if the generation was wrong.
|
8
|
+
|
9
|
+
[Liquibase documentation](http://www.liquibase.org/documentation/changes/).
|
8
10
|
|
9
11
|
## how to use
|
10
12
|
1. gem install liquigen
|
@@ -37,25 +39,176 @@ databaseChangeLog:
|
|
37
39
|
name: id
|
38
40
|
type: bigint
|
39
41
|
constraints:
|
40
|
-
- constraint:
|
41
42
|
primaryKey: true
|
42
43
|
autoIncrement: true
|
43
44
|
- column:
|
44
45
|
name: name
|
45
46
|
type: varchar(255)
|
46
47
|
constraints:
|
47
|
-
- constraint:
|
48
48
|
nullable: false
|
49
49
|
|
50
50
|
```
|
51
51
|
|
52
|
-
##
|
52
|
+
## rename_table
|
53
|
+
```bash
|
54
|
+
liquigen rename_table users:s_users customers:s_customers
|
55
|
+
```
|
56
|
+
|
57
|
+
Result file:
|
58
|
+
```yaml
|
59
|
+
databaseChangeLog:
|
60
|
+
- changeSet:
|
61
|
+
id: 20181121150900_RenameTableUsersAndCustomer
|
62
|
+
author: Jeremy
|
63
|
+
changes:
|
64
|
+
- renameTable:
|
65
|
+
oldTableName: users
|
66
|
+
newTableName: s_users
|
67
|
+
- renameTable:
|
68
|
+
oldTableName: customers
|
69
|
+
newTableName: s_customers
|
70
|
+
|
71
|
+
```
|
72
|
+
|
73
|
+
## drop_table
|
74
|
+
```bash
|
75
|
+
liquigen drop_table user customer
|
76
|
+
```
|
77
|
+
|
78
|
+
## add_column
|
79
|
+
```bash
|
80
|
+
liquigen add_column -t users name:string email:string
|
81
|
+
```
|
82
|
+
|
83
|
+
Result:
|
84
|
+
```yaml
|
85
|
+
databaseChangeLog:
|
86
|
+
- changeSet:
|
87
|
+
id: 20181121155512_AddColumn_User_NameAndEmail
|
88
|
+
author: Jeremy Cui
|
89
|
+
changes:
|
90
|
+
- addColumn:
|
91
|
+
tableName: users
|
92
|
+
columns:
|
93
|
+
- column:
|
94
|
+
name: name
|
95
|
+
type: varchar(255)
|
96
|
+
constraints:
|
97
|
+
nullable: false
|
98
|
+
- column:
|
99
|
+
name: email
|
100
|
+
type: varchar(255)
|
101
|
+
constraints:
|
102
|
+
nullable: false
|
103
|
+
|
104
|
+
```
|
105
|
+
|
106
|
+
## rename_column
|
107
|
+
```bash
|
108
|
+
liquigen rename_column user:status:status_ok:string customer:status:status_ok:string
|
109
|
+
```
|
110
|
+
|
111
|
+
Result:
|
112
|
+
```yaml
|
113
|
+
databaseChangeLog:
|
114
|
+
- changeSet:
|
115
|
+
id: 20181121162306_RenameColumn_UserStatusToStatusOkAndCustomerStatusToStatusOk
|
116
|
+
author: Jeremy Cui
|
117
|
+
changes:
|
118
|
+
- renameColumn:
|
119
|
+
tableName: users
|
120
|
+
oldColumnName: status
|
121
|
+
newColumnName: status_ok
|
122
|
+
columnDataType: varchar(255)
|
123
|
+
- renameColumn:
|
124
|
+
tableName: customers
|
125
|
+
oldColumnName: status
|
126
|
+
newColumnName: status_ok
|
127
|
+
columnDataType: varchar(255)
|
128
|
+
|
129
|
+
```
|
130
|
+
|
131
|
+
## change_type
|
132
|
+
```bash
|
133
|
+
liquigen change_type user:id:integer customer:name:string
|
134
|
+
```
|
135
|
+
|
136
|
+
Result:
|
137
|
+
```yaml
|
138
|
+
databaseChangeLog:
|
139
|
+
- changeSet:
|
140
|
+
id: '20181121145051'
|
141
|
+
author: Jeremy
|
142
|
+
changes:
|
143
|
+
- modifyDataType:
|
144
|
+
tableName: users
|
145
|
+
columnName: id
|
146
|
+
newDateType: bigint
|
147
|
+
- modifyDataType:
|
148
|
+
tableName: customers
|
149
|
+
columnName: name
|
150
|
+
newDateType: varchar(255)
|
151
|
+
|
152
|
+
```
|
153
|
+
|
154
|
+
## create_index
|
155
|
+
```bash
|
156
|
+
liquigen add_index -t user name:string email:string
|
157
|
+
```
|
158
|
+
|
159
|
+
## sql
|
160
|
+
```bash
|
161
|
+
liquigen sql "update users set column=true" "update customers set x = 1"
|
162
|
+
```
|
53
163
|
|
54
|
-
|
164
|
+
## How to let the liquibase use migration directory
|
55
165
|
|
56
|
-
|
166
|
+
* In your java project, open application.yml, add the following lines:
|
167
|
+
```yaml
|
168
|
+
spring:
|
169
|
+
liquibase:
|
170
|
+
change-log: classpath:/db/changelog-master.yaml
|
171
|
+
```
|
172
|
+
* Edit your changelog-master.yaml file.
|
173
|
+
```yaml
|
174
|
+
databaseChangeLog:
|
175
|
+
- includeAll:
|
176
|
+
path: "db/migrations/"
|
177
|
+
```
|
178
|
+
|
179
|
+
That's it.
|
180
|
+
* Liquigen will create the directory automatically.
|
181
|
+
|
182
|
+
|
183
|
+
## How to use the latest source in your java project
|
184
|
+
|
185
|
+
1. Add .ruby-version file to your project root path.
|
186
|
+
|
187
|
+
```ruby
|
188
|
+
ruby-2.5.1
|
189
|
+
|
190
|
+
```
|
191
|
+
You can also use the other version.
|
192
|
+
|
193
|
+
2. Add Gemfile file as well.
|
194
|
+
```ruby
|
195
|
+
source 'https://rubygems.org'
|
196
|
+
|
197
|
+
gem 'liquigen', :git => 'https://github.com/jerecui/liquigen'
|
198
|
+
```
|
199
|
+
3. Bundle install
|
200
|
+
|
201
|
+
```sh
|
202
|
+
bundle install
|
203
|
+
|
204
|
+
```
|
205
|
+
4. cd your project in command line, type liquigen xxxxx
|
206
|
+
|
207
|
+
```sh
|
208
|
+
# say
|
209
|
+
liquigen add_table -t user id:integer name:string
|
210
|
+
```
|
57
211
|
|
58
|
-
ToDo.
|
59
212
|
|
60
213
|
## Contributing
|
61
214
|
Bug reports and pull requests are welcome on GitHub at https://github.com/jerecui/liquigen.
|
data/bin/liquigen
CHANGED
@@ -22,31 +22,115 @@ class App
|
|
22
22
|
|
23
23
|
desc 'add table script'
|
24
24
|
arg_name 'Describe arguments to add_table here'
|
25
|
+
long_desc %{
|
26
|
+
Example
|
27
|
+
liquigen add_table -t user id:integer name:string
|
28
|
+
}
|
25
29
|
command :add_table do |c|
|
26
30
|
c.desc 'table name'
|
27
31
|
c.default_value 'table'
|
28
32
|
c.flag :t
|
29
33
|
|
30
34
|
c.action do |_, options, props|
|
31
|
-
|
32
|
-
handler = Liquigen::Handlers::CreateTable.new table, props
|
35
|
+
handler = Liquigen::Handlers::CreateTable.new options[:t], props
|
33
36
|
handler.process
|
34
37
|
end
|
35
38
|
end
|
36
39
|
|
37
|
-
desc '
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
40
|
+
desc 'rename tables'
|
41
|
+
long_desc %{
|
42
|
+
If you want to change the table users to s_users, customers to s_customers,
|
43
|
+
Use the following command:
|
44
|
+
liquigen rename_table user:s_users customer:s_customers
|
45
|
+
}
|
46
|
+
arg_name 'old_table_name:new_table_name'
|
47
|
+
command :rename_table do |c|
|
48
|
+
c.action do |_, _, args|
|
49
|
+
handler = Liquigen::Handlers::RenameTable.new args
|
50
|
+
handler.process
|
42
51
|
end
|
43
52
|
end
|
44
53
|
|
45
|
-
desc '
|
46
|
-
|
54
|
+
desc 'drop tables'
|
55
|
+
long_desc %{
|
56
|
+
example:
|
57
|
+
liquigen drop_table user customer
|
58
|
+
}
|
59
|
+
arg_name 'table1 table2 ...'
|
47
60
|
command :drop_table do |c|
|
48
|
-
c.action do |
|
49
|
-
|
61
|
+
c.action do |_, _, args|
|
62
|
+
handler = Liquigen::Handlers::DropTable.new args
|
63
|
+
handler.process
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
desc 'add columns script'
|
68
|
+
arg_name 'Describe arguments to add_column here'
|
69
|
+
long_desc %{
|
70
|
+
Example
|
71
|
+
liquigen add_column -t user id:integer name:string
|
72
|
+
}
|
73
|
+
command :add_column do |c|
|
74
|
+
c.desc 'table name'
|
75
|
+
c.default_value 'table'
|
76
|
+
c.flag :t
|
77
|
+
|
78
|
+
c.action do |_, options, props|
|
79
|
+
handler = Liquigen::Handlers::AddColumn.new options[:t], props
|
80
|
+
handler.process
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
desc 'rename columns script'
|
85
|
+
arg_name 'Describe arguments to rename_column here'
|
86
|
+
long_desc %{
|
87
|
+
Example
|
88
|
+
liquigen rename_column user:status:status_ok:string customer:status:status_ok:string
|
89
|
+
}
|
90
|
+
command :rename_column do |c|
|
91
|
+
c.action do |_, _, props|
|
92
|
+
handler = Liquigen::Handlers::RenameColumn.new props
|
93
|
+
handler.process
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
desc 'change type'
|
98
|
+
long_desc %{
|
99
|
+
If you want to change the table column type,
|
100
|
+
Use the following command:
|
101
|
+
liquigen change_type user:name:string
|
102
|
+
}
|
103
|
+
arg_name 'table:column_name:new_type'
|
104
|
+
command :change_type do |c|
|
105
|
+
c.action do |_, _, args|
|
106
|
+
handler = Liquigen::Handlers::ChangeType.new args
|
107
|
+
handler.process
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
desc 'Describe sql here'
|
112
|
+
arg_name 'Describe arguments to raw sql here'
|
113
|
+
command :sql do |c|
|
114
|
+
c.action do |_, _, args|
|
115
|
+
handler = Liquigen::Handlers::Sql.new args
|
116
|
+
handler.process
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
desc 'add index script'
|
121
|
+
arg_name 'Describe arguments to add_index here'
|
122
|
+
long_desc %{
|
123
|
+
Example
|
124
|
+
liquigen add_index -t user id:integer name:string
|
125
|
+
}
|
126
|
+
command :add_index do |c|
|
127
|
+
c.desc 'table name'
|
128
|
+
c.default_value 'table'
|
129
|
+
c.flag :t
|
130
|
+
|
131
|
+
c.action do |_, options, props|
|
132
|
+
handler = Liquigen::Handlers::AddIndex.new options[:t], props
|
133
|
+
handler.process
|
50
134
|
end
|
51
135
|
end
|
52
136
|
|
@@ -68,7 +152,7 @@ class App
|
|
68
152
|
on_error do |err|
|
69
153
|
if debugging?
|
70
154
|
STDERR.puts err.message
|
71
|
-
STDERR.puts err.backtrace.join(
|
155
|
+
STDERR.puts err.backtrace.join("\n")
|
72
156
|
else
|
73
157
|
next if GLI::CustomExit === err
|
74
158
|
|
data/lib/liquigen.rb
CHANGED
@@ -4,12 +4,28 @@ require 'active_support'
|
|
4
4
|
require 'active_support/inflector'
|
5
5
|
|
6
6
|
require 'liquigen/create_table'
|
7
|
+
require 'liquigen/add_column'
|
8
|
+
require 'liquigen/rename_table'
|
9
|
+
require 'liquigen/modify_data_type'
|
10
|
+
require 'liquigen/rename_column'
|
11
|
+
require 'liquigen/sql'
|
12
|
+
require 'liquigen/create_index'
|
13
|
+
require 'liquigen/drop_table'
|
14
|
+
|
7
15
|
require 'liquigen/change_set'
|
8
16
|
require 'liquigen/change'
|
9
17
|
require 'liquigen/column'
|
10
18
|
require 'liquigen/constraint'
|
19
|
+
|
11
20
|
require 'liquigen/handlers/base'
|
12
21
|
require 'liquigen/handlers/create_table'
|
22
|
+
require 'liquigen/handlers/add_column'
|
23
|
+
require 'liquigen/handlers/rename_table'
|
24
|
+
require 'liquigen/handlers/change_type'
|
25
|
+
require 'liquigen/handlers/rename_column'
|
26
|
+
require 'liquigen/handlers/sql'
|
27
|
+
require 'liquigen/handlers/add_index'
|
28
|
+
require 'liquigen/handlers/drop_table'
|
13
29
|
|
14
30
|
# Add requires for other files you add to your project here, so
|
15
31
|
# you just need to require this one file in your bin file
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'liquigen/change'
|
2
|
+
|
3
|
+
module Liquigen
|
4
|
+
class AddColumn < Change
|
5
|
+
attr_accessor :table_name
|
6
|
+
|
7
|
+
attr_accessor :columns
|
8
|
+
|
9
|
+
def initialize(table_name)
|
10
|
+
self.table_name = table_name&.underscore&.pluralize
|
11
|
+
self.columns = []
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/liquigen/change_set.rb
CHANGED
@@ -4,11 +4,22 @@ module Liquigen
|
|
4
4
|
attr_accessor :author
|
5
5
|
attr_accessor :changes
|
6
6
|
|
7
|
-
def initialize
|
8
|
-
self.id =
|
9
|
-
|
10
|
-
self.author = 'Jeremy'
|
7
|
+
def initialize(file_name)
|
8
|
+
self.id = file_name
|
9
|
+
self.author = "#{git_user} <#{git_email}>"
|
11
10
|
self.changes = []
|
12
11
|
end
|
12
|
+
|
13
|
+
def git_user
|
14
|
+
author = ''
|
15
|
+
IO.popen('git config -l | grep user.name') { |x| author = x.gets }
|
16
|
+
author = author.gsub(/user.name=(\w*)/, '\1').strip || 'yourname'
|
17
|
+
end
|
18
|
+
|
19
|
+
def git_email
|
20
|
+
email = []
|
21
|
+
IO.popen('git config -l | grep user.email') { |x| email = x.gets }
|
22
|
+
email = email.gsub(/user.email=(\w*)/, '\1').strip
|
23
|
+
end
|
13
24
|
end
|
14
25
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'liquigen/change'
|
2
|
+
|
3
|
+
module Liquigen
|
4
|
+
class CreateIndex < Change
|
5
|
+
attr_accessor :table_name
|
6
|
+
attr_accessor :index_name
|
7
|
+
attr_accessor :columns
|
8
|
+
|
9
|
+
def initialize(table_name)
|
10
|
+
self.table_name = table_name&.underscore&.pluralize
|
11
|
+
self.index_name = ''
|
12
|
+
self.columns = []
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'liquigen/handlers/base'
|
2
|
+
|
3
|
+
module Liquigen::Handlers
|
4
|
+
class AddColumn < CreateTable
|
5
|
+
def action_name
|
6
|
+
'AddColumn'
|
7
|
+
end
|
8
|
+
|
9
|
+
# Add Column
|
10
|
+
def file_suffix
|
11
|
+
table.capitalize
|
12
|
+
|
13
|
+
columns = props.map do |item|
|
14
|
+
item.split(':')[0].camelize
|
15
|
+
end.uniq.join('And')
|
16
|
+
|
17
|
+
"#{table.capitalize}_#{columns}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def build_one_changeset(set)
|
21
|
+
change = Liquigen::AddColumn.new(table)
|
22
|
+
set.changes << change
|
23
|
+
props.each { |kv| change.columns << build_column(kv) }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'liquigen/handlers/base'
|
2
|
+
|
3
|
+
module Liquigen::Handlers
|
4
|
+
class AddIndex < CreateTable
|
5
|
+
def action_name
|
6
|
+
'AddIndex'
|
7
|
+
end
|
8
|
+
|
9
|
+
# Add Column
|
10
|
+
def file_suffix
|
11
|
+
table.capitalize
|
12
|
+
|
13
|
+
columns = props.map do |item|
|
14
|
+
item.split(':')[0].camelize
|
15
|
+
end.uniq.join('And')
|
16
|
+
|
17
|
+
"On#{table.capitalize}_#{columns}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def build_one_changeset(set)
|
21
|
+
change = Liquigen::CreateIndex.new(table)
|
22
|
+
set.changes << change
|
23
|
+
props.each { |kv| change.columns << build_column(kv) }
|
24
|
+
|
25
|
+
column_names = props.map { |x| x.split(':')[0] }.uniq.join('_')
|
26
|
+
|
27
|
+
change.index_name = "idx_#{table.underscore.pluralize}_#{column_names}"
|
28
|
+
end
|
29
|
+
|
30
|
+
def constraints?
|
31
|
+
false
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -12,14 +12,20 @@ module Liquigen::Handlers
|
|
12
12
|
attr_accessor :props
|
13
13
|
attr_accessor :sets
|
14
14
|
|
15
|
+
attr_accessor :id
|
16
|
+
|
15
17
|
def initialize(table, props)
|
16
18
|
self.table = table
|
17
19
|
self.props = props
|
18
20
|
self.sets = []
|
21
|
+
|
22
|
+
self.id = build_id
|
19
23
|
end
|
20
24
|
|
21
25
|
def process
|
22
|
-
|
26
|
+
set = Liquigen::ChangeSet.new(id)
|
27
|
+
build_one_changeset(set)
|
28
|
+
sets << set
|
23
29
|
|
24
30
|
file_path = build_file_name
|
25
31
|
File.open(file_path, 'w+') { |f| f.write(sets.to_yaml(indentation: 4)) }
|
@@ -33,12 +39,20 @@ module Liquigen::Handlers
|
|
33
39
|
'liquigen'
|
34
40
|
end
|
35
41
|
|
42
|
+
def file_suffix
|
43
|
+
table.capitalize
|
44
|
+
end
|
45
|
+
|
46
|
+
def build_id
|
47
|
+
"#{Time.new.strftime('%Y%m%d%H%M%S')}_#{action_name}_#{file_suffix}"
|
48
|
+
end
|
49
|
+
|
36
50
|
def build_file_name
|
37
51
|
dir = 'src/main/resources/db/migrations'
|
38
52
|
|
39
53
|
FileUtils.mkdir_p(dir)
|
40
54
|
|
41
|
-
"#{dir}/#{
|
55
|
+
"#{dir}/#{id}.yaml"
|
42
56
|
end
|
43
57
|
|
44
58
|
def process_lines(file_path)
|
@@ -80,7 +94,7 @@ module Liquigen::Handlers
|
|
80
94
|
next_blank = lines[index + 1].gsub(/^(\s+).*$/, '\1')
|
81
95
|
|
82
96
|
valid = false
|
83
|
-
valid = true if lines[index + 1].include?('-')
|
97
|
+
valid = true if lines[index + 1].include?('-') && current_blank.size == next_blank.size
|
84
98
|
valid = true if current_blank.size < next_blank.size
|
85
99
|
|
86
100
|
empty_marks << index unless valid
|
@@ -91,7 +105,9 @@ module Liquigen::Handlers
|
|
91
105
|
|
92
106
|
def camelize_words(lines)
|
93
107
|
lines.map do |line|
|
94
|
-
line.gsub(
|
108
|
+
left = line.gsub(/^(.*?):.*$/, '\1')
|
109
|
+
right = line.gsub(/^.*?(:.*)$/, '\1')
|
110
|
+
left.gsub(/[\w^:]+/) { |x| x.camelize(:lower) } + right
|
95
111
|
end
|
96
112
|
end
|
97
113
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'liquigen/handlers/base'
|
2
|
+
|
3
|
+
module Liquigen::Handlers
|
4
|
+
class ChangeType < Base
|
5
|
+
def initialize(props)
|
6
|
+
self.props = props
|
7
|
+
self.sets = []
|
8
|
+
self.id = build_id
|
9
|
+
end
|
10
|
+
|
11
|
+
def action_name
|
12
|
+
'ChangeType'
|
13
|
+
end
|
14
|
+
|
15
|
+
def file_suffix
|
16
|
+
props.map do |item|
|
17
|
+
item.split(':')[0].camelize
|
18
|
+
end.uniq.join('And')
|
19
|
+
end
|
20
|
+
|
21
|
+
def build_one_changeset(set)
|
22
|
+
props.each do |kv|
|
23
|
+
kv = kv.split(':')
|
24
|
+
change = Liquigen::ModifyDataType.new(kv[0], kv[1], kv[2])
|
25
|
+
set.changes << change
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -6,18 +6,21 @@ module Liquigen::Handlers
|
|
6
6
|
'CreateTable'
|
7
7
|
end
|
8
8
|
|
9
|
-
def
|
10
|
-
set = Liquigen::ChangeSet.new
|
9
|
+
def build_one_changeset(set)
|
11
10
|
change = Liquigen::CreateTable.new(table)
|
12
11
|
set.changes << change
|
13
12
|
props.each { |kv| change.columns << build_column(kv) }
|
14
|
-
sets << set
|
15
13
|
end
|
16
14
|
|
17
15
|
def build_column(name_and_type)
|
18
16
|
kv = name_and_type.split(':')
|
19
17
|
column = Liquigen::Column.new(name: kv[0], type: kv[1])
|
20
18
|
|
19
|
+
unless constraints?
|
20
|
+
column.constraints = nil
|
21
|
+
return column
|
22
|
+
end
|
23
|
+
|
21
24
|
if column.name == 'id'
|
22
25
|
column.auto_increment = true
|
23
26
|
column.constraints.primary_key = true
|
@@ -27,5 +30,9 @@ module Liquigen::Handlers
|
|
27
30
|
|
28
31
|
column
|
29
32
|
end
|
33
|
+
|
34
|
+
def constraints?
|
35
|
+
true
|
36
|
+
end
|
30
37
|
end
|
31
38
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'liquigen/handlers/base'
|
2
|
+
|
3
|
+
module Liquigen::Handlers
|
4
|
+
class DropTable < Base
|
5
|
+
def initialize(props)
|
6
|
+
self.props = props
|
7
|
+
self.sets = []
|
8
|
+
self.id = build_id
|
9
|
+
end
|
10
|
+
|
11
|
+
def action_name
|
12
|
+
'DropTable'
|
13
|
+
end
|
14
|
+
|
15
|
+
def file_suffix
|
16
|
+
props.map(&:camelize).join('And')
|
17
|
+
end
|
18
|
+
|
19
|
+
def build_one_changeset(set)
|
20
|
+
props.each do |tbl|
|
21
|
+
change = Liquigen::DropTable.new tbl
|
22
|
+
set.changes << change
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'liquigen/handlers/base'
|
2
|
+
|
3
|
+
module Liquigen::Handlers
|
4
|
+
class RenameColumn < Base
|
5
|
+
def initialize(props)
|
6
|
+
self.props = props
|
7
|
+
self.sets = []
|
8
|
+
self.id = build_id
|
9
|
+
end
|
10
|
+
|
11
|
+
def action_name
|
12
|
+
'RenameColumn'
|
13
|
+
end
|
14
|
+
|
15
|
+
def file_suffix
|
16
|
+
props.map do |item|
|
17
|
+
arr = item.split(':')
|
18
|
+
column_description = Array[arr[1].camelize, arr[2].camelize].join('To')
|
19
|
+
"#{arr[0].camelize}#{column_description}"
|
20
|
+
end.join('And')
|
21
|
+
end
|
22
|
+
|
23
|
+
def build_one_changeset(set)
|
24
|
+
props.each do |kv|
|
25
|
+
kv = kv.split(':')
|
26
|
+
change = Liquigen::RenameColumn.new(kv[0], kv[1], kv[2], kv[3])
|
27
|
+
set.changes << change
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'liquigen/handlers/base'
|
2
|
+
|
3
|
+
module Liquigen::Handlers
|
4
|
+
class RenameTable < Base
|
5
|
+
def initialize(props)
|
6
|
+
self.props = props
|
7
|
+
self.sets = []
|
8
|
+
self.id = build_id
|
9
|
+
end
|
10
|
+
|
11
|
+
def action_name
|
12
|
+
'RenameTable'
|
13
|
+
end
|
14
|
+
|
15
|
+
def file_suffix
|
16
|
+
props.map do |item|
|
17
|
+
item.split(':')[0].camelize
|
18
|
+
end.join('And')
|
19
|
+
end
|
20
|
+
|
21
|
+
def build_one_changeset(set)
|
22
|
+
props.each do |kv|
|
23
|
+
kv = kv.split(':')
|
24
|
+
change = Liquigen::RenameTable.new(kv[0], kv[1])
|
25
|
+
set.changes << change
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'liquigen/handlers/base'
|
2
|
+
|
3
|
+
module Liquigen::Handlers
|
4
|
+
class Sql < Base
|
5
|
+
def initialize(props)
|
6
|
+
self.props = props
|
7
|
+
self.sets = []
|
8
|
+
self.id = build_id
|
9
|
+
end
|
10
|
+
|
11
|
+
def action_name
|
12
|
+
'Sql'
|
13
|
+
end
|
14
|
+
|
15
|
+
def file_suffix
|
16
|
+
"With#{props.size}Clauses"
|
17
|
+
end
|
18
|
+
|
19
|
+
def build_one_changeset(set)
|
20
|
+
props.each do |sql|
|
21
|
+
change = Liquigen::Sql.new sql
|
22
|
+
set.changes << change
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'liquigen/change'
|
2
|
+
|
3
|
+
module Liquigen
|
4
|
+
class ModifyDataType < Change
|
5
|
+
attr_accessor :table_name
|
6
|
+
attr_accessor :column_name
|
7
|
+
attr_accessor :new_date_type
|
8
|
+
|
9
|
+
def initialize(table, from, to)
|
10
|
+
self.table_name = table&.underscore&.pluralize
|
11
|
+
self.column_name = from
|
12
|
+
self.new_date_type = TypeMap.new(to).db_type || to
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'liquigen/change'
|
2
|
+
|
3
|
+
module Liquigen
|
4
|
+
class RenameColumn < Change
|
5
|
+
attr_accessor :table_name
|
6
|
+
attr_accessor :old_column_name
|
7
|
+
attr_accessor :new_column_name
|
8
|
+
attr_accessor :column_data_type
|
9
|
+
|
10
|
+
def initialize(table, old_name, new_name, type)
|
11
|
+
self.table_name = table&.underscore&.pluralize
|
12
|
+
self.old_column_name = old_name
|
13
|
+
self.new_column_name = new_name
|
14
|
+
self.column_data_type = TypeMap.new(type).db_type || type
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'liquigen/change'
|
2
|
+
|
3
|
+
module Liquigen
|
4
|
+
class RenameTable < Change
|
5
|
+
attr_accessor :old_table_name
|
6
|
+
attr_accessor :new_table_name
|
7
|
+
|
8
|
+
def initialize(old_name, new_name)
|
9
|
+
self.old_table_name = old_name&.underscore&.pluralize
|
10
|
+
self.new_table_name = new_name&.underscore&.pluralize
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/liquigen/sql.rb
ADDED
data/lib/liquigen/version.rb
CHANGED
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Liquigen::ChangeSet, type: :model do
|
4
|
+
let(:change_set) { described_class.new('test') }
|
5
|
+
|
6
|
+
describe '#current git user' do
|
7
|
+
let(:author) { 'Jeremy Cui' }
|
8
|
+
specify { expect(change_set.author).to eq author }
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Liquigen::Handlers::AddColumn, type: :model do
|
4
|
+
let(:props) { ['name:string', 'email:string'] }
|
5
|
+
let(:handler) { described_class.new 'user', props }
|
6
|
+
|
7
|
+
describe '#action_name' do
|
8
|
+
specify { expect(handler.action_name).to eq 'AddColumn' }
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#file_suffix' do
|
12
|
+
specify { expect(handler.file_suffix).to eq 'User_NameAndEmail' }
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#id' do
|
16
|
+
specify { expect(handler.id).not_to eq '' }
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Liquigen::Handlers::AddIndex, type: :model do
|
4
|
+
let(:props) { ['name:string', 'email:string'] }
|
5
|
+
let(:handler) { described_class.new 'user', props }
|
6
|
+
|
7
|
+
describe '#action_name' do
|
8
|
+
specify { expect(handler.action_name).to eq 'AddIndex' }
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#file_suffix' do
|
12
|
+
specify { expect(handler.file_suffix).to eq 'OnUser_NameAndEmail' }
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#id' do
|
16
|
+
specify { expect(handler.id).not_to eq '' }
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Liquigen::Handlers::ChangeType, type: :model do
|
4
|
+
let(:props) { ['user:id:string', 'customer:name:text'] }
|
5
|
+
let(:handler) { described_class.new props }
|
6
|
+
|
7
|
+
describe '#action_name' do
|
8
|
+
specify { expect(handler.action_name).to eq 'ChangeType' }
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#file_suffix' do
|
12
|
+
specify { expect(handler.file_suffix).to eq 'UserAndCustomer' }
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#id' do
|
16
|
+
specify { expect(handler.id).not_to eq '' }
|
17
|
+
end
|
18
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
RSpec.describe Liquigen::Handlers::
|
3
|
+
RSpec.describe Liquigen::Handlers::CreateTable, type: :model do
|
4
4
|
let(:handler) { described_class.new 'User', 'id: integer' }
|
5
5
|
|
6
6
|
let(:source) {
|
@@ -18,7 +18,6 @@ RSpec.describe Liquigen::Handlers::Base, type: :model do
|
|
18
18
|
constraints:
|
19
19
|
primary_key:
|
20
20
|
nullable: false
|
21
|
-
|
22
21
|
'
|
23
22
|
}
|
24
23
|
describe '#remove_empty' do
|
@@ -28,7 +27,28 @@ RSpec.describe Liquigen::Handlers::Base, type: :model do
|
|
28
27
|
it 'should remove the lines which contains empty value' do
|
29
28
|
ret = subject
|
30
29
|
|
31
|
-
expect(ret.size).to eq
|
30
|
+
expect(ret.size).to eq 12
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '#remove_empty_othercase' do
|
34
|
+
let(:source) {
|
35
|
+
'databaseChangeLog:
|
36
|
+
- changeSet:
|
37
|
+
author: Jeremy Cui
|
38
|
+
changes:
|
39
|
+
- createIndex:
|
40
|
+
columns:
|
41
|
+
- column:
|
42
|
+
name: name
|
43
|
+
type: varchar(255)
|
44
|
+
constraints:
|
45
|
+
- column:
|
46
|
+
type: varchar(255)
|
47
|
+
constraints:
|
48
|
+
'
|
49
|
+
}
|
50
|
+
|
51
|
+
specify { expect(subject.join.include?('constraints')).to be_falsy }
|
32
52
|
end
|
33
53
|
end
|
34
54
|
|
@@ -38,7 +58,10 @@ RSpec.describe Liquigen::Handlers::Base, type: :model do
|
|
38
58
|
id: 201811031330
|
39
59
|
name: Jeremy
|
40
60
|
changes:
|
41
|
-
-
|
61
|
+
- RenameTable:
|
62
|
+
old_table_name: users
|
63
|
+
new_table_name: s_users
|
64
|
+
- CreateTable:
|
42
65
|
table_name: user
|
43
66
|
|
44
67
|
'
|
@@ -49,5 +72,18 @@ RSpec.describe Liquigen::Handlers::Base, type: :model do
|
|
49
72
|
ret = handler.send(:camelize_words, lines)
|
50
73
|
expect(ret[ret.size - 1]).to eq ' tableName: user'
|
51
74
|
end
|
75
|
+
|
76
|
+
describe 'Should only process the key part' do
|
77
|
+
let(:source) { ' new_table_name: s_users'}
|
78
|
+
|
79
|
+
it 'should only process the key part' do
|
80
|
+
ret = handler.send(:camelize_words, lines)
|
81
|
+
expect(ret[ret.size - 1]).to eq ' newTableName: s_users'
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe '#id' do
|
87
|
+
specify { expect(handler.id).not_to eq '' }
|
52
88
|
end
|
53
89
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Liquigen::Handlers::DropTable, type: :model do
|
4
|
+
let(:props) { %w[user customer] }
|
5
|
+
let(:handler) { described_class.new props }
|
6
|
+
|
7
|
+
describe '#action_name' do
|
8
|
+
specify { expect(handler.action_name).to eq 'DropTable' }
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#file_suffix' do
|
12
|
+
specify { expect(handler.file_suffix).to eq 'UserAndCustomer' }
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#id' do
|
16
|
+
specify { expect(handler.id).not_to eq '' }
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Liquigen::Handlers::RenameColumn, type: :model do
|
4
|
+
let(:props) { ['user:status:status_ok:string', 'customer:status:status_ok:string'] }
|
5
|
+
let(:handler) { described_class.new props }
|
6
|
+
|
7
|
+
describe '#action_name' do
|
8
|
+
specify { expect(handler.action_name).to eq 'RenameColumn' }
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#file_suffix' do
|
12
|
+
specify { expect(handler.file_suffix).to eq 'UserStatusToStatusOkAndCustomerStatusToStatusOk' }
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#id' do
|
16
|
+
specify { expect(handler.id).not_to eq '' }
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Liquigen::Handlers::RenameTable, type: :model do
|
4
|
+
let(:props) { ['user:s_users', 'customer:s_customers'] }
|
5
|
+
let(:handler) { described_class.new props }
|
6
|
+
|
7
|
+
describe '#action_name' do
|
8
|
+
specify { expect(handler.action_name).to eq 'RenameTable' }
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#file_suffix' do
|
12
|
+
specify { expect(handler.file_suffix).to eq 'UserAndCustomer' }
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#id' do
|
16
|
+
specify { expect(handler.id).not_to eq '' }
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Liquigen::Handlers::Sql, type: :model do
|
4
|
+
let(:props) { ['update users set x = 1', 'update customers set x = 2'] }
|
5
|
+
let(:handler) { described_class.new props }
|
6
|
+
|
7
|
+
describe '#action_name' do
|
8
|
+
specify { expect(handler.action_name).to eq 'Sql' }
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#file_suffix' do
|
12
|
+
specify { expect(handler.file_suffix).to eq 'With2Clauses' }
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#id' do
|
16
|
+
specify { expect(handler.id).not_to eq '' }
|
17
|
+
end
|
18
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: liquigen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Cui
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-11-
|
11
|
+
date: 2018-11-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -113,18 +113,40 @@ files:
|
|
113
113
|
- features/step_definitions/liquigen_steps.rb
|
114
114
|
- features/support/env.rb
|
115
115
|
- lib/liquigen.rb
|
116
|
+
- lib/liquigen/add_column.rb
|
116
117
|
- lib/liquigen/change.rb
|
117
118
|
- lib/liquigen/change_set.rb
|
118
119
|
- lib/liquigen/column.rb
|
119
120
|
- lib/liquigen/constraint.rb
|
121
|
+
- lib/liquigen/create_index.rb
|
120
122
|
- lib/liquigen/create_table.rb
|
123
|
+
- lib/liquigen/drop_table.rb
|
124
|
+
- lib/liquigen/handlers/add_column.rb
|
125
|
+
- lib/liquigen/handlers/add_index.rb
|
121
126
|
- lib/liquigen/handlers/base.rb
|
127
|
+
- lib/liquigen/handlers/change_type.rb
|
122
128
|
- lib/liquigen/handlers/create_table.rb
|
129
|
+
- lib/liquigen/handlers/drop_table.rb
|
130
|
+
- lib/liquigen/handlers/rename_column.rb
|
131
|
+
- lib/liquigen/handlers/rename_table.rb
|
132
|
+
- lib/liquigen/handlers/sql.rb
|
133
|
+
- lib/liquigen/modify_data_type.rb
|
134
|
+
- lib/liquigen/rename_column.rb
|
135
|
+
- lib/liquigen/rename_table.rb
|
136
|
+
- lib/liquigen/sql.rb
|
123
137
|
- lib/liquigen/type_map.rb
|
124
138
|
- lib/liquigen/version.rb
|
125
139
|
- liquigen.gemspec
|
126
140
|
- liquigen.rdoc
|
127
|
-
- spec/liquigen/
|
141
|
+
- spec/liquigen/change_set_spec.rb
|
142
|
+
- spec/liquigen/handlers/add_column_spec.rb
|
143
|
+
- spec/liquigen/handlers/add_index_spec.rb
|
144
|
+
- spec/liquigen/handlers/change_type_spec.rb
|
145
|
+
- spec/liquigen/handlers/create_table_spec.rb
|
146
|
+
- spec/liquigen/handlers/drop_table_spec.rb
|
147
|
+
- spec/liquigen/handlers/rename_column_spec.rb
|
148
|
+
- spec/liquigen/handlers/rename_table_spec.rb
|
149
|
+
- spec/liquigen/handlers/sql_spec.rb
|
128
150
|
- spec/spec_helper.rb
|
129
151
|
homepage: http://github.com/jerecui/liquigen
|
130
152
|
licenses: []
|