sec_query 1.0.3 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ .DS_Store
2
+ *.gem
3
+ *.rbc
4
+ .bundle
5
+ .config
6
+ .yardoc
7
+ Gemfile.lock
8
+ InstalledFiles
9
+ _yardoc
10
+ coverage
11
+ doc/
12
+ lib/bundler/man
13
+ pkg
14
+ pkg/*
15
+ rdoc
16
+ spec/support/vcr_cassettes
17
+ spec/support/vcr_cassettes/*
data/Rakefile CHANGED
@@ -1 +1 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
data/lib/sec_query.rb CHANGED
@@ -1,11 +1,16 @@
1
- require "rubygems"
2
- require "rest-client"
3
- require "hpricot"
1
+ # encoding: UTF-8
4
2
 
3
+ # external
4
+ require 'active_support/all'
5
+ require 'addressable/uri'
6
+ require 'hpricot'
7
+ require 'rest-client'
8
+ require 'rubygems'
5
9
 
6
- require "sec_query/version"
7
- require "sec_query/entity"
8
- require "sec_query/relationship"
9
- require "sec_query/transaction"
10
- require "sec_query/filing"
11
-
10
+ # internal
11
+ require 'sec_query/entity'
12
+ require 'sec_query/filing'
13
+ require 'sec_query/relationship'
14
+ require 'sec_query/sec_uri'
15
+ require 'sec_query/transaction'
16
+ require 'sec_query/version'
@@ -1,309 +1,303 @@
1
+ # encoding: UTF-8
2
+
1
3
  module SecQuery
2
- class Entity
3
-
4
- attr_accessor :first, :middle, :last, :name, :symbol, :cik, :url, :type, :sic, :location, :state_of_inc, :formerly, :mailing_address, :business_address, :relationships, :transactions, :filings
5
-
6
- def initialize(entity)
7
- @first = entity[:first]
8
- @middle = entity[:middle]
9
- @last = entity[:last]
10
- @name = entity[:name]
11
- @sic = entity[:sic]
12
- @url = entity[:url]
13
- @location = entity[:location]
14
- @state_of_inc = entity[:state_of_inc]
15
- @formerly = entity[:formerly]
16
- @symbol = entity[:symbol]
17
- @cik = entity[:cik]
18
- @type =entity[:type]
19
- @mailing_address = entity[:mailing_address]
20
- @business_address = entity[:business_address]
21
- @relationships = entity[:relationships]
22
- @transactions = entity[:transactions]
23
- @filings = entity[:filings]
4
+ # => SecQuery::Entity
5
+ # SecQuery::Entity is the root class which is responsible for requesting,
6
+ # parsing and initializing SecQuery::Entity intances from SEC Edgar.
7
+ class Entity
8
+ COLUMNS = [:first, :middle, :last, :name, :symbol, :cik, :url, :type, :sic,
9
+ :location, :state_of_inc, :formerly, :mailing_address,
10
+ :business_address, :relationships, :transactions, :filings]
11
+
12
+ attr_accessor(*COLUMNS)
13
+
14
+ def initialize(entity)
15
+ COLUMNS.each do |column|
16
+ instance_variable_set("@#{ column }", entity[column])
17
+ end
18
+ end
19
+
20
+ def self.find(entity_args, *options)
21
+ temp = {}
22
+ temp[:url] = SecURI.browse_edgar_uri(entity_args)
23
+ temp[:url][:action] = :getcompany
24
+ temp[:cik] = Entity.cik(temp[:url], entity_args)
25
+
26
+ if !temp[:cik] || temp[:cik] == ''
27
+ puts "No Entity found for query: #{ temp[:url] }"
28
+ return false
29
+ end
30
+
31
+ ### Get Document and Entity Type
32
+ doc = Entity.document(temp[:cik])
33
+ temp = Entity.parse_document(temp, doc)
34
+
35
+ ### Get Additional Arguments and Query Additional Details
36
+ unless options.empty?
37
+ temp[:transactions] = []
38
+ temp[:filings] = []
39
+ options = Entity.options(temp, options)
40
+ temp = Entity.details(temp, options)
41
+ end
42
+
43
+ ### Return entity Object
44
+ @entity = Entity.new(temp)
45
+ @entity
46
+ end
47
+
48
+ def self.query(url)
49
+ RestClient.get(url.to_s) do |response, request, result, &block|
50
+ case response.code
51
+ when 200
52
+ return response
53
+ else
54
+ response.return!(request, result, &block)
24
55
  end
25
-
26
-
27
- def self.find(entity_args, *options)
28
-
29
- temp = {}
30
- temp[:url] = Entity.url(entity_args)
31
- temp[:cik] = Entity.cik(temp[:url], entity_args)
32
-
33
- if !temp[:cik] or temp[:cik] == "";
34
- puts "No Entity found for query: "+temp[:url]
35
- return false;
56
+ end
57
+ end
58
+
59
+ def self.cik(url, entity)
60
+ response = Entity.query(url.output_atom.to_s)
61
+ doc = Hpricot::XML(response)
62
+ data = doc.search('//feed/title')[0]
63
+ if data.inner_text == 'EDGAR Search Results'
64
+ tbl = doc.search("//span[@class='companyMatch']")
65
+ if tbl && tbl.innerHTML != ''
66
+ tbl = tbl[0].parent.search('table')[0].search('tr')
67
+ tbl.each do |tr|
68
+ td = tr.search('td')
69
+ if td[1] && entity[:middle] && td[1].innerHTML.downcase == ("#{entity[:last]} #{entity[:first]} #{entity[:middle]}").downcase || td[1] && td[1].innerHTML.downcase == ("#{ entity[:last] } #{ entity[:first] }").downcase
70
+ cik = td[0].search('a').innerHTML
71
+ return cik
36
72
  end
37
-
38
- ### Get Document and Entity Type
39
- doc = Entity.document(temp[:cik])
40
- temp = Entity.parse_document(temp, doc)
41
-
42
- ### Get Additional Arguments and Query Additional Details
43
- if !options.empty?;
44
- temp[:transactions]=[]
45
- temp[:filings] =[]
46
- options = Entity.options(temp, options);
47
- temp = Entity.details(temp, options);
48
- end
49
-
50
- ### Return entity Object
51
- @entity = Entity.new(temp)
52
-
53
- return @entity
54
-
73
+ end
74
+ else
75
+ return false
55
76
  end
56
-
57
-
58
- def self.query(url)
59
- RestClient.get(url){ |response, request, result, &block|
60
- case response.code
61
- when 200
62
- return response
63
- else
64
- response.return!(request, result, &block)
65
- end
66
- }
77
+ else
78
+ cik = data.inner_text.scan(/\(([^)]+)\)/).to_s
79
+ cik = cik.gsub('[["', '').gsub('"]]', '')
80
+ return cik
81
+ end
82
+ end
83
+
84
+ def self.document(cik)
85
+ url = SecURI.ownership_display_uri(action: :getissuer, CIK: cik)
86
+ response = query(url)
87
+ doc = Hpricot(response)
88
+ text = 'Ownership Reports from:'
89
+ type = 'issuer'
90
+ entity = doc.search('//table').search('//td').search("b[text()*='#{text}']")
91
+ if entity.empty?
92
+ url = SecURI.ownership_display_uri(action: :getowner, CIK: cik)
93
+ response = query(url)
94
+ doc = Hpricot(response)
95
+ text = 'Ownership Reports for entitys:'
96
+ type = 'owner'
97
+ entity = doc.search('//table').search('//td').search("b[text()*='#{text}']")
98
+ end
99
+ [doc, type]
100
+ end
101
+
102
+ def self.parse_document(temp, doc)
103
+ info = Entity.info(doc[0])
104
+ temp[:type] = doc[1]
105
+ temp[:name] = info[:name]
106
+ temp[:location] = info[:location]
107
+ temp[:sic] = info[:sic]
108
+ temp[:state_of_inc] = info[:state_of_inc]
109
+ temp[:formerly] = info[:formerly]
110
+
111
+ ### Get Mailing Address
112
+ temp[:mailing_address] = Entity.mailing_address(doc[0])
113
+
114
+ ### Get Business Address
115
+ temp[:business_address] = Entity.business_address(doc[0])
116
+
117
+ temp
118
+ end
119
+
120
+ def self.info(doc)
121
+ info = {}
122
+ lines = doc.search("//td[@bgcolor='#E6E6E6']")[0].parent.parent.search('//tr')
123
+ td = lines[0].search('//td//b').innerHTML
124
+ info[:name] = td.gsub(td.scan(/\(([^)]+)\)/).to_s, '').gsub('()', '').gsub('\n', '')
125
+ lines = lines[1].search('//table')[0].search('//tr//td')
126
+
127
+ if lines[0].search('a')[0]
128
+ info[:sic] = lines[0].search('a')[0].innerHTML
129
+ end
130
+
131
+ if lines[0].search('a')[1]
132
+ info[:location] = lines[0].search('a')[1].innerHTML
133
+ end
134
+
135
+ if lines[0].search('b')[0] && lines[0].search('b')[0].innerHTML.squeeze(' ') != ' '
136
+ info[:state_of_inc] = lines[0].search('b')[0].innerHTML
137
+ end
138
+
139
+ if lines[1] && lines[1].search('font')
140
+ info[:formerly] = lines[1].search('font').innerHTML
141
+ .gsub('formerly: ', '').gsub('<br />', '').gsub('\n', '; ')
142
+ end
143
+
144
+ info
145
+ end
146
+
147
+ def self.business_address(doc)
148
+ addie = doc.search('//table').search('//td')
149
+ .search("b[text()*='Business Address']")
150
+ if !addie.empty?
151
+ business_address = addie[0].parent.innerHTML
152
+ .gsub('<b class="blue">Business Address</b>', '').gsub('<br />', ' ')
153
+ return business_address
154
+ else
155
+ return false
156
+ end
157
+ end
158
+
159
+ def self.mailing_address(doc)
160
+ addie = doc.search('//table').search('//td')
161
+ .search("b[text()*='Mailing Address']")
162
+ if !addie.empty?
163
+ mailing_address = addie[0].parent.innerHTML
164
+ .gsub('<b class="blue">Mailing Address</b>', '').gsub('<br />', ' ')
165
+ return mailing_address
166
+ else
167
+ return false
168
+ end
169
+ end
170
+
171
+ def self.options(temp, options)
172
+ args = {}
173
+ if options.is_a?(Array) && options.length == 1 && options[0] == true
174
+ args[:relationships] = true
175
+ args[:transactions] = true
176
+ args[:filings] = true
177
+ elsif options.is_a?(Array) && options.length > 1
178
+ args[:relationships] = options[0]
179
+ args[:transactions] = options[1]
180
+ args[:filings] = options[2]
181
+ elsif options[0].is_a?(Hash)
182
+ args[:relationships] = options[0][:relationships]
183
+ args[:transactions] = options[0][:transactions]
184
+ args[:filings] = options[0][:filings]
185
+ end
186
+ args
187
+ end
188
+
189
+ def self.details(temp, options)
190
+ ## Get Relationships for entity
191
+ if options[:relationships] == true
192
+ relationships = Relationship.find(temp)
193
+ temp[:relationships] = relationships
194
+ end
195
+
196
+ ## Get Transactions for entity
197
+ if options[:transactions] && options[:transactions].is_a?(Hash)
198
+ temp = Transaction.find(
199
+ temp,
200
+ options[:transactions][:start],
201
+ options[:transactions][:count],
202
+ options[:transactions][:limit])
203
+ elsif options[:transactions] && options[:transactions] == true
204
+ temp = Transaction.find(temp, nil, nil, nil)
205
+ end
206
+
207
+ ## Get Filings for entity
208
+ if options[:filings] && options[:filings].is_a?(Hash)
209
+ temp = Filing.find(
210
+ temp,
211
+ options[:filings][:start],
212
+ options[:filings][:count],
213
+ options[:filings][:limit])
214
+ elsif options[:filings] && options[:filings] == true
215
+ temp = Filing.find(temp, nil, nil, nil)
216
+ end
217
+
218
+ temp
219
+ end
220
+
221
+ def self.log(entity)
222
+ if entity
223
+ puts '\n\t# # # # # # # # # # # # # # # # # # # # # # # # #\n\n'
224
+ puts "\t#{ entity.name }"
225
+ puts "\t(#{ entity.cik })"
226
+ puts "\tSIC = #{ entity.sic }" if entity.sic
227
+ puts "\tLocation: #{ entity.location }, " if entity.location
228
+
229
+ if entity.formerly && entity.formerly != ''
230
+ puts "\tFormerly: #{ entity.formerly }"
67
231
  end
68
232
 
69
-
70
- def self.url(args)
71
- if args.is_a?(Hash)
72
- if args[:symbol] != nil
73
- string = "CIK="+args[:symbol]
74
- elsif args[:cik] != nil
75
- string = "CIK="+args[:cik]
76
- elsif args[:first] != nil and args[:last]
77
- string = "company="+args[:last]+" "+args[:first]
78
- elsif args[:name] != nil
79
- string = "company="+args[:name].gsub(/[(,?!\''"":.)]/, '')
80
- end
81
- elsif args.is_a?(String)
82
- begin Float(args)
83
- string = "CIK="+args
84
- rescue
85
- if args.length <= 4
86
- string = "CIK="+args
87
- else
88
- string = "company="+args.gsub(/[(,?!\''"":.)]/, '')
89
- end
90
- end
91
- end
92
- string = string.to_s.gsub(" ", "+")
93
- url = "http://www.sec.gov/cgi-bin/browse-edgar?"+string+"&action=getcompany"
94
- return url
233
+ if entity.state_of_inc
234
+ puts "\tState of Incorporation: #{ entity.state_of_inc }"
95
235
  end
96
236
 
97
- def self.cik(url, entity)
98
- response = Entity.query(url+"&output=atom")
99
- doc = Hpricot::XML(response)
100
- data = doc.search("//feed/title")[0];
101
- if data.inner_text == "EDGAR Search Results"
102
- tbl = doc.search("//span[@class='companyMatch']")
103
- if tbl && tbl.innerHTML != ""
104
- tbl = tbl[0].parent.search("table")[0].search("tr")
105
- for tr in tbl
106
- td = tr.search("td")
107
- if td[1] != nil && entity[:middle] != nil && td[1].innerHTML.downcase == (entity[:last]+" "+entity[:first]+" "+entity[:middle]).downcase or td[1] != nil && td[1].innerHTML.downcase == (entity[:last]+" "+entity[:first]).downcase
108
- cik = td[0].search("a").innerHTML
109
- return cik;
110
- end
111
- end
112
- else
113
- return false;
114
- end
115
- else
116
- cik = data.inner_text.scan(/\(([^)]+)\)/).to_s
117
- cik = cik.gsub('[["', '').gsub('"]]','')
118
- return cik
119
- end
120
- end
121
-
122
- def self.document(cik)
123
- url ="http://www.sec.gov/cgi-bin/own-disp?action=getissuer&CIK="+cik
124
- response = query(url)
125
- doc = Hpricot(response)
126
- text = "Ownership Reports from:"
127
- type = "issuer"
128
- entity = doc.search("//table").search("//td").search("b[text()*='"+text+"']")
129
- if entity.empty?
130
- url= "http://www.sec.gov/cgi-bin/own-disp?action=getowner&CIK="+cik
131
- response = query(url)
132
- doc = Hpricot(response)
133
- text = "Ownership Reports for entitys:"
134
- type = "owner"
135
- entity = doc.search("//table").search("//td").search("b[text()*='"+text+"']")
136
- end
137
- return [doc, type]
138
-
237
+ if entity.mailing_address
238
+ puts "\tMailing Address:\t#{ entity.mailing_address.inspect.gsub('\n', ' ').squeeze(" ") }"
139
239
  end
140
240
 
141
- def self.parse_document(temp, doc)
142
-
143
- temp[:type] = doc[1]
144
- info = Entity.info(doc[0])
145
- temp[:name] = info[:name]
146
- temp[:location] = info[:location]
147
- temp[:sic] = info[:sic]
148
- temp[:state_of_inc] = info[:state_of_inc]
149
- temp[:formerly] = info[:formerly]
150
-
151
- ### Get Mailing Address
152
- temp[:mailing_address] = Entity.mailing_address(doc[0])
153
-
154
- ### Get Business Address
155
- temp[:business_address] = Entity.business_address(doc[0])
156
-
157
- return temp;
241
+ if entity.business_address
242
+ puts "\tBusiness Address:\t#{ entity.business_address.inspect.gsub('\n', ' ').squeeze(" ") }"
158
243
  end
159
244
 
160
- def self.info(doc)
161
- info={}
162
- lines = doc.search("//td[@bgcolor='#E6E6E6']")[0].parent.parent.search("//tr")
163
- td = lines[0].search("//td//b").innerHTML
164
- info[:name] = td.gsub(td.scan(/\(([^)]+)\)/).to_s, "").gsub("()", "").gsub("\n", "")
165
- lines = lines[1].search("//table")[0].search("//tr//td")
166
- if lines[0].search("a")[0] != nil
167
- info[:sic] = lines[0].search("a")[0].innerHTML
168
- end
169
- if lines[0].search("a")[1] != nil
170
- info[:location] = lines[0].search("a")[1].innerHTML
171
- end
172
-
173
- if lines[0].search("b")[0] != nil and lines[0].search("b")[0].innerHTML.squeeze(" ") != " "
174
- info[:state_of_inc] = lines[0].search("b")[0].innerHTML
175
- end
176
- if lines[1] != nil and lines[1].search("font")
177
- info[:formerly] = lines[1].search("font").innerHTML.gsub("formerly: ", "").gsub("<br />", "").gsub("\n", "; ")
178
- end
179
- return info
245
+ if !entity.relationships
246
+ puts '\n\tRELATIONSHIPS:\t0 Total'
247
+ else
248
+ puts "\n\tRELATIONSHIPS:\t#{ entity.relationships.count } Total"
249
+ printf("\t%-40s %-15s %-30s %-10s\n\n",
250
+ 'Entity',
251
+ 'CIK',
252
+ 'Position',
253
+ 'Date')
254
+ entity.relationships.each do |relationship|
255
+ printf("\t%-40s %-15s %-30s %-10s\n",
256
+ relationship.name,
257
+ relationship.cik,
258
+ relationship.position,
259
+ relationship.date)
260
+ end
180
261
  end
181
262
 
182
-
183
- def self.business_address(doc)
184
- addie = doc.search("//table").search("//td").search("b[text()*='Business Address']")
185
- if !addie.empty?;
186
- business_address = addie[0].parent.innerHTML.gsub('<b class="blue">Business Address</b>', '').gsub('<br />', ' ');
187
- return business_address
188
- else
189
- return false;
190
- end
263
+ if entity.transactions
264
+ puts "\n\tTRANSACTIONS:\t#{ entity.transactions.count } Total"
265
+ printf("\t%-20s %-10s %-5s %-10s %-10s %-10s %-15s %-10s\n\n",
266
+ 'Owner',
267
+ 'CIK',
268
+ 'Modes',
269
+ 'Type',
270
+ 'Shares',
271
+ 'Price',
272
+ 'Owned',
273
+ 'Date')
274
+ entity.transactions.each do |transaction|
275
+ printf("\t%-20s %-10s %-5s %-10s%-10s %-10s %-15s %-10s\n",
276
+ transaction.reporting_owner,
277
+ transaction.owner_cik,
278
+ transaction.modes,
279
+ transaction.type,
280
+ transaction.shares,
281
+ transaction.price,
282
+ transaction.owned,
283
+ transaction.date)
284
+ end
191
285
  end
192
286
 
193
- def self.mailing_address(doc)
194
- addie = doc.search("//table").search("//td").search("b[text()*='Mailing Address']")
195
- if !addie.empty?;
196
- mailing_address = addie[0].parent.innerHTML.gsub('<b class="blue">Mailing Address</b>', '').gsub('<br />', ' ');
197
- return mailing_address
198
- else
199
- return false;
200
- end
201
- end
202
-
203
-
204
- def self.options(temp, options)
205
-
206
- args={}
207
- if options.is_a?(Array) && options.length == 1 && options[0] == true;
208
- args[:relationships] = true;
209
- args[:transactions]= true;
210
- args[:filings] = true;
211
- elsif options.is_a?(Array) && options.length > 1
212
- args[:relationships] = options[0];
213
- args[:transactions]= options[1];
214
- args[:filings] = options[2];
215
- elsif options[0].is_a?(Hash)
216
- args[:relationships] = options[0][:relationships];
217
- args[:transactions]= options[0][:transactions];
218
- args[:filings] = options[0][:filings];
219
- end
220
- return args;
221
- end
222
-
223
- def self.details(temp, options)
224
-
225
- ## Get Relationships for entity
226
- if options[:relationships] == true
227
- relationships = Relationship.find(temp)
228
- temp[:relationships] =relationships
229
- end
230
-
231
- ## Get Transactions for entity
232
- if options[:transactions] != nil and options[:transactions].is_a?(Hash)
233
- temp = Transaction.find(temp, options[:transactions][:start], options[:transactions][:count], options[:transactions][:limit])
234
- elsif options[:transactions] != nil && options[:transactions] == true
235
- temp = Transaction.find(temp, nil, nil, nil)
236
- end
237
-
238
-
239
- ## Get Filings for entity
240
-
241
- if options[:filings] != nil and options[:filings].is_a?(Hash)
242
- temp = Filing.find(temp, options[:filings][:start], options[:filings][:count], options[:filings][:limit])
243
- elsif options[:filings] != nil and options[:filings] == true
244
- temp = Filing.find(temp, nil, nil, nil)
245
- end
246
-
247
- return temp;
248
- end
249
-
250
-
251
- def self.log(entity)
252
-
253
- if entity != false
254
- puts "\n\t# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #\n\n"
255
- puts "\t"+entity.name
256
- puts "\t("+entity.cik+")"
257
- if entity.formerly && entity.formerly != ""
258
- puts "\tFormerly: "+entity.formerly
259
- end
260
- if entity.sic
261
- puts "\tSIC = "+entity.sic
262
- end
263
- if entity.location
264
- puts "\tLocation: "+entity.location+", "
265
- end
266
- if entity.state_of_inc
267
- puts "\tState of Incorporation: "+entity.state_of_inc
268
- end
269
- if entity.mailing_address
270
- puts "\tMailing Address:\t"+ entity.mailing_address.inspect.gsub('\n', ' ').squeeze(" ")
271
- end
272
-
273
- if entity.business_address
274
- puts "\tBusiness Address:\t"+ entity.business_address.inspect.gsub('\n', ' ').squeeze(" ")
275
- end
276
-
277
-
278
- if !entity.relationships
279
- puts "\n\tRELATIONSHIPS:\t0 Total"
280
- else
281
- puts "\n\tRELATIONSHIPS:\t"+ entity.relationships.count.to_s+" Total"
282
- printf("\t%-40s %-15s %-30s %-10s\n\n","Entity", "CIK", "Position", "Date")
283
- for relationship in entity.relationships
284
- printf("\t%-40s %-15s %-30s %-10s\n",relationship.name, relationship.cik, relationship.position, relationship.date)
285
- end
286
- end
287
- if entity.transactions
288
- puts "\n\tTRANSACTIONS:\t"+ entity.transactions.count.to_s+" Total"
289
- printf("\t%-20s %-10s %-5s %-10s %-10s %-10s %-15s %-10s\n\n","Owner", "CIK", "Modes", "Type","Shares","Price","Owned","Date")
290
- for transaction in entity.transactions
291
- printf("\t%-20s %-10s %-5s %-10s%-10s %-10s %-15s %-10s\n", transaction.reporting_owner,transaction.owner_cik,transaction.modes, transaction.type,transaction.shares,transaction.price,transaction.owned,transaction.date)
292
- end
293
- end
294
- if entity.filings
295
- puts "\n\tFILINGS:\t"+ entity.filings.count.to_s+" Total"
296
- printf("\t%-10s %-30s %-20s\n\n","Type", "File ID", "Date")
297
- for filing in entity.filings
298
- printf("\t%-10s %-30s %-20s\n",filing.term, filing.file_id, filing.date)
299
- end
300
-
301
- end
302
- puts "\t"+entity.url+"\n\n"
303
- else
304
- return "No Entity found."
305
- end
306
-
287
+ if entity.filings
288
+ puts "\n\tFILINGS:\t#{ entity.filings.count } Total"
289
+ printf("\t%-10s %-30s %-20s\n\n", 'Type', 'File ID', 'Date')
290
+ entity.filings.each do |filing|
291
+ printf("\t%-10s %-30s %-20s\n",
292
+ filing.term,
293
+ filing.file_id,
294
+ filing.date)
295
+ end
307
296
  end
308
- end
297
+ puts "\t#{ entity.url }\n\n"
298
+ else
299
+ return 'No Entity found.'
300
+ end
301
+ end
302
+ end
309
303
  end