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 +22 -14
- data/bin/cocoadex_completion.sh +36 -0
- data/changelog.md +9 -0
- data/lib/cocoadex/docset_helper.rb +51 -0
- data/lib/cocoadex/keyword.rb +33 -17
- data/lib/cocoadex/models/docset.rb +8 -8
- data/lib/cocoadex/models/method.rb +11 -12
- data/lib/cocoadex/parser.rb +8 -4
- data/lib/cocoadex/serializer.rb +49 -0
- data/lib/cocoadex/version.rb +1 -1
- data/lib/cocoadex.rb +9 -0
- data/readme.md +39 -10
- metadata +49 -17
data/bin/cocoadex
CHANGED
@@ -10,35 +10,43 @@ include Cocoadex
|
|
10
10
|
|
11
11
|
logger.error_level = Logger::ERROR
|
12
12
|
|
13
|
-
main do |
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
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(
|
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, --
|
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
|
data/lib/cocoadex/keyword.rb
CHANGED
@@ -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?
|
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
|
-
|
62
|
-
|
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
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
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
|
-
|
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 =
|
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.
|
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
|
-
|
48
|
-
|
49
|
-
end
|
46
|
+
discussion_node = node.css(".discussion > p")
|
47
|
+
@discussion = discussion_node.first.text if discussion_node.length > 0
|
50
48
|
|
51
|
-
|
52
|
-
|
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
|
-
|
58
|
-
|
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|
|
data/lib/cocoadex/parser.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
data/lib/cocoadex/version.rb
CHANGED
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
|
+
[](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
|
-
|
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
|
-
|
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
|
-
|
50
|
+
### Property Lookup Example
|
22
51
|
|
23
52
|
<pre>
|
24
|
-
$ cocoadex
|
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
|
-
|
66
|
+
### Method Lookup Example
|
38
67
|
|
39
68
|
<pre>
|
40
|
-
$ cocoadex
|
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
|
-
|
92
|
+
### Class Lookup Example (Clipped for brevity)
|
64
93
|
|
65
94
|
<pre>
|
66
|
-
$ cocoadex
|
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.
|
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-
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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.
|
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.
|