cocoadex 1.2 → 1.3

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/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.