mactag 0.3.3 → 0.4.0
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/README.markdown +27 -5
- data/VERSION +1 -1
- data/lib/mactag.rb +9 -4
- data/lib/mactag/builder.rb +15 -41
- data/lib/mactag/config.rb +23 -3
- data/lib/mactag/ctags.rb +22 -13
- data/lib/mactag/event_handler.rb +22 -0
- data/lib/mactag/railtie.rb +1 -1
- data/lib/mactag/server.rb +48 -0
- data/lib/mactag/tag/gem.rb +1 -19
- data/lib/mactag/tag/rails.rb +4 -24
- data/lib/mactag/tags_file.rb +31 -0
- data/lib/tasks/mactag.rake +17 -4
- data/spec/mactag/builder_spec.rb +135 -0
- data/spec/mactag/config_spec.rb +50 -0
- data/spec/mactag/ctags_spec.rb +40 -0
- data/spec/mactag/dsl_spec.rb +66 -0
- data/spec/mactag/server_spec.rb +4 -0
- data/spec/mactag/tag/app_spec.rb +14 -0
- data/spec/mactag/tag/gem_spec.rb +110 -0
- data/spec/mactag/tag/plugin_spec.rb +57 -0
- data/spec/mactag/tag/rails_spec.rb +94 -0
- data/spec/mactag/tags_file_spec.rb +39 -0
- data/spec/mactag_spec.rb +4 -0
- metadata +67 -34
- data/test/mactag/builder_test.rb +0 -77
- data/test/mactag/config_test.rb +0 -36
- data/test/mactag/dsl_test.rb +0 -66
- data/test/mactag/tag/app_test.rb +0 -14
- data/test/mactag/tag/gem_test.rb +0 -108
- data/test/mactag/tag/plugin_test.rb +0 -57
- data/test/mactag/tag/rails_test.rb +0 -105
- data/test/mactag_test.rb +0 -4
data/README.markdown
CHANGED
@@ -44,7 +44,7 @@ Install the gem:
|
|
44
44
|
|
45
45
|
Load the gem in **Gemfile**:
|
46
46
|
group :development do
|
47
|
-
gem 'mactag', '0.
|
47
|
+
gem 'mactag', '0.4.0'
|
48
48
|
end
|
49
49
|
|
50
50
|
|
@@ -64,12 +64,16 @@ examples of how to configure Mactag.
|
|
64
64
|
|
65
65
|
* **Mactag::Config.rvm:** If true, use RVM gems. Defaults to **true**
|
66
66
|
* **Mactag::Config.gem_home:** The path where the gems are located. Defaults to **/Library/Ruby/Gems/1.8/gems**
|
67
|
-
* **Mactag::Config.binary:** The command to run when creating the TAGS-file. Defaults to **ctags -o
|
67
|
+
* **Mactag::Config.binary:** The command to run when creating the TAGS-file. Defaults to **ctags -o {OUTPUT} -e {INPUT}**
|
68
|
+
* **Mactag::Config.tags_file:** Name of output file. Defaults to **TAGS**
|
69
|
+
* **Mactag::Config.tags_dir:** Name of output directory to store tags files when using FSSM. Defaults to **.tags**
|
68
70
|
|
69
71
|
## Example mactag.rb file
|
70
72
|
Mactag::Config.rvm = false
|
71
73
|
Mactag::Config.gem_home = '/usr/lib/ruby/gems/1.8/gems'
|
72
|
-
Mactag::Config.binary = 'etags -o
|
74
|
+
Mactag::Config.binary = 'etags -o {OUTPUT} {INPUT}'
|
75
|
+
Mactag::Config.tags_file = 'TAGS'
|
76
|
+
Mactag::Config.tags_dir = '.tags' # See FSSM
|
73
77
|
|
74
78
|
Mactag do # This is "Mactag::Table.generate do" in Rails 2 applications
|
75
79
|
app 'app/**/*.rb', 'lib/*.rb'
|
@@ -82,10 +86,28 @@ examples of how to configure Mactag.
|
|
82
86
|
rails :except => :actionmailer, :version => '2.3.5'
|
83
87
|
end
|
84
88
|
|
85
|
-
|
86
89
|
# Usage
|
87
90
|
To create the TAGS file. Simply run:
|
88
|
-
$ rake mactag
|
91
|
+
$ rake mactag:create
|
92
|
+
|
93
|
+
|
94
|
+
# FSSM
|
95
|
+
A problem with tags, is that when your project's code changes, your
|
96
|
+
tags file will not keep up. Mactag can solve this by using FSSM, which
|
97
|
+
is a tool that notice file system modifications.
|
98
|
+
|
99
|
+
To enable FSSM, add the **fssm** gem to your projects Gemfile.
|
100
|
+
|
101
|
+
Then start the server that keeps track of changes
|
102
|
+
rake mactag:server
|
103
|
+
|
104
|
+
This creates a couple of tags files in **Mactag::Config.tags_dir**
|
105
|
+
(one for each source file). This means your editor must support
|
106
|
+
multiple tags files.
|
107
|
+
|
108
|
+
## Editor support
|
109
|
+
|
110
|
+
* Emacs - <http://github.com/rejeep/mactag.el>
|
89
111
|
|
90
112
|
|
91
113
|
# License
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/lib/mactag.rb
CHANGED
@@ -1,15 +1,20 @@
|
|
1
|
-
require 'rails'
|
2
|
-
|
3
1
|
require 'mactag/railtie'
|
4
2
|
require 'mactag/config'
|
5
3
|
require 'mactag/builder'
|
6
4
|
require 'mactag/dsl'
|
7
|
-
require 'mactag/ctags'
|
8
5
|
require 'mactag/tag'
|
6
|
+
require 'mactag/ctags'
|
7
|
+
require 'mactag/server'
|
8
|
+
require 'mactag/event_handler'
|
9
|
+
require 'mactag/tags_file'
|
9
10
|
|
10
11
|
module Mactag
|
12
|
+
autoload :Bundler, 'bundler'
|
13
|
+
autoload :Rails, 'rails'
|
14
|
+
autoload :FSSM, 'fssm'
|
15
|
+
|
11
16
|
def self.warn(message)
|
12
|
-
|
17
|
+
STDERR.puts(message)
|
13
18
|
end
|
14
19
|
end
|
15
20
|
|
data/lib/mactag/builder.rb
CHANGED
@@ -8,27 +8,24 @@ module Mactag
|
|
8
8
|
@tags = []
|
9
9
|
end
|
10
10
|
|
11
|
-
##
|
12
|
-
#
|
13
|
-
# Add +tag+ to list of tags.
|
14
|
-
#
|
15
11
|
def <<(tags)
|
16
12
|
@tags += Array(tags)
|
17
13
|
end
|
18
14
|
|
19
|
-
|
20
|
-
#
|
21
|
-
# Returns a string with all files that should be tagged. The
|
22
|
-
# files are separated with a whitespace.
|
23
|
-
#
|
24
|
-
def tags
|
15
|
+
def files
|
25
16
|
tags = all
|
26
17
|
tags.flatten!
|
27
18
|
tags.compact!
|
28
19
|
tags.collect! { |file| File.expand_path(file) }
|
29
20
|
tags.collect! { |file| Dir.glob(file) }
|
21
|
+
tags.flatten!
|
30
22
|
tags.uniq!
|
31
|
-
tags.
|
23
|
+
tags.reject! { |file| File.directory?(file) }
|
24
|
+
tags
|
25
|
+
end
|
26
|
+
|
27
|
+
def directories
|
28
|
+
files.collect { |file| File.dirname(file) }.uniq
|
32
29
|
end
|
33
30
|
|
34
31
|
def all
|
@@ -39,42 +36,20 @@ module Mactag
|
|
39
36
|
all.flatten.compact.any?
|
40
37
|
end
|
41
38
|
|
42
|
-
##
|
43
|
-
#
|
44
|
-
# Create the TAGS file.
|
45
|
-
#
|
46
39
|
def self.create
|
47
40
|
unless gem_home_exists?
|
48
41
|
Mactag.warn 'Gem home path does not exist on your system'
|
49
42
|
end
|
50
43
|
|
51
|
-
|
52
|
-
|
44
|
+
if @builder.gems?
|
45
|
+
Mactag::Ctags.new(@builder.files, Mactag::Config.tags_file).create
|
46
|
+
|
53
47
|
puts "Successfully generated TAGS file"
|
54
48
|
else
|
55
49
|
Mactag.warn 'You did not specify anything to tag'
|
56
50
|
end
|
57
51
|
end
|
58
52
|
|
59
|
-
##
|
60
|
-
#
|
61
|
-
# Generates the TAGS-table.
|
62
|
-
#
|
63
|
-
# ==== Example
|
64
|
-
# Mactag::Builder.generate do
|
65
|
-
# app 'app/**/*.rb', 'lib/*.rb'
|
66
|
-
#
|
67
|
-
# plugins 'thinking-sphinx', 'whenever'
|
68
|
-
#
|
69
|
-
# gems 'paperclip', 'authlogic'
|
70
|
-
# gem 'formtastic', :version => '0.9.7'
|
71
|
-
#
|
72
|
-
# rails :except => :actionmailer, :version => '2.3.5'
|
73
|
-
# end
|
74
|
-
#
|
75
|
-
# See documentation for the methods *app*, *plugins*, *gems* and
|
76
|
-
# *rails* in respective tag class.
|
77
|
-
#
|
78
53
|
def self.generate(&block)
|
79
54
|
@builder = Mactag::Builder.new
|
80
55
|
|
@@ -82,13 +57,12 @@ module Mactag
|
|
82
57
|
dsl.instance_eval(&block)
|
83
58
|
end
|
84
59
|
|
85
|
-
##
|
86
|
-
#
|
87
|
-
# Returns true if the specified gem home path exists on the
|
88
|
-
# system, false otherwise.
|
89
|
-
#
|
90
60
|
def self.gem_home_exists?
|
91
61
|
File.directory?(Mactag::Config.gem_home)
|
92
62
|
end
|
63
|
+
|
64
|
+
def self.builder
|
65
|
+
@builder
|
66
|
+
end
|
93
67
|
end
|
94
68
|
end
|
data/lib/mactag/config.rb
CHANGED
@@ -2,15 +2,34 @@ module Mactag
|
|
2
2
|
class Config
|
3
3
|
##
|
4
4
|
#
|
5
|
-
# The command to run
|
6
|
-
#
|
5
|
+
# The command to run (replacing {OUTPUT} with Mactag::Config.tags_file
|
6
|
+
# and {INPUT} with the input files) when creating the TAGS-file.
|
7
7
|
#
|
8
|
-
|
8
|
+
# Mactag::Config.binary = 'etags -o {OUTPUT} {INPUT}'
|
9
|
+
#
|
10
|
+
@@binary = 'ctags -o {OUTPUT} -e {INPUT}'
|
9
11
|
cattr_accessor :binary
|
10
12
|
|
13
|
+
##
|
14
|
+
#
|
15
|
+
# Name of the output tags file.
|
16
|
+
#
|
17
|
+
# Mactag::Config.binary = 'TAGS_FILE'
|
18
|
+
#
|
19
|
+
@@tags_file = 'TAGS'
|
20
|
+
cattr_accessor :tags_file
|
21
|
+
|
22
|
+
##
|
23
|
+
#
|
24
|
+
# Directory to store tags in when using Mactag server and FSSM.
|
25
|
+
#
|
26
|
+
@@tags_dir = '.tags'
|
27
|
+
cattr_accessor :tags_dir
|
28
|
+
|
11
29
|
##
|
12
30
|
#
|
13
31
|
# The system folder where the gems are located.
|
32
|
+
#
|
14
33
|
# Mactag::Config.gem_home = '/Library/Ruby/Gems/1.8/gems'
|
15
34
|
#
|
16
35
|
@@gem_home = '/Library/Ruby/Gems/1.8/gems'
|
@@ -28,6 +47,7 @@ module Mactag
|
|
28
47
|
#
|
29
48
|
# If using Ruby Version Manager (RVM), setting this option to true
|
30
49
|
# will enable Mactag to find out the gem path automatically.
|
50
|
+
#
|
31
51
|
# Mactag::Config.rvm = false
|
32
52
|
#
|
33
53
|
@@rvm = true
|
data/lib/mactag/ctags.rb
CHANGED
@@ -1,23 +1,32 @@
|
|
1
|
-
require 'rails'
|
2
|
-
|
3
1
|
module Mactag
|
4
2
|
##
|
5
3
|
#
|
6
|
-
#
|
4
|
+
# Wrapper around Ctags command.
|
7
5
|
#
|
8
6
|
class Ctags
|
9
|
-
def initialize(
|
10
|
-
@
|
7
|
+
def initialize(input, output)
|
8
|
+
@input = Array(input)
|
9
|
+
@output = output
|
10
|
+
end
|
11
|
+
|
12
|
+
def create
|
13
|
+
system(command)
|
11
14
|
end
|
12
15
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def command
|
20
|
+
"cd #{Rails.root} && #{binary}"
|
21
|
+
end
|
22
|
+
|
23
|
+
def binary
|
24
|
+
binary = Mactag::Config.binary
|
25
|
+
|
26
|
+
binary.gsub!('{OUTPUT}', @output)
|
27
|
+
binary.gsub!('{INPUT}', @input.join(' '))
|
28
|
+
|
29
|
+
binary
|
21
30
|
end
|
22
31
|
end
|
23
32
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Mactag
|
2
|
+
class EventHandler
|
3
|
+
def update(file)
|
4
|
+
tags_file = Mactag::TagsFile.new(file)
|
5
|
+
if tags_file.exist?
|
6
|
+
tags_file.delete
|
7
|
+
tags_file.create
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def delete(file)
|
12
|
+
tags_file = Mactag::TagsFile.new(file)
|
13
|
+
if tags_file.exist?
|
14
|
+
tags_file.delete
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def create(file)
|
19
|
+
Mactag::TagsFile.new(file).create
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/mactag/railtie.rb
CHANGED
@@ -0,0 +1,48 @@
|
|
1
|
+
module Mactag
|
2
|
+
class Server
|
3
|
+
class << self
|
4
|
+
def start
|
5
|
+
create_tags_dir
|
6
|
+
clear_tags
|
7
|
+
init_tags
|
8
|
+
init_monitor
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def create_tags_dir
|
15
|
+
tags_dir = File.join(Rails.root, Mactag::Config.tags_dir)
|
16
|
+
unless File.directory?(tags_dir)
|
17
|
+
Dir.mkdir(tags_dir)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def clear_tags
|
22
|
+
tags_files = File.join(Rails.root, Mactag::Config.tags_dir, '*')
|
23
|
+
Dir.glob(tags_files).each do |file|
|
24
|
+
File.delete(file)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def init_tags
|
29
|
+
Mactag::Builder.builder.files.each do |file|
|
30
|
+
Mactag::TagsFile.new(file).create
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def init_monitor
|
35
|
+
event_handler = Mactag::EventHandler.new
|
36
|
+
FSSM.monitor do
|
37
|
+
Mactag::Builder.builder.directories.each do |directory|
|
38
|
+
path(directory) do
|
39
|
+
update { |base, relative| event_handler.update(File.join(base, relative)) }
|
40
|
+
delete { |base, relative| event_handler.delete(File.join(base, relative)) }
|
41
|
+
create { |base, relative| event_handler.create(File.join(base, relative)) }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/mactag/tag/gem.rb
CHANGED
@@ -6,7 +6,7 @@ module Mactag
|
|
6
6
|
#
|
7
7
|
# ==== Examples
|
8
8
|
# Mactag do
|
9
|
-
# #
|
9
|
+
# # Tags all gems specified in Gemfile.
|
10
10
|
# gems
|
11
11
|
#
|
12
12
|
# # Tag the whenever gem, latest version
|
@@ -20,8 +20,6 @@ module Mactag
|
|
20
20
|
# do
|
21
21
|
#
|
22
22
|
class Gem
|
23
|
-
autoload :Bundler, 'bundler'
|
24
|
-
|
25
23
|
def initialize(name, version = nil)
|
26
24
|
@name = name
|
27
25
|
@version = version
|
@@ -40,10 +38,6 @@ module Mactag
|
|
40
38
|
end
|
41
39
|
end
|
42
40
|
|
43
|
-
##
|
44
|
-
#
|
45
|
-
# Returns all application gems in Bundler default group.
|
46
|
-
#
|
47
41
|
def self.all
|
48
42
|
gems = {}
|
49
43
|
Bundler.load.specs.each do |spec|
|
@@ -55,10 +49,6 @@ module Mactag
|
|
55
49
|
default.collect { |tmp| Gem.new(tmp, gems[tmp]) }
|
56
50
|
end
|
57
51
|
|
58
|
-
##
|
59
|
-
#
|
60
|
-
# Returns the most recent gem with +name+.
|
61
|
-
#
|
62
52
|
def self.most_recent(name)
|
63
53
|
versions = Dir.glob(File.join(Mactag::Config.gem_home, name) + "-*")
|
64
54
|
unless versions.empty?
|
@@ -74,10 +64,6 @@ module Mactag
|
|
74
64
|
|
75
65
|
private
|
76
66
|
|
77
|
-
##
|
78
|
-
#
|
79
|
-
# Returns true if +gem+ exists, false otherwise.
|
80
|
-
#
|
81
67
|
def exists?
|
82
68
|
if @version
|
83
69
|
File.directory?(File.join(Mactag::Config.gem_home, splash))
|
@@ -86,10 +72,6 @@ module Mactag
|
|
86
72
|
end
|
87
73
|
end
|
88
74
|
|
89
|
-
##
|
90
|
-
#
|
91
|
-
# Returns the gem name, dash, version.
|
92
|
-
#
|
93
75
|
def splash
|
94
76
|
"#{@name}-#{@version}"
|
95
77
|
end
|
data/lib/mactag/tag/rails.rb
CHANGED
@@ -41,15 +41,7 @@ module Mactag
|
|
41
41
|
# do
|
42
42
|
#
|
43
43
|
class Rails
|
44
|
-
PACKAGES = [
|
45
|
-
:actionmailer,
|
46
|
-
:actionpack,
|
47
|
-
:activemodel,
|
48
|
-
:activerecord,
|
49
|
-
:activeresource,
|
50
|
-
:railties,
|
51
|
-
:activesupport
|
52
|
-
]
|
44
|
+
PACKAGES = [:actionmailer, :actionpack, :activemodel, :activerecord, :activeresource, :railties, :activesupport]
|
53
45
|
|
54
46
|
def initialize(options)
|
55
47
|
@options = options
|
@@ -70,11 +62,7 @@ module Mactag
|
|
70
62
|
|
71
63
|
|
72
64
|
private
|
73
|
-
|
74
|
-
##
|
75
|
-
#
|
76
|
-
# Returns a list of all packages that should be included.
|
77
|
-
#
|
65
|
+
|
78
66
|
def packages
|
79
67
|
result = []
|
80
68
|
unless @only || @except
|
@@ -88,11 +76,7 @@ module Mactag
|
|
88
76
|
end
|
89
77
|
result
|
90
78
|
end
|
91
|
-
|
92
|
-
##
|
93
|
-
#
|
94
|
-
# Packagizes all +pkgs+.
|
95
|
-
#
|
79
|
+
|
96
80
|
def packagize!(pkgs)
|
97
81
|
return nil if pkgs.blank?
|
98
82
|
|
@@ -100,11 +84,7 @@ module Mactag
|
|
100
84
|
"#{pkg}".gsub(/[^a-z]/, '').to_sym
|
101
85
|
end
|
102
86
|
end
|
103
|
-
|
104
|
-
##
|
105
|
-
#
|
106
|
-
# Returns what Rails version to use.
|
107
|
-
#
|
87
|
+
|
108
88
|
def version
|
109
89
|
@options[:version] || ::Rails.version
|
110
90
|
end
|