guard-ctags-bundler 0.0.5 → 0.1.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/.gitignore CHANGED
@@ -3,3 +3,5 @@
3
3
  Gemfile.lock
4
4
  pkg/*
5
5
  /vendor/ruby
6
+ /test/test_project/tags
7
+ /test/test_project/gems.tags
data/Gemfile CHANGED
@@ -2,3 +2,5 @@ source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in guard-ctags-bundler.gemspec
4
4
  gemspec
5
+
6
+ gem "rake", :require => false
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- Guard-CTags-Bundler
1
+ ###### Guard-CTags-Bundler
2
2
  =
3
3
 
4
4
  Guard-CTags-Bundler generates [ctags](http://ctags.sourceforge.net) for your project and for gems in your bundle. For project tags file `tags` is generated, for gems tags file `gems.tags` is generated.
@@ -27,6 +27,23 @@ And then add a basic setup to your `Guardfile`:
27
27
 
28
28
  $ guard init ctags-bundler
29
29
 
30
+ ## Usage
31
+
32
+ Please, read [Guard usage doc](https://github.com/guard/guard#readme)
33
+
34
+ ## Guardfile Options
35
+
36
+ ``` ruby
37
+ :src_path => ".", # source path to be scanned for tags (default .)
38
+ :emacs => false, # run ctags in emacs mode and merge tags and gems.tags into TAGS file
39
+ ```
40
+
41
+ For a typical Rails application, `Guardfile` can look like this (default):
42
+
43
+ guard 'ctags-bundler', :src_path => ["app", "lib", "spec/support"] do
44
+ watch(/^(app|lib|spec\/support)\/.*\.rb$/)
45
+ watch('Gemfile.lock')
46
+ end
30
47
 
31
48
  ## CTags
32
49
 
@@ -42,14 +59,13 @@ Vim supports ctags by default. All you need to do is add your `gems.tags` file t
42
59
 
43
60
  set tags+=gems.tags
44
61
 
45
-
46
62
  ## Emacs
47
63
 
48
64
  Ctags can be used with emacs too. Add `:emacs => true` option to your Guardfile and ctags will be generated with `-e` option:
49
65
 
50
- guard 'ctags-bundler', :emacs => true do
51
- watch(%r{^(app|lib|spec/support)/.*\.rb$}) { ["app", "lib", "spec/support"] }
66
+ guard 'ctags-bundler', :emacs => true, :src_path => ["app", "lib", "spec/support"] do
67
+ watch(/^(app|lib|spec\/support)\/.*\.rb$/)
52
68
  watch('Gemfile.lock')
53
69
  end
54
70
 
55
- Thanks to [Jorge Dias](https://github.com/diasjorge) for this patch.
71
+ Thanks to [Jorge Dias](https://github.com/diasjorge) and [Antono Vasiljev](https://github.com/antono) for emacs support.
data/Rakefile CHANGED
@@ -1 +1,11 @@
1
1
  require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+
4
+ task :default => :test
5
+
6
+ Rake::TestTask.new(:test) do |t|
7
+ #t.libs << 'lib'
8
+ t.libs << 'test'
9
+ t.pattern = 'test/**/*_test.rb'
10
+ t.verbose = true
11
+ end
@@ -19,8 +19,10 @@ Gem::Specification.new do |s|
19
19
  s.require_paths = ["lib"]
20
20
 
21
21
  # specify any dependencies here; for example:
22
- s.add_dependency 'guard', '>= 0.4.0'
22
+ s.add_dependency 'guard', '>= 1.0.0'
23
+
24
+ s.add_development_dependency "minitest"
25
+ s.add_development_dependency "purdytest"
23
26
 
24
- # s.add_development_dependency "rspec"
25
27
  # s.add_runtime_dependency "rest-client"
26
28
  end
@@ -1,4 +1,5 @@
1
1
  require "guard/ctags-bundler/version"
2
+ require "guard/ctags-bundler/ctags_generator"
2
3
  require 'guard'
3
4
  require 'guard/guard'
4
5
  require 'bundler'
@@ -8,41 +9,27 @@ module Guard
8
9
  class CtagsBundler < Guard
9
10
  def initialize(watchers = [], options = {})
10
11
  super(watchers, options)
12
+ @ctags_generator = ::Guard::Ctags::Bundler::CtagsGenerator.new(options)
11
13
  end
12
14
 
13
15
  def start
14
16
  UI.info 'Guard::CtagsBundler is running!'
17
+ @ctags_generator.generate_bundler_tags
18
+ @ctags_generator.generate_project_tags
15
19
  end
16
20
 
17
- def run_on_change(paths)
21
+ def run_on_changes(paths)
18
22
  if paths.include?('Gemfile.lock')
19
23
  UI.info "regenerating bundler tags..."
20
- generate_bundler_tags
24
+ @ctags_generator.generate_bundler_tags
21
25
  end
26
+
22
27
  ruby_files = paths.reject {|f| f == 'Gemfile.lock'}
28
+
23
29
  if ruby_files.any?
24
30
  UI.info "regenerating project tags..."
25
- generate_project_tags(ruby_files)
31
+ @ctags_generator.generate_project_tags
26
32
  end
27
33
  end
28
-
29
- private
30
-
31
- def generate_project_tags(paths)
32
- generate_tags(paths, "tags")
33
- end
34
-
35
- def generate_bundler_tags
36
- runtime = ::Bundler::Runtime.new Dir.pwd, ::Bundler.definition
37
- paths = runtime.specs.map(&:full_gem_path)
38
- generate_tags(paths, "gems.tags")
39
- end
40
-
41
- def generate_tags(paths, tag_file)
42
- paths = paths.join(' ').strip
43
- cmd = "find #{paths} -type f -name \\*.rb | ctags -f #{tag_file} -L -"
44
- cmd << " -e" if options[:emacs]
45
- system(cmd)
46
- end
47
34
  end
48
35
  end
@@ -0,0 +1,29 @@
1
+ class Guard::Ctags::Bundler::CtagsGenerator
2
+ def initialize(opts = {})
3
+ @opts = opts
4
+ end
5
+
6
+ def generate_project_tags
7
+ generate_tags(@opts[:src_path] || ".", "tags")
8
+ end
9
+
10
+ def generate_bundler_tags
11
+ definition = Bundler::Definition.build("Gemfile", "Gemfile.lock", nil)
12
+ runtime = Bundler::Runtime.new(Dir.pwd, definition)
13
+ paths = runtime.requested_specs.map(&:full_gem_path)
14
+ generate_tags(paths, "gems.tags")
15
+ end
16
+
17
+ private
18
+
19
+ def generate_tags(path, tag_file)
20
+ if path.instance_of?(Array)
21
+ path = path.join(' ').strip
22
+ end
23
+
24
+ cmd = "find #{path} -type f -name \\*.rb | ctags -f #{tag_file} -L -"
25
+ cmd << " -e" if @opts[:emacs]
26
+ system(cmd)
27
+ system("cat tags gems.tags > TAGS") if @opts[:emacs]
28
+ end
29
+ end
@@ -1,4 +1,4 @@
1
- guard 'ctags-bundler' do
2
- watch(%r{^(app|lib|spec/support)/.*\.rb$}) { ["app", "lib", "spec/support"] }
1
+ guard 'ctags-bundler', :src_path => ["app", "lib", "spec/support"] do
2
+ watch(/^(app|lib|spec\/support)\/.*\.rb$/)
3
3
  watch('Gemfile.lock')
4
4
  end
@@ -1,7 +1,7 @@
1
1
  module Guard
2
2
  module Ctags
3
3
  module Bundler
4
- VERSION = "0.0.5"
4
+ VERSION = "0.1.0"
5
5
  end
6
6
  end
7
7
  end
@@ -0,0 +1,40 @@
1
+ require 'test_helper'
2
+
3
+ require 'guard/ctags-bundler/ctags_generator'
4
+
5
+ class CtagsGeneratorTest < MiniTest::Unit::TestCase
6
+ def setup
7
+ clean_tags
8
+ Dir.chdir(test_project_path)
9
+ end
10
+
11
+ def test_generate_project_tags
12
+ generator.generate_project_tags
13
+ assert File.exists?(test_tags_file)
14
+ end
15
+
16
+ def test_generate_project_tags_for_src_path_only
17
+ generator(src_path: ["app", "lib"]).generate_project_tags
18
+ result = File.read(test_tags_file)
19
+ assert_match("method_of_class_1", result)
20
+ assert_match("method_of_class_2", result)
21
+ refute_match("method_of_class_3", result)
22
+ refute_match("Rake", result)
23
+ end
24
+
25
+ def test_generate_bundler_tags
26
+ generator.generate_bundler_tags
27
+ assert File.exists?(test_gems_tags_file)
28
+ result = File.read(test_gems_tags_file)
29
+ assert_match("Rake", result)
30
+ refute_match("method_of_class_1", result)
31
+ refute_match("method_of_class_2", result)
32
+ refute_match("method_of_class_3", result)
33
+ end
34
+
35
+ private
36
+
37
+ def generator(opts = {})
38
+ Guard::Ctags::Bundler::CtagsGenerator.new(opts)
39
+ end
40
+ end
@@ -0,0 +1,20 @@
1
+ require 'minitest/autorun'
2
+ require 'purdytest'
3
+
4
+ def test_project_path
5
+ File.expand_path("test_project", File.dirname(__FILE__))
6
+ end
7
+
8
+ def test_tags_file
9
+ File.join(test_project_path, "tags")
10
+ end
11
+
12
+ def test_gems_tags_file
13
+ File.join(test_project_path, "gems.tags")
14
+ end
15
+
16
+ def clean_tags
17
+ [test_tags_file, test_gems_tags_file].each do |file|
18
+ File.delete(file) if File.exists?(file)
19
+ end
20
+ end
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem "rake", :require => false
@@ -0,0 +1,4 @@
1
+ class Class1
2
+ def method_of_class_1
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ class Class2
2
+ def method_of_class_2
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ class Class3
2
+ def method_of_class_3
3
+ end
4
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: guard-ctags-bundler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,19 +9,56 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-02 00:00:00.000000000 Z
12
+ date: 2012-06-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: guard
16
- requirement: &7474100 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: 0.4.0
21
+ version: 1.0.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *7474100
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.0.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: minitest
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: purdytest
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
25
62
  description: ! 'Guard::CtagsBundler uses ctags utility and generates 2 files: tags
26
63
  -- with tags generated from project''s source tree and gems.tags -- with tags generated
27
64
  from rubygems from project''s bundle.'
@@ -38,8 +75,15 @@ files:
38
75
  - Rakefile
39
76
  - guard-ctags-bundler.gemspec
40
77
  - lib/guard/ctags-bundler.rb
78
+ - lib/guard/ctags-bundler/ctags_generator.rb
41
79
  - lib/guard/ctags-bundler/templates/Guardfile
42
80
  - lib/guard/ctags-bundler/version.rb
81
+ - test/ctags-bundler/ctags_generator_test.rb
82
+ - test/test_helper.rb
83
+ - test/test_project/Gemfile
84
+ - test/test_project/app/class1.rb
85
+ - test/test_project/lib/class2.rb
86
+ - test/test_project/vendor/class3.rb
43
87
  homepage: https://github.com/ivalkeen/guard-ctags-bundler
44
88
  licenses: []
45
89
  post_install_message:
@@ -52,15 +96,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
52
96
  - - ! '>='
53
97
  - !ruby/object:Gem::Version
54
98
  version: '0'
99
+ segments:
100
+ - 0
101
+ hash: 974875642901378133
55
102
  required_rubygems_version: !ruby/object:Gem::Requirement
56
103
  none: false
57
104
  requirements:
58
105
  - - ! '>='
59
106
  - !ruby/object:Gem::Version
60
107
  version: '0'
108
+ segments:
109
+ - 0
110
+ hash: 974875642901378133
61
111
  requirements: []
62
112
  rubyforge_project: guard-ctags-bundler
63
- rubygems_version: 1.8.17
113
+ rubygems_version: 1.8.23
64
114
  signing_key:
65
115
  specification_version: 3
66
116
  summary: Guard gem for generating ctags for project files and gems from project's