annotator 0.0.6 → 0.0.7

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.
@@ -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
-