cocoadex 1.1 → 1.2

Sign up to get free protection for your applications and to get access to all the features.
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