ramaze.ch.oddb.org 1.0.0

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 (286) hide show
  1. data/History.txt +6 -0
  2. data/LICENSE +339 -0
  3. data/Manifest.txt +285 -0
  4. data/README.txt +45 -0
  5. data/Rakefile +28 -0
  6. data/bin/admin +69 -0
  7. data/bin/exportd +63 -0
  8. data/bin/migrate +461 -0
  9. data/bin/oddbd +62 -0
  10. data/data/fulltext/data/dicts/french/fulltext.aff +1057 -0
  11. data/data/fulltext/data/dicts/french/fulltext.dict +91189 -0
  12. data/data/fulltext/data/dicts/french/fulltext.stop +135 -0
  13. data/data/fulltext/data/dicts/german/fulltext.aff +1233 -0
  14. data/data/fulltext/data/dicts/german/fulltext.dict +287574 -0
  15. data/data/fulltext/data/dicts/german/fulltext.stop +133 -0
  16. data/data/fulltext/data/german_compound/README +15 -0
  17. data/data/fulltext/data/german_compound/compound.pl +63 -0
  18. data/data/fulltext/data/german_compound/german.stop +20 -0
  19. data/data/fulltext/data/ispell-german-compound.tar.gz +0 -0
  20. data/data/fulltext/redist/dict_french/Makefile +12 -0
  21. data/data/fulltext/redist/dict_french/README.french +1 -0
  22. data/data/fulltext/redist/dict_french/dict_french.sql.in +7 -0
  23. data/data/fulltext/redist/dict_french/dict_snowball.c +56 -0
  24. data/data/fulltext/redist/dict_french/french_stem.c +1222 -0
  25. data/data/fulltext/redist/dict_french/french_stem.h +16 -0
  26. data/data/fulltext/redist/dict_french/subinclude.h +2 -0
  27. data/data/fulltext/redist/dict_german/Makefile +12 -0
  28. data/data/fulltext/redist/dict_german/README.german +1 -0
  29. data/data/fulltext/redist/dict_german/dict_german.sql.in +7 -0
  30. data/data/fulltext/redist/dict_german/dict_snowball.c +56 -0
  31. data/data/fulltext/redist/dict_german/german_stem.c +527 -0
  32. data/data/fulltext/redist/dict_german/german_stem.h +16 -0
  33. data/data/fulltext/redist/dict_german/subinclude.h +1 -0
  34. data/data/fulltext/redist/french_stem.c +1222 -0
  35. data/data/fulltext/redist/french_stem.h +16 -0
  36. data/data/fulltext/redist/german_stem.c +527 -0
  37. data/data/fulltext/redist/german_stem.h +16 -0
  38. data/lib/fixes/ruby19.rb +21 -0
  39. data/lib/fixes/selenium.rb +20 -0
  40. data/lib/fixes/singular.rb +8 -0
  41. data/lib/fixes/yaml.rb +13 -0
  42. data/lib/oddb.rb +11 -0
  43. data/lib/oddb/business/company.rb +18 -0
  44. data/lib/oddb/business/invoice.rb +75 -0
  45. data/lib/oddb/business/price.rb +60 -0
  46. data/lib/oddb/config.rb +73 -0
  47. data/lib/oddb/drugs.rb +16 -0
  48. data/lib/oddb/drugs/active_agent.rb +37 -0
  49. data/lib/oddb/drugs/atc.rb +53 -0
  50. data/lib/oddb/drugs/composition.rb +41 -0
  51. data/lib/oddb/drugs/ddd.rb +24 -0
  52. data/lib/oddb/drugs/dose.rb +107 -0
  53. data/lib/oddb/drugs/galenic_form.rb +21 -0
  54. data/lib/oddb/drugs/galenic_group.rb +17 -0
  55. data/lib/oddb/drugs/package.rb +87 -0
  56. data/lib/oddb/drugs/part.rb +56 -0
  57. data/lib/oddb/drugs/product.rb +25 -0
  58. data/lib/oddb/drugs/sequence.rb +61 -0
  59. data/lib/oddb/drugs/substance.rb +31 -0
  60. data/lib/oddb/drugs/substance_group.rb +13 -0
  61. data/lib/oddb/drugs/unit.rb +12 -0
  62. data/lib/oddb/export.rb +4 -0
  63. data/lib/oddb/export/csv.rb +89 -0
  64. data/lib/oddb/export/l10n_sessions.rb +30 -0
  65. data/lib/oddb/export/rss.rb +44 -0
  66. data/lib/oddb/export/server.rb +58 -0
  67. data/lib/oddb/export/xls.rb +119 -0
  68. data/lib/oddb/export/yaml.rb +123 -0
  69. data/lib/oddb/html/state/drugs/admin/package.rb +189 -0
  70. data/lib/oddb/html/state/drugs/admin/product.rb +56 -0
  71. data/lib/oddb/html/state/drugs/admin/sequence.rb +259 -0
  72. data/lib/oddb/html/state/drugs/ajax/explain_ddd_price.rb +19 -0
  73. data/lib/oddb/html/state/drugs/ajax/explain_price.rb +19 -0
  74. data/lib/oddb/html/state/drugs/ajax/global.rb +18 -0
  75. data/lib/oddb/html/state/drugs/ajax/package_infos.rb +19 -0
  76. data/lib/oddb/html/state/drugs/ajax/remote_infos.rb +19 -0
  77. data/lib/oddb/html/state/drugs/atc_browser.rb +39 -0
  78. data/lib/oddb/html/state/drugs/atc_guidelines.rb +21 -0
  79. data/lib/oddb/html/state/drugs/compare.rb +52 -0
  80. data/lib/oddb/html/state/drugs/download_export.rb +18 -0
  81. data/lib/oddb/html/state/drugs/fachinfo.rb +21 -0
  82. data/lib/oddb/html/state/drugs/feedback.rb +94 -0
  83. data/lib/oddb/html/state/drugs/global.rb +266 -0
  84. data/lib/oddb/html/state/drugs/init.rb +18 -0
  85. data/lib/oddb/html/state/drugs/login.rb +17 -0
  86. data/lib/oddb/html/state/drugs/package.rb +32 -0
  87. data/lib/oddb/html/state/drugs/patinfo.rb +21 -0
  88. data/lib/oddb/html/state/drugs/products.rb +51 -0
  89. data/lib/oddb/html/state/drugs/result.rb +125 -0
  90. data/lib/oddb/html/state/global.rb +165 -0
  91. data/lib/oddb/html/state/global_predefine.rb +17 -0
  92. data/lib/oddb/html/state/limit.rb +17 -0
  93. data/lib/oddb/html/state/login.rb +56 -0
  94. data/lib/oddb/html/state/paypal/checkout.rb +130 -0
  95. data/lib/oddb/html/state/paypal/collect.rb +46 -0
  96. data/lib/oddb/html/state/paypal/redirect.rb +18 -0
  97. data/lib/oddb/html/state/register_export.rb +38 -0
  98. data/lib/oddb/html/state/register_poweruser.rb +17 -0
  99. data/lib/oddb/html/state/viral/admin.rb +76 -0
  100. data/lib/oddb/html/state/viral/poweruser.rb +16 -0
  101. data/lib/oddb/html/util/annotated_list.rb +39 -0
  102. data/lib/oddb/html/util/know_it_all.rb +28 -0
  103. data/lib/oddb/html/util/known_user.rb +55 -0
  104. data/lib/oddb/html/util/lookandfeel.rb +554 -0
  105. data/lib/oddb/html/util/need_all_input.rb +29 -0
  106. data/lib/oddb/html/util/session.rb +88 -0
  107. data/lib/oddb/html/util/sort.rb +72 -0
  108. data/lib/oddb/html/util/unsaved_helper.rb +20 -0
  109. data/lib/oddb/html/util/validator.rb +54 -0
  110. data/lib/oddb/html/view/ajax/json.rb +22 -0
  111. data/lib/oddb/html/view/alpha_header.rb +28 -0
  112. data/lib/oddb/html/view/document.rb +126 -0
  113. data/lib/oddb/html/view/drugs/admin/package.rb +237 -0
  114. data/lib/oddb/html/view/drugs/admin/product.rb +104 -0
  115. data/lib/oddb/html/view/drugs/admin/sequence.rb +312 -0
  116. data/lib/oddb/html/view/drugs/ajax/explain_ddd_price.rb +87 -0
  117. data/lib/oddb/html/view/drugs/ajax/explain_price.rb +61 -0
  118. data/lib/oddb/html/view/drugs/ajax/package_infos.rb +105 -0
  119. data/lib/oddb/html/view/drugs/ajax/remote_infos.rb +44 -0
  120. data/lib/oddb/html/view/drugs/atc_browser.rb +68 -0
  121. data/lib/oddb/html/view/drugs/atc_guidelines.rb +94 -0
  122. data/lib/oddb/html/view/drugs/compare.rb +95 -0
  123. data/lib/oddb/html/view/drugs/download_export.rb +28 -0
  124. data/lib/oddb/html/view/drugs/fachinfo.rb +46 -0
  125. data/lib/oddb/html/view/drugs/feedback.rb +231 -0
  126. data/lib/oddb/html/view/drugs/init.rb +51 -0
  127. data/lib/oddb/html/view/drugs/legend.rb +24 -0
  128. data/lib/oddb/html/view/drugs/package.rb +398 -0
  129. data/lib/oddb/html/view/drugs/patinfo.rb +46 -0
  130. data/lib/oddb/html/view/drugs/products.rb +97 -0
  131. data/lib/oddb/html/view/drugs/result.rb +296 -0
  132. data/lib/oddb/html/view/drugs/search.rb +33 -0
  133. data/lib/oddb/html/view/drugs/template.rb +15 -0
  134. data/lib/oddb/html/view/foot.rb +52 -0
  135. data/lib/oddb/html/view/google.rb +23 -0
  136. data/lib/oddb/html/view/google_ads.rb +40 -0
  137. data/lib/oddb/html/view/head.rb +78 -0
  138. data/lib/oddb/html/view/limit.rb +109 -0
  139. data/lib/oddb/html/view/list.rb +59 -0
  140. data/lib/oddb/html/view/login.rb +38 -0
  141. data/lib/oddb/html/view/navigation.rb +67 -0
  142. data/lib/oddb/html/view/offset_header.rb +35 -0
  143. data/lib/oddb/html/view/paypal/collect.rb +84 -0
  144. data/lib/oddb/html/view/paypal/redirect.rb +51 -0
  145. data/lib/oddb/html/view/paypal/register_form.rb +106 -0
  146. data/lib/oddb/html/view/register_export.rb +29 -0
  147. data/lib/oddb/html/view/register_poweruser.rb +29 -0
  148. data/lib/oddb/html/view/rss/feedback.rb +64 -0
  149. data/lib/oddb/html/view/rss_preview.rb +54 -0
  150. data/lib/oddb/html/view/search.rb +104 -0
  151. data/lib/oddb/html/view/snapback.rb +24 -0
  152. data/lib/oddb/html/view/template.rb +56 -0
  153. data/lib/oddb/import/excel.rb +45 -0
  154. data/lib/oddb/import/import.rb +39 -0
  155. data/lib/oddb/import/rtf.rb +410 -0
  156. data/lib/oddb/import/whocc.rb +173 -0
  157. data/lib/oddb/import/xml.rb +15 -0
  158. data/lib/oddb/model.rb +179 -0
  159. data/lib/oddb/persistence/odba.rb +33 -0
  160. data/lib/oddb/persistence/odba/business/company.rb +13 -0
  161. data/lib/oddb/persistence/odba/business/invoice.rb +15 -0
  162. data/lib/oddb/persistence/odba/drugs/atc.rb +15 -0
  163. data/lib/oddb/persistence/odba/drugs/galenic_form.rb +18 -0
  164. data/lib/oddb/persistence/odba/drugs/galenic_group.rb +13 -0
  165. data/lib/oddb/persistence/odba/drugs/package.rb +25 -0
  166. data/lib/oddb/persistence/odba/drugs/product.rb +13 -0
  167. data/lib/oddb/persistence/odba/drugs/sequence.rb +21 -0
  168. data/lib/oddb/persistence/odba/drugs/substance.rb +21 -0
  169. data/lib/oddb/persistence/odba/drugs/substance_group.rb +13 -0
  170. data/lib/oddb/persistence/odba/drugs/unit.rb +13 -0
  171. data/lib/oddb/persistence/odba/export.rb +26 -0
  172. data/lib/oddb/persistence/odba/model.rb +68 -0
  173. data/lib/oddb/persistence/odba/regulatory/authority.rb +13 -0
  174. data/lib/oddb/persistence/odba/regulatory/registration.rb +13 -0
  175. data/lib/oddb/persistence/odba/text/document.rb +11 -0
  176. data/lib/oddb/persistence/odba/util/code.rb +11 -0
  177. data/lib/oddb/persistence/odba/util/m10l_document.rb +13 -0
  178. data/lib/oddb/persistence/og.rb +16 -0
  179. data/lib/oddb/persistence/og/drugs/composition.rb +14 -0
  180. data/lib/oddb/persistence/og/drugs/product.rb +14 -0
  181. data/lib/oddb/persistence/og/drugs/sequence.rb +15 -0
  182. data/lib/oddb/persistence/og/model.rb +25 -0
  183. data/lib/oddb/persistence/og/util/multilingual.rb +13 -0
  184. data/lib/oddb/redist/rtf_tools/reader.rb +139 -0
  185. data/lib/oddb/regulatory/authority.rb +14 -0
  186. data/lib/oddb/regulatory/registration.rb +15 -0
  187. data/lib/oddb/remote/business/company.rb +23 -0
  188. data/lib/oddb/remote/drugs/active_agent.rb +27 -0
  189. data/lib/oddb/remote/drugs/atc.rb +32 -0
  190. data/lib/oddb/remote/drugs/dose.rb +8 -0
  191. data/lib/oddb/remote/drugs/galenic_form.rb +25 -0
  192. data/lib/oddb/remote/drugs/package.rb +126 -0
  193. data/lib/oddb/remote/drugs/part.rb +30 -0
  194. data/lib/oddb/remote/drugs/product.rb +19 -0
  195. data/lib/oddb/remote/drugs/sequence.rb +46 -0
  196. data/lib/oddb/remote/drugs/substance.rb +20 -0
  197. data/lib/oddb/remote/drugs/unit.rb +19 -0
  198. data/lib/oddb/remote/object.rb +36 -0
  199. data/lib/oddb/remote/text/document.rb +20 -0
  200. data/lib/oddb/remote/util/m10l_document.rb +22 -0
  201. data/lib/oddb/text/chapter.rb +27 -0
  202. data/lib/oddb/text/document.rb +43 -0
  203. data/lib/oddb/text/format.rb +37 -0
  204. data/lib/oddb/text/paragraph.rb +58 -0
  205. data/lib/oddb/text/picture.rb +93 -0
  206. data/lib/oddb/text/table.rb +68 -0
  207. data/lib/oddb/util.rb +8 -0
  208. data/lib/oddb/util/annotated_list.rb +37 -0
  209. data/lib/oddb/util/code.rb +69 -0
  210. data/lib/oddb/util/comparison.rb +36 -0
  211. data/lib/oddb/util/exporter.rb +8 -0
  212. data/lib/oddb/util/feedback.rb +23 -0
  213. data/lib/oddb/util/ipn.rb +48 -0
  214. data/lib/oddb/util/m10l_document.rb +38 -0
  215. data/lib/oddb/util/mail.rb +73 -0
  216. data/lib/oddb/util/money.rb +60 -0
  217. data/lib/oddb/util/multilingual.rb +70 -0
  218. data/lib/oddb/util/quanty.rb +4 -0
  219. data/lib/oddb/util/quanty/fact.rb +229 -0
  220. data/lib/oddb/util/quanty/main.rb +160 -0
  221. data/lib/oddb/util/quanty/parse.rb +853 -0
  222. data/lib/oddb/util/quanty/units.dump +0 -0
  223. data/lib/oddb/util/server.rb +117 -0
  224. data/lib/oddb/util/updater.rb +41 -0
  225. data/lib/oddb/util/ydim.rb +110 -0
  226. data/lib/oddb/util/yus.rb +46 -0
  227. data/test/business/test_company.rb +29 -0
  228. data/test/business/test_price.rb +46 -0
  229. data/test/drugs/test_active_agent.rb +53 -0
  230. data/test/drugs/test_atc.rb +54 -0
  231. data/test/drugs/test_composition.rb +88 -0
  232. data/test/drugs/test_ddd.rb +22 -0
  233. data/test/drugs/test_dose.rb +190 -0
  234. data/test/drugs/test_galenic_form.rb +41 -0
  235. data/test/drugs/test_package.rb +173 -0
  236. data/test/drugs/test_part.rb +32 -0
  237. data/test/drugs/test_product.rb +31 -0
  238. data/test/drugs/test_sequence.rb +140 -0
  239. data/test/drugs/test_substance.rb +51 -0
  240. data/test/drugs/test_substance_group.rb +27 -0
  241. data/test/export/test_rss.rb +94 -0
  242. data/test/export/test_server.rb +117 -0
  243. data/test/export/test_xls.rb +152 -0
  244. data/test/export/test_yaml.rb +120 -0
  245. data/test/import/data/html/whocc/A.html +56 -0
  246. data/test/import/data/html/whocc/A03.html +48 -0
  247. data/test/import/data/html/whocc/A03AB.html +48 -0
  248. data/test/import/data/html/whocc/A06AA.html +47 -0
  249. data/test/import/data/html/whocc/C03.html +47 -0
  250. data/test/import/data/html/whocc/login.html +77 -0
  251. data/test/import/data/xml/ATC_2006.xml +47 -0
  252. data/test/import/data/xml/ATC_2006_ddd.xml +35 -0
  253. data/test/import/test_excel.rb +34 -0
  254. data/test/import/test_rtf.rb +40 -0
  255. data/test/import/test_whocc.rb +315 -0
  256. data/test/remote/drugs/test_active_agent.rb +36 -0
  257. data/test/selenium/selenium-server.jar +0 -0
  258. data/test/selenium/test_atc_browser.rb +122 -0
  259. data/test/selenium/test_atc_guidelines.rb +96 -0
  260. data/test/selenium/test_collect.rb +138 -0
  261. data/test/selenium/test_compare.rb +206 -0
  262. data/test/selenium/test_fachinfo.rb +130 -0
  263. data/test/selenium/test_feedback.rb +196 -0
  264. data/test/selenium/test_init.rb +52 -0
  265. data/test/selenium/test_limit.rb +305 -0
  266. data/test/selenium/test_login.rb +67 -0
  267. data/test/selenium/test_package.rb +512 -0
  268. data/test/selenium/test_patinfo.rb +131 -0
  269. data/test/selenium/test_product.rb +80 -0
  270. data/test/selenium/test_products.rb +142 -0
  271. data/test/selenium/test_search.rb +715 -0
  272. data/test/selenium/test_sequence.rb +543 -0
  273. data/test/selenium/unit.rb +185 -0
  274. data/test/stub/http_server.rb +169 -0
  275. data/test/stub/model.rb +173 -0
  276. data/test/suite.rb +15 -0
  277. data/test/test_model.rb +83 -0
  278. data/test/util/test_code.rb +74 -0
  279. data/test/util/test_ipn.rb +117 -0
  280. data/test/util/test_mail.rb +86 -0
  281. data/test/util/test_multilingual.rb +97 -0
  282. data/test/util/test_server.rb +48 -0
  283. data/test/util/test_updater.rb +353 -0
  284. data/test/util/test_ydim.rb +115 -0
  285. data/test/util/test_yus.rb +79 -0
  286. metadata +418 -0
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ # Html::Util::NeedAllInput -- de.oddb.org -- 08.04.2008 -- hwyss@ywesee.com
3
+
4
+ module ODDB
5
+ module Html
6
+ module Util
7
+ module NeedAllInput
8
+ def user_input(keys, mandatory)
9
+ input = super
10
+ pass1 = input[:pass]
11
+ pass2 = input[:confirm_pass]
12
+ unless(@user || pass1 == pass2)
13
+ err1 = create_error(:e_non_matching_set_pass, :pass, pass1)
14
+ err2 = create_error(:e_non_matching_set_pass, :confirm_pass, pass2)
15
+ @errors.store(:pass, err1)
16
+ @errors.store(:confirm_pass, err2)
17
+ end
18
+ msg = 'e_need_all_input'
19
+ @errors.each { |key, err|
20
+ if(err.message.match(/^e_missing_/))
21
+ @errors.store(key, create_error(msg, key, err.value))
22
+ end
23
+ }
24
+ input
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env ruby
2
+ # Html::Util::Session -- de.oddb.org -- 27.10.2006 -- hwyss@ywesee.com
3
+
4
+ require 'oddb/config'
5
+ require 'oddb/html/state/drugs/init'
6
+ require 'oddb/html/state/global'
7
+ require 'oddb/html/state/drugs/global'
8
+ require 'oddb/html/util/lookandfeel'
9
+ require 'sbsm/redirector'
10
+ require 'sbsm/session'
11
+
12
+ module ODDB
13
+ module Html
14
+ module Util
15
+ class Session < SBSM::Session
16
+ attr_reader :desired_state
17
+ include SBSM::Redirector
18
+ DEFAULT_FLAVOR = 'oddb'
19
+ DEFAULT_LANGUAGE = 'de'
20
+ DEFAULT_STATE = State::Drugs::Init
21
+ DEFAULT_ZONE = 'drugs'
22
+ EXPIRES = ODDB.config.session_timeout
23
+ LF_FACTORY = LookandfeelFactory
24
+ @@requests ||= {}
25
+ def Session.reset_query_limit(ip = nil)
26
+ if(ip)
27
+ @@requests.delete(ip)
28
+ else
29
+ @@requests.clear
30
+ end
31
+ end
32
+ def allowed?(*args)
33
+ @user.allowed?(*args)
34
+ rescue
35
+ false
36
+ end
37
+ def limit_queries
38
+ requests = (@@requests[remote_ip] ||= [])
39
+ if(@state.limited?)
40
+ requests.delete_if { |other|
41
+ (@process_start - other) >= ODDB.config.query_limit_phase
42
+ }
43
+ requests.push(@process_start)
44
+ if(requests.size > ODDB.config.query_limit)
45
+ @desired_state = @state
46
+ @active_state = @state = @state.limit_state
47
+ @state.request_path = @desired_state.request_path
48
+ end
49
+ end
50
+ end
51
+ def login
52
+ @user = @app.login(user_input(:email), user_input(:pass))
53
+ @user.session = self if(@user.respond_to?(:session=))
54
+ @user
55
+ end
56
+ def logout
57
+ @app.logout(@user.auth_session) if(@user.respond_to?(:auth_session))
58
+ super
59
+ end
60
+ def navigation
61
+ state.navigation
62
+ end
63
+ def pagelength
64
+ 100
65
+ end
66
+ def passed_turing_test?
67
+ ## At the moment, attempting to produce a captcha using the Turing-Gem
68
+ # results in a Segmentation-Fault. Returning true here is a convenient way
69
+ # of disabling the captcha.
70
+ # state.respond_to?(:passed_turing_test) && state.passed_turing_test
71
+ true
72
+ end
73
+ def process(request)
74
+ @request_path = request.unparsed_uri
75
+ @process_start = Time.now
76
+ super
77
+ if(!is_crawler? && lookandfeel.enabled?(:query_limit))
78
+ limit_queries
79
+ end
80
+ '' ## return empty string across the drb-border
81
+ end
82
+ def server_name
83
+ super || @server_name = ODDB.config.server_name
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/env ruby
2
+ # Html::Util::Sort -- de.oddb.org -- 07.12.2006 -- hwyss@ywesee.com
3
+
4
+ module ODDB
5
+ module Html
6
+ module Util
7
+ module Sort
8
+ def sort
9
+ _sort
10
+ self
11
+ end
12
+ def _sort
13
+ if(key = @session.user_input(:sortvalue))
14
+ sort_by(key.to_sym)
15
+ end
16
+ end
17
+ def sort_by(key, default='')
18
+ sorter = sort_proc(key) || Proc.new { |pac| pac.send(key) || default }
19
+ if(@sortvalue == key)
20
+ @reverse = !@reverse
21
+ else
22
+ @reverse = false
23
+ @sortvalue = key
24
+ end
25
+ @model = _sort_by(@model, @reverse, &sorter)
26
+ end
27
+ def _sort_by(model, reverse, &sorter)
28
+ model = model.sort_by(&sorter)
29
+ if(reverse)
30
+ model.reverse!
31
+ end
32
+ model
33
+ end
34
+ def sort_proc(key)
35
+ end
36
+ end
37
+ module PackageSort
38
+ include Sort
39
+ def sort_proc(key)
40
+ case key
41
+ when :company
42
+ Proc.new { |pac|
43
+ (multilingual = pac.send(key)) \
44
+ && multilingual.name.send(@session.language) || '' }
45
+ when :ddd_prices
46
+ Proc.new { |pac|
47
+ pac.ddds.collect { |ddd| pac.dose_price(ddd.dose) }.compact
48
+ }
49
+ when :difference
50
+ nilval = 9999999.0
51
+ Proc.new { |pac| pac.difference || nilval }
52
+ when :package_infos
53
+ Proc.new { |pac| [
54
+ pac.code(:festbetragsgruppe).to_s,
55
+ pac.code(:festbetragsstufe).to_s,
56
+ pac.code(:prescription).to_s,
57
+ pac.code(:zuzahlunggsbefreit).to_s,
58
+ ] }
59
+ when :price_public, :price_festbetrag
60
+ nilval = ODDB::Util::Money.new(0)
61
+ key = key.to_s.sub(/^price_/, '').to_sym
62
+ Proc.new { |pac| pac.price(key) || nilval }
63
+ when :product
64
+ Proc.new { |pac|
65
+ pac.name.send(@session.language) \
66
+ || ((prod = pac.product) && prod.name.send(@session.language)) || '' }
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+ # Html::Util::UnsavedHelper -- de.oddb.org -- 10.04.2008 -- hwyss@ywesee.com
3
+
4
+ module ODDB
5
+ module Html
6
+ module Util
7
+ class UnsavedHelper
8
+ attr_reader :delegate
9
+ def initialize(delegate)
10
+ @delegate = delegate
11
+ end
12
+ def method_missing(key, *args, &block)
13
+ unless /^(add_|save$)/.match(key.to_s)
14
+ @delegate.send(key, *args, &block)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env ruby
2
+ # Html::Util::Validator -- de.oddb.org -- 02.11.2006 -- hwyss@ywesee.com
3
+
4
+ require 'sbsm/validator'
5
+
6
+ module ODDB
7
+ module Html
8
+ module Util
9
+ class Validator < SBSM::Validator
10
+ BOOLEAN = [ :code_prescription, :code_zuzahlungsbefreit, :email_public,
11
+ :item_good_experience, :item_good_impression, :item_recommended,
12
+ :item_helps, ]
13
+ ENUMS = {
14
+ :display => ['paged', 'grouped'],
15
+ :dstype => ['tradename', 'compare', 'substance', 'company',
16
+ 'indication'],
17
+ :range => ("A".."Z").to_a.push('0-9'),
18
+ :salutation => [nil, "salutation_f", "salutation_m"],
19
+ :sortvalue => [ 'active_agents', 'atc', 'code_festbetragsstufe',
20
+ 'code_zuzahlungsbefreit', 'company', 'ddd_prices', 'difference',
21
+ 'doses', 'package_infos', 'price_festbetrag', 'price_difference',
22
+ 'price_public', 'product', 'size',
23
+ ],
24
+ }
25
+ EVENTS = [ :ajax_autofill, :ajax_create_active_agent, :ajax_create_composition,
26
+ :ajax_create_part, :ajax_delete_active_agent,
27
+ :ajax_delete_composition, :ajax_delete_part, :atc_assign,
28
+ :atc_browser, :collect, :ddd, :delete, :explain_ddd_price,
29
+ :explain_price, :fachinfo, :feedback, :checkout, :compare,
30
+ :compare_remote, :home, :login, :login_, :logout, :new_package,
31
+ :new_sequence, :package, :package_infos, :patinfo, :proceed_export,
32
+ :proceed_poweruser, :product, :products, :remote_infos, :search,
33
+ :sequence, :sort, :update ]
34
+ NUMERIC = [ :active_agent, :code_festbetragsgruppe,
35
+ :code_festbetragsstufe, :composition, :days, :equivalence_factor,
36
+ :multi, :offset, :part, :price_exfactory, :price_festbetrag,
37
+ :price_public, :sequence, :size ]
38
+ PATTERNS = {
39
+ :atc => /[ABCGHJLMNPRSV](\d{2}([A-Z]([A-Z](\d{2})?)?)?)?/,
40
+ }
41
+ STRINGS = [ :atc_name, :captcha, :chapter, :code, :code_cid, :company, :dose,
42
+ :fachinfo_url, :galenic_form, :invoice, :message, :name,
43
+ :name_first, :name_last, :patinfo_url, :cid, :quantity, :query,
44
+ :registration, :substance, :uid, :unit ]
45
+ def page(value)
46
+ if(num = validate_numeric(:page, value))
47
+ # pages are 1-based for the human user
48
+ [num.to_i - 1, 0].max
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env ruby
2
+ # Html::View::Ajax::Json -- oddb -- 22.06.2006 -- hwyss@ywesee.com
3
+
4
+ require 'htmlgrid/component'
5
+ require 'json'
6
+
7
+ module ODDB
8
+ module Html
9
+ module View
10
+ module Ajax
11
+ class Json < HtmlGrid::Component
12
+ HTTP_HEADERS = {
13
+ 'Content-Type' => 'text/javascript; charset=UTF-8',
14
+ }
15
+ def to_html(context)
16
+ @model.to_json
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env ruby
2
+ # Html::View::AlphaHeader -- de.oddb.org -- 07.12.2006 -- hwyss@ywesee.com
3
+
4
+ module ODDB
5
+ module Html
6
+ module View
7
+ module AlphaHeader
8
+ EMPTY_LIST_KEY = :choose_range
9
+ def compose_header(offset=[0,0])
10
+ offset = super
11
+ current_range = @model.query
12
+ @session.state.intervals.each { |range|
13
+ link = HtmlGrid::Link.new(:range, @model, @session, self)
14
+ link.value = range
15
+ unless(range == current_range)
16
+ link.href = @lookandfeel._event_url(@session.direct_event,
17
+ 'range' => range)
18
+ end
19
+ @grid.add(link, *offset)
20
+ }
21
+ @grid.set_colspan(offset.at(0), offset.at(1), full_colspan)
22
+ @grid.add_attribute('id', 'alphaheader', *offset)
23
+ resolve_offset(offset, self::class::OFFSET_STEP)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,126 @@
1
+ #!/usr/bin/env ruby
2
+ # Html::View::Document -- de.oddb.org -- 30.10.2007 -- hwyss@ywesee.com
3
+
4
+ require 'htmlgrid/divlist'
5
+ require 'htmlgrid/image'
6
+
7
+ module ODDB
8
+ module Html
9
+ module View
10
+ class ChapterNames < HtmlGrid::DivList
11
+ COMPONENTS = {
12
+ [0,0] => :link,
13
+ }
14
+ def initialize(type, *args)
15
+ @document_type = type
16
+ super(*args)
17
+ end
18
+ def init
19
+ @current = @session.user_input(:chapter)
20
+ @model = @model.chapter_names.unshift(nil)
21
+ super
22
+ @css_grid = @model.collect { |name|
23
+ { "id" => "chapter_%s" % name || @document_type }
24
+ }
25
+ end
26
+ def link(model)
27
+ link = HtmlGrid::Link.new("chapter_#{model || @document_type}",
28
+ model, @session, self)
29
+ if(@current != model)
30
+ event, args = @session.direct_event
31
+ args.push :chapter, model if(model)
32
+ link.href = @lookandfeel._event_url(event, args)
33
+ end
34
+ link.value ||= model
35
+ link
36
+ end
37
+ end
38
+ class Chapter < HtmlGrid::Component
39
+ STYLES = {
40
+ "b" => [["font-weight", "bold"]],
41
+ "i" => [["font-style", "italic"]],
42
+ "sub" => [["vertical-align", "sub"], ["font-size", "smaller"]],
43
+ "sup" => [["vertical-align", "sup"], ["font-size", "smaller"]],
44
+ "symbol"=> [["font-family", "symbol, 'Standard Symbols L'"]],
45
+ "u" => [["text-decoration", "underline"]],
46
+ }
47
+ def to_html(context)
48
+ @model.paragraphs.inject('') { |memo, paragraph|
49
+ memo << case paragraph
50
+ when Text::Picture
51
+ context.img(:src => paragraph.path, :alt => paragraph.filename)
52
+ when Text::Table
53
+ formatted_table(context, paragraph)
54
+ else
55
+ formatted_paragraph(context, paragraph)
56
+ end
57
+ }
58
+ end
59
+ def formatted_paragraph(context, paragraph)
60
+ return '' unless paragraph
61
+ args = {}
62
+ if paragraph.respond_to?(:preformatted?) && paragraph.preformatted?
63
+ args.store 'style', 'white-space:pre;font-family:fixed-width,Courier'
64
+ end
65
+ context.p(args) {
66
+ _formatted_paragraph(context, paragraph)
67
+ }
68
+ end
69
+ def _formatted_paragraph(context, paragraph)
70
+ return '' unless paragraph
71
+ paragraph.formats.inject('') { |memo, format|
72
+ memo << formatted_string(context, format.values) {
73
+ paragraph[format.range].gsub(/\n/, context.br)
74
+ }
75
+ }
76
+ end
77
+ def formatted_string(context, stack, &block)
78
+ if(stack.empty?)
79
+ block.call
80
+ else
81
+ styles = stack.inject({}) { |memo, fmt|
82
+ if pairs = STYLES[fmt]
83
+ pairs.each { |pair| memo.store(*pair) }
84
+ else
85
+ warn "unknown style '#{fmt.inspect}'"
86
+ end
87
+ memo
88
+ }
89
+ args = { :style => styles.collect { |pair| pair.join(":") }.join(";") }
90
+ context.span(args) { block.call }
91
+ end
92
+ end
93
+ def formatted_table(context, table)
94
+ context.table {
95
+ memo = ''
96
+ table.each_normalized { |row|
97
+ memo << context.tr {
98
+ row.inject('') { |tr, cell|
99
+ args = {}
100
+ if(cell && (align = cell.align))
101
+ args.store :style, "text-align: #{align}"
102
+ end
103
+ tr << context.td(args) { _formatted_paragraph(context, cell) }
104
+ }
105
+ }
106
+ }
107
+ memo
108
+ }
109
+ end
110
+ end
111
+ class Document < HtmlGrid::DivList
112
+ COMPONENTS = {
113
+ [0,0] => Chapter,
114
+ }
115
+ CSS_MAP = ["chapter"]
116
+ def init
117
+ @model = @model.chapters
118
+ if(name = @session.user_input(:chapter))
119
+ @model = @model.select { |chapter| chapter.name == name }
120
+ end
121
+ super
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end