annotate 2.7.0 → 2.7.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -18,139 +18,153 @@
18
18
  # Released under the same license as Ruby. No Support. No Warranty.
19
19
  #
20
20
  module AnnotateRoutes
21
- PREFIX = "# == Route Map"
21
+ PREFIX = '# == Route Map'
22
22
 
23
23
  def self.do_annotations(options={})
24
- return unless(routes_exists?)
24
+ return unless routes_exists?
25
25
 
26
- position_after = ! %w(before top).include?(options[:position_in_routes])
27
-
28
- routes_map = `rake routes`.split(/\n/, -1)
29
-
30
- # In old versions of Rake, the first line of output was the cwd. Not so
31
- # much in newer ones. We ditch that line if it exists, and if not, we
32
- # keep the line around.
33
- routes_map.shift if(routes_map.first =~ /^\(in \//)
26
+ routes_map = AnnotateRoutes.app_routes_map(options)
34
27
 
35
28
  header = [
36
- "#{PREFIX}" + (options[:timestamp] ? " (Updated #{Time.now.strftime("%Y-%m-%d %H:%M")})" : ""),
37
- "#"
29
+ "#{PREFIX}" + (options[:timestamp] ? " (Updated #{Time.now.strftime('%Y-%m-%d %H:%M')})" : ''), '#'
38
30
  ] + routes_map.map { |line| "# #{line}".rstrip }
39
31
 
40
32
  existing_text = File.read(routes_file)
41
- (content, where_header_found) = strip_annotations(existing_text)
42
- changed = where_header_found != 0 # This will either be :before, :after, or
43
- # a number. If the number is > 0, the
44
- # annotation was found somewhere in the
45
- # middle of the file. If the number is
46
- # zero, no annotation was found.
47
-
48
- if(position_after)
49
- # Ensure we have adequate trailing newlines at the end of the file to
50
- # ensure a blank line separating the content from the annotation.
51
- content << '' if(content.last != '')
52
33
 
53
- # We're moving something from the top of the file to the bottom, so ditch
54
- # the spacer we put in the first time around.
55
- if(changed && where_header_found == :before)
56
- content.shift if(content.first == '')
57
- end
58
- else
59
- header = header << '' if(content.first != '' || changed)
60
- end
61
-
62
- content = position_after ? (content + header) : header + content
63
-
64
- if write_contents(existing_text, content)
34
+ if write_contents(existing_text, header, options)
65
35
  puts "#{routes_file} annotated."
66
- else
67
- puts "#{routes_file} unchanged."
68
36
  end
69
37
  end
70
38
 
71
39
  def self.remove_annotations(options={})
72
- return unless(routes_exists?)
40
+ return unless routes_exists?
73
41
  existing_text = File.read(routes_file)
74
- (content, where_header_found) = strip_annotations(existing_text)
42
+ content, where_header_found = strip_annotations(existing_text)
75
43
 
76
44
  content = strip_on_removal(content, where_header_found)
77
45
 
78
- if write_contents(existing_text, content)
46
+ if write_contents(existing_text, content, options)
79
47
  puts "Removed annotations from #{routes_file}."
80
- else
81
- puts "#{routes_file} unchanged."
82
48
  end
83
49
  end
84
50
 
85
- protected
51
+ private
52
+
53
+ def self.app_routes_map(options)
54
+ routes_map = `rake routes`.split(/\n/, -1)
55
+
56
+ # In old versions of Rake, the first line of output was the cwd. Not so
57
+ # much in newer ones. We ditch that line if it exists, and if not, we
58
+ # keep the line around.
59
+ routes_map.shift if routes_map.first =~ /^\(in \//
60
+
61
+ # Skip routes which match given regex
62
+ # Note: it matches the complete line (route_name, path, controller/action)
63
+ if options[:ignore_routes]
64
+ routes_map.reject! { |line| line =~ /#{options[:ignore_routes]}/ }
65
+ end
66
+
67
+ routes_map
68
+ end
86
69
 
87
70
  def self.routes_file
88
- @routes_rb ||= File.join("config", "routes.rb")
71
+ @routes_rb ||= File.join('config', 'routes.rb')
89
72
  end
90
73
 
91
74
  def self.routes_exists?
92
75
  routes_exists = File.exists?(routes_file)
93
- puts "Can`t find routes.rb" if(!routes_exists)
94
- return routes_exists
76
+ puts "Can't find routes.rb" unless routes_exists
77
+
78
+ routes_exists
95
79
  end
96
80
 
97
- def self.write_contents(existing_text, new_content)
81
+ def self.write_contents(existing_text, header, options = {})
82
+ content, where_header_found = strip_annotations(existing_text)
83
+ new_content = annotate_routes(header, content, where_header_found, options)
84
+
98
85
  # Make sure we end on a trailing newline.
99
- new_content << '' unless(new_content.last == '')
86
+ new_content << '' unless new_content.last == ''
100
87
  new_text = new_content.join("\n")
101
88
 
102
- return false if existing_text == new_text
89
+ if existing_text == new_text
90
+ puts "#{routes_file} unchanged."
91
+ false
92
+ else
93
+ File.open(routes_file, 'wb') { |f| f.puts(new_text) }
94
+ true
95
+ end
96
+ end
103
97
 
104
- File.open(routes_file, "wb") { |f| f.puts(new_text) }
105
- return true
98
+ def self.annotate_routes(header, content, where_header_found, options = {})
99
+ if %w(before top).include?(options[:position_in_routes])
100
+ header = header << '' if content.first != ''
101
+ new_content = header + content
102
+ else
103
+ # Ensure we have adequate trailing newlines at the end of the file to
104
+ # ensure a blank line separating the content from the annotation.
105
+ content << '' unless content.last == ''
106
+
107
+ # We're moving something from the top of the file to the bottom, so ditch
108
+ # the spacer we put in the first time around.
109
+ content.shift if where_header_found == :before && content.first == ''
110
+
111
+ new_content = content + header
112
+ end
113
+
114
+ new_content
106
115
  end
107
116
 
117
+ # TODO: write the method doc using ruby rdoc formats
118
+ # where_header_found => This will either be :before, :after, or
119
+ # a number. If the number is > 0, the
120
+ # annotation was found somewhere in the
121
+ # middle of the file. If the number is
122
+ # zero, no annotation was found.
108
123
  def self.strip_annotations(content)
109
124
  real_content = []
110
125
  mode = :content
111
- line_number = 0
112
126
  header_found_at = 0
113
- content.split(/\n/, -1).each do |line|
114
- line_number += 1
115
- begin
116
- if(mode == :header)
117
- if(line !~ /\s*#/)
118
- mode = :content
119
- raise unless (line == '')
120
- end
121
- elsif(mode == :content)
122
- if(line =~ /^\s*#\s*== Route.*$/)
123
- header_found_at = line_number
124
- mode = :header
125
- else
126
- real_content << line
127
- end
127
+
128
+ content.split(/\n/, -1).each_with_index do |line, line_number|
129
+ if mode == :header && line !~ /\s*#/
130
+ mode = :content
131
+ next unless line == ''
132
+ elsif mode == :content
133
+ if line =~ /^\s*#\s*== Route.*$/
134
+ header_found_at = line_number + 1 # index start's at 0
135
+ mode = :header
136
+ else
137
+ real_content << line
128
138
  end
129
- rescue
130
- retry
131
139
  end
132
140
  end
133
- content_lines = real_content.count
134
141
 
135
- # By default assume the annotation was found in the middle of the file...
136
- where_header_found = header_found_at
142
+ where_header_found(real_content, header_found_at)
143
+ end
144
+
145
+ def self.where_header_found(real_content, header_found_at)
146
+ # By default assume the annotation was found in the middle of the file
147
+
137
148
  # ... unless we have evidence it was at the beginning ...
138
- where_header_found = :before if(header_found_at == 1)
149
+ return real_content, :before if header_found_at == 1
150
+
139
151
  # ... or that it was at the end.
140
- where_header_found = :after if(header_found_at >= content_lines)
152
+ return real_content, :after if header_found_at >= real_content.count
141
153
 
142
- return real_content, where_header_found
154
+ # and the default
155
+ return real_content, header_found_at
143
156
  end
144
157
 
145
158
  def self.strip_on_removal(content, where_header_found)
146
- if(where_header_found == :before)
147
- content.shift while(content.first == '')
148
- elsif(where_header_found == :after)
149
- content.pop while(content.last == '')
159
+ if where_header_found == :before
160
+ content.shift while content.first == ''
161
+ elsif where_header_found == :after
162
+ content.pop while content.last == ''
150
163
  end
164
+
151
165
  # TODO: If the user buried it in the middle, we should probably see about
152
166
  # TODO: preserving a single line of space between the content above and
153
167
  # TODO: below...
154
- return content
168
+ content
155
169
  end
156
170
  end
@@ -1,5 +1,5 @@
1
1
  module Annotate
2
2
  def self.version
3
- '2.7.0'
3
+ '2.7.1'
4
4
  end
5
5
  end
@@ -1,14 +1,13 @@
1
1
  module Annotate
2
2
  module Generators
3
3
  class InstallGenerator < Rails::Generators::Base
4
- desc "Copy annotate_models rakefiles for automatic annotation"
4
+ desc 'Copy annotate_models rakefiles for automatic annotation'
5
5
  source_root File.expand_path('../templates', __FILE__)
6
6
 
7
7
  # copy rake tasks
8
8
  def copy_tasks
9
- template "auto_annotate_models.rake", "lib/tasks/auto_annotate_models.rake"
9
+ template 'auto_annotate_models.rake', 'lib/tasks/auto_annotate_models.rake'
10
10
  end
11
-
12
11
  end
13
12
  end
14
13
  end
@@ -24,13 +24,14 @@ if Rails.env.development?
24
24
  'exclude_fixtures' => 'false',
25
25
  'exclude_factories' => 'false',
26
26
  'exclude_serializers' => 'false',
27
- 'exclude_scaffolds' => 'false',
28
- 'exclude_controllers' => 'false',
29
- 'exclude_helpers' => 'false',
27
+ 'exclude_scaffolds' => 'true',
28
+ 'exclude_controllers' => 'true',
29
+ 'exclude_helpers' => 'true',
30
30
  'ignore_model_sub_dir' => 'false',
31
31
  'ignore_columns' => nil,
32
+ 'ignore_routes' => nil,
32
33
  'ignore_unknown_models' => 'false',
33
- 'hide_limit_column_types' => '<%= AnnotateModels::NO_LIMIT_COL_TYPES.join(',') %>',
34
+ 'hide_limit_column_types' => '<%= AnnotateModels::NO_LIMIT_COL_TYPES.join(",") %>',
34
35
  'skip_on_db_migrate' => 'false',
35
36
  'format_bare' => 'true',
36
37
  'format_rdoc' => 'false',
@@ -39,7 +40,7 @@ if Rails.env.development?
39
40
  'force' => 'false',
40
41
  'trace' => 'false',
41
42
  'wrapper_open' => nil,
42
- 'wrapper_close' => nil,
43
+ 'wrapper_close' => nil
43
44
  )
44
45
  end
45
46
 
@@ -1,16 +1,16 @@
1
1
  annotate_lib = File.expand_path(File.dirname(File.dirname(__FILE__)))
2
2
 
3
- if !ENV['is_cli']
3
+ unless ENV['is_cli']
4
4
  task :set_annotation_options
5
- task :annotate_models => :set_annotation_options
5
+ task annotate_models: :set_annotation_options
6
6
  end
7
7
 
8
- desc "Add schema information (as comments) to model and fixture files"
9
- task :annotate_models => :environment do
8
+ desc 'Add schema information (as comments) to model and fixture files'
9
+ task annotate_models: :environment do
10
10
  require "#{annotate_lib}/annotate/annotate_models"
11
11
  require "#{annotate_lib}/annotate/active_record_patch"
12
12
 
13
- options={ :is_rake => true }
13
+ options={is_rake: true}
14
14
  ENV['position'] = options[:position] = Annotate.fallback(ENV['position'], 'before')
15
15
  options[:position_in_class] = Annotate.fallback(ENV['position_in_class'], ENV['position'])
16
16
  options[:position_in_fixture] = Annotate.fallback(ENV['position_in_fixture'], ENV['position'])
@@ -29,8 +29,8 @@ task :annotate_models => :environment do
29
29
  options[:exclude_fixtures] = Annotate.true?(ENV['exclude_fixtures'])
30
30
  options[:exclude_serializers] = Annotate.true?(ENV['exclude_serializers'])
31
31
  options[:exclude_scaffolds] = Annotate.true?(ENV['exclude_scaffolds'])
32
- options[:exclude_controllers] = Annotate.true?(ENV['exclude_controllers'])
33
- options[:exclude_helpers] = Annotate.true?(ENV['exclude_helpers'])
32
+ options[:exclude_controllers] = Annotate.true?(ENV.fetch('exclude_controllers', 'true'))
33
+ options[:exclude_helpers] = Annotate.true?(ENV.fetch('exclude_helpers', 'true'))
34
34
  options[:ignore_model_sub_dir] = Annotate.true?(ENV['ignore_model_sub_dir'])
35
35
  options[:format_bare] = Annotate.true?(ENV['format_bare'])
36
36
  options[:format_rdoc] = Annotate.true?(ENV['format_rdoc'])
@@ -42,16 +42,18 @@ task :annotate_models => :environment do
42
42
  options[:wrapper_open] = Annotate.fallback(ENV['wrapper_open'], ENV['wrapper'])
43
43
  options[:wrapper_close] = Annotate.fallback(ENV['wrapper_close'], ENV['wrapper'])
44
44
  options[:ignore_columns] = ENV.fetch('ignore_columns', nil)
45
+ options[:ignore_routes] = ENV.fetch('ignore_routes', nil)
46
+ options[:hide_limit_column_types] = Annotate.fallback(ENV['hide_limit_column_types'], '')
45
47
 
46
48
  AnnotateModels.do_annotations(options)
47
49
  end
48
50
 
49
- desc "Remove schema information from model and fixture files"
50
- task :remove_annotation => :environment do
51
+ desc 'Remove schema information from model and fixture files'
52
+ task remove_annotation: :environment do
51
53
  require "#{annotate_lib}/annotate/annotate_models"
52
54
  require "#{annotate_lib}/annotate/active_record_patch"
53
55
 
54
- options={ :is_rake => true }
56
+ options={is_rake: true}
55
57
  options[:model_dir] = ENV['model_dir']
56
58
  options[:root_dir] = ENV['root_dir']
57
59
  options[:require] = ENV['require'] ? ENV['require'].split(',') : []
@@ -6,6 +6,7 @@ task :annotate_routes => :environment do
6
6
  options={}
7
7
  ENV['position'] = options[:position] = Annotate.fallback(ENV['position'], 'before')
8
8
  options[:position_in_routes] = Annotate.fallback(ENV['position_in_routes'], ENV['position'])
9
+ options[:ignore_routes] = Annotate.fallback(ENV['ignore_routes'], nil)
9
10
  options[:require] = ENV['require'] ? ENV['require'].split(',') : []
10
11
  AnnotateRoutes.do_annotations(options)
11
12
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: annotate
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.7.0
4
+ version: 2.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Chaffee
@@ -12,22 +12,28 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2015-12-30 00:00:00.000000000 Z
15
+ date: 2016-05-09 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: rake
19
19
  requirement: !ruby/object:Gem::Requirement
20
20
  requirements:
21
- - - "~>"
21
+ - - ">="
22
22
  - !ruby/object:Gem::Version
23
23
  version: '10.4'
24
+ - - "<"
25
+ - !ruby/object:Gem::Version
26
+ version: '12.0'
24
27
  type: :runtime
25
28
  prerelease: false
26
29
  version_requirements: !ruby/object:Gem::Requirement
27
30
  requirements:
28
- - - "~>"
31
+ - - ">="
29
32
  - !ruby/object:Gem::Version
30
33
  version: '10.4'
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '12.0'
31
37
  - !ruby/object:Gem::Dependency
32
38
  name: activerecord
33
39
  requirement: !ruby/object:Gem::Requirement
@@ -103,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
109
  version: '0'
104
110
  requirements: []
105
111
  rubyforge_project: annotate
106
- rubygems_version: 2.5.0
112
+ rubygems_version: 2.5.1
107
113
  signing_key:
108
114
  specification_version: 4
109
115
  summary: Annotates Rails Models, routes, fixtures, and others based on the database