Class: SecQuery::FilingDetail
- Inherits:
-
Object
- Object
- SecQuery::FilingDetail
- Defined in:
- lib/sec_query/filing_detail.rb
Overview
> SecQuery::FilingDetail
SecQuery::FilingDetail requests and parses Filing Detail for any given SecQuery::Filing
Constant Summary collapse
- COLUMNS =
[:link, :filing_date, :accepted_date, :period_of_report, :sec_access_number, :document_count, :format_files, :data_files]
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(filing_detail) ⇒ FilingDetail
constructor
A new instance of FilingDetail.
Constructor Details
#initialize(filing_detail) ⇒ FilingDetail
Returns a new instance of FilingDetail.
11 12 13 14 15 |
# File 'lib/sec_query/filing_detail.rb', line 11 def initialize(filing_detail) COLUMNS.each do |column| instance_variable_set("@#{ column }", filing_detail[column]) end end |
Class Method Details
.fetch(uri) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/sec_query/filing_detail.rb', line 17 def self.fetch(uri) response = RestClient::Request.execute(method: :get, url: uri.to_s.gsub('http:', 'https:'), timeout: 10) document = Nokogiri::HTML(response.body) filing_date = document.xpath('//*[@id="formDiv"]/div[2]/div[1]/div[2]').text accepted_date = document.xpath('//*[@id="formDiv"]/div[2]/div[1]/div[4]').text period_of_report = document.xpath('//*[@id="formDiv"]/div[2]/div[2]/div[2]').text sec_access_number = document.xpath('//*[@id="secNum"]/text()').text.strip document_count = document.xpath('//*[@id="formDiv"]/div[2]/div[1]/div[6]').text.to_i format_files_table = document.xpath("//table[@summary='Document Format Files']") data_files_table = document.xpath("//table[@summary='Data Files']") format_files = (parsed = parse_files(format_files_table)) && (parsed || []) data_files = (parsed = parse_files(data_files_table)) && (parsed || []) new({uri: uri, filing_date: filing_date, accepted_date: accepted_date, period_of_report: period_of_report, sec_access_number: sec_access_number, document_count: document_count, format_files: format_files, data_files: data_files}) end |
.parse_files(format_files_table) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/sec_query/filing_detail.rb', line 41 def self.parse_files(format_files_table) # get table headers headers = [] format_files_table.xpath('//th').each do |th| headers << th.text end # get table rows rows = [] format_files_table.xpath('//tr').each_with_index do |row, i| rows[i] = {} row.xpath('td').each_with_index do |td, j| if td.children.first && td.children.first.name == 'a' relative_url = td.children.first.attributes.first[1].value rows[i][headers[j]] = { 'link' => "https://www.sec.gov#{relative_url}", 'text' => td.text.gsub(/\A\p{Space}*/, '') } else rows[i][headers[j]] = td.text.gsub(/\A\p{Space}*/, '') end end end rows.reject(&:empty?) end |