mactag 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +68 -0
- data/VERSION +1 -0
- data/features/app.feature +35 -0
- data/features/gem.feature +59 -0
- data/features/plugin.feature +41 -0
- data/features/rails/actionmailer/lib/action_mailer/base.rb +9 -0
- data/features/rails/actionpack/lib/action_controller/caching/actions.rb +11 -0
- data/features/rails/actionpack/lib/action_view/action_view/helpers/form_tag_helper.rb +9 -0
- data/features/rails/activerecord/lib/active_record/associations.rb +9 -0
- data/features/rails/activeresource/lib/active_resource/connection.rb +7 -0
- data/features/rails/activesupport/lib/active_support/core_ext/hash/diff.rb +5 -0
- data/features/rails_gem.feature +69 -0
- data/features/rails_vendor.feature +46 -0
- data/features/step_definitions/app_steps.rb +11 -0
- data/features/step_definitions/gem_steps.rb +40 -0
- data/features/step_definitions/mactab_steps.rb +53 -0
- data/features/step_definitions/plugin_steps.rb +34 -0
- data/features/step_definitions/rails_steps.rb +62 -0
- data/features/support/core_ext.rb +5 -0
- data/features/support/env.rb +10 -0
- data/features/support/rails_app.rb +74 -0
- data/features/support/tags_file.rb +21 -0
- data/generators/mactag/mactag_generator.rb +10 -0
- data/generators/mactag/templates/mactag.rb +11 -0
- data/lib/mactag.rb +6 -0
- data/lib/mactag/config.rb +20 -0
- data/lib/mactag/table.rb +45 -0
- data/lib/mactag/tag.rb +8 -0
- data/lib/mactag/tag/app.rb +30 -0
- data/lib/mactag/tag/gem.rb +46 -0
- data/lib/mactag/tag/parser.rb +33 -0
- data/lib/mactag/tag/plugin.rb +32 -0
- data/lib/mactag/tag/rails.rb +138 -0
- data/lib/mactag/tasks.rb +10 -0
- data/tasks/mactag_tasks.rake +1 -0
- data/test/mactag/config_test.rb +10 -0
- data/test/mactag/tag/app_test.rb +16 -0
- data/test/mactag/tag/gem_test.rb +42 -0
- data/test/mactag/tag/plugin_test.rb +40 -0
- data/test/mactag/tag/rails_test.rb +182 -0
- data/test/mactag_test.rb +4 -0
- metadata +94 -0
data/README.markdown
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
# Mactag
|
2
|
+
|
3
|
+
Mactag is a plugin for Rails developers that do their development in
|
4
|
+
an editor that supports Ctags (Emacs, Vim, jEdit, ...). With Ctags
|
5
|
+
you can follow tags (of functions, variables, macros, whatever) to
|
6
|
+
their definitions.
|
7
|
+
|
8
|
+
# Exuberant Ctags
|
9
|
+
First off you must install [Ctags](http://ctags.sourceforge.net/).
|
10
|
+
Some systems comes with a ctags command already. If you have the ctags
|
11
|
+
executable, but have problems creating the tags file. Then make sure
|
12
|
+
that you are using *Exuberant Ctags* and not some other version.
|
13
|
+
|
14
|
+
# Installation
|
15
|
+
|
16
|
+
## Plugin
|
17
|
+
|
18
|
+
Install the plugin:
|
19
|
+
|
20
|
+
$ ./script/plugin install git://github.com/rejeep/mactag.git
|
21
|
+
|
22
|
+
## Gem
|
23
|
+
|
24
|
+
Install the gem:
|
25
|
+
|
26
|
+
$ sudo gem install mactag
|
27
|
+
|
28
|
+
If you install mactag as a gem you must also include it's rake tasks in your *Rakefile*.
|
29
|
+
|
30
|
+
require 'mactag/tasks'
|
31
|
+
|
32
|
+
# Configuration
|
33
|
+
|
34
|
+
Generate a basic configuration file:
|
35
|
+
|
36
|
+
$ ./script/generate mactag
|
37
|
+
|
38
|
+
This will create the file **config/mactag.rb**, which contains
|
39
|
+
some examples of how to set it up.
|
40
|
+
|
41
|
+
## Options
|
42
|
+
|
43
|
+
* **Mactag::Config.gem_home:** The path where the gems are located. Defaults to **/usr/lib/ruby/gems/1.8/gems**
|
44
|
+
* **Mactag::Config.binary:** The command to run when creating the TAGS-file. Defaults to **ctags -o TAGS -e**
|
45
|
+
|
46
|
+
## Example mactag.rb file
|
47
|
+
Mactag::Config.gem_home = "/usr/lib/ruby/gems/1.9/gems"
|
48
|
+
Mactag::Config.binary = "etags -o TAGS"
|
49
|
+
|
50
|
+
Mactag::Table.generate do
|
51
|
+
app "app/**/*.rb", "lib/*.rb"
|
52
|
+
|
53
|
+
plugins "thinking-sphinx", "whenever"
|
54
|
+
|
55
|
+
gems "paperclip", "authlogic"
|
56
|
+
gem "formtastic", :version => "0.9.7"
|
57
|
+
|
58
|
+
rails :except => :actionmailer, :version => "2.3.5"
|
59
|
+
end
|
60
|
+
|
61
|
+
# Usage
|
62
|
+
|
63
|
+
To create the TAGS file. Simpy run:
|
64
|
+
$ rake mactag
|
65
|
+
|
66
|
+
# License
|
67
|
+
|
68
|
+
Copyright (c) 2010 Johan Andersson, released under the MIT license
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.1
|
@@ -0,0 +1,35 @@
|
|
1
|
+
Feature: Tag application files
|
2
|
+
In order to create a TAGS file
|
3
|
+
As a user
|
4
|
+
I want to tag application files
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given a Rails application
|
8
|
+
And mactag is installed
|
9
|
+
|
10
|
+
Scenario: Tag single file
|
11
|
+
Given a javascript function "show" in "whitebox"
|
12
|
+
And an app mactag config with the following tags
|
13
|
+
| tag |
|
14
|
+
| public/javascripts/whitebox.js |
|
15
|
+
When I create the tags file
|
16
|
+
Then the tags file should contain "show"
|
17
|
+
|
18
|
+
Scenario: Tag multiple files
|
19
|
+
Given a javascript function "hide" in "whitebox"
|
20
|
+
And a ruby method "to_s" in the "user" model
|
21
|
+
And an app mactag config with the following tags
|
22
|
+
| tag |
|
23
|
+
| public/javascripts/whitebox.js |
|
24
|
+
| app/models/user.rb |
|
25
|
+
When I create the tags file
|
26
|
+
Then the tags file should contain "hide"
|
27
|
+
And the tags file should contain "to_s"
|
28
|
+
|
29
|
+
Scenario: Tag files recursive
|
30
|
+
Given a ruby method "kill!" in the "user" model
|
31
|
+
And an app mactag config with the following tags
|
32
|
+
| tag |
|
33
|
+
| app/**/*.rb |
|
34
|
+
When I create the tags file
|
35
|
+
Then the tags file should contain "kill!"
|
@@ -0,0 +1,59 @@
|
|
1
|
+
Feature: Tag Gems
|
2
|
+
In order to create a TAGS file
|
3
|
+
As a user
|
4
|
+
I want to tag gems
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given a Rails application
|
8
|
+
And mactag is installed
|
9
|
+
|
10
|
+
Scenario: Tag single gem
|
11
|
+
Given the gem "superduper" version "1.0.0" is installed
|
12
|
+
And an acts as method for the "superduper-1.0.0" gem
|
13
|
+
And a gem mactag config with the following tags
|
14
|
+
| tag |
|
15
|
+
| superduper |
|
16
|
+
When I create the tags file
|
17
|
+
Then the tags file should contain "acts_as_superduper"
|
18
|
+
|
19
|
+
Scenario: Tag multiple gems
|
20
|
+
Given the gem "superduper" version "1.0.0" is installed
|
21
|
+
And the gem "dunder" version "1.0.0" is installed
|
22
|
+
And an acts as method for the "superduper-1.0.0" gem
|
23
|
+
And an acts as method for the "dunder-1.0.0" gem
|
24
|
+
And a gem mactag config with the following tags
|
25
|
+
| tag |
|
26
|
+
| superduper |
|
27
|
+
| dunder |
|
28
|
+
When I create the tags file
|
29
|
+
Then the tags file should contain "acts_as_superduper"
|
30
|
+
Then the tags file should contain "acts_as_dunder"
|
31
|
+
|
32
|
+
Scenario: Tag specific version
|
33
|
+
Given the gem "superduper" version "1.0.0" is installed
|
34
|
+
And the gem "superduper" version "1.0.1" is installed
|
35
|
+
And an acts as method for the "superduper-1.0.0" gem
|
36
|
+
And an acts as method for the "superduper-1.0.1" gem
|
37
|
+
And a gem mactag config with the following tags
|
38
|
+
| tag | version |
|
39
|
+
| superduper | 1.0.0 |
|
40
|
+
When I create the tags file
|
41
|
+
Then the tags file should contain "acts_as_superduper"
|
42
|
+
And the tags file should contain "1.0.0"
|
43
|
+
And the tags file should not contain "1.0.1"
|
44
|
+
|
45
|
+
Scenario: Tag latest version
|
46
|
+
Given the gem "superduper" version "1.0.2" is installed
|
47
|
+
And the gem "superduper" version "1.0.1" is installed
|
48
|
+
And the gem "superduper" version "1.0.0" is installed
|
49
|
+
And an acts as method for the "superduper-1.0.2" gem
|
50
|
+
And an acts as method for the "superduper-1.0.1" gem
|
51
|
+
And an acts as method for the "superduper-1.0.0" gem
|
52
|
+
And a gem mactag config with the following tags
|
53
|
+
| tag |
|
54
|
+
| superduper |
|
55
|
+
When I create the tags file
|
56
|
+
Then the tags file should contain "acts_as_superduper"
|
57
|
+
And the tags file should contain "1.0.2"
|
58
|
+
And the tags file should not contain "1.0.0"
|
59
|
+
And the tags file should not contain "1.0.1"
|
@@ -0,0 +1,41 @@
|
|
1
|
+
Feature: Tag Plugins
|
2
|
+
In order to create a TAGS file
|
3
|
+
As a user
|
4
|
+
I want to tag plugins
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given a Rails application
|
8
|
+
And mactag is installed
|
9
|
+
|
10
|
+
Scenario: Tag single plugin
|
11
|
+
Given the plugin "superduper" is installed
|
12
|
+
And an acts as method for the "superduper" plugin
|
13
|
+
And a plugin mactag config with the following tags
|
14
|
+
| tag |
|
15
|
+
| superduper |
|
16
|
+
When I create the tags file
|
17
|
+
Then the tags file should contain "acts_as_superduper"
|
18
|
+
|
19
|
+
Scenario: Tag multiple plugins
|
20
|
+
Given the plugin "superduper" is installed
|
21
|
+
And the plugin "dunder" is installed
|
22
|
+
And an acts as method for the "superduper" plugin
|
23
|
+
And an acts as method for the "dunder" plugin
|
24
|
+
And a plugin mactag config with the following tags
|
25
|
+
| tag |
|
26
|
+
| superduper |
|
27
|
+
| dunder |
|
28
|
+
When I create the tags file
|
29
|
+
Then the tags file should contain "acts_as_superduper"
|
30
|
+
Then the tags file should contain "acts_as_dunder"
|
31
|
+
|
32
|
+
Scenario: Tag all plugins
|
33
|
+
Given the plugin "superduper" is installed
|
34
|
+
And the plugin "dunder" is installed
|
35
|
+
And an acts as method for the "superduper" plugin
|
36
|
+
And an acts as method for the "dunder" plugin
|
37
|
+
And a plugin mactag config with the following tags
|
38
|
+
| tag |
|
39
|
+
When I create the tags file
|
40
|
+
Then the tags file should contain "acts_as_superduper"
|
41
|
+
Then the tags file should contain "acts_as_dunder"
|
@@ -0,0 +1,69 @@
|
|
1
|
+
Feature: Tag Rails as a Gem
|
2
|
+
In order to create a TAGS file
|
3
|
+
As a user
|
4
|
+
I want to tag Rails
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given a Rails application
|
8
|
+
And mactag is installed
|
9
|
+
|
10
|
+
Scenario: Tag all packages
|
11
|
+
Given rails is installed as a gem
|
12
|
+
And a rails mactag config with the following tags
|
13
|
+
| tag |
|
14
|
+
When I create the tags file
|
15
|
+
Then the tags file should contain "diff"
|
16
|
+
And the tags file should contain "get"
|
17
|
+
And the tags file should contain "has_many"
|
18
|
+
And the tags file should contain "deliver"
|
19
|
+
And the tags file should contain "caches_action"
|
20
|
+
And the tags file should contain "form_tag"
|
21
|
+
|
22
|
+
Scenario: Tag only some packages
|
23
|
+
Given rails is installed as a gem
|
24
|
+
And a rails mactag config with the following tags
|
25
|
+
| only |
|
26
|
+
| activerecord |
|
27
|
+
| activesupport |
|
28
|
+
When I create the tags file
|
29
|
+
Then the tags file should contain "diff"
|
30
|
+
And the tags file should contain "has_many"
|
31
|
+
And the tags file should not contain "get"
|
32
|
+
And the tags file should not contain "deliver"
|
33
|
+
And the tags file should not contain "caches_action"
|
34
|
+
And the tags file should not contain "form_tag"
|
35
|
+
|
36
|
+
Scenario: Tag all except some packages
|
37
|
+
Given rails is installed as a gem
|
38
|
+
And a rails mactag config with the following tags
|
39
|
+
| except |
|
40
|
+
| actioncontroller |
|
41
|
+
| actionview |
|
42
|
+
When I create the tags file
|
43
|
+
Then the tags file should contain "diff"
|
44
|
+
And the tags file should contain "has_many"
|
45
|
+
And the tags file should contain "get"
|
46
|
+
And the tags file should contain "deliver"
|
47
|
+
And the tags file should not contain "caches_action"
|
48
|
+
And the tags file should not contain "form_tag"
|
49
|
+
|
50
|
+
Scenario: Tag specific version
|
51
|
+
Given rails version "3.0.0" is installed as a gem
|
52
|
+
And rails version "2.3.5" is installed as a gem
|
53
|
+
And a rails mactag config with the following tags
|
54
|
+
| version |
|
55
|
+
| 3.0.0 |
|
56
|
+
When I create the tags file
|
57
|
+
Then the tags file should contain "3.0.0"
|
58
|
+
And the tags file should not contain "2.3.5"
|
59
|
+
|
60
|
+
Scenario: Tag latest version
|
61
|
+
Given rails version "3.0.0" is installed as a gem
|
62
|
+
And rails version "2.3.5" is installed as a gem
|
63
|
+
And rails version "2.3.2" is installed as a gem
|
64
|
+
And a rails mactag config with the following tags
|
65
|
+
| tag |
|
66
|
+
When I create the tags file
|
67
|
+
Then the tags file should contain "3.0.0"
|
68
|
+
And the tags file should not contain "2.3.2"
|
69
|
+
And the tags file should not contain "2.3.5"
|
@@ -0,0 +1,46 @@
|
|
1
|
+
Feature: Tag Rails in vendor
|
2
|
+
In order to create a TAGS file
|
3
|
+
As a user
|
4
|
+
I want to tag Rails
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given a Rails application
|
8
|
+
And mactag is installed
|
9
|
+
And rails lives in vendor
|
10
|
+
|
11
|
+
Scenario: Tag all packages
|
12
|
+
Given a rails mactag config with the following tags
|
13
|
+
| tag |
|
14
|
+
When I create the tags file
|
15
|
+
Then the tags file should contain "diff"
|
16
|
+
And the tags file should contain "get"
|
17
|
+
And the tags file should contain "has_many"
|
18
|
+
And the tags file should contain "deliver"
|
19
|
+
And the tags file should contain "caches_action"
|
20
|
+
And the tags file should contain "form_tag"
|
21
|
+
|
22
|
+
Scenario: Tag only some packages
|
23
|
+
Given a rails mactag config with the following tags
|
24
|
+
| only |
|
25
|
+
| activerecord |
|
26
|
+
| active_support |
|
27
|
+
When I create the tags file
|
28
|
+
Then the tags file should contain "diff"
|
29
|
+
And the tags file should contain "has_many"
|
30
|
+
And the tags file should not contain "get"
|
31
|
+
And the tags file should not contain "deliver"
|
32
|
+
And the tags file should not contain "caches_action"
|
33
|
+
And the tags file should not contain "form_tag"
|
34
|
+
|
35
|
+
Scenario: Tag all except some packages
|
36
|
+
Given a rails mactag config with the following tags
|
37
|
+
| except |
|
38
|
+
| action_controller |
|
39
|
+
| actionview |
|
40
|
+
When I create the tags file
|
41
|
+
Then the tags file should contain "diff"
|
42
|
+
And the tags file should contain "has_many"
|
43
|
+
And the tags file should contain "get"
|
44
|
+
And the tags file should contain "deliver"
|
45
|
+
And the tags file should not contain "caches_action"
|
46
|
+
And the tags file should not contain "form_tag"
|
@@ -0,0 +1,40 @@
|
|
1
|
+
Given /^the gem "([^\"]*)" version "([^\"]*)" is installed$/ do |gem, version|
|
2
|
+
@app.install_gem(gem, version)
|
3
|
+
end
|
4
|
+
|
5
|
+
Given /^an acts as method for the "([^\"]*)" gem$/ do |gem|
|
6
|
+
file = File.join("vendor", "gems", gem, "lib", "#{gem}.rb")
|
7
|
+
@app.puts file do
|
8
|
+
<<-eos
|
9
|
+
module #{gem.camelize}
|
10
|
+
def self.included(base)
|
11
|
+
base.send :extend, ClassMethods
|
12
|
+
end
|
13
|
+
|
14
|
+
module ClassMethods
|
15
|
+
def acts_as_#{gem}
|
16
|
+
# ...
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
eos
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
Given /^a gem mactag config with the following tags$/ do |table|
|
25
|
+
if version = table.hashes.first["version"]
|
26
|
+
tags = "#{table.hashes.first["tag"].quote}, :version => #{version.quote}"
|
27
|
+
else
|
28
|
+
tags = table.rows.flatten.collect(&:quote).join(", ")
|
29
|
+
end
|
30
|
+
|
31
|
+
@app.puts "config/mactag.rb" do
|
32
|
+
<<-eos
|
33
|
+
Mactag::Config.gem_home = File.join("vendor", "gems")
|
34
|
+
|
35
|
+
Mactag::Table.generate do
|
36
|
+
gems #{tags}
|
37
|
+
end
|
38
|
+
eos
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
Given /^a Rails application$/ do
|
2
|
+
@app = RailsApp.new
|
3
|
+
end
|
4
|
+
|
5
|
+
Given /^mactag is installed$/ do
|
6
|
+
mactag = File.join(@app.rails_root, "vendor", "plugins", "mactag")
|
7
|
+
|
8
|
+
FileUtils.mkdir_p(mactag)
|
9
|
+
|
10
|
+
[ "lib", "tasks", "Rakefile", "init.rb" ].each do |name|
|
11
|
+
file = File.join(File.dirname(__FILE__), "..", "..", name)
|
12
|
+
|
13
|
+
FileUtils.cp_r(file, mactag)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
Given /^a javascript function "([^\"]*)" in "([^\"]*)"$/ do |function, file|
|
18
|
+
@app.puts "public/javascripts/#{file}.js" do
|
19
|
+
<<-eos
|
20
|
+
function #{function}() {
|
21
|
+
// ...
|
22
|
+
}
|
23
|
+
eos
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
Given /^a ruby method "([^\"]*)" in the "([^\"]*)" model$/ do |method, model|
|
28
|
+
@app.puts "app/models/#{model}.rb" do
|
29
|
+
<<-eos
|
30
|
+
class #{model.camelize}
|
31
|
+
def #{method}
|
32
|
+
# ...
|
33
|
+
end
|
34
|
+
end
|
35
|
+
eos
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
When /^I create the tags file$/ do
|
40
|
+
@tags = TagsFile.new(@app)
|
41
|
+
end
|
42
|
+
|
43
|
+
Then /^the tags file should contain "([^\"]*)"$/ do |tag|
|
44
|
+
assert @tags.contain?(tag)
|
45
|
+
end
|
46
|
+
|
47
|
+
Then /^the tags file should not contain "([^\"]*)"$/ do |tag|
|
48
|
+
assert !@tags.contain?(tag)
|
49
|
+
end
|
50
|
+
|
51
|
+
After do
|
52
|
+
@app.destroy
|
53
|
+
end
|