nofxx-annotate 2.3.1 → 2.3.2

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.
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 2.3.2
data/annotate.gemspec CHANGED
@@ -1,12 +1,15 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
1
4
  # -*- encoding: utf-8 -*-
2
5
 
3
6
  Gem::Specification.new do |s|
4
7
  s.name = %q{annotate}
5
- s.version = "2.3.1"
8
+ s.version = "2.3.2"
6
9
 
7
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
11
  s.authors = ["Cuong Tran", "Marcos Piccinini"]
9
- s.date = %q{2009-07-02}
12
+ s.date = %q{2009-08-21}
10
13
  s.default_executable = %q{annotate}
11
14
  s.email = %q{x@nofxx.com}
12
15
  s.executables = ["annotate"]
@@ -18,7 +21,7 @@ Gem::Specification.new do |s|
18
21
  "History.txt",
19
22
  "README.rdoc",
20
23
  "Rakefile",
21
- "VERSION.yml",
24
+ "VERSION",
22
25
  "annotate.gemspec",
23
26
  "bin/annotate",
24
27
  "lib/annotate.rb",
@@ -35,7 +38,7 @@ Gem::Specification.new do |s|
35
38
  s.homepage = %q{http://github.com/nofxx/annotate}
36
39
  s.rdoc_options = ["--charset=UTF-8"]
37
40
  s.require_paths = ["lib"]
38
- s.rubygems_version = %q{1.3.4}
41
+ s.rubygems_version = %q{1.3.5}
39
42
  s.summary = %q{Annotates Rails Models, routes, and others}
40
43
  s.test_files = [
41
44
  "spec/annotate/annotate_models_spec.rb",
data/bin/annotate CHANGED
@@ -7,13 +7,46 @@ task = :annotate_models
7
7
 
8
8
  OptionParser.new do |opts|
9
9
  opts.banner = "Usage: annotate [options]"
10
- opts.on('-d', '--delete', "Remove annotations from all model files") { task = :remove_annotation }
11
- opts.on('-p', '--position [before|after]', ['before', 'after'], "Place the annotations at the top (before) or the bottom (after) of the model file") { |p| ENV['position'] = p }
12
- opts.on('-r', '--routes', "Annotate routes.rb with the output of 'rake routes'") { task = :annotate_routes }
13
- opts.on('-v', '--version', "Show the current version of this gem") { puts "Annotate v#{Annotate::VERSION}"; exit }
14
- opts.on('-m', '--show-migration', "Include the migration version number in the annotation") { ENV['include_version'] = "yes" }
15
- opts.on('-i', '--show-indexes', "List the table's database indexes in the annotation") { ENV['show_indexes'] = "yes" }
16
- opts.on('--model-dir dir', "Annotate model files stored in dir rather than app/models") {|dir| ENV['model_dir'] = dir }
10
+ opts.on('-d', '--delete',
11
+ "Remove annotations from all model files") do
12
+ task = :remove_annotation
13
+ end
14
+ opts.on('-p', '--position [before|after]', ['before', 'after'],
15
+ "Place the annotations at the top (before) or the bottom (after) of the model file") do |p|
16
+ ENV['position'] = p
17
+ end
18
+ opts.on('-r', '--routes',
19
+ "Annotate routes.rb with the output of 'rake routes'") do
20
+ task = :annotate_routes
21
+ end
22
+ opts.on('-v', '--version',
23
+ "Show the current version of this gem") do
24
+ puts "Annotate v#{Annotate::VERSION}"; exit
25
+ end
26
+ opts.on('-m', '--show-migration',
27
+ "Include the migration version number in the annotation") do
28
+ ENV['include_version'] = "yes"
29
+ end
30
+ opts.on('-i', '--show-indexes',
31
+ "List the table's database indexes in the annotation") do
32
+ ENV['show_indexes'] = "yes"
33
+ end
34
+ opts.on('-s', '--simple-indexes',
35
+ "Concat the column's related indexes in the annotation") do
36
+ ENV['simple_indexes'] = "yes"
37
+ end
38
+ opts.on('--model-dir dir',
39
+ "Annotate model files stored in dir rather than app/models") do |dir|
40
+ ENV['model_dir'] = dir
41
+ end
42
+ opts.on('-R', '--require path',
43
+ "Additional files to require before loading models") do |path|
44
+ if ENV['require']
45
+ ENV['require'] = ENV['require'] + ",#{path}"
46
+ else
47
+ ENV['require'] = path
48
+ end
49
+ end
17
50
  end.parse!
18
51
 
19
52
  if Annotate.load_tasks
@@ -8,10 +8,11 @@ module AnnotateModels
8
8
  # I dont use windows, can`t test
9
9
  UNIT_TEST_DIR = File.join("test", "unit" )
10
10
  SPEC_MODEL_DIR = File.join("spec", "models")
11
+ EXEMPLARS_TEST_DIR = File.join("test", "exemplars")
11
12
  # Object Daddy http://github.com/flogic/object_daddy/tree/master
12
- EXEMPLARS_DIR = File.join("spec", "exemplars")
13
+ EXEMPLARS_SPEC_DIR = File.join("spec", "exemplars")
13
14
  # Machinist http://github.com/notahat/machinist
14
- BLUEPRINT = File.join("spec", "blueprint")
15
+ BLUEPRINTS_DIR = File.join("test", "blueprints")
15
16
 
16
17
  def model_dir
17
18
  @model_dir || "app/models"
@@ -63,6 +64,17 @@ module AnnotateModels
63
64
  attrs << "#{col.geometry_type}, #{col.srid}"
64
65
  end
65
66
 
67
+ # Check if the column has indices and print "indexed" if true
68
+ # If the indice include another colum, print it too.
69
+ if options[:simple_indexes] # Check out if this column is indexed
70
+ indices = klass.connection.indexes(klass.table_name)
71
+ if indices = indices.select { |ind| ind.columns.include? col.name }
72
+ indices.each do |ind|
73
+ ind = ind.columns.reject! { |i| i == col.name }
74
+ attrs << (ind.length == 0 ? "indexed" : "indexed => [#{ind.join(", ")}]")
75
+ end
76
+ end
77
+ end
66
78
  info << sprintf("# %-#{max_size}.#{max_size}s:%-15.15s %s", col.name, col_type, attrs.join(", ")).rstrip + "\n"
67
79
  end
68
80
 
@@ -152,9 +164,11 @@ module AnnotateModels
152
164
  end
153
165
 
154
166
  [
155
- File.join(UNIT_TEST_DIR, "#{model_name}_test.rb"), # test
156
- File.join(SPEC_MODEL_DIR, "#{model_name}_spec.rb"), # spec
157
- File.join(EXEMPLARS_DIR, "#{model_name}_exemplar.rb"), # Object Daddy
167
+ File.join(UNIT_TEST_DIR, "#{model_name}_test.rb"), # test
168
+ File.join(SPEC_MODEL_DIR, "#{model_name}_spec.rb"), # spec
169
+ File.join(EXEMPLARS_TEST_DIR, "#{model_name}_exemplar.rb"), # Object Daddy
170
+ File.join(EXEMPLARS_SPEC_DIR, "#{model_name}_exemplar.rb"), # Object Daddy
171
+ File.join(BLUEPRINTS_DIR, "#{model_name}_blueprint.rb"), # Machinist Blueprints
158
172
  ].each { |file| annotate_one_file(file, info) }
159
173
 
160
174
  FIXTURE_DIRS.each do |dir|
@@ -185,7 +199,7 @@ module AnnotateModels
185
199
  # Check for namespaced models in subdirectories as well as models
186
200
  # in subdirectories without namespacing.
187
201
  def get_model_class(file)
188
- require "#{model_dir}/#{file}" # this is for non-rails projects, which don't get Rails auto-require magic
202
+ require File.expand_path("#{model_dir}/#{file}") # this is for non-rails projects, which don't get Rails auto-require magic
189
203
  model = file.gsub(/\.rb$/, '').camelize
190
204
  parts = model.split('::')
191
205
  begin
@@ -198,8 +212,14 @@ module AnnotateModels
198
212
  # We're passed a name of things that might be
199
213
  # ActiveRecord models. If we can find the class, and
200
214
  # if its a subclass of ActiveRecord::Base,
201
- # then pas it to the associated block
215
+ # then pass it to the associated block
202
216
  def do_annotations(options={})
217
+ if options[:require]
218
+ options[:require].each do |path|
219
+ require path
220
+ end
221
+ end
222
+
203
223
  header = PREFIX.dup
204
224
 
205
225
  if options[:include_version]
@@ -227,14 +247,13 @@ module AnnotateModels
227
247
  end
228
248
  end
229
249
  if annotated.empty?
230
- puts "Nothing annotated!"
250
+ puts "Nothing annotated."
231
251
  else
232
252
  puts "Annotated (#{annotated.length}): #{annotated.join(', ')}"
233
253
  end
234
254
  end
235
255
 
236
256
  def remove_annotations(options={})
237
- p options
238
257
  if options[:model_dir]
239
258
  puts "removing"
240
259
  self.model_dir = options[:model_dir]
@@ -262,3 +281,13 @@ module AnnotateModels
262
281
  end
263
282
  end
264
283
  end
284
+
285
+ # monkey patches
286
+
287
+ module ::ActiveRecord
288
+ class Base
289
+ def self.method_missing(name, *args)
290
+ # ignore this, so unknown/unloaded macros won't cause parsing to fail
291
+ end
292
+ end
293
+ end
@@ -5,8 +5,10 @@ task :annotate_models => :environment do
5
5
  options[:position_in_class] = ENV['position_in_class'] || ENV['position'] || :before
6
6
  options[:position_in_fixture] = ENV['position_in_fixture'] || ENV['position'] || :before
7
7
  options[:show_indexes] = ENV['show_indexes']
8
+ options[:simple_indexes] = ENV['simple_indexes']
8
9
  options[:model_dir] = ENV['model_dir']
9
10
  options[:include_version] = ENV['include_version']
11
+ options[:require] = ENV['require'].split(',') rescue []
10
12
  AnnotateModels.do_annotations(options)
11
13
  end
12
14
 
@@ -1,5 +1,7 @@
1
1
  require File.dirname(__FILE__) + '/../spec_helper.rb'
2
2
  require 'annotate/annotate_models'
3
+ require 'rubygems'
4
+ require 'activesupport'
3
5
 
4
6
  describe AnnotateModels do
5
7
 
@@ -21,6 +23,7 @@ describe AnnotateModels do
21
23
  it "should get schema info" do
22
24
 
23
25
  AnnotateModels.get_schema_info(mock_klass(
26
+ :connection => mock("Conn", :indexes => []),
24
27
  :table_name => "users",
25
28
  :primary_key => "id",
26
29
  :column_names => ["id","login"],
@@ -40,4 +43,41 @@ EOS
40
43
 
41
44
  end
42
45
 
46
+ describe "#get_model_class" do
47
+ module ::ActiveRecord
48
+ class Base
49
+ end
50
+ end
51
+
52
+ def create(file, body="hi")
53
+ File.open(@dir + '/' + file, "w") do |f|
54
+ f.puts(body)
55
+ end
56
+ end
57
+
58
+ before :all do
59
+ require "tmpdir"
60
+ @dir = Dir.tmpdir + "/#{Time.now.to_i}" + "/annotate_models"
61
+ FileUtils.mkdir_p(@dir)
62
+ AnnotateModels.model_dir = @dir
63
+ create('foo.rb', <<-EOS)
64
+ class Foo < ActiveRecord::Base
65
+ end
66
+ EOS
67
+ create('foo_with_macro.rb', <<-EOS)
68
+ class FooWithMacro < ActiveRecord::Base
69
+ acts_as_awesome :yah
70
+ end
71
+ EOS
72
+ end
73
+ it "should work" do
74
+ klass = AnnotateModels.get_model_class("foo.rb")
75
+ klass.name.should == "Foo"
76
+ end
77
+ it "should not care about unknown macros" do
78
+ klass = AnnotateModels.get_model_class("foo_with_macro.rb")
79
+ klass.name.should == "FooWithMacro"
80
+ end
81
+ end
82
+
43
83
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nofxx-annotate
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.1
4
+ version: 2.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cuong Tran
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-07-02 00:00:00 -07:00
13
+ date: 2009-08-21 00:00:00 -07:00
14
14
  default_executable: annotate
15
15
  dependencies: []
16
16
 
@@ -27,7 +27,7 @@ files:
27
27
  - History.txt
28
28
  - README.rdoc
29
29
  - Rakefile
30
- - VERSION.yml
30
+ - VERSION
31
31
  - annotate.gemspec
32
32
  - bin/annotate
33
33
  - lib/annotate.rb
@@ -42,6 +42,7 @@ files:
42
42
  - spec/spec_helper.rb
43
43
  has_rdoc: false
44
44
  homepage: http://github.com/nofxx/annotate
45
+ licenses:
45
46
  post_install_message:
46
47
  rdoc_options:
47
48
  - --charset=UTF-8
@@ -62,7 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
62
63
  requirements: []
63
64
 
64
65
  rubyforge_project:
65
- rubygems_version: 1.2.0
66
+ rubygems_version: 1.3.5
66
67
  signing_key:
67
68
  specification_version: 3
68
69
  summary: Annotates Rails Models, routes, and others
data/VERSION.yml DELETED
@@ -1,4 +0,0 @@
1
- ---
2
- :major: 2
3
- :minor: 3
4
- :patch: 1