annotator 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -78,14 +78,19 @@ Contributions are very much welcome.
78
78
 
79
79
  * since name does not have "model" in it, we could possibly use "rake routes" to annotate controller actions, not sure if it's worth it
80
80
 
81
- == Authors
81
+ == Credits
82
82
 
83
- Kacper Cieśla @ Tech-Angels http://www.tech-angels.com
83
+ Kacper Cieśla @ Tech-Angels - http://www.tech-angels.com
84
84
 
85
- Contributions:
85
+ {<img src="http://media.tumblr.com/tumblr_m5ay3bQiER1qa44ov.png" alt="Tech-Angels" />}[http://www.tech-angels.com]
86
+
87
+ {Contributions}[https://github.com/tech-angels/annotator/graphs/contributors]:
86
88
 
87
89
  * {Lucas Florio}[https://github.com/lucasefe] - made it working without rails
88
90
 
91
+
89
92
  == License
90
93
 
91
- Annotator released under the MIT license.
94
+ Annotator is released under the MIT license.
95
+
96
+
@@ -7,7 +7,7 @@ module Annotator
7
7
  def check
8
8
  # check if there is belongs to association where this column is a foreign key
9
9
  @model.reflect_on_all_associations.each do |reflection|
10
- if reflection.foreign_key == @column && reflection.macro == :belongs_to
10
+ if (reflection.options[:foreign_key] || reflection.send(:derive_foreign_key)) == @column && reflection.macro == :belongs_to
11
11
  @reflection = reflection
12
12
  return true
13
13
  end
@@ -33,7 +33,20 @@ module Annotator
33
33
  @blocks[current_block] += [line]
34
34
  end
35
35
 
36
- @blocks[:after], @blocks[:before] = @blocks[:before], [] if @blocks[:after].empty?
36
+
37
+ # If there is no after block, it means there are no attributes block yet.
38
+ # Let's try to find some good place to insert them.
39
+ if @blocks[:after].empty?
40
+ @blocks[:before].each_with_index do |line,i|
41
+ # We want to insert them after requires or any comment block at the beginning of the file
42
+ unless line.match(/^require/) || line.match(/^#/)
43
+ @blocks[:after] = @blocks[:before][i..-1]
44
+ @blocks[:before] = (i == 0) ? [] : @blocks[:before][0..(i-1)] + [''] # add one additional separation line to make it cleaner
45
+ break
46
+ end
47
+ end
48
+ end
49
+
37
50
  end
38
51
 
39
52
  # If this file does not have associated AR class it should be skipped
@@ -1,3 +1,3 @@
1
1
  module Annotator
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
@@ -48,6 +48,12 @@ class AnnotatorTest < ActiveSupport::TestCase
48
48
  assert_equal File.read(asset_file 'foo_require_first.rb' ), File.read(app_file 'foo.rb' )
49
49
  end
50
50
 
51
+ test "leaving magic comments in place" do
52
+ FileUtils.cp asset_file('boo_encoding.rb'), app_file('boo.rb')
53
+ execute "rake annotate"
54
+ assert_equal File.read(asset_file 'boo_encoding_annotated.rb' ), File.read(app_file 'boo.rb' )
55
+ end
56
+
51
57
  test "annotating namespaced models" do
52
58
  assert_equal File.read(asset_file 'moo_hoo_annotated.rb' ), File.read(app_file 'moo/hoo.rb' )
53
59
  end
@@ -0,0 +1,5 @@
1
+ # encoding: utf-8
2
+ class Boo < ActiveRecord::Base
3
+ belongs_to :foo
4
+ belongs_to :poly, :polymorphic => true
5
+ end
@@ -0,0 +1,13 @@
1
+ # encoding: utf-8
2
+
3
+ # Attributes:
4
+ # * id [integer, primary, not null] - primary key
5
+ # * created_at [datetime, not null] - creation time
6
+ # * foo_id [integer] - belongs to :foo
7
+ # * poly_id [integer] - belongs to :poly (polymorphic)
8
+ # * poly_type [string] - belongs to :poly (polymorphic)
9
+ # * updated_at [datetime, not null] - last update time
10
+ class Boo < ActiveRecord::Base
11
+ belongs_to :foo
12
+ belongs_to :poly, :polymorphic => true
13
+ end
@@ -1,3 +1,5 @@
1
+ # Some existing stupid comment
2
+
1
3
  # Attributes:
2
4
  # * id [integer, primary, not null] - primary key
3
5
  # * body [text]
@@ -5,7 +7,6 @@
5
7
  # * random_number [integer] - TODO: document me
6
8
  # * title [string]
7
9
  # * updated_at [datetime, not null] - last update time
8
- # Some existing stupid comment
9
10
  module Moo
10
11
  class Hoo < ActiveRecord::Base
11
12
  self.table_name = 'foos'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: annotator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-06-08 00:00:00.000000000 Z
13
+ date: 2012-06-15 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord
@@ -69,84 +69,85 @@ extra_rdoc_files: []
69
69
  files:
70
70
  - lib/tasks/annotator_tasks.rake
71
71
  - lib/annotator.rb
72
- - lib/annotator/initial_description/belongs_to.rb
72
+ - lib/annotator/railtie.rb
73
73
  - lib/annotator/initial_description/devise.rb
74
- - lib/annotator/initial_description/paperclip.rb
75
- - lib/annotator/initial_description/base.rb
76
74
  - lib/annotator/initial_description/rails.rb
77
- - lib/annotator/model.rb
78
- - lib/annotator/model.rb.orig
75
+ - lib/annotator/initial_description/base.rb
76
+ - lib/annotator/initial_description/paperclip.rb
77
+ - lib/annotator/initial_description/belongs_to.rb
78
+ - lib/annotator/initial_description.rb
79
79
  - lib/annotator/version.rb
80
80
  - lib/annotator/attributes.rb
81
- - lib/annotator/initial_description.rb
82
- - lib/annotator/railtie.rb
81
+ - lib/annotator/model.rb
83
82
  - MIT-LICENSE
84
83
  - Rakefile
85
84
  - README.rdoc
86
- - test/support/test_app.rb
87
- - test/test_helper.rb
88
- - test/assets/paper_annotated.rb
89
- - test/assets/foo_annotated_bad_column.rb
90
- - test/assets/foo_annotated_with_comments.rb
85
+ - test/assets/foo_require_first.rb
91
86
  - test/assets/user_annotated.rb
92
- - test/assets/foo_annotated_bad_column_nodoc.rb
93
- - test/assets/boo_annotated.rb
87
+ - test/assets/moo_hoo_annotated.rb
88
+ - test/assets/boo_encoding_annotated.rb
89
+ - test/assets/boo_encoding.rb
94
90
  - test/assets/foo_annotated.rb
91
+ - test/assets/foo_annotated_with_comments.rb
92
+ - test/assets/boo_annotated.rb
93
+ - test/assets/foo_annotated_bad_column_nodoc.rb
94
+ - test/assets/paper_annotated.rb
95
+ - test/assets/foo_annotated_bad_column.rb
95
96
  - test/assets/foo_annotated_column_fixed.rb
96
- - test/assets/foo_require_first.rb
97
- - test/assets/moo_hoo_annotated.rb
98
97
  - test/annotator_test.rb
99
- - test/dummy/public/500.html
100
- - test/dummy/public/favicon.ico
101
- - test/dummy/public/422.html
102
- - test/dummy/public/404.html
103
- - test/dummy/Rakefile
104
- - test/dummy/config/locales/en.yml
98
+ - test/test_helper.rb
99
+ - test/dummy/app/helpers/application_helper.rb
100
+ - test/dummy/app/assets/stylesheets/application.css
101
+ - test/dummy/app/assets/javascripts/application.js
102
+ - test/dummy/app/controllers/application_controller.rb
103
+ - test/dummy/app/models/user.rb
104
+ - test/dummy/app/models/nomodel.rb
105
+ - test/dummy/app/models/foo.rb
106
+ - test/dummy/app/models/paper.rb
107
+ - test/dummy/app/models/moo/hoo.rb
108
+ - test/dummy/app/models/boo.rb
109
+ - test/dummy/app/views/layouts/application.html.erb
110
+ - test/dummy/config/routes.rb
111
+ - test/dummy/config/environment.rb
105
112
  - test/dummy/config/environments/production.rb
106
113
  - test/dummy/config/environments/development.rb
107
114
  - test/dummy/config/environments/test.rb
108
115
  - test/dummy/config/application.rb
116
+ - test/dummy/config/locales/en.yml
117
+ - test/dummy/config/database.yml
109
118
  - test/dummy/config/boot.rb
110
- - test/dummy/config/initializers/backtrace_silencers.rb
111
119
  - test/dummy/config/initializers/wrap_parameters.rb
112
- - test/dummy/config/initializers/secret_token.rb
113
- - test/dummy/config/initializers/session_store.rb
114
120
  - test/dummy/config/initializers/mime_types.rb
121
+ - test/dummy/config/initializers/session_store.rb
122
+ - test/dummy/config/initializers/backtrace_silencers.rb
123
+ - test/dummy/config/initializers/secret_token.rb
115
124
  - test/dummy/config/initializers/inflections.rb
116
- - test/dummy/config/routes.rb
117
- - test/dummy/config/environment.rb
118
- - test/dummy/config/database.yml
125
+ - test/dummy/script/rails
119
126
  - test/dummy/log/development.log
120
127
  - test/dummy/log/test.log
121
- - test/dummy/app/helpers/application_helper.rb
122
- - test/dummy/app/models/boo.rb
123
- - test/dummy/app/models/paper.rb
124
- - test/dummy/app/models/moo/hoo.rb
125
- - test/dummy/app/models/user.rb
126
- - test/dummy/app/models/foo.rb
127
- - test/dummy/app/models/nomodel.rb
128
- - test/dummy/app/views/layouts/application.html.erb
129
- - test/dummy/app/assets/javascripts/application.js
130
- - test/dummy/app/assets/stylesheets/application.css
131
- - test/dummy/app/controllers/application_controller.rb
132
128
  - test/dummy/config.ru
133
- - test/dummy/script/rails
134
- - test/dummy/test/unit/foo_test.rb
135
- - test/dummy/test/unit/user_test.rb
136
- - test/dummy/test/unit/paper_test.rb
137
- - test/dummy/test/unit/boo_test.rb
129
+ - test/dummy/Rakefile
130
+ - test/dummy/db/development.sqlite3
131
+ - test/dummy/db/migrate/20120527023350_create_papers.rb
132
+ - test/dummy/db/migrate/20120527020350_devise_create_users.rb
133
+ - test/dummy/db/migrate/20120527023417_add_attachment_avatar_to_papers.rb
134
+ - test/dummy/db/migrate/20120219112425_create_foos.rb
135
+ - test/dummy/db/migrate/20120527025142_create_boos.rb
136
+ - test/dummy/db/schema.rb
137
+ - test/dummy/test/fixtures/boos.yml
138
138
  - test/dummy/test/fixtures/papers.yml
139
139
  - test/dummy/test/fixtures/users.yml
140
140
  - test/dummy/test/fixtures/foos.yml
141
- - test/dummy/test/fixtures/boos.yml
141
+ - test/dummy/test/unit/paper_test.rb
142
+ - test/dummy/test/unit/boo_test.rb
143
+ - test/dummy/test/unit/user_test.rb
144
+ - test/dummy/test/unit/foo_test.rb
142
145
  - test/dummy/README.rdoc
143
- - test/dummy/db/schema.rb
144
- - test/dummy/db/migrate/20120527020350_devise_create_users.rb
145
- - test/dummy/db/migrate/20120527025142_create_boos.rb
146
- - test/dummy/db/migrate/20120527023350_create_papers.rb
147
- - test/dummy/db/migrate/20120527023417_add_attachment_avatar_to_papers.rb
148
- - test/dummy/db/migrate/20120219112425_create_foos.rb
149
- - test/dummy/db/development.sqlite3
146
+ - test/dummy/public/favicon.ico
147
+ - test/dummy/public/404.html
148
+ - test/dummy/public/500.html
149
+ - test/dummy/public/422.html
150
+ - test/support/test_app.rb
150
151
  homepage: https://github.com/tech-angels/annotator
151
152
  licenses: []
152
153
  post_install_message:
@@ -172,67 +173,69 @@ signing_key:
172
173
  specification_version: 3
173
174
  summary: Annotate your models and keep your comments about fields.
174
175
  test_files:
175
- - test/support/test_app.rb
176
- - test/test_helper.rb
177
- - test/assets/paper_annotated.rb
178
- - test/assets/foo_annotated_bad_column.rb
179
- - test/assets/foo_annotated_with_comments.rb
176
+ - test/assets/foo_require_first.rb
180
177
  - test/assets/user_annotated.rb
181
- - test/assets/foo_annotated_bad_column_nodoc.rb
182
- - test/assets/boo_annotated.rb
178
+ - test/assets/moo_hoo_annotated.rb
179
+ - test/assets/boo_encoding_annotated.rb
180
+ - test/assets/boo_encoding.rb
183
181
  - test/assets/foo_annotated.rb
182
+ - test/assets/foo_annotated_with_comments.rb
183
+ - test/assets/boo_annotated.rb
184
+ - test/assets/foo_annotated_bad_column_nodoc.rb
185
+ - test/assets/paper_annotated.rb
186
+ - test/assets/foo_annotated_bad_column.rb
184
187
  - test/assets/foo_annotated_column_fixed.rb
185
- - test/assets/foo_require_first.rb
186
- - test/assets/moo_hoo_annotated.rb
187
188
  - test/annotator_test.rb
188
- - test/dummy/public/500.html
189
- - test/dummy/public/favicon.ico
190
- - test/dummy/public/422.html
191
- - test/dummy/public/404.html
192
- - test/dummy/Rakefile
193
- - test/dummy/config/locales/en.yml
189
+ - test/test_helper.rb
190
+ - test/dummy/app/helpers/application_helper.rb
191
+ - test/dummy/app/assets/stylesheets/application.css
192
+ - test/dummy/app/assets/javascripts/application.js
193
+ - test/dummy/app/controllers/application_controller.rb
194
+ - test/dummy/app/models/user.rb
195
+ - test/dummy/app/models/nomodel.rb
196
+ - test/dummy/app/models/foo.rb
197
+ - test/dummy/app/models/paper.rb
198
+ - test/dummy/app/models/moo/hoo.rb
199
+ - test/dummy/app/models/boo.rb
200
+ - test/dummy/app/views/layouts/application.html.erb
201
+ - test/dummy/config/routes.rb
202
+ - test/dummy/config/environment.rb
194
203
  - test/dummy/config/environments/production.rb
195
204
  - test/dummy/config/environments/development.rb
196
205
  - test/dummy/config/environments/test.rb
197
206
  - test/dummy/config/application.rb
207
+ - test/dummy/config/locales/en.yml
208
+ - test/dummy/config/database.yml
198
209
  - test/dummy/config/boot.rb
199
- - test/dummy/config/initializers/backtrace_silencers.rb
200
210
  - test/dummy/config/initializers/wrap_parameters.rb
201
- - test/dummy/config/initializers/secret_token.rb
202
- - test/dummy/config/initializers/session_store.rb
203
211
  - test/dummy/config/initializers/mime_types.rb
212
+ - test/dummy/config/initializers/session_store.rb
213
+ - test/dummy/config/initializers/backtrace_silencers.rb
214
+ - test/dummy/config/initializers/secret_token.rb
204
215
  - test/dummy/config/initializers/inflections.rb
205
- - test/dummy/config/routes.rb
206
- - test/dummy/config/environment.rb
207
- - test/dummy/config/database.yml
216
+ - test/dummy/script/rails
208
217
  - test/dummy/log/development.log
209
218
  - test/dummy/log/test.log
210
- - test/dummy/app/helpers/application_helper.rb
211
- - test/dummy/app/models/boo.rb
212
- - test/dummy/app/models/paper.rb
213
- - test/dummy/app/models/moo/hoo.rb
214
- - test/dummy/app/models/user.rb
215
- - test/dummy/app/models/foo.rb
216
- - test/dummy/app/models/nomodel.rb
217
- - test/dummy/app/views/layouts/application.html.erb
218
- - test/dummy/app/assets/javascripts/application.js
219
- - test/dummy/app/assets/stylesheets/application.css
220
- - test/dummy/app/controllers/application_controller.rb
221
219
  - test/dummy/config.ru
222
- - test/dummy/script/rails
223
- - test/dummy/test/unit/foo_test.rb
224
- - test/dummy/test/unit/user_test.rb
225
- - test/dummy/test/unit/paper_test.rb
226
- - test/dummy/test/unit/boo_test.rb
220
+ - test/dummy/Rakefile
221
+ - test/dummy/db/development.sqlite3
222
+ - test/dummy/db/migrate/20120527023350_create_papers.rb
223
+ - test/dummy/db/migrate/20120527020350_devise_create_users.rb
224
+ - test/dummy/db/migrate/20120527023417_add_attachment_avatar_to_papers.rb
225
+ - test/dummy/db/migrate/20120219112425_create_foos.rb
226
+ - test/dummy/db/migrate/20120527025142_create_boos.rb
227
+ - test/dummy/db/schema.rb
228
+ - test/dummy/test/fixtures/boos.yml
227
229
  - test/dummy/test/fixtures/papers.yml
228
230
  - test/dummy/test/fixtures/users.yml
229
231
  - test/dummy/test/fixtures/foos.yml
230
- - test/dummy/test/fixtures/boos.yml
232
+ - test/dummy/test/unit/paper_test.rb
233
+ - test/dummy/test/unit/boo_test.rb
234
+ - test/dummy/test/unit/user_test.rb
235
+ - test/dummy/test/unit/foo_test.rb
231
236
  - test/dummy/README.rdoc
232
- - test/dummy/db/schema.rb
233
- - test/dummy/db/migrate/20120527020350_devise_create_users.rb
234
- - test/dummy/db/migrate/20120527025142_create_boos.rb
235
- - test/dummy/db/migrate/20120527023350_create_papers.rb
236
- - test/dummy/db/migrate/20120527023417_add_attachment_avatar_to_papers.rb
237
- - test/dummy/db/migrate/20120219112425_create_foos.rb
238
- - test/dummy/db/development.sqlite3
237
+ - test/dummy/public/favicon.ico
238
+ - test/dummy/public/404.html
239
+ - test/dummy/public/500.html
240
+ - test/dummy/public/422.html
241
+ - test/support/test_app.rb
@@ -1,66 +0,0 @@
1
- module Annotator
2
-
3
- # Represents a single model file and associated class
4
- class Model
5
-
6
- def initialize(filename, base_path)
7
- @filename = filename
8
- @base_path = base_path
9
- @blocks = Hash.new {[]}
10
- end
11
-
12
- # Model class
13
- def klass
14
- <<<<<<< HEAD
15
- begin
16
- @filename.split('app/models/').last.split(/\.rb$/).first.camelize.constantize
17
- rescue Exception
18
- nil
19
- end
20
- =======
21
- @filename.split(@base_path).last.split(/\.rb$/).first.camelize.constantize rescue nil
22
- >>>>>>> lucasefe/master
23
- end
24
-
25
- # Split file into 3 blocks: before attributes, attributes block, and after
26
- # If there's no attributes block, content will be in :after part (for easier insertion)
27
- def parse
28
- @file = File.read(@filename).strip
29
- current_block = :before
30
- return @nodoc = true if @file.match(/^# Attributes\(nodoc\):$/i)
31
- @file.split("\n").each do |line|
32
- if line.match(/^#{Regexp.escape Attributes::HEADER} *$/)
33
- current_block = :attributes
34
- next
35
- end
36
- current_block = :after if current_block == :attributes && !line.match(Attributes::R_ATTRIBUTE_LINE)
37
- @blocks[current_block] += [line]
38
- end
39
-
40
- @blocks[:after], @blocks[:before] = @blocks[:before], [] if @blocks[:after].empty?
41
- end
42
-
43
- # If this file does not have associated AR class it should be skipped
44
- def skipped?
45
- !klass || !klass.ancestors.include?(ActiveRecord::Base) || @nodoc
46
- end
47
-
48
- # Save changes to file if there were any
49
- def update_file
50
- output = (@blocks[:before] + @blocks[:attributes] + @blocks[:after]).join("\n").strip + "\n"
51
- File.open(@filename,'w') { |f| f.write(output) } if output != @file
52
- end
53
-
54
- # Update file with new database information
55
- def update!
56
- parse
57
- return true if skipped?
58
- attributes = Attributes.new klass, @blocks[:attributes]
59
- attributes.update!
60
- @blocks[:attributes] = attributes.lines
61
- update_file
62
- end
63
- end
64
- end
65
-
66
-