cocoadex 1.1 → 1.2
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 +1 -1
- data/changelog.md +13 -0
- data/lib/cocoadex/keyword.rb +19 -26
- data/lib/cocoadex/parser.rb +23 -16
- data/lib/cocoadex/version.rb +1 -1
- data/readme.md +1 -1
- metadata +15 -13
data/bin/cocoadex
CHANGED
@@ -15,7 +15,7 @@ main do |arg|
|
|
15
15
|
logger.error_level = Logger::DEBUG
|
16
16
|
end
|
17
17
|
|
18
|
-
if options[:
|
18
|
+
if options[:'load-docset'] and path = File.expand_path(options[:'load-docset'].first)
|
19
19
|
Parser.parse(path)
|
20
20
|
end
|
21
21
|
|
data/changelog.md
ADDED
data/lib/cocoadex/keyword.rb
CHANGED
@@ -21,30 +21,31 @@ module Cocoadex
|
|
21
21
|
|
22
22
|
# Search the cache for matching text
|
23
23
|
def self.find text
|
24
|
-
if
|
25
|
-
scope = SCOPE_CHARS.detect {|c| text.include? c }
|
24
|
+
if scope = SCOPE_CHARS.detect {|c| text.include? c }
|
26
25
|
class_name, term = text.split(scope)
|
27
26
|
find_with_scope scope, class_name, term
|
28
27
|
else
|
29
28
|
keys = datastore.select {|k| k.term.start_with? text }
|
30
|
-
if key = keys.detect {|k| k.term == text}
|
29
|
+
if key = keys.detect {|k| k.term == text }
|
31
30
|
keys = [key]
|
32
31
|
end
|
33
32
|
untokenize(keys)
|
34
33
|
end
|
35
34
|
end
|
36
35
|
|
36
|
+
# Find matches for term within a given class
|
37
37
|
def self.find_with_scope scope, class_name, term
|
38
38
|
if class_key = datastore.detect {|k| k.term == class_name }
|
39
39
|
klass = untokenize([class_key]).first
|
40
|
-
case scope
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
40
|
+
list = case scope
|
41
|
+
when CLASS_PROP_DELIM
|
42
|
+
klass.methods + klass.properties
|
43
|
+
when CLASS_METHOD_DELIM
|
44
|
+
klass.class_methods
|
45
|
+
when INST_METHOD_DELIM
|
46
|
+
klass.instance_methods
|
47
47
|
end
|
48
|
+
list.select {|m| m.name.start_with? term}
|
48
49
|
else
|
49
50
|
[]
|
50
51
|
end
|
@@ -85,12 +86,8 @@ module Cocoadex
|
|
85
86
|
when :method, :property
|
86
87
|
if class_key = datastore.detect {|k| k.id == key.fk}
|
87
88
|
klass = Cocoadex::Class.new(class_key.url)
|
88
|
-
|
89
|
-
|
90
|
-
klass.methods.detect {|m| m.name == key.term}
|
91
|
-
when :property
|
92
|
-
klass.properties.detect {|m| m.name == key.term}
|
93
|
-
end
|
89
|
+
list = key.type == :method ? klass.methods : klass.properties
|
90
|
+
list.detect {|m| m.name == key.term}
|
94
91
|
end
|
95
92
|
end
|
96
93
|
end
|
@@ -103,16 +100,12 @@ module Cocoadex
|
|
103
100
|
class_key.id = id
|
104
101
|
datastore << class_key
|
105
102
|
|
106
|
-
klass.methods.each do |
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
klass.properties.each do |p|
|
113
|
-
pkey = Keyword.new(p.name, :property, docset, path)
|
114
|
-
pkey.fk = id
|
115
|
-
datastore << pkey
|
103
|
+
{:method => klass.methods, :property => klass.properties}.each do |type,list|
|
104
|
+
list.each do |item|
|
105
|
+
item_key = Keyword.new(item.name, type, docset, path)
|
106
|
+
item_key.fk = id
|
107
|
+
datastore << item_key
|
108
|
+
end
|
116
109
|
end
|
117
110
|
end
|
118
111
|
|
data/lib/cocoadex/parser.rb
CHANGED
@@ -21,33 +21,40 @@ module Cocoadex
|
|
21
21
|
(File.basename(path) == 'index.html' && File.exist?(File.join(File.dirname(path),'Reference')))
|
22
22
|
end
|
23
23
|
|
24
|
+
def self.class_ref? title
|
25
|
+
title.include? "Class Reference" or title.include? "Protocol Reference"
|
26
|
+
end
|
27
|
+
|
24
28
|
def self.parse docset_path
|
25
|
-
logger.
|
29
|
+
logger.info "Parsing docset tokens (This may take a moment)..."
|
26
30
|
plist = File.join(docset_path,"Contents", "Info.plist")
|
27
31
|
if File.exist? plist
|
28
32
|
docset = DocSet.new(plist)
|
29
|
-
|
33
|
+
|
30
34
|
files = Dir.glob(docset_path+"/**/*.html")
|
31
35
|
files.reject! {|f| ignored?(f) }
|
32
|
-
|
33
|
-
|
34
|
-
logger.debug " Parsing path: #{f}"
|
35
|
-
doc = Nokogiri::HTML(IO.read(f))
|
36
|
-
title_nodes = doc.css("#IndexTitle")
|
37
|
-
unless title_nodes.size == 0
|
38
|
-
title = title_nodes.first['content']
|
39
|
-
if title.include? "Deprecated"
|
40
|
-
next
|
41
|
-
elsif title.include? "Class Reference" or title.include? "Protocol Reference"
|
42
|
-
logger.info " Creating #{title}"
|
43
|
-
Keyword.tokenize_class docset.name, f, index
|
44
|
-
end
|
45
|
-
end
|
36
|
+
files.each_with_index do |f,i|
|
37
|
+
index_html(docset,f,i)
|
46
38
|
end
|
47
39
|
|
48
40
|
logger.info "Tokens Indexed: #{Keyword.datastore.size}"
|
49
41
|
Keyword.write
|
50
42
|
end
|
51
43
|
end
|
44
|
+
|
45
|
+
def self.index_html docset, path, index
|
46
|
+
logger.debug " Parsing path: #{path}"
|
47
|
+
|
48
|
+
doc = Nokogiri::HTML(IO.read(path))
|
49
|
+
title_nodes = doc.css("#IndexTitle")
|
50
|
+
unless title_nodes.size == 0
|
51
|
+
title = title_nodes.first['content']
|
52
|
+
|
53
|
+
if class_ref? title
|
54
|
+
# logger.info "Caching #{title}"
|
55
|
+
Keyword.tokenize_class docset.name, path, index
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
52
59
|
end
|
53
60
|
end
|
data/lib/cocoadex/version.rb
CHANGED
data/readme.md
CHANGED
@@ -12,7 +12,7 @@ Cocoadex parses Cocoa documentation files and creates a keyword index. Queries c
|
|
12
12
|
|
13
13
|
- **View Options:** `cocoadex --help`
|
14
14
|
|
15
|
-
- **Loading a DocSet:** `cocoadex --load-docset [path]` (Try `~/Library/Developer/DocSets/[docset name]`)
|
15
|
+
- **Loading a DocSet:** `cocoadex --load-docset [path]` (Try `~/Library/Developer/Shared/Documentation/DocSets/[docset name]`)
|
16
16
|
|
17
17
|
- **Look up Documentation:** `cocoadex --search [query]`
|
18
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`.
|
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.2'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -14,7 +14,7 @@ default_executable:
|
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rdoc
|
17
|
-
requirement: &
|
17
|
+
requirement: &10672660 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *10672660
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: rake
|
28
|
-
requirement: &
|
28
|
+
requirement: &10672100 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: 0.9.2
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *10672100
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: methadone
|
39
|
-
requirement: &
|
39
|
+
requirement: &10671500 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ~>
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: 1.2.1
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *10671500
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: term-ansicolor
|
50
|
-
requirement: &
|
50
|
+
requirement: &10671060 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: '0'
|
56
56
|
type: :runtime
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *10671060
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: bri
|
61
|
-
requirement: &
|
61
|
+
requirement: &10670580 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ! '>='
|
@@ -66,10 +66,10 @@ dependencies:
|
|
66
66
|
version: '0'
|
67
67
|
type: :runtime
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *10670580
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: nokogiri
|
72
|
-
requirement: &
|
72
|
+
requirement: &10670020 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
75
|
- - ! '>='
|
@@ -77,7 +77,7 @@ dependencies:
|
|
77
77
|
version: '0'
|
78
78
|
type: :runtime
|
79
79
|
prerelease: false
|
80
|
-
version_requirements: *
|
80
|
+
version_requirements: *10670020
|
81
81
|
description: A command-line class reference utility Cocoa APIs
|
82
82
|
email:
|
83
83
|
- iskanamagus@gmail.com
|
@@ -86,10 +86,12 @@ executables:
|
|
86
86
|
extensions: []
|
87
87
|
extra_rdoc_files:
|
88
88
|
- readme.md
|
89
|
+
- changelog.md
|
89
90
|
files:
|
90
91
|
- Gemfile
|
91
92
|
- LICENSE
|
92
93
|
- LICENSE.txt
|
94
|
+
- changelog.md
|
93
95
|
- readme.md
|
94
96
|
- bin/cocoadex
|
95
97
|
- lib/cocoadex.rb
|