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 CHANGED
@@ -15,7 +15,7 @@ main do |arg|
15
15
  logger.error_level = Logger::DEBUG
16
16
  end
17
17
 
18
- if options[:load_docset] and path = File.expand_path(options[:load_docset].first)
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
@@ -0,0 +1,13 @@
1
+ # Changelog
2
+
3
+ ## 1.2
4
+
5
+ - Fix docset loading regression introduced in 1.1
6
+
7
+ ## 1.1
8
+
9
+ - Use ERB/bri for output formatting
10
+
11
+ ## 1.0
12
+
13
+ Initial release
@@ -21,30 +21,31 @@ module Cocoadex
21
21
 
22
22
  # Search the cache for matching text
23
23
  def self.find text
24
- if (text.split(//u) & SCOPE_CHARS).size == 1
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
- when CLASS_PROP_DELIM
42
- (klass.methods + klass.properties).select {|m| m.name.start_with? term}
43
- when CLASS_METHOD_DELIM
44
- klass.class_methods.select {|m| m.name.start_with? term}
45
- when INST_METHOD_DELIM
46
- klass.instance_methods.select {|m| m.name.start_with? term}
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
- case key.type
89
- when :method
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 |m|
107
- mkey = Keyword.new(m.name, :method, docset, path)
108
- mkey.fk = id
109
- datastore << mkey
110
- end
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
 
@@ -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.debug "Parsing docset..."
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
- logger.info docset.inspect
33
+
30
34
  files = Dir.glob(docset_path+"/**/*.html")
31
35
  files.reject! {|f| ignored?(f) }
32
-
33
- files.each_with_index do |f,index|
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
@@ -1,3 +1,3 @@
1
1
  module Cocoadex
2
- VERSION = "1.1"
2
+ VERSION = "1.2"
3
3
  end
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.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: &21891660 !ruby/object:Gem::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: *21891660
25
+ version_requirements: *10672660
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rake
28
- requirement: &21891100 !ruby/object:Gem::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: *21891100
36
+ version_requirements: *10672100
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: methadone
39
- requirement: &21890500 !ruby/object:Gem::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: *21890500
47
+ version_requirements: *10671500
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: term-ansicolor
50
- requirement: &21890060 !ruby/object:Gem::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: *21890060
58
+ version_requirements: *10671060
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: bri
61
- requirement: &21889520 !ruby/object:Gem::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: *21889520
69
+ version_requirements: *10670580
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: nokogiri
72
- requirement: &21889020 !ruby/object:Gem::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: *21889020
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