annotate 2.7.0 → 2.7.1

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