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 +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
|
+
[![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
|
-
|
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.
|