xbrlware-ce 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
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,137 @@
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 Xbrlware
21
+ module Linkbase
22
+ class CalculationLinkbase < Linkbase
23
+ # Creates a CalculationLinkbase.
24
+ #
25
+ # linkbase_path::
26
+ # XBRL Calculation Linkbase source. Tries to load and parse calculationlinkbase from path.
27
+ #
28
+ # instance::
29
+ # Instance object
30
+ #
31
+ # label_linkbase::
32
+ # optional parameter, LabelLinkbase object
33
+ def initialize(linkbase_path, instance, label_linkbase=nil)
34
+ super linkbase_path
35
+ @instance=instance
36
+ @label_linkbase=label_linkbase
37
+ end
38
+
39
+ def calculation(role=nil)
40
+ calculations=[]
41
+ calc_content=@linkbase_content["calculationLink"]
42
+ calc_content.each do |cal|
43
+
44
+ next unless cal["xlink:role"]==role unless role.nil?
45
+
46
+ if cal["calculationArc"].nil?
47
+ calculations << Calculation.new(@instance.entity_details, cal["xlink:title"], cal["xlink:role"], @role_map[cal["xlink:role"]])
48
+ else
49
+ contexts_and_arcs=arcs(cal)
50
+ calculations << Calculation.new(@instance.entity_details, cal["xlink:title"], cal["xlink:role"], @role_map[cal["xlink:role"]], contexts_and_arcs["arcs"], contexts_and_arcs["contexts"])
51
+ end
52
+ end
53
+ return calculations[0] unless role.nil?
54
+ calculations
55
+ end
56
+
57
+ private
58
+ def arcs(calc)
59
+ locators={}
60
+ calc["loc"].each do |loc|
61
+ href = loc["xlink:href"]
62
+ unless href.index("#").nil?
63
+ locators[loc["xlink:label"]]= href[href.index("#")+1, href.length]
64
+ else
65
+ locators[loc["xlink:label"]]=href
66
+ end
67
+ end
68
+
69
+ arc_map={}
70
+ contexts = Set.new()
71
+
72
+ calc["calculationArc"].each do |arc|
73
+ to_label = nil
74
+ unless @label_linkbase.nil?
75
+ to_label_obj=@label_linkbase.label(locators[arc["xlink:to"]], arc["preferredLabel"]) unless arc["preferredLabel"].nil?
76
+ to_label_obj=@label_linkbase.label(locators[arc["xlink:to"]], "http://www.xbrl.org/2003/role/label") if arc["preferredLabel"].nil?
77
+ to_label = to_label_obj.value unless to_label_obj.nil?
78
+ end
79
+
80
+ to = Calculation::CalculationArc.new(arc["xlink:to"], locators[arc["xlink:to"]], arc["xlink:arcrole"], arc["order"], arc["weight"], arc["priority"], arc["use"], to_label)
81
+ from = Calculation::CalculationArc.new(arc["xlink:from"], locators[arc["xlink:from"]])
82
+
83
+ to_item_name = locators[arc["xlink:to"]].gsub(/.*_/, "")
84
+ from_item_name = locators[arc["xlink:from"]].gsub(/.*_/, "")
85
+
86
+ to_item_map=item_map(@instance.item(to_item_name))
87
+ to.items=to_item_map.values
88
+ contexts.merge(to_item_map.keys)
89
+
90
+ from_item_map=item_map(@instance.item(from_item_name))
91
+ from.items=from_item_map.values
92
+ contexts.merge(from_item_map.keys)
93
+
94
+ if arc_map.has_key?(from)
95
+ arc_map[from] << to
96
+ else
97
+ arc_map[from]=[to]
98
+ end
99
+ end
100
+
101
+ return {"contexts" => contexts, "arcs" => Linkbase.build_relationship(arc_map)}
102
+ end
103
+
104
+ private
105
+ def item_map(items)
106
+ item_map={}
107
+ items.each do |item|
108
+ item_map[item.context]=item
109
+ end unless items.nil?
110
+ item_map
111
+ end
112
+
113
+ public
114
+ class Calculation < Linkbase::Link
115
+
116
+ attr_reader :contexts, :entity_details
117
+
118
+ def initialize(entity_details, title, role, href=nil, arcs=nil, contexts=nil)
119
+ super(title, role, href, arcs)
120
+ @contexts=contexts
121
+ @entity_details=entity_details
122
+ end
123
+
124
+ class CalculationArc < Linkbase::Link::Arc
125
+ attr_reader :weight, :use
126
+
127
+ def initialize(item_id, href, role=nil, order=nil, weight=nil, priority=nil, use=nil, label=nil)
128
+ super item_id, href, role, order, priority, label
129
+ @weight=weight.to_i
130
+ @use=use
131
+ end
132
+ end
133
+ end
134
+
135
+ end
136
+ end
137
+ end
@@ -0,0 +1,186 @@
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 Xbrlware
21
+ module Linkbase
22
+ class DefinitionLinkbase < Linkbase
23
+
24
+ @@constants = {"primaryItem-hypercube" => "http://xbrl.org/int/dim/arcrole/all",
25
+ "hypercube-dimension" => "http://xbrl.org/int/dim/arcrole/hypercube-dimension",
26
+ "dimension-domain" => "http://xbrl.org/int/dim/arcrole/dimension-domain",
27
+ "domain-member" => "http://xbrl.org/int/dim/arcrole/domain-member"}
28
+
29
+ # Creates a DefinitionLinkbase.
30
+ #
31
+ # linkbase_path::
32
+ # XBRL Definition Linkbase source. Tries to load and parse definition linkbase from path.
33
+ #
34
+ # label_linkbase::
35
+ # optional parameter, takes LabelLinkbase object
36
+ def initialize(linkbase_path, label_linkbase=nil)
37
+ super linkbase_path
38
+ @label_linkbase=label_linkbase
39
+ end
40
+
41
+ def definition(role=nil)
42
+
43
+ definitions=[]
44
+ def_content=@linkbase_content["definitionLink"]
45
+ def_content.each do |def_|
46
+
47
+ next unless def_["xlink:role"]==role unless role.nil?
48
+
49
+ if def_["definitionArc"].nil?
50
+ definitions << Definition.new(def_["xlink:title"], def_["xlink:role"], @role_map[def_["xlink:role"]])
51
+ else
52
+ arcs=arcs(def_)
53
+ definitions << Definition.new(def_["xlink:title"], def_["xlink:role"], @role_map[def_["xlink:role"]], primary_items(arcs))
54
+ end
55
+ end
56
+ return definitions[0] unless role.nil?
57
+ definitions
58
+ end
59
+
60
+ private
61
+ def primary_items(arcs)
62
+ items=Set.new
63
+ arcs.each do |arc|
64
+ arc.children.each do |child|
65
+ if child.role==@@constants["primaryItem-hypercube"]
66
+ items << arc
67
+ break
68
+ end
69
+ end if arc.has_children?
70
+ end
71
+
72
+ items.each do |primary_item|
73
+
74
+ hypercubes=[]
75
+ primary_item.children.each do |p_child|
76
+ hypercubes << p_child if p_child.role==@@constants["primaryItem-hypercube"]
77
+ end if primary_item.has_children?
78
+ primary_item.children = hypercubes
79
+ MetaUtil::introduce_instance_alias(primary_item, "hypercubes", "children")
80
+
81
+ primary_item.hypercubes.each do |hypercube|
82
+ dimensions=[]
83
+ hypercube.children.each do |h_child|
84
+ dimensions << h_child if h_child.role==@@constants["hypercube-dimension"]
85
+ end if hypercube.has_children?
86
+ hypercube.children=dimensions
87
+ MetaUtil::introduce_instance_alias(hypercube, "dimensions", "children")
88
+
89
+ hypercube.dimensions.each do |dimension|
90
+ domains=[]
91
+ dimension.children.each do |di_child|
92
+ domains << di_child if di_child.role==@@constants["dimension-domain"]
93
+ end if dimension.has_children?
94
+ dimension.children=domains
95
+ MetaUtil::introduce_instance_alias(dimension, "domains", "children")
96
+
97
+ dimension.domains.each do |domain|
98
+ members=[]
99
+ domain.children.each do |do_child|
100
+ members << do_child if do_child.role==@@constants["domain-member"]
101
+ end if domain.has_children?
102
+ MetaUtil::introduce_instance_alias(domain, "members", "children")
103
+ MetaUtil::introduce_instance_writer(domain, "members", "children")
104
+ end
105
+ end
106
+ end
107
+ end
108
+ items
109
+ end
110
+
111
+ private
112
+ def arcs(def_)
113
+
114
+ locators={}
115
+ def_["loc"].each do |loc|
116
+ href = loc["xlink:href"]
117
+ unless href.index("#").nil?
118
+ locators[loc["xlink:label"]]= href[href.index("#")+1, href.length]
119
+ else
120
+ locators[loc["xlink:label"]]=href
121
+ end
122
+ end
123
+
124
+ arc_map={}
125
+
126
+ def_["definitionArc"].each do |arc|
127
+
128
+ to_label = nil
129
+ unless @label_linkbase.nil?
130
+ to_label_obj=@label_linkbase.label(locators[arc["xlink:to"]], arc["preferredLabel"]) unless arc["preferredLabel"].nil?
131
+ to_label_obj=@label_linkbase.label(locators[arc["xlink:to"]], "http://www.xbrl.org/2003/role/label") if arc["preferredLabel"].nil?
132
+ to_label = to_label_obj.value unless to_label_obj.nil?
133
+ end
134
+
135
+ to = Definition::DefinitionArc.new(arc["xlink:to"], locators[arc["xlink:to"]], arc["xlink:arcrole"], arc["order"], arc["priority"], to_label, arc["xbrldt:contextElement"])
136
+ from = Definition::DefinitionArc.new(arc["xlink:from"], locators[arc["xlink:from"]])
137
+
138
+ if arc_map.has_key?(from)
139
+ arc_map[from] << to
140
+ else
141
+ arc_map[from]=[to]
142
+ end
143
+ end
144
+
145
+ return Linkbase.build_relationship(arc_map)
146
+ end
147
+
148
+ public
149
+ class Definition < Linkbase::Link
150
+
151
+ attr_reader :primary_items
152
+
153
+ def initialize(title, role, href=nil, primary_items=nil)
154
+ super(title, role, href, primary_items)
155
+ @primary_items=primary_items
156
+ end
157
+
158
+ def dimension_domain_map
159
+ dim_dom_map={}
160
+ @primary_items.each do |primary_item|
161
+ primary_item.hypercubes.each do |hypercube|
162
+ hypercube.dimensions.each do |dimension|
163
+ domains=[]
164
+ dimension.domains.each do |domain|
165
+ domains << domain.href.sub("_", ":")
166
+ end
167
+ dim_dom_map[dimension.href.sub("_", ":")]=domains
168
+ end
169
+ end
170
+ end unless @primary_items.nil?
171
+ dim_dom_map
172
+ end
173
+
174
+ class DefinitionArc < Linkbase::Link::Arc
175
+ attr_reader :ctx_element
176
+
177
+ def initialize(item_id, href, role=nil, order=nil, priority=nil, label=nil, ctx_element=nil)
178
+ super item_id, href, role, order, priority, label
179
+ @ctx_element=ctx_element
180
+ end
181
+ end
182
+ end
183
+
184
+ end
185
+ end
186
+ end
@@ -0,0 +1,128 @@
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 Xbrlware
21
+ module Linkbase
22
+ class LabelLinkbase < Linkbase
23
+ # Creates a LabelLinkbase.
24
+ #
25
+ # linkbase_path::
26
+ # XBRL Label Linkbase source. Tries to load and parse label linkbase from path.
27
+ def initialize(linkbase_path)
28
+ super linkbase_path
29
+ @label_map={}
30
+ parse_content
31
+ end
32
+
33
+ def label(item_name, label_role=nil, language=["en-US", "en"])
34
+ return @label_map[item_name] if label_role.nil?
35
+ return @label_map[item_name][label_role] unless @label_map[item_name].nil? if language.nil?
36
+ return @label_map[item_name][label_role][language] unless @label_map[item_name].nil? || @label_map[item_name][label_role].nil? if language.is_a?(String)
37
+ language.each do |lang|
38
+ lab = @label_map[item_name][label_role][lang] unless @label_map[item_name].nil? || @label_map[item_name][label_role].nil?
39
+ return lab unless lab.nil?
40
+ end if language.is_a?(Array)
41
+ return nil
42
+ end
43
+
44
+
45
+ def inspect(verbose_flag="q")
46
+ str = StringIO.new
47
+ @label_map.each do |key, value|
48
+ str << key
49
+ if verbose_flag=="v"
50
+ value.each do |k, v|
51
+ str << "\n" << "\t"
52
+ str << " role [" << k << "]"
53
+ str << "\n" << "\t\t"
54
+ v.each do |lang, label|
55
+ str << " lang [" << lang << "] label [" << label.value << "]"
56
+ end
57
+ end
58
+ end
59
+ str << "\n"
60
+ end
61
+ puts str.string
62
+ return self.to_s
63
+ end
64
+
65
+ private
66
+ def parse_content()
67
+
68
+ label_links=@linkbase_content["labelLink"]
69
+ label_links.each do |label_content|
70
+ loc_map=locator_map(label_content["loc"])
71
+ arc_map=linkarc_map(label_content["labelArc"])
72
+
73
+ labels=label_content["label"]
74
+ labels.each do |label|
75
+ l=Label.new(label["xlink:type"], label["xlink:role"], label["xlink:label"], label["xml:lang"], label["content"], @role_map[label["xlink:role"]])
76
+ item_name=loc_map[arc_map[label["xlink:label"]]]
77
+ if @label_map[item_name].nil?
78
+ @label_map[item_name]={l.role => {l.lang => l}}
79
+ else
80
+ if @label_map[item_name][l.role].nil?
81
+ @label_map[item_name][l.role] = {l.lang => l}
82
+ else
83
+ @label_map[item_name][l.role][l.lang] = l
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
89
+
90
+ def linkarc_map(arcs)
91
+ arc_map={}
92
+ arcs.each do |arc|
93
+ arc_map[arc["xlink:to"]]=arc["xlink:from"]
94
+ end
95
+ arc_map
96
+ end
97
+
98
+ def locator_map(locators)
99
+ locator_map={}
100
+ locators.each do |loc|
101
+ href = loc["xlink:href"]
102
+ unless href.index("#").nil?
103
+ locator_map[loc["xlink:label"]]=href[href.index("#")+1, href.length]
104
+ else
105
+ locator_map[loc["xlink:label"]]=href
106
+ end
107
+ end
108
+ locator_map
109
+ end
110
+
111
+ public
112
+ class Label
113
+
114
+ attr_reader :type, :role, :href, :label, :lang, :value
115
+
116
+ def initialize(type, role, label, lang, value, href=nil)
117
+ @type=type
118
+ @role=role
119
+ @label=label
120
+ @lang=lang
121
+ @value=value
122
+ @href=href
123
+ end
124
+ end
125
+
126
+ end
127
+ end
128
+ end