erd 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -10,14 +10,22 @@ class ERD
10
10
  $(rows).each (i, row) ->
11
11
  existing = row if (action == $(row[0]).html()) && (model == $(row[1]).html()) && (column == $(row[2]).html())
12
12
  if existing == null
13
- $('#changes > tbody').append("<tr><td>#{action}</td><td>#{model}</td><td>#{column}</td><td>#{from}</td><td>#{to}</td></tr>")
13
+ $('#changes > tbody').append("""
14
+ <tr>
15
+ <td data-name="action">#{action}</td>
16
+ <td data-name="model">#{model}</td>
17
+ <td data-name="column">#{column}</td>
18
+ <td data-name="from">#{from}</td>
19
+ <td data-name="to">#{to}</td>
20
+ </tr>
21
+ """)
14
22
  else
15
23
  $(existing[3]).text(from)
16
24
  $(existing[4]).text(to)
17
25
  $('#changes').show()
18
26
 
19
27
  positions: (div) ->
20
- [left, width, top, height] = [parseInt(div.css('left')), parseInt(div.css('width')), parseInt(div.css('top')), parseInt(div.css('height'))]
28
+ [left, width, top, height] = [parseFloat(div.css('left')), parseFloat(div.css('width')), parseFloat(div.css('top')), parseFloat(div.css('height'))]
21
29
  {left: left, right: left + width, top: top, bottom: top + height, center: {x: (left + left + width) / 2, y: (top + top + height) / 2}, vertex: {}}
22
30
 
23
31
  connect_arrows: ->
@@ -52,9 +60,9 @@ class ERD
52
60
  from.vertex.direction = 'h'
53
61
 
54
62
  if from.vertex.direction == 'h'
55
- path = "M#{parseInt(from.vertex.x)} #{parseInt(from.vertex.y)}H#{parseInt((from.vertex.x + to.vertex.x) / 2)} V#{parseInt(to.vertex.y)} H#{parseInt(to.vertex.x)}"
63
+ path = "M#{Math.floor(from.vertex.x)} #{Math.floor(from.vertex.y)}H#{Math.floor((from.vertex.x + to.vertex.x) / 2)} V#{Math.floor(to.vertex.y)} H#{Math.floor(to.vertex.x)}"
56
64
  else
57
- path = "M#{parseInt(from.vertex.x)} #{parseInt(from.vertex.y)}V#{parseInt((from.vertex.y + to.vertex.y) / 2)} H#{parseInt(to.vertex.x)} V#{parseInt(to.vertex.y)}"
65
+ path = "M#{Math.floor(from.vertex.x)} #{Math.floor(from.vertex.y)}V#{Math.floor((from.vertex.y + to.vertex.y) / 2)} H#{Math.floor(to.vertex.x)} V#{Math.floor(to.vertex.y)}"
58
66
 
59
67
  @paper.path(path).attr({'stroke-width': 2, opacity: 0.5, 'arrow-end': 'classic-wide-long'})
60
68
 
@@ -91,16 +99,18 @@ class ERD
91
99
  $('form.add_column_form').on 'submit', @handle_add_column
92
100
  $('#changes_form').on 'submit', @handle_save
93
101
 
94
- handle_save: ->
95
- j = '['
96
- rows = ($(tr).find('td') for tr in $('#changes > tbody > tr'))
97
- $(rows).each (i, row) ->
98
- j += "{\"action\": \"#{$(row[0]).html()}\", \"model\": \"#{$(row[1]).html()}\", \"column\": \"#{$(row[2]).html()}\", \"from\": \"#{$(row[3]).html()}\", \"to\": \"#{$(row[4]).html()}\"}"
99
- j += ',' if i < rows.length - 1
100
- j += ']'
101
- $('#changes_form').find('input[name=changes]').val(j)
102
-
103
- handle_add_column: (ev) ->
102
+ handle_save: (ev) =>
103
+ changes = $('#changes > tbody > tr').map(->
104
+ change = {}
105
+ $(this).find('td').each ->
106
+ name = $(this).data('name')
107
+ value = $(this).html()
108
+ change[name] = value
109
+ change
110
+ ).toArray()
111
+ $('#changes_form').find('input[name=changes]').val(JSON.stringify(changes))
112
+
113
+ handle_add_column: (ev) =>
104
114
  ev.preventDefault()
105
115
  target = $(ev.target)
106
116
  name = target.find('input[name=name]').val()
@@ -108,7 +118,7 @@ class ERD
108
118
 
109
119
  model = target.find('input[name=model]').val()
110
120
  type = target.find('input[name=type]').val()
111
- upsert_change 'add_column', model, "#{name}(#{type})", '', ''
121
+ @upsert_change 'add_column', model, "#{name}(#{type})", '', ''
112
122
 
113
123
  name_span = $("<span/>", class: 'column_name_text')
114
124
  .append(name)
@@ -131,7 +141,7 @@ class ERD
131
141
  .find('a.add_column')
132
142
  .show()
133
143
 
134
- handle_change_column_type: (ev) ->
144
+ handle_change_column_type: (ev) =>
135
145
  ev.preventDefault()
136
146
  target = $(ev.target)
137
147
  to = target.find('input[name=to]').val()
@@ -141,14 +151,14 @@ class ERD
141
151
  column = target.find('input[name=column]').val()
142
152
  type = target.find('input[name=type]').val()
143
153
  if to != type
144
- upsert_change 'alter_column', model, column, type, to
154
+ @upsert_change 'alter_column', model, column, type, to
145
155
 
146
156
  target.hide()
147
157
  .siblings('.column_type_text')
148
158
  .text(to)
149
159
  .show()
150
160
 
151
- handle_rename_column: (ev) ->
161
+ handle_rename_column: (ev) =>
152
162
  ev.preventDefault()
153
163
  target = $(ev.target)
154
164
  to = target.find('input[name=to]').val()
@@ -157,14 +167,14 @@ class ERD
157
167
  model = target.find('input[name=model]').val()
158
168
  column = target.find('input[name=column]').val()
159
169
  if to != column
160
- upsert_change 'rename_column', model, column, column, to
170
+ @upsert_change 'rename_column', model, column, column, to
161
171
 
162
172
  target.hide()
163
173
  .siblings('.column_name_text')
164
174
  .text(to)
165
175
  .show()
166
176
 
167
- handle_rename_model: (ev) ->
177
+ handle_rename_model: (ev) =>
168
178
  ev.preventDefault()
169
179
  target = $(ev.target)
170
180
  to = target.find('input[name=to]').val()
@@ -172,16 +182,16 @@ class ERD
172
182
 
173
183
  model = target.find('input[name=model]').val()
174
184
  if to != model
175
- upsert_change 'rename_model', model, '', model, to
185
+ @upsert_change 'rename_model', model, '', model, to
176
186
 
177
187
  target.hide()
178
188
  .siblings('.model_name_text')
179
189
  .text(to)
180
190
  .show()
181
191
 
182
- handle_add_column_click: (ev) ->
192
+ handle_add_column_click: (ev) =>
183
193
  ev.preventDefault()
184
- target = $(@)
194
+ target = $(ev.currentTarget)
185
195
 
186
196
  m = target.parents('div.model')
187
197
  if m.hasClass('noclick')
@@ -198,8 +208,8 @@ class ERD
198
208
  .val('')
199
209
  .focus()
200
210
 
201
- handle_text_elem_click: (ev) ->
202
- target = $(@)
211
+ handle_text_elem_click: (ev) =>
212
+ target = $(ev.currentTarget)
203
213
  text = target.text()
204
214
 
205
215
  m = target.parents('div.model')
@@ -8,9 +8,8 @@ module Erd
8
8
 
9
9
  class ErdController < ::Erd::ApplicationController
10
10
  def index
11
- # `bundle exec rake erd filename=tmp/erd filetype=plain`
12
11
  Rails.application.eager_load!
13
- RailsERD.options[:filename], RailsERD.options[:filetype] = 'tmp/erd', 'plain'
12
+ RailsERD.options[:filename], RailsERD.options[:filetype] = Rails.root.join('tmp/erd'), 'plain'
14
13
  RailsERD::Diagram::Graphviz.create
15
14
  plain = Rails.root.join('tmp/erd.plain').read
16
15
  positions = if (json = Rails.root.join('tmp/erd_positions.json')).exist?
@@ -23,7 +22,7 @@ module Erd
23
22
  migrated_versions = ActiveRecord::Base.connection.select_values("SELECT version FROM #{ActiveRecord::Migrator.schema_migrations_table_name}").map {|v| '%.3d' % v}
24
23
  @migrations = []
25
24
  ActiveRecord::Migrator.migrations_paths.each do |path|
26
- Dir.foreach(path) do |file|
25
+ Dir.foreach(Rails.root.join(path)) do |file|
27
26
  if (version_and_name = /^(\d{3,})_(.+)\.rb$/.match(file))
28
27
  status = migrated_versions.delete(version_and_name[1]) ? 'up' : 'down'
29
28
  @migrations << {status: status, version: version_and_name[1], name: version_and_name[2]}
@@ -0,0 +1,7 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+
4
+ Bundler.require :default, :development
5
+
6
+ Combustion.initialize!
7
+ run Combustion::Application
@@ -17,4 +17,9 @@ Gem::Specification.new do |gem|
17
17
 
18
18
  gem.add_runtime_dependency 'rails-erd', ['>= 0.4.5']
19
19
  gem.add_runtime_dependency 'nokogiri'
20
+
21
+ gem.add_development_dependency 'ruby-debug19'
22
+ gem.add_development_dependency 'combustion', '~> 0.3.1'
23
+ gem.add_development_dependency 'rspec-rails'
24
+ gem.add_development_dependency 'sqlite3'
20
25
  end
@@ -1,3 +1,3 @@
1
1
  module Erd
2
- VERSION = '0.1.1'
2
+ VERSION = '0.1.2'
3
3
  end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe Erd::ErdController do
4
+ it 'should GET :index' do
5
+ get :index
6
+
7
+ response.should render_template('index')
8
+ end
9
+ end
10
+
@@ -0,0 +1,3 @@
1
+ class Post < ActiveRecord::Base
2
+ belongs_to :user
3
+ end
@@ -0,0 +1,3 @@
1
+ class User < ActiveRecord::Base
2
+ has_many :posts
3
+ end
@@ -0,0 +1,3 @@
1
+ test:
2
+ adapter: sqlite3
3
+ database: db/combustion_test.sqlite
@@ -0,0 +1,3 @@
1
+ Rails.application.routes.draw do
2
+ #
3
+ end
@@ -0,0 +1,15 @@
1
+ ActiveRecord::Schema.define do
2
+ create_table "posts", :force => true do |t|
3
+ t.string "title"
4
+ t.text "content"
5
+ t.integer "user_id"
6
+ t.datetime "created_at", :null => false
7
+ t.datetime "updated_at", :null => false
8
+ end
9
+
10
+ create_table "users", :force => true do |t|
11
+ t.string "name"
12
+ t.datetime "created_at", :null => false
13
+ t.datetime "updated_at", :null => false
14
+ end
15
+ end
@@ -0,0 +1 @@
1
+ *.log
File without changes
@@ -0,0 +1,12 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+
4
+ Bundler.require :default, :development
5
+
6
+ Combustion.initialize!
7
+
8
+ require 'rspec/rails'
9
+
10
+ RSpec.configure do |config|
11
+ config.use_transactional_fixtures = true
12
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: erd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-30 00:00:00.000000000 Z
12
+ date: 2012-05-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails-erd
16
- requirement: &70208383601640 !ruby/object:Gem::Requirement
16
+ requirement: &70212334462400 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.4.5
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70208383601640
24
+ version_requirements: *70212334462400
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: nokogiri
27
- requirement: &70208383631860 !ruby/object:Gem::Requirement
27
+ requirement: &70212334461440 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,51 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70208383631860
35
+ version_requirements: *70212334461440
36
+ - !ruby/object:Gem::Dependency
37
+ name: ruby-debug19
38
+ requirement: &70212334460620 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70212334460620
47
+ - !ruby/object:Gem::Dependency
48
+ name: combustion
49
+ requirement: &70212334459800 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 0.3.1
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70212334459800
58
+ - !ruby/object:Gem::Dependency
59
+ name: rspec-rails
60
+ requirement: &70212334459100 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70212334459100
69
+ - !ruby/object:Gem::Dependency
70
+ name: sqlite3
71
+ requirement: &70212334458260 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70212334458260
36
80
  description: erd engine on Rails
37
81
  email:
38
82
  - ronnie@dio.jp
@@ -56,12 +100,23 @@ files:
56
100
  - app/views/erd/erd/erd.html.erb
57
101
  - app/views/erd/erd/index.html.erb
58
102
  - app/views/layouts/erd/application.html.erb
103
+ - config.ru
59
104
  - config/routes.rb
60
105
  - erd.gemspec
61
106
  - lib/erd.rb
62
107
  - lib/erd/engine.rb
63
108
  - lib/erd/railtie.rb
64
109
  - lib/erd/version.rb
110
+ - spec/controllers/erd_controller_spec.rb
111
+ - spec/internal/app/models/post.rb
112
+ - spec/internal/app/models/user.rb
113
+ - spec/internal/config/database.yml
114
+ - spec/internal/config/routes.rb
115
+ - spec/internal/db/combustion_test.sqlite
116
+ - spec/internal/db/schema.rb
117
+ - spec/internal/log/.gitignore
118
+ - spec/internal/public/favicon.ico
119
+ - spec/spec_helper.rb
65
120
  - vendor/assets/javascripts/raphael-min.js
66
121
  homepage: https://github.com/amatsuda/erd
67
122
  licenses: []
@@ -87,4 +142,14 @@ rubygems_version: 1.8.16
87
142
  signing_key:
88
143
  specification_version: 3
89
144
  summary: erd engine on Rails
90
- test_files: []
145
+ test_files:
146
+ - spec/controllers/erd_controller_spec.rb
147
+ - spec/internal/app/models/post.rb
148
+ - spec/internal/app/models/user.rb
149
+ - spec/internal/config/database.yml
150
+ - spec/internal/config/routes.rb
151
+ - spec/internal/db/combustion_test.sqlite
152
+ - spec/internal/db/schema.rb
153
+ - spec/internal/log/.gitignore
154
+ - spec/internal/public/favicon.ico
155
+ - spec/spec_helper.rb