Class: RubyDictionary::Scraper

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_dictionary/scraper.rb

Class Method Summary collapse

Class Method Details

.scrape_indexObject



7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/ruby_dictionary/scraper.rb', line 7

def self.scrape_index
  doc = Nokogiri::HTML(open("http://ruby-doc.org/core-2.4.2/"))
  klass_list = doc.css("#class-index .entries p")
  klass_list.each do |k|
    if k.css("a").text.match(/(Array\b|Dir\b|Enumerable|Hash|Numeric|Proc\b|Range\b|String|Symbol)/) != nil
      klass = RubyDictionary::Klass.new
      klass.name = k.css("a").text.gsub(/"/,"")
      href = k.css("a")[0]["href"]
      page_url = "http://ruby-doc.org/core-2.4.2/"
      klass.url = URI.join(page_url,href)
      RubyDictionary::Klass.all << klass
    end
  end
end

.scrape_instance_method_bodies(klass) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/ruby_dictionary/scraper.rb', line 50

def self.scrape_instance_method_bodies(klass)
  doc = Nokogiri::HTML(open(klass.url))
  i=0
  #if method.method_type == "Instance"
  public_instance_methods = doc.css("div#public-instance-method-details.method-section .method-detail")
  public_instance_methods.each do |m|

    klass.inst_methods[i].description = m.css(".method-heading + div p").text
    #.gsub(/<.{2,5}>|\n/,"").strip.gsub(/&lt;|&gt;|&amp;/, '&lt;' => "<", '&gt;' =>">", '&amp;' => "&")
    klass.inst_methods[i].examples = m.css("pre.ruby").text
    #.gsub(/<span class=\"ruby-.{1,12}>|<\/span>/,"").strip.gsub(/&lt;|&gt;|&amp;/, '&lt;' => "<", '&gt;' => ">", '&amp;' => "&")

    call_sequence = []
    if m.css(".method-heading").length == 1
        call_sequence << m.css(".method-callseq").text
        #.gsub(/&lt;|&gt;|&amp;/, '&lt;' => "<",'&gt;' => ">", '&amp;' => "&")
    else
      m.css(".method-heading").each do |variant|
        call_sequence << variant.css(".method-callseq").text
      end
    end
    klass.inst_methods[i].callseq = call_sequence
    i+=1
  end

end

.scrape_klass(klass) ⇒ Object



22
23
24
25
26
# File 'lib/ruby_dictionary/scraper.rb', line 22

def self.scrape_klass(klass)
  self.scrape_method_names(klass)
  self.scrape_instance_method_bodies(klass)
  self.scrape_klass_method_bodies(klass)
end

.scrape_klass_method_bodies(klass) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/ruby_dictionary/scraper.rb', line 77

def self.scrape_klass_method_bodies(klass)
  doc = Nokogiri::HTML(open(klass.url))
  public_klass_methods = doc.css("div#public-class-method-details.method-section .method-detail")
  i=0
  public_klass_methods.each do |m|

    klass.klass_methods[i].description = m.css(".method-heading + div p").text
    #.gsub(/<.{2,5}>|\n/,"").strip.gsub(/&lt;|&gt;|&amp;/, '&lt;' => "<", '&gt;' =>">", '&amp;' => "&")
    klass.klass_methods[i].examples = m.css("pre.ruby").text.strip
    #.gsub(/<span class=\"ruby-.{1,12}>|<\/span>/,"").strip.gsub(/&lt;|&gt;|&amp;/, '&lt;' => "<", '&gt;' => ">", '&amp;' => "&")
    call_sequence = []
    if m.css(".method-heading").length == 1
      call_sequence << m.css(".method-callseq").text
      #.gsub(/&lt;|&gt;|&amp;/, '&lt;' => "<",'&gt;' => ">", '&amp;' => "&")
    else
      m.css(".method-heading").each do |variant|
        call_sequence << variant.css(".method-callseq").text
      end
    end
    klass.klass_methods[i].callseq = call_sequence
    i+=1
  end
end

.scrape_method_names(klass) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/ruby_dictionary/scraper.rb', line 28

def self.scrape_method_names(klass)
  doc = Nokogiri::HTML(open(klass.url))
  klass.definition = doc.css("div#description p:first-child, div#description p:nth-child(2)").text
  #.gsub(/<span.{1,25}>|<\/span>/,"").gsub(/<code>|<\/code>/,"").gsub(/&lt;|&gt;|&amp;/, '&lt;' => "<", '&gt;' => ">", '&amp;' => "&")
  method_list = doc.css("#method-list-section ul.link-list li")

  method_list.each do |mn|
    method = RubyDictionary::Method.new
    if mn.css("a").text.start_with?(":")
      method.method_type = "Class"
      klass.add_klass_method(method)
    else
      method.method_type = "Instance"
      klass.add_inst_method(method)
    end
    method.klass = klass
    method.name = mn.css("a").text.gsub(/#/,"")
    #.gsub(/&lt;|&gt;|&amp;|#/, '&lt;' => "<", '&gt;' => ">", '&amp;' => "&", '#' => "")
    klass.all_methods << method
  end
end