CoffeeTags 0.0.1.1

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 ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
@@ -0,0 +1,20 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "CoffeeTags/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "CoffeeTags"
7
+ s.version = Coffeetags::VERSION
8
+ s.authors = ["Łukasz Korecki"]
9
+ s.email = ["lukasz@coffeesounds.com"]
10
+ s.homepage = "http://github.com/lukaszkorecki/CoffeeTags"
11
+ s.summary = %q{Simple tags generator for CoffeeScript}
12
+ s.description = %q{CoffeeTags generates tag file for use with TagBar.vim}
13
+
14
+ s.rubyforge_project = "CoffeeTags"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+ end
data/Gemfile ADDED
@@ -0,0 +1,18 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'rake'
4
+ # Specify your gem's dependencies in CoffeeTags.gemspec
5
+ gemspec
6
+
7
+ group :development do
8
+ gem 'guard'
9
+ gem 'growl'
10
+ gem 'guard-rspec'
11
+
12
+ # osx
13
+ gem 'rb-fsevent'
14
+ end
15
+
16
+ group :test do
17
+ gem 'rspec', '~> 2.6.0'
18
+ end
data/Guardfile ADDED
@@ -0,0 +1,6 @@
1
+ guard 'rspec', :version => 2, :bundler => true, :cli => ' --color', :all_on_start => false do
2
+ watch(%r{^spec/(.*).rb$}) { |m| m[0] }
3
+ watch(%r{^lib/(.*).rb$}) do |m|
4
+ "spec/#{m[0].split('/').last.split('.').first}_spec.rb"
5
+ end
6
+ end
data/README.md ADDED
@@ -0,0 +1,15 @@
1
+ # CoffeeTags
2
+
3
+ A tiny, simple tool for generating tags (Ctags compatible ) for use with Vim + [TagBar plugin](https://github.com/majutsushi/tagbar)
4
+
5
+ It might work with other plugins/editors which can use Ctags (such as Emacs or
6
+ TagList for Vim).
7
+
8
+
9
+ # Installation
10
+
11
+ `gem install CoffeeTags` (when it's released :-))
12
+
13
+ # TODO
14
+
15
+ - squash all bugs
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
data/bin/coffeetags ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require 'CoffeeTags'
3
+
4
+ Coffeetags::Utils.option_parser ARGV
data/lib/CoffeeTags.rb ADDED
@@ -0,0 +1,73 @@
1
+ # encoding: utf-8
2
+ require "CoffeeTags/version"
3
+ require "CoffeeTags/parser"
4
+ require "CoffeeTags/formatter"
5
+
6
+ class Object
7
+ def blank?
8
+ if self.respond_to? :"empty?"
9
+ self.nil? or self.empty?
10
+ else
11
+ self.nil?
12
+ end
13
+ end
14
+ end
15
+
16
+ module Coffeetags
17
+ AUTHOR = "Łukasz Korecki /lukasz@coffeesounds.com/"
18
+ NAME = "CoffeeTags"
19
+ URL = "https://github.com/lukaszkorecki/CoffeeTags"
20
+ TAGBAR_COFFEE_CONF = <<-CONF
21
+ let g:tagbar_type_coffee = {
22
+ \\ 'kinds' : [
23
+ \\ 'f:functions',
24
+ \\ 'o:object'
25
+ \\ ],
26
+ \\ 'kind2scope' : {
27
+ \\ 'f' : 'object',
28
+ \\ 'o' : 'object'
29
+ \\},
30
+ \\ 'sro' : ".",
31
+ \\ 'ctagsbin' : 'coffeetags',
32
+ \\ 'ctagsargs' : '',
33
+ \\}
34
+ CONF
35
+
36
+ class Utils
37
+
38
+ def self.option_parser args
39
+ puts "no args!" and return if args.empty?
40
+ case args.first
41
+ when /version/
42
+ STDOUT << Coffeetags::VERSION
43
+ when 'help'
44
+ STDOUT << 'coffeetags [version|vim_conf] or path to a coffeescript file'
45
+ when /vim_conf/
46
+ puts <<-HELP
47
+ " Add this type definition to your vimrc
48
+ " or do
49
+ " coffeetags vim_conf >> <PATH TO YOUR VIMRC>
50
+ HELP
51
+ puts Coffeetags::TAGBAR_COFFEE_CONF
52
+ else
53
+ self.run args
54
+ end
55
+
56
+ end
57
+
58
+ def self.run files
59
+ files.each do |file|
60
+ sc = File.read file
61
+
62
+ parser = Coffeetags::Parser.new sc
63
+ parser.execute!
64
+
65
+ formatter = Coffeetags::Formatter.new file, parser.tree
66
+
67
+ formatter.parse_tree
68
+
69
+ STDOUT << formatter.to_file
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,63 @@
1
+ module Coffeetags
2
+ class Formatter
3
+ def initialize file, tree =[]
4
+ @file = file
5
+ @tree = tree
6
+
7
+ @header = [
8
+ "!_TAG_FILE_FORMAT 2 /extended format/",
9
+ "!_TAG_FILE_SORTED 0 /0=unsorted, 1=sorted, 2=foldcase/",
10
+ "!_TAG_PROGRAM_AUTHOR #{Coffeetags::AUTHOR}",
11
+ "!_TAG_PROGRAM_NAME #{Coffeetags::NAME} //",
12
+ "!_TAG_PROGRAM_URL #{Coffeetags::URL} /GitHub repository/",
13
+ "!_TAG_PROGRAM_VERSION #{Coffeetags::VERSION} //"
14
+ ]
15
+
16
+ @types = {
17
+ 'f' => 'type:function',
18
+ 'c' => 'type:class',
19
+ 'v' => 'type:var'
20
+ }
21
+ end
22
+
23
+ def regex_line line
24
+ "/^#{line}$/;\""
25
+ end
26
+
27
+ def line_to_string entry
28
+ namespace = (entry[:parent].blank?) ? entry[:name]: entry[:parent]
29
+ namespace = namespace == entry[:name] ? '' : "object:#{namespace}"
30
+
31
+ [
32
+ entry[:name],
33
+ @file,
34
+ regex_line(entry[:source]),
35
+ entry[:kind],
36
+ "lineno:#{entry[:line]}",
37
+ namespace,
38
+ @types[entry[:kind]]
39
+ ].join("\t")
40
+ end
41
+
42
+ def parse_tree
43
+ @lines = @tree.map do | content|
44
+ line_to_string content if content[:kind] == 'f'
45
+ end.reject{|l| l.nil? }
46
+ end
47
+
48
+ def to_file
49
+ str = ""
50
+ @header.each do |header|
51
+ str << header
52
+ str << "\n"
53
+ end
54
+
55
+ @lines.each do |line|
56
+ str << line
57
+ str << "\n"
58
+ end
59
+
60
+ str
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,77 @@
1
+ require 'yaml'
2
+ module Coffeetags
3
+ class Parser
4
+ attr_reader :tree
5
+ def initialize source
6
+ @source = source
7
+
8
+ # tree maps the ... tree :-)
9
+ @tree = []
10
+
11
+ # regexes
12
+ @class_regex = /^[ \t]*class\s*(\w*)/
13
+ @var_regex = /([@a-zA-Z0-9_]*)[ \t]*[=:][ \t]*$/
14
+ @token_regex = /[ \t]*([@a-zA-Z0-9_]*)[ \t]*[:=]/
15
+ end
16
+
17
+ def line_level line
18
+ line.match(/^[ \t]*/)[0].gsub("\t", " ").split('').length
19
+ end
20
+
21
+ def scope_path _el = nil, _tree = nil
22
+ bf = []
23
+ tree = (_tree || @tree)
24
+ element = (_el || tree.last)
25
+ idx = tree.index(element) || -1
26
+
27
+ current_level = element[:level]
28
+ tree[0..idx].reverse.each do |_el|
29
+ # uhmmmmmm
30
+ if _el[:level] != current_level and _el[:level] < current_level
31
+ bf << _el[:name]
32
+ current_level = _el[:level]
33
+ end
34
+ end
35
+ bf.uniq.reverse.join('.')
36
+
37
+ end
38
+
39
+ def execute!
40
+ line_n = 0
41
+ level = 0
42
+ sc = '__top__'
43
+ # indentify scopes
44
+ @source.each_line do |line|
45
+ line_n += 1
46
+ level = line_level line
47
+
48
+ if (_class = line.match @class_regex)
49
+ @tree << {
50
+ :name => _class[1], :level => level
51
+ }
52
+ end
53
+
54
+ if(var = line.match @var_regex)
55
+ @tree << {
56
+ :name => var[1], :level => level
57
+ }
58
+ end
59
+
60
+ token = line.match @token_regex
61
+ if not token.nil? and line =~ /-\>/
62
+ o = {
63
+ :name => token[1],
64
+ :level => level,
65
+ :parent => '',
66
+ :source => line.chomp,
67
+ :kind => 'f',
68
+ :line => line_n
69
+ }
70
+ o[:parent] = scope_path o
71
+ @tree << o
72
+ end
73
+ @tree.uniq!
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,4 @@
1
+ # encoding: utf-8
2
+ module Coffeetags
3
+ VERSION = "0.0.1.1"
4
+ end
@@ -0,0 +1,45 @@
1
+ # this example is not complete, but shows how to
2
+ # implement an API client using Request class
3
+ class Campfire
4
+
5
+ # @api_key - Campfire API keys
6
+ # @host - your campifre host, for example if you're using trololo.campfirenow.com, then host is 'trololo
7
+ constructor: (api_key, host) ->
8
+ @url = "https://#{host}.campfirenow.com/"
9
+ @auth = { 'username' : api_key, 'password' : 'X'}
10
+ @headers = { 'Content-Type' : 'application/json' }
11
+
12
+ # private function used for parsing JSON responses
13
+ handlers: (callbacks) ->
14
+ resp =
15
+ onSuccess : (response) ->
16
+ try
17
+ obj = JSON.parse(response.responseText)
18
+ catch error
19
+ console.dir(error)
20
+ callbacks.onFailure(error)
21
+ callbacks.onSuccess(obj)
22
+
23
+ onFailure: (response) ->
24
+ console.dir(response)
25
+ callbacks.onFailure(response)
26
+
27
+ # get list of rooms
28
+ rooms: (callbacks) ->
29
+ new Request(@url, @headers, @auth).get 'rooms.json', this.handlers(callbacks)
30
+
31
+ # get information about a room
32
+ # @id - room id
33
+ roomInfo: (id, callbacks) ->
34
+ new Request(@url, @headers, @auth).get "room/#{id}.json", this.handlers(callbacks)
35
+
36
+ # get latest messages and events from a room
37
+ # @id - room id
38
+ # @since - optional since id parameter
39
+ recent: (id, since, callbacks) ->
40
+ url = "room/#{id}/recent.json"
41
+ url += "?since_message_id=#{since}" if since
42
+ new Request(@url, @headers, @auth).get url, this.handlers(callbacks)
43
+
44
+ class Test
45
+ bump : ->
@@ -0,0 +1,49 @@
1
+ (function() {
2
+ var Campfire;
3
+ window.Campfire = Campfire = (function() {
4
+ function Campfire(api_key, host) {
5
+ this.url = "https://" + host + ".campfirenow.com/";
6
+ this.auth = {
7
+ 'username': api_key,
8
+ 'password': 'X'
9
+ };
10
+ this.headers = {
11
+ 'Content-Type': 'application/json'
12
+ };
13
+ }
14
+ Campfire.prototype.handlers = function(callbacks) {
15
+ var resp;
16
+ return resp = {
17
+ onSuccess: function(response) {
18
+ var obj;
19
+ try {
20
+ obj = JSON.parse(response.responseText);
21
+ } catch (error) {
22
+ console.dir(error);
23
+ callbacks.onFailure(error);
24
+ }
25
+ return callbacks.onSuccess(obj);
26
+ },
27
+ onFailure: function(response) {
28
+ console.dir(response);
29
+ return callbacks.onFailure(response);
30
+ }
31
+ };
32
+ };
33
+ Campfire.prototype.rooms = function(callbacks) {
34
+ return new Request(this.url, this.headers, this.auth).get('rooms.json', this.handlers(callbacks));
35
+ };
36
+ Campfire.prototype.roomInfo = function(id, callbacks) {
37
+ return new Request(this.url, this.headers, this.auth).get("room/" + id + ".json", this.handlers(callbacks));
38
+ };
39
+ Campfire.prototype.recent = function(id, since, callbacks) {
40
+ var url;
41
+ url = "room/" + id + "/recent.json";
42
+ if (since) {
43
+ url += "?since_message_id=" + since;
44
+ }
45
+ return new Request(this.url, this.headers, this.auth).get(url, this.handlers(callbacks));
46
+ };
47
+ return Campfire;
48
+ })();
49
+ }).call(this);
@@ -0,0 +1,13 @@
1
+ !_TAG_FILE_FORMAT 2 /extended format/
2
+ !_TAG_FILE_SORTED 0 /0=unsorted, 1=sorted, 2=foldcase/
3
+ !_TAG_PROGRAM_AUTHOR Patrick Walton /pwalton@mozilla.com/
4
+ !_TAG_PROGRAM_NAME jsctags //
5
+ !_TAG_PROGRAM_URL http://github.com/pcwalton/jsctags /GitHub repository/
6
+ !_TAG_PROGRAM_VERSION 0.1 //
7
+ Campfire examples/campfire.js /^ function Campfire(api_key, host) {$/;" f lineno:4 type:void function(any, any)
8
+ constructor examples/campfire.js /^ function Campfire(api_key, host) {$/;" f lineno:4 namespace:Campfire.prototype type:void function(any, any)
9
+ handlers examples/campfire.js /^ Campfire.prototype.handlers = function(callbacks) {$/;" f lineno:14 namespace:Campfire.prototype type:Object function(any)
10
+ prototype examples/campfire.js /^ Campfire.prototype.handlers = function(callbacks) {$/;" v lineno:14 namespace:Campfire type:Campfire
11
+ rooms examples/campfire.js /^ Campfire.prototype.rooms = function(callbacks) {$/;" f lineno:33 namespace:Campfire.prototype type:any function(any)
12
+ roomInfo examples/campfire.js /^ Campfire.prototype.roomInfo = function(id, callbacks) {$/;" f lineno:36 namespace:Campfire.prototype type:any function(any, any)
13
+ recent examples/campfire.js /^ Campfire.prototype.recent = function(id, since, callbacks) {$/;" f lineno:39 namespace:Campfire.prototype type:any function(any, any, any)
@@ -0,0 +1,13 @@
1
+ bump = (wat) ->
2
+ v = 'test'
3
+
4
+ Wat =
5
+ ho : (x) ->
6
+ x = 'o'
7
+ console.log 'ahhhh'
8
+ @lolWat =
9
+ bump : ->
10
+ console.log 'bump'
11
+ bump_up : ->
12
+ console.log 'bump up'
13
+ @BOOO__up = -> z()
@@ -0,0 +1,35 @@
1
+ ---
2
+ - :source: bump = (wat) ->
3
+ :parent: ""
4
+ :kind: f
5
+ :name: bump
6
+ :line: 1
7
+ :level: 0
8
+ - :name: Wat
9
+ :level: 0
10
+ - :source: " ho : (x) ->"
11
+ :parent: Wat
12
+ :kind: f
13
+ :name: ho
14
+ :line: 5
15
+ :level: 2
16
+ - :name: '@lolWat'
17
+ :level: 4
18
+ - :source: " bump : ->"
19
+ :parent: 'Wat.ho.@lolWat'
20
+ :kind: f
21
+ :name: bump
22
+ :line: 9
23
+ :level: 6
24
+ - :source: " bump_up : ->"
25
+ :parent: 'Wat.ho.@lolWat'
26
+ :kind: f
27
+ :name: bump_up
28
+ :line: 11
29
+ :level: 6
30
+ - :source: " @BOOO__up = -> z()"
31
+ :parent: Wat.ho
32
+ :kind: f
33
+ :name: '@BOOO__up'
34
+ :line: 13
35
+ :level: 4
@@ -0,0 +1,55 @@
1
+ ---
2
+ - :name: Campfire
3
+ :level: 0
4
+ - :parent: Campfire
5
+ :name: constructor
6
+ :line: 7
7
+ :kind: f
8
+ :source: " constructor: (api_key, host) ->"
9
+ :level: 2
10
+ - :parent: Campfire
11
+ :name: handlers
12
+ :line: 13
13
+ :kind: f
14
+ :source: ' handlers: (callbacks) ->'
15
+ :level: 2
16
+ - :name: resp
17
+ :level: 4
18
+ - :parent: Campfire.handlers.resp
19
+ :name: onSuccess
20
+ :line: 15
21
+ :kind: f
22
+ :source: ' onSuccess : (response) ->'
23
+ :level: 6
24
+ - :parent: Campfire.handlers.resp
25
+ :name: onFailure
26
+ :line: 23
27
+ :kind: f
28
+ :source: ' onFailure: (response) ->'
29
+ :level: 6
30
+ - :parent: Campfire
31
+ :name: rooms
32
+ :line: 28
33
+ :kind: f
34
+ :source: ' rooms: (callbacks) ->'
35
+ :level: 2
36
+ - :parent: Campfire
37
+ :name: roomInfo
38
+ :line: 33
39
+ :kind: f
40
+ :source: ' roomInfo: (id, callbacks) ->'
41
+ :level: 2
42
+ - :parent: Campfire
43
+ :name: recent
44
+ :line: 39
45
+ :kind: f
46
+ :source: ' recent: (id, since, callbacks) ->'
47
+ :level: 2
48
+ - :name: Test
49
+ :level: 0
50
+ - :parent: Test
51
+ :name: bump
52
+ :line: 45
53
+ :kind: f
54
+ :source: ' bump : ->'
55
+ :level: 2
@@ -0,0 +1,26 @@
1
+ require './lib/CoffeeTags'
2
+
3
+ describe 'CoffeeTags::Formatter' do
4
+ before :each do
5
+ @tree = YAML::load_file './spec/fixtures/tree.yaml'
6
+ end
7
+
8
+ it "works!" do
9
+ lambda { Coffeetags::Formatter.new 'lol.coffee' }.should_not raise_exception
10
+ end
11
+
12
+ before :each do
13
+ @instance = Coffeetags::Formatter.new 'test.coffee', @tree
14
+ end
15
+
16
+ it "generates a line for method definition" do
17
+ exp = 'constructor test.coffee /^ constructor: (api_key, host) ->$/;" f lineno:7 object:Campfire type:function'
18
+ @instance.parse_tree.first.should == exp
19
+ end
20
+
21
+ it "generates line for second class" do
22
+ exp = 'bump test.coffee /^ bump : ->$/;" f lineno:45 object:Test type:function'
23
+ @instance.parse_tree.last.should == exp
24
+ end
25
+
26
+ end
@@ -0,0 +1,86 @@
1
+ require './lib/CoffeeTags'
2
+ describe 'CoffeeTags::Parser' do
3
+ before :all do
4
+ @campfire_class = File.read File.expand_path('./spec/fixtures/campfire.coffee')
5
+ @test_file = File.read File.expand_path('./spec/fixtures/test.coffee')
6
+ @test_tree = YAML::load_file File.expand_path('./spec/fixtures/test_tree.yaml')
7
+ @cf_tree = YAML::load_file File.expand_path('./spec/fixtures/tree.yaml')
8
+
9
+ end
10
+
11
+ it "should work" do
12
+ lambda { Coffeetags::Parser.new "\n" }.should_not raise_exception
13
+ end
14
+
15
+
16
+ context 'detect item level' do
17
+ before :each do
18
+ @parser = Coffeetags::Parser.new ''
19
+ end
20
+
21
+ it 'gets level from a string with no indent' do
22
+ @parser.line_level("zooo").should == 0
23
+ end
24
+
25
+ it "gets level from spaces" do
26
+ @parser.line_level(" def lol").should == 4
27
+ end
28
+
29
+ it "gets level from tabs" do
30
+ @parser.line_level("\t\t\tdef lol").should == 3
31
+ end
32
+ end
33
+
34
+
35
+ context "Creating scope path" do
36
+ before(:each) do
37
+ @parser = Coffeetags::Parser.new ''
38
+ end
39
+ it 'gets the scope path for first function' do
40
+ @parser.scope_path(@cf_tree[1], @cf_tree[0...1] ).should == 'Campfire'
41
+ end
42
+
43
+ it 'gets the scope path for second function' do
44
+ @parser.scope_path(@cf_tree[2], @cf_tree[0..1] ).should == 'Campfire'
45
+ end
46
+
47
+ it "gets the scope for nested function" do
48
+ @parser.scope_path(@cf_tree[4], @cf_tree[0..3]).should == 'Campfire.handlers.resp'
49
+ end
50
+
51
+ it "gets the scope of a function which comes after nested function" do
52
+
53
+ @parser.scope_path(@cf_tree[6], @cf_tree[0..5]).should == 'Campfire'
54
+ end
55
+
56
+ it 'gets scope for last method defined in diff class' do
57
+ @parser.scope_path(@cf_tree.last, @cf_tree).should == 'Test'
58
+ end
59
+ end
60
+
61
+ context 'Parsing' do
62
+ context 'Scoping' do
63
+ before(:each) do
64
+ @coffee_parser = Coffeetags::Parser.new @campfire_class
65
+ @test_parser = Coffeetags::Parser.new @test_file
66
+ end
67
+
68
+ it "generates the scope list" do
69
+ @coffee_parser.execute!
70
+ @coffee_parser.tree.should == @cf_tree
71
+ end
72
+ end
73
+ end
74
+
75
+ context 'Test.coffee parsing' do
76
+ before(:each) do
77
+ @parser_test = Coffeetags::Parser.new @test_file
78
+ @parser_test.execute!
79
+ end
80
+
81
+ it "generates the tree for test.coffee" do
82
+ @parser_test.tree.should == @test_tree
83
+ end
84
+
85
+ end
86
+ end
data/test.rb ADDED
@@ -0,0 +1,4 @@
1
+ require './lib/CoffeeTags'
2
+ require 'yaml'
3
+
4
+ Coffeetags::Utils.option_parser ARGV
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: CoffeeTags
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Łukasz Korecki
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-09-22 00:00:00.000000000Z
13
+ dependencies: []
14
+ description: CoffeeTags generates tag file for use with TagBar.vim
15
+ email:
16
+ - lukasz@coffeesounds.com
17
+ executables:
18
+ - coffeetags
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - .gitignore
23
+ - CoffeeTags.gemspec
24
+ - Gemfile
25
+ - Guardfile
26
+ - README.md
27
+ - Rakefile
28
+ - bin/coffeetags
29
+ - lib/CoffeeTags.rb
30
+ - lib/CoffeeTags/formatter.rb
31
+ - lib/CoffeeTags/parser.rb
32
+ - lib/CoffeeTags/version.rb
33
+ - spec/fixtures/campfire.coffee
34
+ - spec/fixtures/campfire.js
35
+ - spec/fixtures/campfire.js.tags
36
+ - spec/fixtures/test.coffee
37
+ - spec/fixtures/test_tree.yaml
38
+ - spec/fixtures/tree.yaml
39
+ - spec/formatter_spec.rb
40
+ - spec/parser_spec.rb
41
+ - test.rb
42
+ homepage: http://github.com/lukaszkorecki/CoffeeTags
43
+ licenses: []
44
+ post_install_message:
45
+ rdoc_options: []
46
+ require_paths:
47
+ - lib
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ segments:
55
+ - 0
56
+ hash: 2103132400043761592
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ segments:
64
+ - 0
65
+ hash: 2103132400043761592
66
+ requirements: []
67
+ rubyforge_project: CoffeeTags
68
+ rubygems_version: 1.8.10
69
+ signing_key:
70
+ specification_version: 3
71
+ summary: Simple tags generator for CoffeeScript
72
+ test_files:
73
+ - spec/fixtures/campfire.coffee
74
+ - spec/fixtures/campfire.js
75
+ - spec/fixtures/campfire.js.tags
76
+ - spec/fixtures/test.coffee
77
+ - spec/fixtures/test_tree.yaml
78
+ - spec/fixtures/tree.yaml
79
+ - spec/formatter_spec.rb
80
+ - spec/parser_spec.rb