sec_query 1.0.3 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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