sec_edgar 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/assets/1996/QTR1/master.idx +49935 -0
- data/lib/assets/1996/QTR2/master.idx +47669 -0
- data/lib/assets/1996/QTR3/master.idx +50651 -0
- data/lib/assets/1996/QTR4/master.idx +54399 -0
- data/lib/sec_edgar/address.rb +3 -0
- data/lib/sec_edgar/basic_stats.rb +26 -0
- data/lib/sec_edgar/derivative_transaction.rb +21 -0
- data/lib/sec_edgar/entity.rb +74 -0
- data/lib/sec_edgar/filing.rb +171 -0
- data/lib/sec_edgar/filing_parser.rb +216 -0
- data/lib/sec_edgar/filing_persister.rb +53 -0
- data/lib/sec_edgar/filing_updater.rb +52 -0
- data/lib/sec_edgar/footnote.rb +3 -0
- data/lib/sec_edgar/ftp_client.rb +35 -0
- data/lib/sec_edgar/nil_ownership_document.rb +39 -0
- data/lib/sec_edgar/officer_title.rb +39 -0
- data/lib/sec_edgar/ownership4Document.xsd.xml +141 -0
- data/lib/sec_edgar/ownershipDocumentCommon.xsd.xml +890 -0
- data/lib/sec_edgar/ownership_document.rb +121 -0
- data/lib/sec_edgar/poll.rb +132 -0
- data/lib/sec_edgar/sec_uri.rb +102 -0
- data/lib/sec_edgar/transaction.rb +20 -0
- data/lib/sec_edgar/utils.rb +28 -0
- data/lib/sec_edgar.rb +26 -0
- metadata +123 -0
@@ -0,0 +1,121 @@
|
|
1
|
+
module SecEdgar
|
2
|
+
TRANSACTION_CODES = {
|
3
|
+
'P' => 'Open market or private purchase of non-derivative or derivative security',
|
4
|
+
'S' => 'Open market or private sale of non-derivative or derivative security6',
|
5
|
+
'V' => 'Transaction voluntarily reported earlier than required',
|
6
|
+
'A' => 'Grant, award or other acquisition pursuant to Rule 16b-3(d)',
|
7
|
+
'D' => 'Disposition to the issuer of issuer equity securities pursuant to Rule 16b-3(e)',
|
8
|
+
'F' => 'Payment of exercise price or tax liability by delivering or withholding securities incident to the receipt, exercise',
|
9
|
+
'I' => 'Discretionary transaction in accordance with Rule 16b-3(f) resulting in acquisition or disposition of issuer',
|
10
|
+
'M' => 'Exercise or conversion of derivative security exempted pursuant to Rule 16b-3',
|
11
|
+
'C' => 'Conversion of derivative security',
|
12
|
+
'E' => 'Expiration of short derivative position',
|
13
|
+
'H' => 'Expiration (or cancellation) of long derivative position with value received',
|
14
|
+
'O' => 'Exercise of out-of-the-money derivative security',
|
15
|
+
'X' => 'Exercise of in-the-money or at-the-money derivative security',
|
16
|
+
'G' => 'Bona fide gift',
|
17
|
+
'L' => 'Small acquisition under Rule 16a-6',
|
18
|
+
'W' => 'Acquisition or disposition by will or the laws of descent and distribution',
|
19
|
+
'Z' => 'Deposit into or withdrawal from voting trust',
|
20
|
+
'J' => 'Other acquisition or disposition (describe transaction)',
|
21
|
+
'K' => 'Transaction in equity swap or instrument with similar characteristics',
|
22
|
+
'U' => 'Disposition pursuant to a tender of shares in a change of control transaction'
|
23
|
+
}
|
24
|
+
|
25
|
+
OwnershipDocument = Struct.new(
|
26
|
+
:schema_version,
|
27
|
+
:document_type,
|
28
|
+
:period_of_report,
|
29
|
+
:not_subject_to_section_16,
|
30
|
+
:issuer_name,
|
31
|
+
:issuer_cik,
|
32
|
+
:issuer_trading_symbol,
|
33
|
+
:owner_cik,
|
34
|
+
:owner_name,
|
35
|
+
:owner_address,
|
36
|
+
:is_director,
|
37
|
+
:is_officer,
|
38
|
+
:is_ten_percent_owner,
|
39
|
+
:is_other,
|
40
|
+
:officer_title,
|
41
|
+
:transactions,
|
42
|
+
:derivative_transactions,
|
43
|
+
:footnotes
|
44
|
+
) do
|
45
|
+
|
46
|
+
def sum_shares
|
47
|
+
@sum ||= begin
|
48
|
+
sum = 0
|
49
|
+
all_trans.each do |t|
|
50
|
+
if t.acquired_or_disposed_code == 'A'
|
51
|
+
sum += t.shares
|
52
|
+
else
|
53
|
+
sum -= t.shares
|
54
|
+
end
|
55
|
+
end
|
56
|
+
sum
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def dollar_volume
|
61
|
+
@dollar_volume ||= begin
|
62
|
+
sum = 0
|
63
|
+
all_trans.each do |t|
|
64
|
+
if t.acquired_or_disposed_code == 'A'
|
65
|
+
sum += t.shares * t.price_per_share
|
66
|
+
else
|
67
|
+
sum -= t.shares * t.price_per_share
|
68
|
+
end
|
69
|
+
end
|
70
|
+
sum
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def total_shares
|
75
|
+
@total ||= all_trans.map(&:shares).inject(:+)
|
76
|
+
end
|
77
|
+
|
78
|
+
def all_trans
|
79
|
+
trans + derivative_trans
|
80
|
+
end
|
81
|
+
|
82
|
+
def trans
|
83
|
+
transactions || []
|
84
|
+
end
|
85
|
+
|
86
|
+
def derivative_trans
|
87
|
+
derivative_transactions || []
|
88
|
+
end
|
89
|
+
|
90
|
+
SecEdgar::TRANSACTION_CODES.keys.each do |code|
|
91
|
+
define_method("per_code_#{ code.downcase }".to_sym) do
|
92
|
+
return 0 if total_shares == 0
|
93
|
+
all_trans.select do |t|
|
94
|
+
t.code.upcase == code
|
95
|
+
end.tap do |t|
|
96
|
+
return 0 if t.empty?
|
97
|
+
end.map do |t|
|
98
|
+
t.shares
|
99
|
+
end.inject(:+) * 100.0 / total_shares
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def sum_shares_after
|
104
|
+
return all_trans.map(&:shares_after).max if sum_shares > 0
|
105
|
+
trans.map(&:shares_after).min || 0
|
106
|
+
end
|
107
|
+
|
108
|
+
def as_json(*)
|
109
|
+
tran_codes = {}
|
110
|
+
|
111
|
+
SecEdgar::TRANSACTION_CODES.keys.each do |code|
|
112
|
+
name = "per_code_#{ code.downcase }".to_sym
|
113
|
+
tran_codes[name] = send(name)
|
114
|
+
end
|
115
|
+
|
116
|
+
super
|
117
|
+
.merge(sum_shares: sum_shares, sum_shares_after: sum_shares_after)
|
118
|
+
.merge(tran_codes)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
module SecEdgar
|
4
|
+
PollFiling = Struct.new(
|
5
|
+
:cik,
|
6
|
+
:company_name,
|
7
|
+
:type,
|
8
|
+
:date_str,
|
9
|
+
:ftp_link,
|
10
|
+
:client,
|
11
|
+
:title,
|
12
|
+
:term,
|
13
|
+
:file_id) do
|
14
|
+
def date
|
15
|
+
Date.parse(date_str)
|
16
|
+
end
|
17
|
+
|
18
|
+
def link
|
19
|
+
"http://www.sec.gov/Archives/#{ ftp_link }"
|
20
|
+
end
|
21
|
+
|
22
|
+
def content(&error_blk)
|
23
|
+
@content ||= client.fetch(ftp_link, nil)
|
24
|
+
rescue RestClient::ResourceNotFound => e
|
25
|
+
puts "404 Resource Not Found: Bad link #{ self.link }"
|
26
|
+
if block_given?
|
27
|
+
error_blk.call(e, self)
|
28
|
+
else
|
29
|
+
raise e
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class Poll
|
35
|
+
attr_reader :client, :year, :quarter, :local_base
|
36
|
+
|
37
|
+
def initialize(year = 1993, qtr = 1, client = SecEdgar::FtpClient.instance, local_base = "./assets")
|
38
|
+
@client = client
|
39
|
+
@year = year
|
40
|
+
@quarter = qtr
|
41
|
+
@local_base = local_base
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.all(from_year, to_year, &blk)
|
45
|
+
polls_by_year(from_year, to_year).each do |poll|
|
46
|
+
poll.form4s.each do |filing|
|
47
|
+
blk.call(filing)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.polls_by_year(from_year, to_year)
|
53
|
+
polls = []
|
54
|
+
(from_year..to_year).each do |yr|
|
55
|
+
(1..4).each do |qtr|
|
56
|
+
polls << self.new(yr, qtr)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
polls
|
60
|
+
end
|
61
|
+
|
62
|
+
def to_s
|
63
|
+
"<Poll y: #{ year } q: #{ quarter }>"
|
64
|
+
end
|
65
|
+
|
66
|
+
def index
|
67
|
+
unless File.exist?(local_file)
|
68
|
+
puts "fetching from sec #{ to_s }..."
|
69
|
+
fetch
|
70
|
+
end
|
71
|
+
File.read(local_file)
|
72
|
+
end
|
73
|
+
|
74
|
+
def form4s
|
75
|
+
filings.select do |line|
|
76
|
+
line =~ form4_regexp
|
77
|
+
end.map do |f|
|
78
|
+
begin
|
79
|
+
PollFiling.new(*f.split("|"), client)
|
80
|
+
rescue => e
|
81
|
+
puts line
|
82
|
+
raise e
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def filings
|
88
|
+
index.scrub.split("\n").select do |line|
|
89
|
+
line =~ filing_regexp
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def local_file
|
94
|
+
"#{ local_dir }/master.idx"
|
95
|
+
end
|
96
|
+
|
97
|
+
private
|
98
|
+
|
99
|
+
def form4_regexp
|
100
|
+
/^(\d+\|.*\|4\|.*.txt)$/i
|
101
|
+
end
|
102
|
+
|
103
|
+
def filing_regexp
|
104
|
+
/^(\d+\|.*\|.*.txt)$/i
|
105
|
+
end
|
106
|
+
|
107
|
+
def remote
|
108
|
+
"/edgar/full-index/#{ year }/QTR#{ quarter }/master.idx"
|
109
|
+
end
|
110
|
+
|
111
|
+
def local_dir
|
112
|
+
path = "#{ local_base }/#{ year.to_s }/QTR#{ quarter }"
|
113
|
+
FileUtils.mkdir_p(path)
|
114
|
+
path
|
115
|
+
end
|
116
|
+
|
117
|
+
def fetch
|
118
|
+
client.fetch(remote, local_file)
|
119
|
+
rescue => e
|
120
|
+
puts "SecEdgar::Poll#fetch_quarter failed for #{ year }, QTR#{ quarter }"
|
121
|
+
puts "local: #{ local_file }"
|
122
|
+
puts "remote: #{ remote }"
|
123
|
+
puts e.message
|
124
|
+
ensure
|
125
|
+
verify_download
|
126
|
+
end
|
127
|
+
|
128
|
+
def verify_download
|
129
|
+
File.delete(local_file) unless File.size?(local_file)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module SecEdgar
|
4
|
+
class SecURI
|
5
|
+
attr_accessor :host, :scheme, :path, :query_values
|
6
|
+
|
7
|
+
def self.browse_edgar_uri(args = nil)
|
8
|
+
build_with_path('/browse-edgar', args)
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.for_date(date)
|
12
|
+
instance = SecURI.new
|
13
|
+
instance.scheme = 'ftp'
|
14
|
+
instance.host = 'ftp.sec.gov'
|
15
|
+
instance.path = "edgar/daily-index/#{ date.to_sec_uri_format }"
|
16
|
+
instance
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.ownership_display_uri(args = nil)
|
20
|
+
build_with_path('/own-disp', args)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.build_with_path(path, args)
|
24
|
+
instance = SecURI.new
|
25
|
+
instance.path += path
|
26
|
+
return instance if args.nil?
|
27
|
+
options = send("handle_#{ args.class.to_s.underscore }_args", args)
|
28
|
+
instance.query_values = options
|
29
|
+
instance
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.handle_string_args(string_arg)
|
33
|
+
options = {}
|
34
|
+
begin Float(string_arg)
|
35
|
+
options[:CIK] = string_arg
|
36
|
+
rescue
|
37
|
+
if string_arg.length <= 4
|
38
|
+
options[:CIK] = string_arg
|
39
|
+
else
|
40
|
+
options[:company] = string_arg.gsub(/[(,?!\''"":.)]/, '')
|
41
|
+
end
|
42
|
+
end
|
43
|
+
options
|
44
|
+
end
|
45
|
+
|
46
|
+
private_class_method :handle_string_args
|
47
|
+
|
48
|
+
def self.handle_hash_args(hash_arg)
|
49
|
+
options = hash_arg
|
50
|
+
if hash_arg[:symbol] || hash_arg[:cik]
|
51
|
+
options[:CIK] = (hash_arg[:symbol] || hash_arg[:cik])
|
52
|
+
return options
|
53
|
+
end
|
54
|
+
options[:company] = company_name_from_hash_args(hash_arg)
|
55
|
+
options
|
56
|
+
end
|
57
|
+
|
58
|
+
private_class_method :handle_hash_args
|
59
|
+
|
60
|
+
def self.company_name_from_hash_args(args)
|
61
|
+
return "#{ args[:last] } #{ args[:first] }" if args[:first] && args[:last]
|
62
|
+
return args[:name].gsub(/[(,?!\''"":.)]/, '') if args[:name]
|
63
|
+
end
|
64
|
+
|
65
|
+
private_class_method :company_name_from_hash_args
|
66
|
+
|
67
|
+
def initialize
|
68
|
+
self.host = 'www.sec.gov'
|
69
|
+
self.scheme = 'http'
|
70
|
+
self.path = 'cgi-bin'
|
71
|
+
end
|
72
|
+
|
73
|
+
def []=(key, value)
|
74
|
+
query_values[key] = value
|
75
|
+
self
|
76
|
+
end
|
77
|
+
|
78
|
+
def output_atom
|
79
|
+
query_values.merge!(output: 'atom')
|
80
|
+
self
|
81
|
+
end
|
82
|
+
|
83
|
+
def to_s
|
84
|
+
uri.to_s
|
85
|
+
end
|
86
|
+
|
87
|
+
def to_str
|
88
|
+
to_s
|
89
|
+
end
|
90
|
+
|
91
|
+
private
|
92
|
+
|
93
|
+
def uri
|
94
|
+
Addressable::URI.new(
|
95
|
+
host: host,
|
96
|
+
scheme: scheme,
|
97
|
+
path: path,
|
98
|
+
query_values: query_values
|
99
|
+
)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module SecEdgar
|
2
|
+
Transaction = Struct.new(
|
3
|
+
:acquired_or_disposed_code,
|
4
|
+
:nature_of_ownership,
|
5
|
+
:code,
|
6
|
+
:shares,
|
7
|
+
:security_title,
|
8
|
+
:direct_or_indirect_code,
|
9
|
+
:form_type,
|
10
|
+
:equity_swap_involved,
|
11
|
+
:transaction_date,
|
12
|
+
:shares_after,
|
13
|
+
:price_per_share
|
14
|
+
) do
|
15
|
+
def holdings_change
|
16
|
+
return 0 if shares_after == 0
|
17
|
+
shares.fdiv(shares_after)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class String
|
2
|
+
def blank?
|
3
|
+
/^\s*$/.match(self)
|
4
|
+
end
|
5
|
+
|
6
|
+
def underscore
|
7
|
+
self.gsub(/::/, '/').
|
8
|
+
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
9
|
+
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
10
|
+
tr("-", "_").
|
11
|
+
downcase
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class Date
|
16
|
+
def quarter
|
17
|
+
((month / 3.0) - 0.1).floor + 1
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_sec_uri_format
|
21
|
+
today = Date.today
|
22
|
+
if today.quarter == quarter && today.year == year
|
23
|
+
"company.#{ strftime("%Y%m%d") }.idx"
|
24
|
+
else
|
25
|
+
"#{ year }/QTR#{ quarter }/company.#{ strftime("%Y%m%d") }.idx"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/sec_edgar.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
module SecEdgar; end
|
2
|
+
|
3
|
+
require 'nokogiri'
|
4
|
+
require 'singleton'
|
5
|
+
require 'net/ftp'
|
6
|
+
require 'date'
|
7
|
+
require 'addressable/uri'
|
8
|
+
require 'open-uri'
|
9
|
+
require 'rest-client'
|
10
|
+
require 'rss'
|
11
|
+
|
12
|
+
require_relative './sec_edgar/utils'
|
13
|
+
require_relative './sec_edgar/sec_uri'
|
14
|
+
require_relative './sec_edgar/entity'
|
15
|
+
require_relative './sec_edgar/basic_stats'
|
16
|
+
require_relative './sec_edgar/address'
|
17
|
+
require_relative './sec_edgar/ftp_client'
|
18
|
+
require_relative './sec_edgar/filing'
|
19
|
+
require_relative './sec_edgar/footnote'
|
20
|
+
require_relative './sec_edgar/derivative_transaction'
|
21
|
+
require_relative './sec_edgar/transaction'
|
22
|
+
require_relative './sec_edgar/filing_persister'
|
23
|
+
require_relative './sec_edgar/filing_parser'
|
24
|
+
require_relative './sec_edgar/officer_title'
|
25
|
+
require_relative './sec_edgar/ownership_document'
|
26
|
+
require_relative './sec_edgar/poll'
|
metadata
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sec_edgar
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- CJ Avilla
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-03-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: nokogiri
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.6.6
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.6.6
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rest-client
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.8.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.8.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: addressable
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 2.3.8
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 2.3.8
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 3.2.0
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 3.2.0
|
69
|
+
description: Tool for querying the SEC database
|
70
|
+
email: cjavilla@gmail.com
|
71
|
+
executables: []
|
72
|
+
extensions: []
|
73
|
+
extra_rdoc_files: []
|
74
|
+
files:
|
75
|
+
- lib/assets/1996/QTR1/master.idx
|
76
|
+
- lib/assets/1996/QTR2/master.idx
|
77
|
+
- lib/assets/1996/QTR3/master.idx
|
78
|
+
- lib/assets/1996/QTR4/master.idx
|
79
|
+
- lib/sec_edgar.rb
|
80
|
+
- lib/sec_edgar/address.rb
|
81
|
+
- lib/sec_edgar/basic_stats.rb
|
82
|
+
- lib/sec_edgar/derivative_transaction.rb
|
83
|
+
- lib/sec_edgar/entity.rb
|
84
|
+
- lib/sec_edgar/filing.rb
|
85
|
+
- lib/sec_edgar/filing_parser.rb
|
86
|
+
- lib/sec_edgar/filing_persister.rb
|
87
|
+
- lib/sec_edgar/filing_updater.rb
|
88
|
+
- lib/sec_edgar/footnote.rb
|
89
|
+
- lib/sec_edgar/ftp_client.rb
|
90
|
+
- lib/sec_edgar/nil_ownership_document.rb
|
91
|
+
- lib/sec_edgar/officer_title.rb
|
92
|
+
- lib/sec_edgar/ownership4Document.xsd.xml
|
93
|
+
- lib/sec_edgar/ownershipDocumentCommon.xsd.xml
|
94
|
+
- lib/sec_edgar/ownership_document.rb
|
95
|
+
- lib/sec_edgar/poll.rb
|
96
|
+
- lib/sec_edgar/sec_uri.rb
|
97
|
+
- lib/sec_edgar/transaction.rb
|
98
|
+
- lib/sec_edgar/utils.rb
|
99
|
+
homepage: http://rubygems.org/gems/sec_edgar
|
100
|
+
licenses:
|
101
|
+
- MIT
|
102
|
+
metadata: {}
|
103
|
+
post_install_message:
|
104
|
+
rdoc_options: []
|
105
|
+
require_paths:
|
106
|
+
- lib
|
107
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
|
+
requirements: []
|
118
|
+
rubyforge_project:
|
119
|
+
rubygems_version: 2.4.5
|
120
|
+
signing_key:
|
121
|
+
specification_version: 4
|
122
|
+
summary: SEC filings finder
|
123
|
+
test_files: []
|