cocoadex 1.2 → 1.3

Sign up to get free protection for your applications and to get access to all the features.
data/bin/cocoadex CHANGED
@@ -10,35 +10,43 @@ include Cocoadex
10
10
 
11
11
  logger.error_level = Logger::ERROR
12
12
 
13
- main do |arg|
14
- if options[:verbose]
15
- logger.error_level = Logger::DEBUG
16
- end
17
-
18
- if options[:'load-docset'] and path = File.expand_path(options[:'load-docset'].first)
19
- Parser.parse(path)
20
- end
21
-
22
- if options[:search] and text = options[:search].first
13
+ main do |query|
14
+
15
+ logger.error_level = Logger::DEBUG if options[:verbose]
16
+
17
+ if options[:configure]
18
+ DocSetHelper.search_and_index
19
+ elsif options[:'load-docset']
20
+ paths = options[:'load-docset'].map do |p|
21
+ File.expand_path(p)
22
+ end.uniq
23
+ DocSetHelper.search_and_index(paths)
24
+ elsif query
23
25
  if Keyword.loaded?
24
26
  logger.debug "Loading index..."
25
27
  Keyword.read
26
- Cocoadex.search(text, options[:first])
28
+ Cocoadex.search(query, options[:first])
27
29
  else
28
- puts "No DocSets loaded"
30
+ puts "No DocSets loaded. Run `cocodex --configure` to search for existing DocSets."
29
31
  end
32
+ else
33
+ help_now! "No options or query specified"
30
34
  end
31
35
  end
32
36
 
33
37
  version Cocoadex::VERSION
34
38
  description 'A Class Reference Utility for Cocoa APIs'
35
39
 
40
+ arg :query, :optional
41
+
36
42
  on("--verbose","Be verbose")
43
+
44
+ on("--configure","Index all DocSets in default locations")
45
+
37
46
  on("--first","Load first result when multiple matches exist")
38
47
 
39
48
  on("-d DOCSET","--load-docset","Load a DocSet into the datastore",/^(.*)$/)
40
- on("-s QUERY","--search","Search the index",/^(.*)$/)
41
49
 
42
- # todo: support --platform, --platform-version, --language, --first, --force
50
+ # todo: support --platform, --platform-version, --format [format]
43
51
 
44
52
  go!
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env sh
2
+ #
3
+ # cocoadex_completion.sh
4
+ #
5
+ # Bash completion for Cocoa classes
6
+ # Install by adding the following to your .bash_profile:
7
+ #
8
+ # complete -C /path/to/cocoadex_completion.sh -o default cocoadex
9
+
10
+ /usr/bin/env ruby <<-EORUBY
11
+
12
+ require 'cocoadex'
13
+
14
+ class TagCompletion
15
+ def initialize(command)
16
+ @command = command
17
+ end
18
+
19
+ def matches
20
+ tags.select do |tag|
21
+ tag[0, typed.length] == typed
22
+ end
23
+ end
24
+
25
+ def typed
26
+ @command[/\s(.+?)$/, 1] || ''
27
+ end
28
+
29
+ def tags
30
+ @tags ||= Cocoadex::Keyword.tags
31
+ end
32
+ end
33
+
34
+ puts TagCompletion.new(ENV["COMP_LINE"]).matches
35
+
36
+ EORUBY
data/changelog.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.3
4
+
5
+ - Added `--configure` command, for finding and indexing
6
+ any docsets in preset default locations
7
+ - Search term is now an argument, so no need for `-s`
8
+ - Added example script for enabling bash completion on
9
+ class and method names
10
+ - Accept multiple arguments for the `--load-docset` option
11
+
3
12
  ## 1.2
4
13
 
5
14
  - Fix docset loading regression introduced in 1.1
@@ -0,0 +1,51 @@
1
+
2
+ module Cocoadex
3
+ class DocSetHelper
4
+
5
+ ROOT_PATHS = [
6
+ '~/Library/Developer/Documentation/DocSets',
7
+ '~/Library/Developer/Shared/Documentation/DocSets',
8
+ '/Applications/Xcode.app/Contents/Developer/Documentation/DocSets',
9
+ '/Applications/Xcode.app/Contents/Developer/Platforms/*/Developer/Documentation/DocSets'
10
+ ]
11
+
12
+ def self.data_path
13
+ Cocoadex.config_file("data/docsets.blob")
14
+ end
15
+
16
+ def self.docset_paths
17
+ @paths ||= begin
18
+ ROOT_PATHS.map { |path| Dir.glob(File.expand_path(path)+'/*/') }.flatten
19
+ end
20
+ end
21
+
22
+ def self.search_and_index paths=docset_paths
23
+ docsets = []
24
+ paths.map do |path|
25
+ if docset = Parser.parse(path)
26
+ docsets << docset
27
+ end
28
+ end
29
+
30
+ if docsets.size > 0
31
+ Keyword.write(:overwrite)
32
+ Keyword.generate_tags!
33
+ write(docsets)
34
+ end
35
+ logger.info "Done! #{docsets.size} DocSet#{docsets.size == 1 ? '':'s'} indexed."
36
+ end
37
+
38
+ def indexed_docsets
39
+ @docsets ||= Serializer.read(data_path)
40
+ end
41
+
42
+ def self.read
43
+ @docsets = Serializer.read(data_path)
44
+ end
45
+
46
+ def self.write docsets
47
+ @docsets = docsets
48
+ Serializer.write(data_path, docsets, :overwrite)
49
+ end
50
+ end
51
+ end
@@ -6,10 +6,6 @@ module Cocoadex
6
6
  attr_reader :term, :type, :docset, :url
7
7
  attr_accessor :fk, :id
8
8
 
9
- # Cache storage location
10
- DATA_PATH = File.expand_path("~/.cocoadex/data/store.blob")
11
-
12
- SEPARATOR = "--__--"
13
9
  CLASS_METHOD_DELIM = '+'
14
10
  INST_METHOD_DELIM = '-'
15
11
  CLASS_PROP_DELIM = '.'
@@ -19,15 +15,28 @@ module Cocoadex
19
15
  @store ||= []
20
16
  end
21
17
 
18
+ # Cache storage location
19
+ def self.data_path
20
+ Cocoadex.config_file("data/store.blob")
21
+ end
22
+
23
+ def self.tags_path
24
+ Cocoadex.config_file("tags")
25
+ end
26
+
22
27
  # Search the cache for matching text
23
28
  def self.find text
24
29
  if scope = SCOPE_CHARS.detect {|c| text.include? c }
25
30
  class_name, term = text.split(scope)
31
+ logger.debug "Searching scope: #{scope}, #{class_name}, #{term}"
26
32
  find_with_scope scope, class_name, term
27
33
  else
34
+ logger.debug "Searching Keyword datastore (#{datastore.size}): #{text}"
28
35
  keys = datastore.select {|k| k.term.start_with? text }
36
+ logger.debug "#{keys.size} keys found"
29
37
  if key = keys.detect {|k| k.term == text }
30
38
  keys = [key]
39
+ logger.debug "Exact match!"
31
40
  end
32
41
  untokenize(keys)
33
42
  end
@@ -53,30 +62,36 @@ module Cocoadex
53
62
 
54
63
  # Are any docsets loaded into the cache?
55
64
  def self.loaded?
56
- File.exists? DATA_PATH
65
+ File.exists? data_path
57
66
  end
58
67
 
59
68
  # Read a serialized cache file into an Array
60
69
  def self.read
61
- $/=SEPARATOR
62
- File.open(DATA_PATH, "r").each do |object|
63
- datastore << Marshal::load(object)
64
- end
70
+ @store = Serializer.read(data_path)
71
+ logger.debug "Loaded #{datastore.size} tokens"
65
72
  end
66
73
 
67
74
  # Write a cache Array as a serialized file
68
- def self.write
69
- unless File.exists? File.dirname(DATA_PATH)
70
- FileUtils.mkdir_p File.dirname(DATA_PATH)
71
- end
72
- File.open(DATA_PATH, "w") do |file|
73
- datastore.each do |keyword|
74
- file.print(Marshal.dump(keyword))
75
- file.print SEPARATOR
75
+ def self.write style
76
+ Serializer.write(data_path, datastore, style)
77
+ end
78
+
79
+ def self.tags
80
+ @tags ||= begin
81
+ if File.exists? tags_path
82
+ IO.read(tags_path).split('\n')
83
+ else
84
+ []
76
85
  end
77
86
  end
78
87
  end
79
88
 
89
+ # Build a tags file from existing kewords
90
+ def self.generate_tags!
91
+ text = datastore.map {|k| k.term }.join('\n')
92
+ Serializer.write_text tags_path, text
93
+ end
94
+
80
95
  # Create Cocoadex model objects for Keyword references
81
96
  def self.untokenize keys
82
97
  keys.map do |key|
@@ -86,6 +101,7 @@ module Cocoadex
86
101
  when :method, :property
87
102
  if class_key = datastore.detect {|k| k.id == key.fk}
88
103
  klass = Cocoadex::Class.new(class_key.url)
104
+ logger.debug "Searching #{key.type} list of #{klass.name}"
89
105
  list = key.type == :method ? klass.methods : klass.properties
90
106
  list.detect {|m| m.name == key.term}
91
107
  end
@@ -4,12 +4,12 @@ module Cocoadex
4
4
  attr_reader :platform, :version, :name, :description, :path
5
5
 
6
6
  def initialize plist_path
7
- @doc = Nokogiri::HTML(IO.read(plist_path))
7
+ doc = Nokogiri::HTML(IO.read(plist_path))
8
8
  @path = plist_path
9
- @name = plist_value 'CFBundleName'
10
- @platform = plist_value "DocSetPlatformFamily"
11
- @version = plist_value "DocSetPlatformVersion"
12
- @description = plist_value "DocSetDescription"
9
+ @name = plist_value doc, 'CFBundleName'
10
+ @platform = plist_value doc, "DocSetPlatformFamily"
11
+ @version = plist_value doc, "DocSetPlatformVersion"
12
+ @description = plist_value doc, "DocSetDescription"
13
13
  end
14
14
 
15
15
  def inspect
@@ -18,15 +18,15 @@ module Cocoadex
18
18
 
19
19
  private
20
20
 
21
- def plist_value key
22
- key_node = @doc.css("dict key").detect do |node|
21
+ def plist_value doc, key
22
+ key_node = doc.css("dict key").detect do |node|
23
23
  node.text == key
24
24
  end
25
25
 
26
26
  if key_node
27
27
  key_node.next.text
28
28
  else
29
- logger.iwarn "Node not found: #{key}"
29
+ logger.debug "Node not found: #{key}"
30
30
  nil
31
31
  end
32
32
  end
@@ -36,27 +36,26 @@ module Cocoadex
36
36
  @scope = type
37
37
  @name = node.css("h3.#{type}Method").first.text
38
38
  logger.debug("parsing #{@type} method #{@name}")
39
+
39
40
  @abstract = node.css(".abstract").first.text
40
41
  @declaration = node.css(".declaration").first.text
41
42
 
42
43
  decl_nodes = node.css(".declaredIn code.HeaderFile")
43
- if decl_nodes.size > 0
44
- @declared_in = decl_nodes.first.text
45
- end
44
+ @declared_in = decl_nodes.first.text if decl_nodes.size > 0
46
45
 
47
- if discussion_node = node.css(".discussion > p") and discussion_node.length > 0
48
- @discussion = discussion_node.first.text
49
- end
46
+ discussion_node = node.css(".discussion > p")
47
+ @discussion = discussion_node.first.text if discussion_node.length > 0
50
48
 
51
- if return_nodes = node.css(".return_value p") and return_nodes.size > 0
52
- @return_value = return_nodes.first.text
53
- end
49
+ return_nodes = node.css(".return_value p")
50
+ @return_value = return_nodes.first.text if return_nodes.size > 0
54
51
 
55
52
  ava_nodes = node.css(".availability > ul > li")
56
- if ava_nodes.size > 0
57
- @availability = ava_nodes.first.text
58
- end
53
+ @availability = ava_nodes.first.text if ava_nodes.size > 0
54
+
55
+ parse_parameters(node)
56
+ end
59
57
 
58
+ def parse_parameters node
60
59
  if parameters = node.css(".parameters") and parameters.length > 0
61
60
  @parameters = []
62
61
  parameters.first.css("dt").each do |param|
@@ -25,11 +25,15 @@ module Cocoadex
25
25
  title.include? "Class Reference" or title.include? "Protocol Reference"
26
26
  end
27
27
 
28
+ def self.deprecated? title
29
+ title =~ /^Deprecated ([A-Za-z]+) Methods$/
30
+ end
31
+
28
32
  def self.parse docset_path
29
- logger.info "Parsing docset tokens (This may take a moment)..."
30
33
  plist = File.join(docset_path,"Contents", "Info.plist")
31
34
  if File.exist? plist
32
35
  docset = DocSet.new(plist)
36
+ logger.info "Parsing docset tokens in #{docset.name}. This may take a moment..."
33
37
 
34
38
  files = Dir.glob(docset_path+"/**/*.html")
35
39
  files.reject! {|f| ignored?(f) }
@@ -37,8 +41,8 @@ module Cocoadex
37
41
  index_html(docset,f,i)
38
42
  end
39
43
 
40
- logger.info "Tokens Indexed: #{Keyword.datastore.size}"
41
- Keyword.write
44
+ logger.info " Tokens Indexed: #{Keyword.datastore.size}"
45
+ docset
42
46
  end
43
47
  end
44
48
 
@@ -51,7 +55,7 @@ module Cocoadex
51
55
  title = title_nodes.first['content']
52
56
 
53
57
  if class_ref? title
54
- # logger.info "Caching #{title}"
58
+ logger.debug "Caching #{title}"
55
59
  Keyword.tokenize_class docset.name, path, index
56
60
  end
57
61
  end
@@ -0,0 +1,49 @@
1
+
2
+ module Cocoadex
3
+ class Serializer
4
+ SEPARATOR = "--__--"
5
+
6
+ # Read a serialized cache file into an Array
7
+ def self.read path
8
+ $/=SEPARATOR
9
+ array = []
10
+ File.open(path, "r").each do |object|
11
+ array << Marshal::load(object)
12
+ end
13
+ array
14
+ end
15
+
16
+ def self.check_path path
17
+ unless File.exists? File.dirname(path)
18
+ FileUtils.mkdir_p File.dirname(path)
19
+ end
20
+ end
21
+
22
+ # Write text to a file
23
+ def self.write_text path, text
24
+ check_path path
25
+ File.open(path, 'w') do |file|
26
+ file.print text
27
+ end
28
+ end
29
+
30
+ # Write a cache Array as a serialized file
31
+ def self.write path, array, style
32
+ check_path path
33
+
34
+ mode = case style
35
+ when :append then 'a'
36
+ when :overwrite then 'w'
37
+ else
38
+ raise "Unknown file mode: #{style}"
39
+ end
40
+
41
+ File.open(path, mode) do |file|
42
+ array.each do |object|
43
+ file.print(Marshal.dump(object))
44
+ file.print SEPARATOR
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -1,3 +1,3 @@
1
1
  module Cocoadex
2
- VERSION = "1.2"
2
+ VERSION = "1.3"
3
3
  end
data/lib/cocoadex.rb CHANGED
@@ -1,6 +1,8 @@
1
1
 
2
2
  require 'erb'
3
3
  require 'bri'
4
+ require 'cocoadex/docset_helper'
5
+ require 'cocoadex/serializer'
4
6
  require 'cocoadex/version'
5
7
  require 'cocoadex/templates'
6
8
  require 'cocoadex/models/docset'
@@ -19,6 +21,8 @@ module Cocoadex
19
21
 
20
22
  DEFAULT_WIDTH = 72
21
23
 
24
+ CONFIG_DIR=File.expand_path("~/.cocoadex")
25
+
22
26
  # output documentation text for a given search term
23
27
  def self.search term, load_first=false
24
28
  term = term.strip
@@ -44,6 +48,11 @@ module Cocoadex
44
48
  @width = width
45
49
  end
46
50
 
51
+ # path to a file in the default configuration directory
52
+ def self.config_file subpath
53
+ File.expand_path(File.join(Cocoadex::CONFIG_DIR,subpath))
54
+ end
55
+
47
56
  # add leading whitespace to lines
48
57
  def self.indent text, level=2
49
58
  text.split("\n").collect {|row| "#{' '*level}#{row}"}.join("\n" )
data/readme.md CHANGED
@@ -4,24 +4,53 @@ Documentation lookup for Cocoa APIs, in the spirit of RI
4
4
 
5
5
  Cocoadex parses Cocoa documentation files and creates a keyword index. Queries can then be run against the index for fast documentation lookup.
6
6
 
7
+ [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/kattrali/cocoadex)
8
+
9
+
7
10
  ## Installation
8
11
 
9
12
  gem install cocoadex
10
13
 
14
+ ## Configuration
15
+
16
+ Load any DocSets in known locations:
17
+
18
+ cocoadex --configure
19
+
11
20
  ## Usage
12
21
 
13
- - **View Options:** `cocoadex --help`
22
+ ### View Options
23
+
24
+ cocoadex --help
25
+
26
+
27
+ ### Loading a Custom DocSet
28
+
29
+ cocoadex --load-docset [path] --load-docset [path2] ...
30
+
31
+
32
+ ### Look up Documentation
33
+
34
+ cocoadex [query]
35
+
36
+ Valid search terms are Class, method, and property names. Search scope can also be focused using delimiters, such as `ClassName-method` to find instance methods, `Class+method` to find class methods, or `Class.method` to find any matching method or property in `Class`.
37
+
38
+
39
+ ## Enabling Tab Completion
40
+
41
+ Cocoadex generates a tags file of all indexed search terms during configuration. Enable tab completion for bash by linking/saving `bin/cocoadex_completion.sh` and adding the following to your .bash_profile (or similar):
42
+
43
+ complete -C /path/to/cocoadex_completion.sh -o default cocoadex
14
44
 
15
- - **Loading a DocSet:** `cocoadex --load-docset [path]` (Try `~/Library/Developer/Shared/Documentation/DocSets/[docset name]`)
16
45
 
17
- - **Look up Documentation:** `cocoadex --search [query]`
18
- - Valid search terms are Class, method, and property names. Search scope can also be focused using delimiters, such as `ClassName-method` to find instance methods, `Class+method` to find class methods, or `Class.method` to find any matching method or property in `Class`.
46
+ I wish I knew how to get this working with zsh too.
19
47
 
48
+ ## Example Output
20
49
 
21
- *Property Lookup Example*
50
+ ### Property Lookup Example
22
51
 
23
52
  <pre>
24
- $ cocoadex -s tableView
53
+ $ cocoadex tableView
25
54
 
26
55
  -------------------------------------------------------------- tableView
27
56
  (UITableViewController)
@@ -34,10 +63,10 @@ Available in iOS 2.0 and later.
34
63
  </pre>
35
64
 
36
65
 
37
- *Method Lookup Example*
66
+ ### Method Lookup Example
38
67
 
39
68
  <pre>
40
- $ cocoadex -s tableView:viewForFoo
69
+ $ cocoadex tableView:viewForFoo
41
70
 
42
71
  -------------------------------------- tableView:viewForFooterInSection:
43
72
  (UITableViewDelegate)
@@ -60,10 +89,10 @@ Parameters:
60
89
  Available in iOS 2.0 and later.
61
90
  </pre>
62
91
 
63
- *Class Lookup Example (Clipped for brevity)*
92
+ ### Class Lookup Example (Clipped for brevity)
64
93
 
65
94
  <pre>
66
- $ cocoadex -s UILabel
95
+ $ cocoadex UILabel
67
96
 
68
97
  --------------------------------------------------------- Class: UILabel
69
98
  (UIView > UIResponder > NSObject)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoadex
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.2'
4
+ version: '1.3'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-19 00:00:00.000000000 -04:00
13
- default_executable:
12
+ date: 2012-07-20 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: rdoc
17
- requirement: &10672660 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
18
17
  none: false
19
18
  requirements:
20
19
  - - ! '>='
@@ -22,10 +21,15 @@ dependencies:
22
21
  version: '0'
23
22
  type: :development
24
23
  prerelease: false
25
- version_requirements: *10672660
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
26
30
  - !ruby/object:Gem::Dependency
27
31
  name: rake
28
- requirement: &10672100 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
29
33
  none: false
30
34
  requirements:
31
35
  - - ~>
@@ -33,10 +37,15 @@ dependencies:
33
37
  version: 0.9.2
34
38
  type: :development
35
39
  prerelease: false
36
- version_requirements: *10672100
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.9.2
37
46
  - !ruby/object:Gem::Dependency
38
47
  name: methadone
39
- requirement: &10671500 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
40
49
  none: false
41
50
  requirements:
42
51
  - - ~>
@@ -44,10 +53,15 @@ dependencies:
44
53
  version: 1.2.1
45
54
  type: :runtime
46
55
  prerelease: false
47
- version_requirements: *10671500
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 1.2.1
48
62
  - !ruby/object:Gem::Dependency
49
63
  name: term-ansicolor
50
- requirement: &10671060 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
51
65
  none: false
52
66
  requirements:
53
67
  - - ! '>='
@@ -55,10 +69,15 @@ dependencies:
55
69
  version: '0'
56
70
  type: :runtime
57
71
  prerelease: false
58
- version_requirements: *10671060
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
59
78
  - !ruby/object:Gem::Dependency
60
79
  name: bri
61
- requirement: &10670580 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
62
81
  none: false
63
82
  requirements:
64
83
  - - ! '>='
@@ -66,10 +85,15 @@ dependencies:
66
85
  version: '0'
67
86
  type: :runtime
68
87
  prerelease: false
69
- version_requirements: *10670580
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
70
94
  - !ruby/object:Gem::Dependency
71
95
  name: nokogiri
72
- requirement: &10670020 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
73
97
  none: false
74
98
  requirements:
75
99
  - - ! '>='
@@ -77,12 +101,18 @@ dependencies:
77
101
  version: '0'
78
102
  type: :runtime
79
103
  prerelease: false
80
- version_requirements: *10670020
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
81
110
  description: A command-line class reference utility Cocoa APIs
82
111
  email:
83
112
  - iskanamagus@gmail.com
84
113
  executables:
85
114
  - cocoadex
115
+ - cocoadex_completion.sh
86
116
  extensions: []
87
117
  extra_rdoc_files:
88
118
  - readme.md
@@ -94,9 +124,12 @@ files:
94
124
  - changelog.md
95
125
  - readme.md
96
126
  - bin/cocoadex
127
+ - bin/cocoadex_completion.sh
97
128
  - lib/cocoadex.rb
129
+ - lib/cocoadex/docset_helper.rb
98
130
  - lib/cocoadex/keyword.rb
99
131
  - lib/cocoadex/parser.rb
132
+ - lib/cocoadex/serializer.rb
100
133
  - lib/cocoadex/templates.rb
101
134
  - lib/cocoadex/version.rb
102
135
  - lib/cocoadex/models/class.rb
@@ -106,7 +139,6 @@ files:
106
139
  - lib/cocoadex/models/method.rb
107
140
  - lib/cocoadex/models/property.rb
108
141
  - lib/ext/nil.rb
109
- has_rdoc: true
110
142
  homepage: http://kattrali.github.com/cocoadex
111
143
  licenses: []
112
144
  post_install_message:
@@ -127,7 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
159
  version: '0'
128
160
  requirements: []
129
161
  rubyforge_project:
130
- rubygems_version: 1.6.2
162
+ rubygems_version: 1.8.24
131
163
  signing_key:
132
164
  specification_version: 3
133
165
  summary: A command-line class reference utility for Cocoa APIs, based on RI.