xbrlware-ce 1.0.2

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.
Files changed (194) hide show
  1. data/Copying.txt +13 -0
  2. data/License.txt +13 -0
  3. data/Rakefile.rb +124 -0
  4. data/Readme.txt +15 -0
  5. data/doc/classes/Edgar.html +144 -0
  6. data/doc/classes/Edgar/HTMLFeedDownloader.html +199 -0
  7. data/doc/classes/Edgar/RSSFeedDownloader.html +225 -0
  8. data/doc/classes/Xbrlware.html +350 -0
  9. data/doc/classes/Xbrlware/Context.html +429 -0
  10. data/doc/classes/Xbrlware/Entity.html +323 -0
  11. data/doc/classes/Xbrlware/Identifier.html +191 -0
  12. data/doc/classes/Xbrlware/Instance.html +742 -0
  13. data/doc/classes/Xbrlware/Item.html +278 -0
  14. data/doc/classes/Xbrlware/LBConstants.html +144 -0
  15. data/doc/classes/Xbrlware/Linkbase.html +131 -0
  16. data/doc/classes/Xbrlware/Linkbase/CalculationLinkbase.html +212 -0
  17. data/doc/classes/Xbrlware/Linkbase/CalculationLinkbase/Calculation.html +172 -0
  18. data/doc/classes/Xbrlware/Linkbase/CalculationLinkbase/Calculation/CalculationArc.html +166 -0
  19. data/doc/classes/Xbrlware/Linkbase/DefinitionLinkbase.html +210 -0
  20. data/doc/classes/Xbrlware/Linkbase/DefinitionLinkbase/Definition.html +204 -0
  21. data/doc/classes/Xbrlware/Linkbase/DefinitionLinkbase/Definition/DefinitionArc.html +160 -0
  22. data/doc/classes/Xbrlware/Linkbase/LabelLinkbase.html +239 -0
  23. data/doc/classes/Xbrlware/Linkbase/LabelLinkbase/Label.html +189 -0
  24. data/doc/classes/Xbrlware/Linkbase/Linkbase.html +172 -0
  25. data/doc/classes/Xbrlware/Linkbase/Linkbase/Link.html +217 -0
  26. data/doc/classes/Xbrlware/Linkbase/Linkbase/Link/Arc.html +284 -0
  27. data/doc/classes/Xbrlware/Linkbase/PresentationLinkbase.html +224 -0
  28. data/doc/classes/Xbrlware/Linkbase/PresentationLinkbase/Presentation.html +222 -0
  29. data/doc/classes/Xbrlware/Linkbase/PresentationLinkbase/Presentation/PresentationArc.html +160 -0
  30. data/doc/classes/Xbrlware/Taxonomy.html +369 -0
  31. data/doc/classes/Xbrlware/TaxonomyDefintion.html +177 -0
  32. data/doc/classes/Xbrlware/Unit.html +179 -0
  33. data/doc/classes/Xbrlware/Unit/Divide.html +165 -0
  34. data/doc/created.rid +1 -0
  35. data/doc/files/Readme_txt.html +124 -0
  36. data/doc/files/lib/edgar/edgar_data_downloader_rb.html +129 -0
  37. data/doc/files/lib/edgar/util_rb.html +129 -0
  38. data/doc/files/lib/edgar_rb.html +141 -0
  39. data/doc/files/lib/xbrlware/constants_rb.html +129 -0
  40. data/doc/files/lib/xbrlware/context_rb.html +129 -0
  41. data/doc/files/lib/xbrlware/date_util_rb.html +129 -0
  42. data/doc/files/lib/xbrlware/float_patch_rb.html +129 -0
  43. data/doc/files/lib/xbrlware/hash_util_rb.html +129 -0
  44. data/doc/files/lib/xbrlware/instance_rb.html +129 -0
  45. data/doc/files/lib/xbrlware/item_rb.html +129 -0
  46. data/doc/files/lib/xbrlware/linkbase/calculation_linkbase_rb.html +129 -0
  47. data/doc/files/lib/xbrlware/linkbase/definition_linkbase_rb.html +129 -0
  48. data/doc/files/lib/xbrlware/linkbase/label_linkbase_rb.html +129 -0
  49. data/doc/files/lib/xbrlware/linkbase/linkbase_rb.html +129 -0
  50. data/doc/files/lib/xbrlware/linkbase/presentation_linkbase_rb.html +129 -0
  51. data/doc/files/lib/xbrlware/meta_util_rb.html +129 -0
  52. data/doc/files/lib/xbrlware/taxonomy_rb.html +129 -0
  53. data/doc/files/lib/xbrlware/unit_rb.html +129 -0
  54. data/doc/files/lib/xbrlware/util_rb.html +129 -0
  55. data/doc/files/lib/xbrlware/xml_parser_rb.html +129 -0
  56. data/doc/files/lib/xbrlware_rb.html +163 -0
  57. data/doc/fr_class_index.html +55 -0
  58. data/doc/fr_file_index.html +48 -0
  59. data/doc/fr_method_index.html +104 -0
  60. data/doc/index.html +24 -0
  61. data/doc/rdoc-style.css +208 -0
  62. data/example/benchmark/instance_parser_benchmark.rb +25 -0
  63. data/example/case_study/buy_strategy.rb +34 -0
  64. data/example/case_study/c-20091230.xml +29 -0
  65. data/example/case_study/c_sell_strategy.rb +29 -0
  66. data/example/lang_integration/thrift/rating-client.py +21 -0
  67. data/example/lang_integration/thrift/rating-impl.rb +13 -0
  68. data/example/lang_integration/thrift/rating-server.rb +25 -0
  69. data/example/lang_integration/thrift/rating.thrift +52 -0
  70. data/example/quick_start/foo.rb +10 -0
  71. data/example/quick_start/foo.xml +29 -0
  72. data/example/quick_start/print_item.rb +27 -0
  73. data/lib/edgar.rb +30 -0
  74. data/lib/edgar/edgar_data_downloader.rb +126 -0
  75. data/lib/edgar/util.rb +30 -0
  76. data/lib/xbrlware.rb +65 -0
  77. data/lib/xbrlware/constants.rb +29 -0
  78. data/lib/xbrlware/context.rb +148 -0
  79. data/lib/xbrlware/date_util.rb +35 -0
  80. data/lib/xbrlware/float_patch.rb +26 -0
  81. data/lib/xbrlware/hash_util.rb +175 -0
  82. data/lib/xbrlware/instance.rb +406 -0
  83. data/lib/xbrlware/item.rb +115 -0
  84. data/lib/xbrlware/linkbase/calculation_linkbase.rb +137 -0
  85. data/lib/xbrlware/linkbase/definition_linkbase.rb +186 -0
  86. data/lib/xbrlware/linkbase/label_linkbase.rb +128 -0
  87. data/lib/xbrlware/linkbase/linkbase.rb +170 -0
  88. data/lib/xbrlware/linkbase/presentation_linkbase.rb +160 -0
  89. data/lib/xbrlware/meta_util.rb +45 -0
  90. data/lib/xbrlware/taxonomies/us_gaap_taxonomy_20090131.rb +40365 -0
  91. data/lib/xbrlware/taxonomy.rb +133 -0
  92. data/lib/xbrlware/unit.rb +42 -0
  93. data/lib/xbrlware/util.rb +83 -0
  94. data/lib/xbrlware/xml_parser.rb +122 -0
  95. data/setup.rb +1585 -0
  96. data/test/lib/edgar/edgar_data_downloader_test.rb +35 -0
  97. data/test/lib/edgar/resources/0000930413-09-005485-index.htm +331 -0
  98. data/test/lib/edgar/resources/usgaap.rss.xml +2861 -0
  99. data/test/lib/xbrlware/411_footnotes_test.rb +65 -0
  100. data/test/lib/xbrlware/42_schemaref_test.rb +20 -0
  101. data/test/lib/xbrlware/46_item_test.rb +253 -0
  102. data/test/lib/xbrlware/47_context_test.rb +129 -0
  103. data/test/lib/xbrlware/48_unit_test.rb +45 -0
  104. data/test/lib/xbrlware/49_tuple_test.rb +12 -0
  105. data/test/lib/xbrlware/date_util_test.rb +24 -0
  106. data/test/lib/xbrlware/dimension/context_explicit_dimension_test.rb +40 -0
  107. data/test/lib/xbrlware/dimension/resources/context_explicit_dimension.xml +84 -0
  108. data/test/lib/xbrlware/float_patch_test.rb +10 -0
  109. data/test/lib/xbrlware/hash_util_test.rb +29 -0
  110. data/test/lib/xbrlware/instance_test.rb +250 -0
  111. data/test/lib/xbrlware/linkbase/calculation_linkbase_test.rb +39 -0
  112. data/test/lib/xbrlware/linkbase/definition_linkbase_test.rb +35 -0
  113. data/test/lib/xbrlware/linkbase/label_linkbase_test.rb +22 -0
  114. data/test/lib/xbrlware/linkbase/linkbase_test.rb +36 -0
  115. data/test/lib/xbrlware/linkbase/linkbase_test_util.rb +98 -0
  116. data/test/lib/xbrlware/linkbase/presentation_linkbase_test.rb +33 -0
  117. data/test/lib/xbrlware/linkbase/report.html +62 -0
  118. data/test/lib/xbrlware/linkbase/resources/cal.xml +219 -0
  119. data/test/lib/xbrlware/linkbase/resources/def.xml +186 -0
  120. data/test/lib/xbrlware/linkbase/resources/def_with_multiple_dimension.xml +41 -0
  121. data/test/lib/xbrlware/linkbase/resources/instance.xml +5822 -0
  122. data/test/lib/xbrlware/linkbase/resources/lab.xml +782 -0
  123. data/test/lib/xbrlware/linkbase/resources/pre.xml +485 -0
  124. data/test/lib/xbrlware/linkbase/resources/report_10_q.htm +12327 -0
  125. data/test/lib/xbrlware/linkbase/resources/taxonomy.xsd +178 -0
  126. data/test/lib/xbrlware/linkbase/sample_html_report.html +40 -0
  127. data/test/lib/xbrlware/meta_util_test.rb +23 -0
  128. data/test/lib/xbrlware/resources/411/411_footnotes.xml +66 -0
  129. data/test/lib/xbrlware/resources/42/42_schema_ref_with_base.xml +7 -0
  130. data/test/lib/xbrlware/resources/42/42_schema_ref_without_base.xml +7 -0
  131. data/test/lib/xbrlware/resources/46/46_item_value.xml +61 -0
  132. data/test/lib/xbrlware/resources/47/472_period_forever.xml +29 -0
  133. data/test/lib/xbrlware/resources/47/472_period_instant.xml +24 -0
  134. data/test/lib/xbrlware/resources/47/472_period_start_dt_and_end_dt.xml +30 -0
  135. data/test/lib/xbrlware/resources/47/4731_entity_identifier.xml +29 -0
  136. data/test/lib/xbrlware/resources/47/4732_entity_segment_not_present.xml +24 -0
  137. data/test/lib/xbrlware/resources/47/4732_entity_segment_present.xml +30 -0
  138. data/test/lib/xbrlware/resources/47/474_scenario_not_present.xml +26 -0
  139. data/test/lib/xbrlware/resources/47/474_scenario_present.xml +30 -0
  140. data/test/lib/xbrlware/resources/47/47_multiple_contexts.xml +36 -0
  141. data/test/lib/xbrlware/resources/48/482_unit_measure.xml +32 -0
  142. data/test/lib/xbrlware/resources/48/483_unit_divide.xml +39 -0
  143. data/test/lib/xbrlware/resources/48/48_multiple_units.xml +43 -0
  144. data/test/lib/xbrlware/resources/49/49_tuple.xml +61 -0
  145. data/test/lib/xbrlware/resources/49_tuple.xsd +44 -0
  146. data/test/lib/xbrlware/resources/instance.xml +128 -0
  147. data/test/lib/xbrlware/resources/report_test_xbrl_files/cal.xml +219 -0
  148. data/test/lib/xbrlware/resources/report_test_xbrl_files/def.xml +186 -0
  149. data/test/lib/xbrlware/resources/report_test_xbrl_files/instance.xml +5822 -0
  150. data/test/lib/xbrlware/resources/report_test_xbrl_files/lab.xml +782 -0
  151. data/test/lib/xbrlware/resources/report_test_xbrl_files/pre.xml +485 -0
  152. data/test/lib/xbrlware/resources/report_test_xbrl_files/report/report_index.html +62 -0
  153. data/test/lib/xbrlware/resources/report_test_xbrl_files/taxonomy.xsd +178 -0
  154. data/test/lib/xbrlware/resources/taxonomy_test_files/1/cal.xml +223 -0
  155. data/test/lib/xbrlware/resources/taxonomy_test_files/1/def.xml +190 -0
  156. data/test/lib/xbrlware/resources/taxonomy_test_files/1/lab.xml +786 -0
  157. data/test/lib/xbrlware/resources/taxonomy_test_files/1/pre.xml +489 -0
  158. data/test/lib/xbrlware/resources/taxonomy_test_files/1/taxonomy.xsd +177 -0
  159. data/test/lib/xbrlware/resources/taxonomy_test_files/2/linkbases/cal.xml +223 -0
  160. data/test/lib/xbrlware/resources/taxonomy_test_files/2/linkbases/def.xml +190 -0
  161. data/test/lib/xbrlware/resources/taxonomy_test_files/2/linkbases/lab.xml +786 -0
  162. data/test/lib/xbrlware/resources/taxonomy_test_files/2/linkbases/pre.xml +489 -0
  163. data/test/lib/xbrlware/resources/taxonomy_test_files/2/taxonomy.xsd +175 -0
  164. data/test/lib/xbrlware/resources/taxonomy_test_files/3/taxonomy.xsd +175 -0
  165. data/test/lib/xbrlware/resources/us_gaap_schema.xsd +8 -0
  166. data/test/lib/xbrlware/resources/us_gaap_schema_local.xsd +10 -0
  167. data/test/lib/xbrlware/resources/util_test_xbrl_files/cal.xml +219 -0
  168. data/test/lib/xbrlware/resources/util_test_xbrl_files/def.xml +186 -0
  169. data/test/lib/xbrlware/resources/util_test_xbrl_files/instance.xml +5822 -0
  170. data/test/lib/xbrlware/resources/util_test_xbrl_files/lab.xml +782 -0
  171. data/test/lib/xbrlware/resources/util_test_xbrl_files/pre.xml +485 -0
  172. data/test/lib/xbrlware/resources/util_test_xbrl_files/taxonomy.xsd +178 -0
  173. data/test/lib/xbrlware/resources/xbrl_xsd/dei-2009-01-31.xsd +162 -0
  174. data/test/lib/xbrlware/resources/xbrl_xsd/dei-std-2009-01-31.xsd +23 -0
  175. data/test/lib/xbrlware/resources/xbrl_xsd/negated-2008-03-31.xsd +23 -0
  176. data/test/lib/xbrlware/resources/xbrl_xsd/ref-2006-02-27.xsd +121 -0
  177. data/test/lib/xbrlware/resources/xbrl_xsd/us-gaap-2009-01-31.xsd +13474 -0
  178. data/test/lib/xbrlware/resources/xbrl_xsd/us-roles-2009-01-31.xsd +2283 -0
  179. data/test/lib/xbrlware/resources/xbrl_xsd/us-types-2009-01-31.xsd +368 -0
  180. data/test/lib/xbrlware/resources/xbrl_xsd/xbrl-instance-2003-12-31.xsd +772 -0
  181. data/test/lib/xbrlware/resources/xbrl_xsd/xbrl-linkbase-2003-12-31.xsd +477 -0
  182. data/test/lib/xbrlware/resources/xbrl_xsd/xbrldi-2006.xsd +41 -0
  183. data/test/lib/xbrlware/resources/xbrl_xsd/xbrldt-2005.xsd +53 -0
  184. data/test/lib/xbrlware/resources/xbrl_xsd/xl-2003-12-31.xsd +246 -0
  185. data/test/lib/xbrlware/resources/xbrl_xsd/xlink-2003-12-31.xsd +117 -0
  186. data/test/lib/xbrlware/taxonomy_test.rb +124 -0
  187. data/test/lib/xbrlware/util_test.rb +18 -0
  188. data/test/lib/xbrlware/xml_parser_test.rb +142 -0
  189. data/test/schema_validator_jruby.rb +40 -0
  190. data/test/schema_validator_ruby.rb +7 -0
  191. data/test/scratchpad/block.rb +36 -0
  192. data/test/test_helper.rb +21 -0
  193. data/xbrlware.iml +30 -0
  194. metadata +261 -0
@@ -0,0 +1,25 @@
1
+ require 'xbrlware'
2
+
3
+ r=Xbrlware::Report.new
4
+ class << r
5
+ public :xbrl_files
6
+ end
7
+ files=r.xbrl_files("../../../xbrlware-wiki/sample_reports/edgar_data")
8
+
9
+ output = StringIO.new
10
+ output << "|| *Instance + Taxonomy file size (KB)* || *Time (Seconds)* ||"
11
+ output << "\n"
12
+
13
+ files.each do |file_map|
14
+ m=Benchmark.measure do
15
+ instance=Xbrlware.ins(file_map["ins"])
16
+ end
17
+
18
+ size = File.size(file_map["ins"]) / 1024.0
19
+ size += File.size(file_map["tax"]) / 1024.0
20
+ output << "|| " << format("%.4f", size).to_s << " || "
21
+ output << format("%.4f", m.total).to_s << " || "
22
+ output << "\n"
23
+ end
24
+
25
+ puts output.string
@@ -0,0 +1,34 @@
1
+ require 'rubygems' # you need this when xbrlware is installed as gem
2
+ require 'edgar'
3
+ require 'xbrlware'
4
+
5
+ dl=Edgar::HTMLFeedDownloader.new()
6
+
7
+ url="http://www.sec.gov/Archives/edgar/data/843006/000135448809002030/0001354488-09-002030-index.htm"
8
+ download_dir=url.split("/")[-2] # download dir is : 000135448809002030
9
+ dl.download(url, download_dir)
10
+
11
+ instance_file=Xbrlware.file_grep(download_dir)["ins"]
12
+ instance=Xbrlware.ins(instance_file)
13
+
14
+ item_name="Assets"
15
+ assets = instance.item(item_name) # Extracts "Assets"
16
+
17
+ if assets.size < 2
18
+ puts item_name + " Not found.."
19
+ return
20
+ end
21
+
22
+ curr_asset, prev_asset=0, 0
23
+
24
+ if Date.parse(assets[0].context.period) > Date.parse(assets[1].context.period)
25
+ curr_asset=assets[0].value.to_f
26
+ prev_asset=assets[1].value.to_f
27
+ else
28
+ curr_asset=assets[1].value.to_f
29
+ prev_asset=assets[0].value.to_f
30
+ end
31
+
32
+ if curr_asset > prev_asset
33
+ puts "Buy..."
34
+ end
@@ -0,0 +1,29 @@
1
+ <?xml version="1.0" encoding="US-ASCII"?>
2
+ <xbrli:xbrl xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:iso4217="http://www.xbrl.org/2003/iso4217"
3
+ xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:us-gaap="http://xbrl.us/us-gaap/2009-01-31"
4
+ xmlns:xbrldi="http://xbrl.org/2006/xbrldi" xmlns:xlink="http://www.w3.org/1999/xlink">
5
+ <link:schemaRef xlink:href="" xlink:type="simple"/>
6
+ <xbrli:context id="Y2009">
7
+ <xbrli:entity>
8
+ <xbrli:identifier scheme="http://www.sec.gov/CIK">9999999999</xbrli:identifier>
9
+ </xbrli:entity>
10
+ <xbrli:period>
11
+ <xbrli:startDate>2009-01-02</xbrli:startDate>
12
+ <xbrli:endDate>2009-12-30</xbrli:endDate>
13
+ </xbrli:period>
14
+ </xbrli:context>
15
+ <xbrli:context id="Y2008">
16
+ <xbrli:entity>
17
+ <xbrli:identifier scheme="http://www.sec.gov/CIK">9999999999</xbrli:identifier>
18
+ </xbrli:entity>
19
+ <xbrli:period>
20
+ <xbrli:startDate>2008-01-02</xbrli:startDate>
21
+ <xbrli:endDate>2008-12-30</xbrli:endDate>
22
+ </xbrli:period>
23
+ </xbrli:context>
24
+ <xbrli:unit id="USD">
25
+ <xbrli:measure>iso4217:USD</xbrli:measure>
26
+ </xbrli:unit>
27
+ <us-gaap:NetIncomeLoss contextRef="Y2009" unitRef="USD" decimals="-6">730000000</us-gaap:NetIncomeLoss>
28
+ <us-gaap:NetIncomeLoss contextRef="Y2008" unitRef="USD" decimals="-6">902000000</us-gaap:NetIncomeLoss>
29
+ </xbrli:xbrl>
@@ -0,0 +1,29 @@
1
+ require 'rubygems' # you need this when xbrlware is installed as gem
2
+ require 'xbrlware'
3
+
4
+ instance_file="c-20091230.xml"
5
+ instance = Xbrlware.ins(instance_file) # Create parser instance
6
+
7
+ item_name="NetIncomeLoss" # This is the item we are interested in.
8
+ net_incomes = instance.item(item_name) # Extracts "NetIncomeLoss"
9
+
10
+ if net_incomes.size < 2
11
+ puts item_name + " Not found.."
12
+ return
13
+ end
14
+
15
+ curr_netincome, prev_netincome=0, 0
16
+
17
+ if Date.parse(net_incomes[0].context.period["end_date"]) > Date.parse(net_incomes[1].context.period["end_date"])
18
+ curr_netincome=net_incomes[0].value.to_f
19
+ prev_netincome=net_incomes[1].value.to_f
20
+ else
21
+ curr_netincome=net_incomes[1].value.to_f
22
+ prev_netincome=net_incomes[0].value.to_f
23
+ end
24
+
25
+ expected_netincome=prev_netincome-(prev_netincome * 0.05)
26
+
27
+ if curr_netincome < expected_netincome
28
+ puts "Sell..." # Sell C's stocks
29
+ end
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env python
2
+
3
+ import sys
4
+
5
+ sys.path.append("gen-py")
6
+
7
+ from thrift.transport import TTransport
8
+ from thrift.transport import TSocket
9
+ from thrift.protocol import TBinaryProtocol
10
+
11
+ from risk import Rating
12
+ from risk.ttypes import *
13
+
14
+ transport = TTransport.TBufferedTransport(TSocket.TSocket("localhost", "9090"))
15
+ protocol = TBinaryProtocol.TBinaryProtocol(transport)
16
+
17
+ client = Rating.Client(protocol)
18
+ transport.open()
19
+
20
+ print client.piotroski("JAVA")
21
+ print client.altman_z("GOOG")
@@ -0,0 +1,13 @@
1
+ # provide an implementation of Rating service
2
+ class RatingImpl
3
+
4
+ def piotroski(entity_name)
5
+ # Code that use xbrlware goes here
6
+ return 1 # return some dummy value
7
+ end
8
+
9
+ def altman_z(entity_name)
10
+ # Code that use xbrlware goes here
11
+ return 2.2567 # return some dummy value
12
+ end
13
+ end
@@ -0,0 +1,25 @@
1
+ $:.push('gen-rb')
2
+
3
+ require 'thrift'
4
+
5
+ require 'thrift/transport/server_socket'
6
+ require 'thrift/transport/buffered_transport'
7
+ require 'thrift/server/simple_server'
8
+
9
+ require 'rating'
10
+ require 'rating-impl'
11
+
12
+ # Thrift provides mutiple communication endpoints
13
+ # - Here we will expose our service via a TCP socket
14
+ # - Web-service will run as a single thread, on port 9090
15
+
16
+ handler = RatingImpl.new()
17
+ processor = Risk::Rating::Processor.new(handler)
18
+
19
+ transport = Thrift::ServerSocket.new(9090)
20
+ transportFactory = Thrift::BufferedTransportFactory.new()
21
+ server = Thrift::SimpleServer.new(processor, transport, transportFactory)
22
+
23
+ puts "Starting the Rating service..."
24
+ server.serve()
25
+
@@ -0,0 +1,52 @@
1
+ #!/usr/local/bin/thrift --java --php --py
2
+ # Licensed to the Apache Software Foundation (ASF) under one
3
+ # or more contributor license agreements. See the NOTICE file
4
+ # distributed with this work for additional information
5
+ # regarding copyright ownership. The ASF licenses this file
6
+ # to you under the Apache License, Version 2.0 (the
7
+ # "License"); you may not use this file except in compliance
8
+ # with the License. You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+
18
+ #
19
+ # Interface definition for Ratings Service
20
+ #
21
+
22
+ namespace java org.risk.service
23
+ namespace cpp org.risk
24
+ namespace csharp Risk
25
+ namespace py risk
26
+ namespace php risk
27
+ namespace perl Risk
28
+ namespace rb Risk
29
+
30
+ #
31
+ # constants
32
+ #
33
+
34
+ # for clients checking that server and it have same thrift definitions.
35
+ const string VERSION = "1.2"
36
+
37
+ #
38
+ # Exceptions
39
+ # (note that internal server errors will raise a TApplicationException, courtesy of Thrift)
40
+ #
41
+
42
+ #
43
+ # service api
44
+ #
45
+
46
+ service Rating {
47
+ # compute Piotroski score
48
+ i16 piotroski(1:string entity_name),
49
+
50
+ # compute Altman Z Score
51
+ double altman_z(1:string entity_name)
52
+ }
@@ -0,0 +1,10 @@
1
+ require 'rubygems' # you need this when xbrlware is installed as gem
2
+ require 'xbrlware'
3
+
4
+ instance=Xbrlware.ins("foo.xml")
5
+ items=instance.item("ProfitLoss")
6
+
7
+ puts "Profit-Loss \t Context"
8
+ items.each do |item|
9
+ puts item.value+" \t "+item.context.id
10
+ end
@@ -0,0 +1,29 @@
1
+ <?xml version="1.0" encoding="US-ASCII"?>
2
+ <xbrli:xbrl xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:iso4217="http://www.xbrl.org/2003/iso4217"
3
+ xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:us-gaap="http://xbrl.us/us-gaap/2009-01-31"
4
+ xmlns:xbrldi="http://xbrl.org/2006/xbrldi" xmlns:xlink="http://www.w3.org/1999/xlink">
5
+ <link:schemaRef xlink:href="" xlink:type="simple"/>
6
+ <xbrli:context id="D2009Q2YTD">
7
+ <xbrli:entity>
8
+ <xbrli:identifier scheme="http://www.sec.gov/CIK">9999999999</xbrli:identifier>
9
+ </xbrli:entity>
10
+ <xbrli:period>
11
+ <xbrli:startDate>2009-02-01</xbrli:startDate>
12
+ <xbrli:endDate>2009-08-15</xbrli:endDate>
13
+ </xbrli:period>
14
+ </xbrli:context>
15
+ <xbrli:context id="D2008Q2YTD">
16
+ <xbrli:entity>
17
+ <xbrli:identifier scheme="http://www.sec.gov/CIK">9999999999</xbrli:identifier>
18
+ </xbrli:entity>
19
+ <xbrli:period>
20
+ <xbrli:startDate>2008-02-03</xbrli:startDate>
21
+ <xbrli:endDate>2008-08-16</xbrli:endDate>
22
+ </xbrli:period>
23
+ </xbrli:context>
24
+ <xbrli:unit id="USD">
25
+ <xbrli:measure>iso4217:USD</xbrli:measure>
26
+ </xbrli:unit>
27
+ <us-gaap:ProfitLoss contextRef="D2008Q2YTD" unitRef="USD" decimals="-6">730000000</us-gaap:ProfitLoss>
28
+ <us-gaap:ProfitLoss contextRef="D2009Q2YTD" unitRef="USD" decimals="-6">902000000</us-gaap:ProfitLoss>
29
+ </xbrli:xbrl>
@@ -0,0 +1,27 @@
1
+ require 'rubygems' # you need this when xbrlware is installed as gem
2
+ require 'edgar'
3
+ require 'xbrlware'
4
+
5
+ dl=Edgar::HTMLFeedDownloader.new()
6
+
7
+ url="http://www.sec.gov/Archives/edgar/data/843006/000135448809002030/0001354488-09-002030-index.htm"
8
+ download_dir=url.split("/")[-2] # download dir is : 000135448809002030
9
+ dl.download(url, download_dir)
10
+
11
+ # Name of xbrl documents downloaded from EDGAR system is in the following convention
12
+ # calculation linkbase document ends with _cal.xml
13
+ # definition linkbase document ends with _def.xml
14
+ # presentation linkbase ends with _pre.xml
15
+ # label linkbase document ends with _lab.xml
16
+ # taxonomy document ends with .xsd
17
+ # instance document ends with .xml
18
+ # Xbrl::file_grep understands above convention.
19
+ instance_file=Xbrlware.file_grep(download_dir)["ins"] # use file_grep to filter xbrl files and get instance file
20
+
21
+ instance=Xbrlware.ins(instance_file)
22
+
23
+ items=instance.item("OtherAssetsCurrent")
24
+ puts "Other-Assets \t Context"
25
+ items.each do |item|
26
+ puts item.value+" \t "+item.context.id
27
+ end
data/lib/edgar.rb ADDED
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/ruby
2
+ #
3
+ # Author:: xbrlware@bitstat.com
4
+ #
5
+ # Copyright:: 2009, 2010 bitstat (http://www.bitstat.com). All Rights Reserved.
6
+ #
7
+ # License:: Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
16
+ # implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+ #
20
+ require 'ftools'
21
+
22
+ require 'open-uri'
23
+ require 'rexml/document'
24
+ require 'rexml/streamlistener'
25
+
26
+ require 'edgar/util'
27
+ require 'edgar/edgar_data_downloader'
28
+
29
+
30
+
@@ -0,0 +1,126 @@
1
+ #!/usr/bin/ruby
2
+ #
3
+ # Author:: xbrlware@bitstat.com
4
+ #
5
+ # Copyright:: 2009, 2010 bitstat (http://www.bitstat.com). All Rights Reserved.
6
+ #
7
+ # License:: Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
16
+ # implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+ #
20
+ module Edgar
21
+
22
+ # This class defines method to download XBRL files from SEC's XBRL RSS Feed.
23
+ # See {report generation xbrlware wiki}[http://code.google.com/p/xbrlware/wiki/ReportGeneration] for how to use this class.
24
+ class RSSFeedDownloader
25
+ include FileUtil
26
+
27
+ attr_reader :content
28
+
29
+ def initialize(sec_edgar_rss_file=nil)
30
+ sec_edgar_rss_file ||= "http://www.sec.gov/Archives/edgar/usgaap.rss.xml"
31
+ @content = XmlSimple.xml_in(open(sec_edgar_rss_file).read, {'ForceContent' => true})
32
+ end
33
+
34
+ # Takes limit (how many entities to download), download_to (where to download)
35
+ # default value for limit is 100
36
+ # default value for download_to is current_dir + "/edgar_data"
37
+ def download(limit=100, download_to=File.expand_path(".")+File::SEPARATOR+"edgar_data")
38
+ items=@content["channel"][0]["item"]
39
+ items.each_with_index do |item, index|
40
+ break if index==limit
41
+ files=get_xbrl_files(item)
42
+ download_to += File::SEPARATOR unless download_to.end_with?(File::SEPARATOR)
43
+ data_dir=download_to
44
+ data_dir=data_dir+File::SEPARATOR+item["xbrlFiling"][0]["cikNumber"][0]["content"]
45
+ data_dir=data_dir+File::SEPARATOR+item["xbrlFiling"][0]["accessionNumber"][0]["content"]
46
+ mkdir(data_dir)
47
+ files.each do |file|
48
+ file_content=open(file["url"]).read
49
+ dump_to_file(data_dir+File::SEPARATOR+file["file"], file_content)
50
+ end
51
+ end
52
+ end
53
+
54
+ def print_stat # :nodoc:
55
+ i_url=""
56
+ i_size=0
57
+ title=""
58
+ items=@content["channel"][0]["item"]
59
+ items.each do |item|
60
+ files=get_xbrl_files(item)
61
+ files.each do |file|
62
+ if file["type"]=="EX-101.INS" && (i_size==0 || file["size"].to_i < i_size)
63
+ i_size = file["size"].to_i
64
+ i_url = file["url"]
65
+ title = item["title"]
66
+ end
67
+ end
68
+ end
69
+ puts ""
70
+ puts " Smallest Instance File " + i_url
71
+ end
72
+
73
+ private
74
+ # Gets url that end with xml and xsd
75
+ def get_xbrl_files(item)
76
+ xbrl_files=item["xbrlFiling"][0]["xbrlFiles"][0]["xbrlFile"]
77
+ return xbrl_files.select {|e| e["url"].end_with?("xml") || e["url"].end_with?("xsd")}
78
+ end
79
+
80
+ end
81
+
82
+ # This class defines method to download XBRL files from SEC's EDGAR filling url.
83
+ # See {report generation xbrlware wiki}[http://code.google.com/p/xbrlware/wiki/ReportGeneration] for how to use this class.
84
+ class HTMLFeedDownloader
85
+ include REXML::StreamListener
86
+ include FileUtil
87
+
88
+ attr_reader :links
89
+
90
+ # Takes url and download_to (where to download)
91
+ # default value for download_to is current_dir
92
+ def download(url, download_to=File.expand_path(".")+File::SEPARATOR)
93
+ $LOG.info " Starting download of fillings from SEC url ["+url+"]"
94
+ files=[]
95
+ content = open(url).read
96
+ @links = Set.new
97
+ uri=URI(url)
98
+ @base_path=""
99
+ @base_path=(uri.scheme+"://"+uri.host+((uri.port==80 && "") || ":"+uri.port.to_s)) unless uri.host.nil?
100
+ parse(content)
101
+ download_to += File::SEPARATOR unless download_to.end_with?(File::SEPARATOR)
102
+ mkdir(download_to)
103
+ @links.each do |link|
104
+ file=download_to + link.split("/")[-1]
105
+ dump_to_file(file, open(link).read)
106
+ files << file
107
+ end unless uri.host.nil?
108
+ files
109
+ end
110
+
111
+ # Callback method for notifying start of xml elements by REXML stream parser.
112
+ def tag_start(name, attrs) # :nodoc:
113
+ if "a"==name
114
+ href=attrs["href"]
115
+ @links << @base_path + href if href.end_with?("xml") || href.end_with?("xsd")
116
+ end
117
+ end
118
+
119
+ private
120
+ def parse(text)
121
+ REXML::Document.parse_stream(text, self)
122
+ end
123
+
124
+ end
125
+
126
+ end