ponytail 0.4.0 → 0.5.0
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 +4 -4
- data/Gemfile.lock +4 -3
- data/README.md +2 -2
- data/app/assets/javascripts/ponytail/application.js +1 -0
- data/app/assets/javascripts/ponytail/models/schema.coffee +2 -0
- data/app/assets/javascripts/ponytail/views/column.coffee +3 -1
- data/app/assets/javascripts/ponytail/views/migrations/migrations_index.coffee +66 -0
- data/app/assets/javascripts/ponytail/views/migrations/migrations_new.coffee +53 -0
- data/app/assets/javascripts/ponytail/views/preview_create_file.coffee +37 -0
- data/app/assets/javascripts/ponytail/views/table.coffee +11 -1
- data/app/assets/stylesheets/ponytail/_base.scss +23 -1
- data/app/assets/stylesheets/ponytail/_index.scss +8 -8
- data/app/assets/stylesheets/ponytail/_new.scss +7 -4
- data/app/assets/stylesheets/ponytail/application.scss +3 -0
- data/app/controllers/ponytail/migrations_controller.rb +11 -27
- data/app/controllers/ponytail/schemas_controller.rb +27 -0
- data/app/views/ponytail/migrations/index.html.erb +26 -15
- data/app/views/ponytail/migrations/new.html.erb +18 -61
- data/lib/ponytail/migration.rb +27 -7
- data/lib/ponytail/routing/mapper.rb +10 -0
- data/lib/ponytail/schema.rb +24 -14
- data/lib/ponytail/version.rb +1 -1
- data/lib/ponytail.rb +1 -1
- data/spec/controllers/ponytail/migrations_controller_spec.rb +65 -0
- data/spec/controllers/ponytail/schemas_controller_spec.rb +40 -0
- data/spec/dummy/app/controllers/top_controller.rb +5 -0
- data/spec/dummy/config/initializers/ponytail_on_heroku.rb +6 -8
- data/spec/dummy/config/routes.rb +1 -0
- data/spec/javascripts/helpers/build_model.coffee +7 -0
- data/spec/javascripts/ponytail/models/column_spec.coffee +1 -0
- data/spec/javascripts/ponytail/models/create_command_spec.coffee +12 -0
- data/spec/javascripts/ponytail/models/migration_file_spec.coffee +13 -0
- data/spec/javascripts/ponytail/models/table_spec.coffee +18 -0
- data/spec/{ponytail → lib/ponytail}/migration_spec.rb +0 -18
- data/spec/lib/ponytail/schema_spec.rb +16 -0
- data/spec/{ponytail_spec.rb → lib/ponytail/version_spec.rb} +0 -0
- data/spec/routing/migrations_routing_spec.rb +19 -0
- data/spec/routing/schemas_routing_spec.rb +11 -0
- data/vendor/assets/javascripts/highlight.pack.js +1 -0
- data/vendor/assets/stylesheets/github.css +130 -0
- metadata +36 -28
- data/app/assets/javascripts/ponytail/views/index.coffee +0 -29
- data/app/assets/javascripts/ponytail/views/migration_file.coffee +0 -25
- data/app/assets/javascripts/ponytail/views/new.coffee +0 -58
- data/lib/rails/mapper.rb +0 -12
- data/spec/controllers/migrations_controller_spec.rb +0 -92
- data/spec/javascripts/helpers/.keep +0 -0
- data/spec/javascripts/helpers/build_model.js +0 -11
- data/spec/javascripts/ponytail/models/column_spec.js +0 -2
- data/spec/javascripts/ponytail/models/create_command_spec.js +0 -15
- data/spec/javascripts/ponytail/models/migration_file_spec.js +0 -16
- data/spec/javascripts/ponytail/models/table_spec.js +0 -24
- data/spec/ponytail/schema_spec.rb +0 -23
- data/spec/rails/mapper_spec.rb +0 -17
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 41a7ab39f2aa8e3b19fae0b2c8e609212aea06ef
|
|
4
|
+
data.tar.gz: 505d33b61f8e1a2c5f1aa6176d5402c98fb5ef1a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1aab440243c8ab54f3392721b5fc6b670742ae30478e50bbb53d0f76a08042f301950f1b5df67dc60fc0d0e46ff680e547491723497d041df44633e2e1796e3c
|
|
7
|
+
data.tar.gz: 450c4f84a0a2798e66bb552b0e79d1bc669708770065d4683d6b81651a3f6e64f52f8a36539782d547b15b014ee4b70bad2368361d740f0cb9753f4d0f26ef74
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
ponytail (0.
|
|
4
|
+
ponytail (0.5.0)
|
|
5
5
|
coffee-rails (~> 4.0.0)
|
|
6
6
|
compass-rails
|
|
7
7
|
rails (~> 4.0.0)
|
|
@@ -37,7 +37,7 @@ GEM
|
|
|
37
37
|
arel (4.0.1)
|
|
38
38
|
atomic (1.1.14)
|
|
39
39
|
builder (3.1.4)
|
|
40
|
-
capybara (2.2.
|
|
40
|
+
capybara (2.2.1)
|
|
41
41
|
mime-types (>= 1.16)
|
|
42
42
|
nokogiri (>= 1.3.3)
|
|
43
43
|
rack (>= 1.0.0)
|
|
@@ -123,8 +123,9 @@ GEM
|
|
|
123
123
|
rspec-expectations (2.14.4)
|
|
124
124
|
diff-lcs (>= 1.1.3, < 2.0)
|
|
125
125
|
rspec-mocks (2.14.4)
|
|
126
|
-
rspec-rails (2.14.
|
|
126
|
+
rspec-rails (2.14.1)
|
|
127
127
|
actionpack (>= 3.0)
|
|
128
|
+
activemodel (>= 3.0)
|
|
128
129
|
activesupport (>= 3.0)
|
|
129
130
|
railties (>= 3.0)
|
|
130
131
|
rspec-core (~> 2.14.0)
|
data/README.md
CHANGED
|
@@ -32,7 +32,7 @@ Comment out `config.active_record.migration_error` in `config/environments/devel
|
|
|
32
32
|
|
|
33
33
|
## Usage
|
|
34
34
|
|
|
35
|
-
Visit `/
|
|
35
|
+
Visit `/ponytail/migrations` in your app.
|
|
36
36
|
|
|
37
37
|
## How to work dummy app
|
|
38
38
|
|
|
@@ -46,7 +46,7 @@ $ rails s
|
|
|
46
46
|
|
|
47
47
|
Dummy app is deploying on heroku. However, you can not change the migration files and databases.
|
|
48
48
|
|
|
49
|
-
http://ponytail.herokuapp.com/
|
|
49
|
+
http://ponytail.herokuapp.com/
|
|
50
50
|
|
|
51
51
|
## Contributing
|
|
52
52
|
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
class Ponytail.Views.Column extends Backbone.View
|
|
2
|
+
template: ->
|
|
3
|
+
_.template($("#column_template").html(), @model.attributes)
|
|
2
4
|
className: "column"
|
|
3
5
|
events:
|
|
4
6
|
"click .column_type": "clickColumnType"
|
|
@@ -16,7 +18,7 @@ class Ponytail.Views.Column extends Backbone.View
|
|
|
16
18
|
|
|
17
19
|
render: =>
|
|
18
20
|
if @el.parentNode == null
|
|
19
|
-
$(@el).html(
|
|
21
|
+
$(@el).html(@template())
|
|
20
22
|
else
|
|
21
23
|
@$(".column_type span").text(@model.get("type"))
|
|
22
24
|
@$(".column_name span").text(@model.get("name"))
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
class Ponytail.Views.MigrationsIndex extends Backbone.View
|
|
2
|
+
events:
|
|
3
|
+
"click .close a": "closeNotice"
|
|
4
|
+
"click .migration_files .filename": "clickFileName"
|
|
5
|
+
"click .delete_file": "clickDeleteFile"
|
|
6
|
+
"click .new_button": "clickNewButton"
|
|
7
|
+
"click .migrate_button": "clickMigrateButton"
|
|
8
|
+
"click .rollback_button": "clickRollbackButton"
|
|
9
|
+
|
|
10
|
+
render: ->
|
|
11
|
+
@highlightCode()
|
|
12
|
+
@
|
|
13
|
+
|
|
14
|
+
highlightCode: ->
|
|
15
|
+
for el in $('pre code')
|
|
16
|
+
hljs.highlightBlock(el)
|
|
17
|
+
|
|
18
|
+
closeNotice: ->
|
|
19
|
+
$(".notice").hide()
|
|
20
|
+
false
|
|
21
|
+
|
|
22
|
+
clickFileName: (e) ->
|
|
23
|
+
@$(".migration_file .migration_filename").text(e.target.innerHTML)
|
|
24
|
+
@$(".migration_file .migration_filename").removeClass("highlight")
|
|
25
|
+
setTimeout( ->
|
|
26
|
+
@$(".migration_file .migration_filename").addClass("highlight")
|
|
27
|
+
, 100)
|
|
28
|
+
raw_content = $(e.target).parent().find(".raw_content").text()
|
|
29
|
+
@$(".migration_file .raw_content pre code").text(raw_content)
|
|
30
|
+
@highlightCode()
|
|
31
|
+
|
|
32
|
+
clickDeleteFile: (e) ->
|
|
33
|
+
if confirm('Are you sure?')
|
|
34
|
+
version = $(e.target).parent().parent().find(".version").text()
|
|
35
|
+
$.ajax
|
|
36
|
+
dataType: 'json'
|
|
37
|
+
url: "/ponytail/migrations/#{version}"
|
|
38
|
+
type: 'DELETE'
|
|
39
|
+
success: -> window.location.href = "/ponytail/migrations"
|
|
40
|
+
false
|
|
41
|
+
|
|
42
|
+
clickNewButton: ->
|
|
43
|
+
window.location.href = "migrations/new"
|
|
44
|
+
|
|
45
|
+
clickMigrateButton: ->
|
|
46
|
+
latest_version = $("tr:last .version").text()
|
|
47
|
+
$.ajax
|
|
48
|
+
dataType: 'json'
|
|
49
|
+
url: '/ponytail/schema'
|
|
50
|
+
data:
|
|
51
|
+
ponytail_schema:
|
|
52
|
+
version: latest_version
|
|
53
|
+
type: 'PATCH'
|
|
54
|
+
success: () -> window.location.href = "/ponytail/migrations"
|
|
55
|
+
|
|
56
|
+
clickRollbackButton: ->
|
|
57
|
+
rollback_index = $("tr").index($(".current"))
|
|
58
|
+
rollback_version = $("tr:eq(#{rollback_index - 1}) .version").text()
|
|
59
|
+
$.ajax
|
|
60
|
+
dataType: 'json'
|
|
61
|
+
url: '/ponytail/schema'
|
|
62
|
+
data:
|
|
63
|
+
ponytail_schema:
|
|
64
|
+
version: rollback_version
|
|
65
|
+
type: 'PATCH'
|
|
66
|
+
success: -> window.location.href = "/ponytail/migrations"
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
class Ponytail.Views.MigrationsNew extends Backbone.View
|
|
2
|
+
events:
|
|
3
|
+
"click .close a": "closeNotice"
|
|
4
|
+
"click .table_name": "clickTableName"
|
|
5
|
+
"click .new_table a": "clickNewTable"
|
|
6
|
+
|
|
7
|
+
initialize: ->
|
|
8
|
+
@tables = []
|
|
9
|
+
|
|
10
|
+
render: =>
|
|
11
|
+
schema = new Ponytail.Models.Schema()
|
|
12
|
+
schema.fetch
|
|
13
|
+
success: =>
|
|
14
|
+
for table_attrs in schema.get('tables')
|
|
15
|
+
m = new Ponytail.Models.Table(table_attrs)
|
|
16
|
+
v = new Ponytail.Views.Table({model: m})
|
|
17
|
+
@$(".new_table").before(v.render().el)
|
|
18
|
+
@tables.push(m)
|
|
19
|
+
|
|
20
|
+
class_name = @$(".classname input")[0].value
|
|
21
|
+
@migrationFile = new Ponytail.Models.MigrationFile({className: class_name})
|
|
22
|
+
new Ponytail.Views.PreviewCreateFile({el: @$(".migration_file"), model: @migrationFile})
|
|
23
|
+
@migrationFile.update()
|
|
24
|
+
|
|
25
|
+
for table in @tables
|
|
26
|
+
table.bind("change", =>
|
|
27
|
+
@migrationFile.updateByTables(@tables)
|
|
28
|
+
)
|
|
29
|
+
@
|
|
30
|
+
|
|
31
|
+
closeNotice: ->
|
|
32
|
+
$(".notice").hide()
|
|
33
|
+
false
|
|
34
|
+
|
|
35
|
+
clickTableName: (e) ->
|
|
36
|
+
tableElem = $(e.target).parent().parent()
|
|
37
|
+
columnsElem = tableElem.find(".columns")
|
|
38
|
+
if columnsElem.is(':visible')
|
|
39
|
+
columnsElem.slideUp()
|
|
40
|
+
else
|
|
41
|
+
columnsElem.slideDown()
|
|
42
|
+
|
|
43
|
+
clickNewTable: ->
|
|
44
|
+
table = new Ponytail.Models.Table({isCreated: true})
|
|
45
|
+
@tables.push(table)
|
|
46
|
+
table.bind("change", =>
|
|
47
|
+
@migrationFile.updateByTables(@tables)
|
|
48
|
+
)
|
|
49
|
+
table.trigger("change")
|
|
50
|
+
|
|
51
|
+
view = new Ponytail.Views.Table({model: table})
|
|
52
|
+
@$(".new_table").before(view.render().el)
|
|
53
|
+
false
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
class Ponytail.Views.PreviewCreateFile extends Backbone.View
|
|
2
|
+
events:
|
|
3
|
+
"click .edit_checkbox input": "clickEditCheckbox"
|
|
4
|
+
"keyup .classname input": (e) ->
|
|
5
|
+
@model.set({className: e.target.value})
|
|
6
|
+
"keyup .raw_content textarea": (e) ->
|
|
7
|
+
@model.set({rawContent: e.target.value})
|
|
8
|
+
"click .create_button": "clickCreateButton"
|
|
9
|
+
|
|
10
|
+
initialize: ->
|
|
11
|
+
@model.bind("change", @render)
|
|
12
|
+
|
|
13
|
+
render: =>
|
|
14
|
+
@$(".raw_content pre code").text(@model.get("rawContent"))
|
|
15
|
+
if !(@$(".raw_content textarea").is(":visible"))
|
|
16
|
+
@$(".raw_content textarea").val(@model.get("rawContent"))
|
|
17
|
+
@highlightCode()
|
|
18
|
+
@
|
|
19
|
+
|
|
20
|
+
highlightCode: ->
|
|
21
|
+
for el in $('pre code')
|
|
22
|
+
hljs.highlightBlock(el)
|
|
23
|
+
|
|
24
|
+
clickEditCheckbox: ->
|
|
25
|
+
@$(".raw_content pre").toggle()
|
|
26
|
+
@$(".raw_content textarea").toggle()
|
|
27
|
+
|
|
28
|
+
clickCreateButton: ->
|
|
29
|
+
$.ajax
|
|
30
|
+
dataType: 'json'
|
|
31
|
+
url: '/ponytail/migrations'
|
|
32
|
+
data:
|
|
33
|
+
ponytail_migration:
|
|
34
|
+
name: @model.get("className")
|
|
35
|
+
raw_content: @model.get("rawContent")
|
|
36
|
+
type: 'POST'
|
|
37
|
+
success: -> window.location.href = "/ponytail/migrations"
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
class Ponytail.Views.Table extends Backbone.View
|
|
2
|
+
template: ->
|
|
3
|
+
_.template($("#table_template").html(), @model.attributes)
|
|
2
4
|
className: "table"
|
|
3
5
|
events:
|
|
4
6
|
"click .edit_table": "clickEditTable"
|
|
@@ -14,7 +16,15 @@ class Ponytail.Views.Table extends Backbone.View
|
|
|
14
16
|
|
|
15
17
|
render: =>
|
|
16
18
|
if @el.parentNode == null
|
|
17
|
-
$(@el).html(
|
|
19
|
+
$(@el).html(@template())
|
|
20
|
+
columns = []
|
|
21
|
+
for column_attrs in @model.get('columns')
|
|
22
|
+
column_attrs.table = @model
|
|
23
|
+
m = new Ponytail.Models.Column(column_attrs)
|
|
24
|
+
v = new Ponytail.Views.Column({model: m})
|
|
25
|
+
@$(".add_column").before(v.render().el)
|
|
26
|
+
columns.push(m)
|
|
27
|
+
@model.set({columns: columns}, {silent: true})
|
|
18
28
|
else
|
|
19
29
|
@$(".table_name span").text(@model.get("name"))
|
|
20
30
|
@
|
|
@@ -8,7 +8,29 @@
|
|
|
8
8
|
@include box-orient(vertical);
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
@keyframes
|
|
11
|
+
@mixin keyframes($animationName) {
|
|
12
|
+
@-webkit-keyframes #{$animationName} {
|
|
13
|
+
@content;
|
|
14
|
+
}
|
|
15
|
+
@-moz-keyframes #{$animationName} {
|
|
16
|
+
@content;
|
|
17
|
+
}
|
|
18
|
+
@-o-keyframes #{$animationName} {
|
|
19
|
+
@content;
|
|
20
|
+
}
|
|
21
|
+
@keyframes #{$animationName} {
|
|
22
|
+
@content;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@mixin animation($args) {
|
|
27
|
+
-webkit-animation: $args;
|
|
28
|
+
-moz-animation: $args;
|
|
29
|
+
-o-animation: $args;
|
|
30
|
+
animation: $args;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@include keyframes(highlight) {
|
|
12
34
|
0% { background-color: yellow; }
|
|
13
35
|
100% { background-color: white; }
|
|
14
36
|
}
|
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
.container {
|
|
7
7
|
@extend .horizontal-box;
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
// TODO: bad style name
|
|
10
|
+
.left_div {
|
|
10
11
|
@include box-flex(1);
|
|
11
12
|
margin: 0 2px;
|
|
12
13
|
}
|
|
@@ -31,26 +32,25 @@
|
|
|
31
32
|
}
|
|
32
33
|
}
|
|
33
34
|
|
|
35
|
+
.version,
|
|
34
36
|
.raw_content {
|
|
35
37
|
display: none;
|
|
36
38
|
}
|
|
37
39
|
}
|
|
38
40
|
|
|
39
41
|
.migration_file {
|
|
42
|
+
width: 500px;
|
|
43
|
+
margin: 0 2px;
|
|
44
|
+
|
|
40
45
|
.migration_filename {
|
|
41
46
|
margin: 2px 0;
|
|
42
47
|
padding: 2px;
|
|
43
48
|
|
|
44
49
|
&.highlight {
|
|
45
|
-
animation
|
|
50
|
+
@include animation(highlight 1s 1);
|
|
46
51
|
}
|
|
47
52
|
}
|
|
48
53
|
.raw_content {
|
|
49
|
-
@include border-radius(5px);
|
|
50
|
-
background: whitesmoke;
|
|
51
|
-
margin-top: 2px;
|
|
52
|
-
padding: 5px;
|
|
53
|
-
|
|
54
54
|
pre {
|
|
55
55
|
margin: 5px 0;
|
|
56
56
|
}
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
@extend .horizontal-box;
|
|
63
63
|
|
|
64
64
|
.migrate {
|
|
65
|
-
|
|
65
|
+
margin-left: 10px;
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
}
|
|
@@ -7,10 +7,6 @@
|
|
|
7
7
|
@extend .horizontal-box;
|
|
8
8
|
margin-top: 5px;
|
|
9
9
|
|
|
10
|
-
> div {
|
|
11
|
-
margin: 0 2px;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
10
|
.tables {
|
|
15
11
|
@extend .vertical-box;
|
|
16
12
|
@include box-flex(1);
|
|
@@ -19,6 +15,7 @@
|
|
|
19
15
|
height: 500px;
|
|
20
16
|
overflow-x: hidden;
|
|
21
17
|
overflow-y: auto;
|
|
18
|
+
margin: 0 2px;
|
|
22
19
|
|
|
23
20
|
.table {
|
|
24
21
|
@extend .vertical-box;
|
|
@@ -104,6 +101,7 @@
|
|
|
104
101
|
.migration_file {
|
|
105
102
|
@extend .vertical-box;
|
|
106
103
|
width: 500px;
|
|
104
|
+
margin: 0 2px;
|
|
107
105
|
|
|
108
106
|
.migration_file_header {
|
|
109
107
|
@extend .horizontal-box;
|
|
@@ -119,9 +117,14 @@
|
|
|
119
117
|
.raw_content {
|
|
120
118
|
@include box-flex(1);
|
|
121
119
|
margin-top: 3px;
|
|
120
|
+
|
|
121
|
+
pre {
|
|
122
|
+
margin: 5px 0;
|
|
123
|
+
}
|
|
122
124
|
textarea {
|
|
123
125
|
width: 100%;
|
|
124
126
|
height: 500px;
|
|
127
|
+
display: none;
|
|
125
128
|
}
|
|
126
129
|
}
|
|
127
130
|
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
module Ponytail
|
|
2
2
|
class MigrationsController < ActionController::Base
|
|
3
3
|
layout 'ponytail/application'
|
|
4
|
+
respond_to :html, only: [:index, :new]
|
|
5
|
+
respond_to :json, only: [:create, :destroy]
|
|
4
6
|
|
|
5
7
|
def index
|
|
6
8
|
@migrations = Migration.all
|
|
7
|
-
@current_version = Migration.current_version
|
|
8
9
|
end
|
|
9
10
|
|
|
10
11
|
def new
|
|
@@ -13,36 +14,19 @@ module Ponytail
|
|
|
13
14
|
end
|
|
14
15
|
|
|
15
16
|
def create
|
|
16
|
-
@migration = Migration.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
redirect_to :migrations, notice: 'Migration was successfully created.'
|
|
20
|
-
else
|
|
21
|
-
@schema = Schema.new
|
|
22
|
-
render action: :new
|
|
23
|
-
end
|
|
17
|
+
@migration = Migration.create(migraion_params)
|
|
18
|
+
flash[:notice] = "Migration was successfully created."
|
|
19
|
+
respond_with @migration
|
|
24
20
|
end
|
|
25
21
|
|
|
26
22
|
def destroy
|
|
27
|
-
|
|
28
|
-
@migration
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
def migrate
|
|
34
|
-
if Migration.migrate
|
|
35
|
-
redirect_to :migrations, notice: 'Migrate was succeed.'
|
|
36
|
-
else
|
|
37
|
-
redirect_to :migrations, notice: 'Migrate was failed.'
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def rollback
|
|
42
|
-
if Migration.rollback
|
|
43
|
-
redirect_to :migrations, notice: 'Rollback was succeed.'
|
|
23
|
+
@migration = Migration.find(params[:id].to_i)
|
|
24
|
+
if @migration
|
|
25
|
+
@migration.destroy
|
|
26
|
+
flash[:notice] = "Migration was successfully deleted."
|
|
27
|
+
respond_with @migration
|
|
44
28
|
else
|
|
45
|
-
|
|
29
|
+
render nothing: true, status: 404
|
|
46
30
|
end
|
|
47
31
|
end
|
|
48
32
|
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Ponytail
|
|
2
|
+
class SchemasController < ActionController::Base
|
|
3
|
+
respond_to :json, only: [:show, :update]
|
|
4
|
+
|
|
5
|
+
def show
|
|
6
|
+
@schema = Schema.new
|
|
7
|
+
respond_with @schema
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def update
|
|
11
|
+
# TODO, WIP:
|
|
12
|
+
@schema = Schema.new
|
|
13
|
+
if @schema.update(schema_params)
|
|
14
|
+
flash[:notice] = "Schema was successfully updated."
|
|
15
|
+
render json: @schema, status: :ok
|
|
16
|
+
else
|
|
17
|
+
flash[:notice] = "Schema update was failed."
|
|
18
|
+
render json: @schema, status: :bad_request
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
def schema_params
|
|
24
|
+
params.require(:ponytail_schema).permit(:version)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<div class="header">
|
|
3
3
|
<span>index</span>
|
|
4
4
|
<span>|</span>
|
|
5
|
-
<a href="/
|
|
5
|
+
<a href="/ponytail/migrations/new">new</a>
|
|
6
6
|
</div>
|
|
7
7
|
|
|
8
8
|
<% if notice %>
|
|
@@ -13,18 +13,22 @@
|
|
|
13
13
|
<% end %>
|
|
14
14
|
|
|
15
15
|
<div class="container">
|
|
16
|
-
<div>
|
|
17
|
-
|
|
18
|
-
<% path = 'db/migrate/' %>
|
|
19
|
-
<div class="migration_filepath"><%= path %></div>
|
|
16
|
+
<div class="left_div">
|
|
17
|
+
<div class="migration_filepath"><%= "#{Ponytail::Migration.migrations_path}/" %></div>
|
|
20
18
|
<div class="migration_files">
|
|
21
19
|
<table>
|
|
22
20
|
<% @migrations.each do |migration| %>
|
|
23
|
-
|
|
24
|
-
<
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
<% if migration.current? %>
|
|
22
|
+
<tr class="current">
|
|
23
|
+
<td>*</td>
|
|
24
|
+
<% else %>
|
|
25
|
+
<tr>
|
|
26
|
+
<td></td>
|
|
27
|
+
<% end %>
|
|
28
|
+
<td class="filename"><%= migration.filename_only %></td>
|
|
29
|
+
<td class="version"><%= migration.version %></td>
|
|
27
30
|
<td class="raw_content"><%= migration.raw_content %></td>
|
|
31
|
+
<td class="delete_file"><a href="#">x</a></td>
|
|
28
32
|
</tr>
|
|
29
33
|
<% end %>
|
|
30
34
|
</table>
|
|
@@ -33,10 +37,9 @@
|
|
|
33
37
|
|
|
34
38
|
<div class="migration_file">
|
|
35
39
|
<% migration = @migrations[0] %>
|
|
36
|
-
|
|
37
|
-
<div class="migration_filename"><%= migration.filename.sub(path, "") %></div>
|
|
40
|
+
<div class="migration_filename"><%= migration.filename_only %></div>
|
|
38
41
|
<div class="raw_content">
|
|
39
|
-
<pre><%= migration.raw_content %></pre>
|
|
42
|
+
<pre><code><%= migration.raw_content %></code></pre>
|
|
40
43
|
</div>
|
|
41
44
|
</div>
|
|
42
45
|
</div>
|
|
@@ -46,12 +49,20 @@
|
|
|
46
49
|
<button class="new_button">New</button>
|
|
47
50
|
</div>
|
|
48
51
|
<div class="migrate">
|
|
49
|
-
|
|
50
|
-
|
|
52
|
+
<% if !Ponytail::Migration.check_pending? %>
|
|
53
|
+
<button class="migrate_button">Migrate</button>
|
|
54
|
+
<% else %>
|
|
55
|
+
<button class="migrate_button" disabled="disabled">Migrate</button>
|
|
56
|
+
<% end %>
|
|
57
|
+
<% if !Ponytail::Migration.check_pending? && !@migrations[0].current? %>
|
|
58
|
+
<button class="rollback_button">Rollback</button>
|
|
59
|
+
<% else %>
|
|
60
|
+
<button class="rollback_button" disabled="disabled">Rollback</button>
|
|
61
|
+
<% end %>
|
|
51
62
|
</div>
|
|
52
63
|
</div>
|
|
53
64
|
</div>
|
|
54
65
|
|
|
55
66
|
<script type='text/javascript'>
|
|
56
|
-
new Ponytail.Views.
|
|
67
|
+
new Ponytail.Views.MigrationsIndex({el: $(".index")}).render();
|
|
57
68
|
</script>
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
<div class="new">
|
|
5
5
|
<div class="header">
|
|
6
|
-
<a href="/
|
|
6
|
+
<a href="/ponytail/migrations">index</a>
|
|
7
7
|
<span>|</span>
|
|
8
8
|
<span>new</span>
|
|
9
9
|
</div>
|
|
@@ -18,76 +18,33 @@
|
|
|
18
18
|
|
|
19
19
|
<div class="container">
|
|
20
20
|
<div class="tables">
|
|
21
|
-
<% @schema.tables.each do |table| %>
|
|
22
|
-
<div class="table">
|
|
23
|
-
<div class="horizontal-box">
|
|
24
|
-
<div class="table_name">
|
|
25
|
-
<span><%= table.name %></span>
|
|
26
|
-
<input type="text" value="<%= table.name %>" />
|
|
27
|
-
</div>
|
|
28
|
-
<div class="edit_table"><a href="#">edit</a></div>
|
|
29
|
-
<div class="drop_table"><a href="#">drop</a></div>
|
|
30
|
-
<div class="restore_table"><a href="#">restore</a></div>
|
|
31
|
-
</div>
|
|
32
|
-
<div class="columns">
|
|
33
|
-
<% table.columns.each do |column| %>
|
|
34
|
-
<div class="column">
|
|
35
|
-
<div class="column_type">
|
|
36
|
-
<span><%= column.type %></span>
|
|
37
|
-
<select>
|
|
38
|
-
<option value="string">string</option>
|
|
39
|
-
<option value="text">text</option>
|
|
40
|
-
<option value="integer">integer</option>
|
|
41
|
-
<option value="float">float</option>
|
|
42
|
-
<option value="decimal">decimal</option>
|
|
43
|
-
<option value="datetime">datetime</option>
|
|
44
|
-
<option value="timestamp">timestamp</option>
|
|
45
|
-
<option value="time">time</option>
|
|
46
|
-
<option value="date">date</option>
|
|
47
|
-
<option value="binary">binary</option>
|
|
48
|
-
<option value="boolean">boolean</option>
|
|
49
|
-
</select>
|
|
50
|
-
</div>
|
|
51
|
-
<div class="column_name">
|
|
52
|
-
<span><%= column.name %></span>
|
|
53
|
-
<input type="text" value="<%= column.name %>" />
|
|
54
|
-
</div>
|
|
55
|
-
<div class="remove_column"><a href="#">remove</a></div>
|
|
56
|
-
<div class="restore_column"><a href="#">restore</a></div>
|
|
57
|
-
</div>
|
|
58
|
-
<% end %>
|
|
59
|
-
<div class="add_column"><a href="#">Add Column</a></div>
|
|
60
|
-
</div>
|
|
61
|
-
</div>
|
|
62
|
-
<% end %>
|
|
63
21
|
<div class="new_table"><a href="#">New Table</a></div>
|
|
64
22
|
</div>
|
|
65
23
|
|
|
66
|
-
|
|
67
|
-
<div class="
|
|
68
|
-
<div class="
|
|
69
|
-
<
|
|
70
|
-
<input type="text" name="ponytail_migration[name]" value="NewMigration" />
|
|
71
|
-
</div>
|
|
72
|
-
|
|
73
|
-
<div class="edit_checkbox">
|
|
74
|
-
<input type="checkbox" />
|
|
75
|
-
<span>edit</span>
|
|
76
|
-
</div>
|
|
24
|
+
<div class="migration_file">
|
|
25
|
+
<div class="migration_file_header">
|
|
26
|
+
<div class="classname">
|
|
27
|
+
<input type="text" value="NewMigration" />
|
|
77
28
|
</div>
|
|
78
29
|
|
|
79
|
-
<div class="
|
|
80
|
-
<
|
|
30
|
+
<div class="edit_checkbox">
|
|
31
|
+
<input type="checkbox" />
|
|
32
|
+
<span>edit</span>
|
|
81
33
|
</div>
|
|
34
|
+
</div>
|
|
82
35
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
36
|
+
<div class="raw_content">
|
|
37
|
+
<pre><code></code></pre>
|
|
38
|
+
<textarea></textarea>
|
|
86
39
|
</div>
|
|
87
|
-
|
|
40
|
+
|
|
41
|
+
<div class="actions">
|
|
42
|
+
<button class="create_button" <%= Ponytail::Migration.check_pending? ? 'disabled="disabled"' : '' %>>Create File</button>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
88
45
|
</div>
|
|
89
46
|
</div>
|
|
90
47
|
|
|
91
48
|
<script type='text/javascript'>
|
|
92
|
-
new Ponytail.Views.
|
|
49
|
+
new Ponytail.Views.MigrationsNew({el: $(".new")}).render();
|
|
93
50
|
</script>
|