mactag 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +3 -3
- data/VERSION +1 -1
- data/lib/generators/mactag/templates/mactag.rb +1 -1
- data/lib/mactag.rb +7 -1
- data/lib/mactag/builder.rb +90 -0
- data/lib/mactag/ctags.rb +23 -0
- data/lib/mactag/parser.rb +61 -0
- data/lib/mactag/tag.rb +0 -1
- data/lib/mactag/tag/app.rb +4 -4
- data/lib/mactag/tag/gem.rb +43 -38
- data/lib/mactag/tag/plugin.rb +19 -14
- data/lib/mactag/tag/rails.rb +3 -8
- data/lib/tasks/mactag.rake +1 -1
- data/test/mactag/builder_test.rb +77 -0
- data/test/mactag/config_test.rb +4 -8
- data/test/mactag/parser_test.rb +66 -0
- data/test/mactag/tag/app_test.rb +4 -4
- data/test/mactag/tag/gem_test.rb +100 -47
- data/test/mactag/tag/plugin_test.rb +28 -29
- data/test/mactag/tag/rails_test.rb +40 -28
- metadata +14 -71
- data/features/app.feature +0 -110
- data/features/gem.feature +0 -154
- data/features/plugin.feature +0 -115
- data/features/rails.feature +0 -6
- data/features/step_definitions/mactag_steps.rb +0 -43
- data/features/support/env.rb +0 -14
- data/features/support/rails_app.rb +0 -46
- data/features/support/tags_file.rb +0 -24
- data/lib/mactag/table.rb +0 -66
- data/lib/mactag/tag/parser.rb +0 -43
data/README.markdown
CHANGED
@@ -31,7 +31,7 @@ Load the gem in **config/environments/development.rb**:
|
|
31
31
|
|
32
32
|
|
33
33
|
## Rails 3.x
|
34
|
-
Version 0.
|
34
|
+
Version 0.2.0 is the latest version supporting Rails 3.x.
|
35
35
|
|
36
36
|
### Plugin
|
37
37
|
Install the plugin:
|
@@ -43,7 +43,7 @@ Install the gem:
|
|
43
43
|
|
44
44
|
Load the gem in **Gemfile**:
|
45
45
|
group :development do
|
46
|
-
gem 'mactag', '0.
|
46
|
+
gem 'mactag', '0.2.0'
|
47
47
|
end
|
48
48
|
|
49
49
|
|
@@ -76,7 +76,7 @@ examples of how to configure Mactag.
|
|
76
76
|
Mactag::Config.gem_home = '/usr/lib/ruby/gems/1.8/gems'
|
77
77
|
Mactag::Config.binary = 'etags -o TAGS'
|
78
78
|
|
79
|
-
Mactag::Table.generate do
|
79
|
+
Mactag do # This is "Mactag::Table.generate do" in Rails 2 applications
|
80
80
|
app 'app/**/*.rb', 'lib/*.rb'
|
81
81
|
|
82
82
|
plugins 'thinking-sphinx', 'whenever'
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/lib/mactag.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'mactag/config'
|
2
|
-
require 'mactag/
|
2
|
+
require 'mactag/builder'
|
3
|
+
require 'mactag/parser'
|
4
|
+
require 'mactag/ctags'
|
3
5
|
require 'mactag/tag'
|
4
6
|
|
5
7
|
module Mactag
|
@@ -7,3 +9,7 @@ module Mactag
|
|
7
9
|
$stderr.puts "Mactag Warning: #{message}"
|
8
10
|
end
|
9
11
|
end
|
12
|
+
|
13
|
+
def Mactag(&block)
|
14
|
+
Mactag::Builder.generate(&block)
|
15
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
module Mactag
|
2
|
+
class Builder
|
3
|
+
def initialize
|
4
|
+
@tags = []
|
5
|
+
end
|
6
|
+
|
7
|
+
##
|
8
|
+
#
|
9
|
+
# Add +tag+ to list of tags.
|
10
|
+
#
|
11
|
+
def <<(tags)
|
12
|
+
@tags += Array(tags)
|
13
|
+
end
|
14
|
+
|
15
|
+
##
|
16
|
+
#
|
17
|
+
# Returns a string with all files that should be tagged. The
|
18
|
+
# files are separated with a whitespace.
|
19
|
+
#
|
20
|
+
def tags
|
21
|
+
tags = all
|
22
|
+
tags.flatten!
|
23
|
+
tags.compact!
|
24
|
+
tags.collect! { |file| File.expand_path(file) }
|
25
|
+
tags.collect! { |file| Dir.glob(file) }
|
26
|
+
tags.uniq!
|
27
|
+
tags.join(' ')
|
28
|
+
end
|
29
|
+
|
30
|
+
def all
|
31
|
+
@all_tags ||= @tags.collect!(&:tag)
|
32
|
+
end
|
33
|
+
|
34
|
+
def gems?
|
35
|
+
all.flatten.compact.any?
|
36
|
+
end
|
37
|
+
|
38
|
+
##
|
39
|
+
#
|
40
|
+
# Create the TAGS file.
|
41
|
+
#
|
42
|
+
def self.create
|
43
|
+
unless gem_home_exists?
|
44
|
+
Mactag.warn 'Gem home path does not exist on your system'
|
45
|
+
end
|
46
|
+
|
47
|
+
tags = Mactag::Ctags.new(@builder)
|
48
|
+
if tags.build
|
49
|
+
puts "Successfully generated TAGS file"
|
50
|
+
else
|
51
|
+
Mactag.warn 'You did not specify anything to tag'
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
##
|
56
|
+
#
|
57
|
+
# Generates the TAGS-table.
|
58
|
+
#
|
59
|
+
# ==== Example
|
60
|
+
# Mactag::Builder.generate do
|
61
|
+
# app 'app/**/*.rb', 'lib/*.rb'
|
62
|
+
#
|
63
|
+
# plugins 'thinking-sphinx', 'whenever'
|
64
|
+
#
|
65
|
+
# gems 'paperclip', 'authlogic'
|
66
|
+
# gem 'formtastic', :version => '0.9.7'
|
67
|
+
#
|
68
|
+
# rails :except => :actionmailer, :version => '2.3.5'
|
69
|
+
# end
|
70
|
+
#
|
71
|
+
# See documentation for the methods *app*, *plugins*, *gems* and
|
72
|
+
# *rails* in respective tag class.
|
73
|
+
#
|
74
|
+
def self.generate(&block)
|
75
|
+
@builder = Mactag::Builder.new
|
76
|
+
|
77
|
+
parser = Mactag::Parser.new(@builder)
|
78
|
+
parser.instance_eval(&block)
|
79
|
+
end
|
80
|
+
|
81
|
+
##
|
82
|
+
#
|
83
|
+
# Returns true if the specified gem home path exists on the
|
84
|
+
# system, false otherwise.
|
85
|
+
#
|
86
|
+
def self.gem_home_exists?
|
87
|
+
File.directory?(Mactag::Config.gem_home)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
data/lib/mactag/ctags.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'rails'
|
2
|
+
|
3
|
+
module Mactag
|
4
|
+
##
|
5
|
+
#
|
6
|
+
# Helper class for creating CTags files.
|
7
|
+
#
|
8
|
+
class Ctags
|
9
|
+
def initialize(builder)
|
10
|
+
@builder = builder
|
11
|
+
end
|
12
|
+
|
13
|
+
##
|
14
|
+
#
|
15
|
+
# Creates the tags file. Returns true if anything was tagged,
|
16
|
+
# false otherwise.
|
17
|
+
#
|
18
|
+
def build
|
19
|
+
system "cd #{Rails.root} && #{Mactag::Config.binary} #{@builder.tags}"
|
20
|
+
@builder.gems?
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Mactag
|
2
|
+
##
|
3
|
+
#
|
4
|
+
# Parser for builder.
|
5
|
+
#
|
6
|
+
class Parser
|
7
|
+
def initialize(builder)
|
8
|
+
@builder = builder
|
9
|
+
end
|
10
|
+
|
11
|
+
##
|
12
|
+
#
|
13
|
+
# @see Mactag::Tag::App
|
14
|
+
#
|
15
|
+
def app(*tags)
|
16
|
+
tags.each do |tag|
|
17
|
+
@builder << Mactag::Tag::App.new(tag)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
##
|
22
|
+
#
|
23
|
+
# @see Mactag::Tag::Plugin
|
24
|
+
#
|
25
|
+
def plugin(*plugins)
|
26
|
+
if plugins.empty?
|
27
|
+
plugins = Mactag::Tag::Plugin.all
|
28
|
+
end
|
29
|
+
|
30
|
+
plugins.each do |plugin|
|
31
|
+
@builder << Mactag::Tag::Plugin.new(plugin)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
alias_method :plugins, :plugin
|
35
|
+
|
36
|
+
##
|
37
|
+
#
|
38
|
+
# @see Mactag::Tag::Gem
|
39
|
+
#
|
40
|
+
def gem(*gems)
|
41
|
+
options = gems.extract_options!
|
42
|
+
|
43
|
+
if gems.empty?
|
44
|
+
@builder << Mactag::Tag::Gem.all
|
45
|
+
else
|
46
|
+
gems.each do |name|
|
47
|
+
@builder << Mactag::Tag::Gem.new(name, options[:version])
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
alias_method :gems, :gem
|
52
|
+
|
53
|
+
##
|
54
|
+
#
|
55
|
+
# @see Mactag::Tag::Rails
|
56
|
+
#
|
57
|
+
def rails(options = {})
|
58
|
+
@builder << Mactag::Tag::Rails.new(options)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
data/lib/mactag/tag.rb
CHANGED
data/lib/mactag/tag/app.rb
CHANGED
@@ -5,7 +5,7 @@ module Mactag
|
|
5
5
|
# Tags files in current Rails application.
|
6
6
|
#
|
7
7
|
# ==== Examples
|
8
|
-
# Mactag
|
8
|
+
# Mactag do
|
9
9
|
# # Tag single file
|
10
10
|
# app 'lib/super_duper.rb'
|
11
11
|
#
|
@@ -20,10 +20,10 @@ module Mactag
|
|
20
20
|
# do
|
21
21
|
#
|
22
22
|
class App
|
23
|
-
attr_reader :
|
23
|
+
attr_reader :tag
|
24
24
|
|
25
|
-
def initialize(
|
26
|
-
@
|
25
|
+
def initialize(tag)
|
26
|
+
@tag = tag
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
data/lib/mactag/tag/gem.rb
CHANGED
@@ -5,7 +5,7 @@ module Mactag
|
|
5
5
|
# Tags ruby gems.
|
6
6
|
#
|
7
7
|
# ==== Examples
|
8
|
-
# Mactag
|
8
|
+
# Mactag do
|
9
9
|
# # Tag all gems given by *...*
|
10
10
|
# gems
|
11
11
|
#
|
@@ -20,66 +20,71 @@ module Mactag
|
|
20
20
|
# do
|
21
21
|
#
|
22
22
|
class Gem
|
23
|
-
|
24
|
-
if gems.blank?
|
25
|
-
@gems = all
|
26
|
-
@options = {}
|
27
|
-
else
|
28
|
-
@gems = gems
|
29
|
-
@options = gems.extract_options!
|
30
|
-
end
|
31
|
-
end
|
23
|
+
autoload :Bundler, 'bundler'
|
32
24
|
|
33
|
-
def
|
34
|
-
|
35
|
-
@
|
36
|
-
|
37
|
-
gem = File.join(Mactag::Config.gem_home, "#{gem_name}-#{version}")
|
38
|
-
else
|
39
|
-
gem = latest(gem_name)
|
40
|
-
end
|
25
|
+
def initialize(name, version = nil)
|
26
|
+
@name = name
|
27
|
+
@version = version
|
28
|
+
end
|
41
29
|
|
42
|
-
|
43
|
-
|
30
|
+
def tag
|
31
|
+
if exists?
|
32
|
+
if @version
|
33
|
+
gem = splash
|
44
34
|
else
|
45
|
-
|
35
|
+
gem = Gem.most_recent(@name)
|
46
36
|
end
|
37
|
+
File.join(Mactag::Config.gem_home, gem, 'lib', '**', '*.rb')
|
38
|
+
else
|
39
|
+
Mactag.warn "Gem #{@name} not found"
|
47
40
|
end
|
48
|
-
result
|
49
41
|
end
|
50
42
|
|
51
|
-
|
52
|
-
|
43
|
+
##
|
44
|
+
#
|
45
|
+
# Returns all application gems.
|
46
|
+
#
|
47
|
+
def self.all
|
48
|
+
Bundler.load.specs.collect { |spec| Gem.new(spec.name, spec.version.to_s) }
|
49
|
+
end
|
53
50
|
|
54
51
|
##
|
55
52
|
#
|
56
|
-
# Returns the
|
57
|
-
# is returned.
|
53
|
+
# Returns the most recent gem with +name+.
|
58
54
|
#
|
59
|
-
def
|
60
|
-
versions = Dir.glob(File.join(Mactag::Config.gem_home,
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
55
|
+
def self.most_recent(name)
|
56
|
+
versions = Dir.glob(File.join(Mactag::Config.gem_home, name) + "-*")
|
57
|
+
unless versions.empty?
|
58
|
+
if versions.size == 1
|
59
|
+
gem = versions.first
|
60
|
+
else
|
61
|
+
gem = versions.sort.last
|
62
|
+
end
|
63
|
+
File.basename(gem)
|
65
64
|
end
|
66
|
-
gem
|
67
65
|
end
|
68
66
|
|
67
|
+
|
68
|
+
private
|
69
|
+
|
69
70
|
##
|
70
71
|
#
|
71
72
|
# Returns true if +gem+ exists, false otherwise.
|
72
73
|
#
|
73
|
-
def exists?
|
74
|
-
|
74
|
+
def exists?
|
75
|
+
if @version
|
76
|
+
File.directory?(File.join(Mactag::Config.gem_home, splash))
|
77
|
+
else
|
78
|
+
Gem.most_recent(@name)
|
79
|
+
end
|
75
80
|
end
|
76
81
|
|
77
82
|
##
|
78
83
|
#
|
79
|
-
# Returns
|
84
|
+
# Returns the gem name, dash, version.
|
80
85
|
#
|
81
|
-
def
|
82
|
-
|
86
|
+
def splash
|
87
|
+
"#{@name}-#{@version}"
|
83
88
|
end
|
84
89
|
end
|
85
90
|
end
|
data/lib/mactag/tag/plugin.rb
CHANGED
@@ -5,7 +5,7 @@ module Mactag
|
|
5
5
|
# Tags plugins in current Rails application.
|
6
6
|
#
|
7
7
|
# ==== Examples
|
8
|
-
# Mactag
|
8
|
+
# Mactag do
|
9
9
|
# # Tag single plugin
|
10
10
|
# plugin 'whenever'
|
11
11
|
#
|
@@ -19,22 +19,27 @@ module Mactag
|
|
19
19
|
class Plugin
|
20
20
|
PLUGIN_PATH = File.join('vendor', 'plugins')
|
21
21
|
|
22
|
-
def initialize(
|
23
|
-
@
|
22
|
+
def initialize(plugin)
|
23
|
+
@plugin = plugin
|
24
24
|
end
|
25
25
|
|
26
|
-
def
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
if File.exist?(File.join(PLUGIN_PATH, plugin))
|
32
|
-
result << File.join(PLUGIN_PATH, plugin, 'lib', '**', '*.rb')
|
33
|
-
else
|
34
|
-
Mactag.warn "Plugin #{plugin} not found"
|
35
|
-
end
|
26
|
+
def tag
|
27
|
+
if exists?
|
28
|
+
return File.join(PLUGIN_PATH, @plugin, 'lib', '**', '*.rb')
|
29
|
+
else
|
30
|
+
Mactag.warn "Plugin #{@plugin} not found"
|
36
31
|
end
|
37
|
-
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.all
|
35
|
+
Dir.glob(File.join(PLUGIN_PATH, '*')).collect { |f| File.basename(f) }
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def exists?
|
42
|
+
File.directory?(File.join(PLUGIN_PATH, @plugin))
|
38
43
|
end
|
39
44
|
end
|
40
45
|
end
|
data/lib/mactag/tag/rails.rb
CHANGED
@@ -17,7 +17,7 @@ module Mactag
|
|
17
17
|
#
|
18
18
|
#
|
19
19
|
# ==== Examples
|
20
|
-
# Mactag
|
20
|
+
# Mactag do
|
21
21
|
# # Tag all rails packages, latest version
|
22
22
|
# rails
|
23
23
|
#
|
@@ -58,16 +58,11 @@ module Mactag
|
|
58
58
|
@except = packagize!(options[:except])
|
59
59
|
end
|
60
60
|
|
61
|
-
def
|
61
|
+
def tag
|
62
62
|
result = []
|
63
63
|
packages.each do |package|
|
64
64
|
if PACKAGES.include?(package)
|
65
|
-
|
66
|
-
gem = Gem.new(package.to_s, :version => version)
|
67
|
-
else
|
68
|
-
gem = Gem.new(package.to_s)
|
69
|
-
end
|
70
|
-
result << gem.files
|
65
|
+
result << Gem.new(package.to_s, @options[:version]).tag
|
71
66
|
end
|
72
67
|
end
|
73
68
|
result
|