Class: RubyDictionary::Scraper
- Inherits:
-
Object
- Object
- RubyDictionary::Scraper
- Defined in:
- lib/ruby_dictionary/scraper.rb
Class Method Summary collapse
- .scrape_index ⇒ Object
- .scrape_instance_method_bodies(klass) ⇒ Object
- .scrape_klass(klass) ⇒ Object
- .scrape_klass_method_bodies(klass) ⇒ Object
- .scrape_method_names(klass) ⇒ Object
Class Method Details
.scrape_index ⇒ Object
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(/<|>|&/, '<' => "<", '>' =>">", '&' => "&") klass.inst_methods[i].examples = m.css("pre.ruby").text #.gsub(/<span class=\"ruby-.{1,12}>|<\/span>/,"").strip.gsub(/<|>|&/, '<' => "<", '>' => ">", '&' => "&") call_sequence = [] if m.css(".method-heading").length == 1 call_sequence << m.css(".method-callseq").text #.gsub(/<|>|&/, '<' => "<",'>' => ">", '&' => "&") 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(/<|>|&/, '<' => "<", '>' =>">", '&' => "&") klass.klass_methods[i].examples = m.css("pre.ruby").text.strip #.gsub(/<span class=\"ruby-.{1,12}>|<\/span>/,"").strip.gsub(/<|>|&/, '<' => "<", '>' => ">", '&' => "&") call_sequence = [] if m.css(".method-heading").length == 1 call_sequence << m.css(".method-callseq").text #.gsub(/<|>|&/, '<' => "<",'>' => ">", '&' => "&") 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(/<|>|&/, '<' => "<", '>' => ">", '&' => "&") 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(/<|>|&|#/, '<' => "<", '>' => ">", '&' => "&", '#' => "") klass.all_methods << method end end |