ccls-ccls_engine 3.11.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 (269) hide show
  1. data/README.rdoc +182 -0
  2. data/app/models/abstract.rb +181 -0
  3. data/app/models/abstract_search.rb +50 -0
  4. data/app/models/abstract_validations.rb +324 -0
  5. data/app/models/address.rb +70 -0
  6. data/app/models/address_type.rb +15 -0
  7. data/app/models/addressing.rb +147 -0
  8. data/app/models/aliquot.rb +44 -0
  9. data/app/models/aliquot_sample_format.rb +13 -0
  10. data/app/models/analysis.rb +14 -0
  11. data/app/models/bc_request.rb +20 -0
  12. data/app/models/candidate_control.rb +101 -0
  13. data/app/models/context.rb +23 -0
  14. data/app/models/context_data_source.rb +4 -0
  15. data/app/models/county.rb +16 -0
  16. data/app/models/data_source.rb +24 -0
  17. data/app/models/diagnosis.rb +23 -0
  18. data/app/models/document_type.rb +16 -0
  19. data/app/models/document_version.rb +27 -0
  20. data/app/models/enrollment.rb +78 -0
  21. data/app/models/enrollment_validations.rb +167 -0
  22. data/app/models/follow_up.rb +16 -0
  23. data/app/models/follow_up_type.rb +18 -0
  24. data/app/models/gift_card.rb +22 -0
  25. data/app/models/gift_card_search.rb +137 -0
  26. data/app/models/home_exposure_response.rb +24 -0
  27. data/app/models/homex_outcome.rb +75 -0
  28. data/app/models/hospital.rb +22 -0
  29. data/app/models/icf_master_id.rb +30 -0
  30. data/app/models/icf_master_tracker.rb +217 -0
  31. data/app/models/icf_master_tracker_change.rb +9 -0
  32. data/app/models/icf_master_tracker_update.rb +50 -0
  33. data/app/models/ineligible_reason.rb +26 -0
  34. data/app/models/instrument.rb +26 -0
  35. data/app/models/instrument_type.rb +17 -0
  36. data/app/models/instrument_version.rb +28 -0
  37. data/app/models/interview.rb +122 -0
  38. data/app/models/interview_method.rb +17 -0
  39. data/app/models/interview_outcome.rb +16 -0
  40. data/app/models/language.rb +28 -0
  41. data/app/models/live_birth_data_update.rb +142 -0
  42. data/app/models/operational_event.rb +99 -0
  43. data/app/models/operational_event_type.rb +31 -0
  44. data/app/models/organization.rb +28 -0
  45. data/app/models/patient.rb +63 -0
  46. data/app/models/patient_validations.rb +118 -0
  47. data/app/models/person.rb +28 -0
  48. data/app/models/phone_number.rb +105 -0
  49. data/app/models/phone_type.rb +15 -0
  50. data/app/models/project.rb +39 -0
  51. data/app/models/project_outcome.rb +19 -0
  52. data/app/models/race.rb +31 -0
  53. data/app/models/refusal_reason.rb +23 -0
  54. data/app/models/sample.rb +168 -0
  55. data/app/models/sample_kit.rb +14 -0
  56. data/app/models/sample_outcome.rb +16 -0
  57. data/app/models/sample_temperature.rb +14 -0
  58. data/app/models/sample_type.rb +37 -0
  59. data/app/models/search.rb +195 -0
  60. data/app/models/section.rb +18 -0
  61. data/app/models/state.rb +25 -0
  62. data/app/models/study_subject.rb +237 -0
  63. data/app/models/study_subject_abstracts.rb +47 -0
  64. data/app/models/study_subject_addresses.rb +34 -0
  65. data/app/models/study_subject_associations.rb +38 -0
  66. data/app/models/study_subject_duplicates.rb +111 -0
  67. data/app/models/study_subject_enrollments.rb +17 -0
  68. data/app/models/study_subject_homex_outcome.rb +22 -0
  69. data/app/models/study_subject_identifier.rb +153 -0
  70. data/app/models/study_subject_interviews.rb +25 -0
  71. data/app/models/study_subject_languages.rb +21 -0
  72. data/app/models/study_subject_operational_events.rb +66 -0
  73. data/app/models/study_subject_patient.rb +177 -0
  74. data/app/models/study_subject_pii.rb +74 -0
  75. data/app/models/study_subject_races.rb +25 -0
  76. data/app/models/study_subject_search.rb +260 -0
  77. data/app/models/study_subject_validations.rb +116 -0
  78. data/app/models/subject_language.rb +11 -0
  79. data/app/models/subject_race.rb +11 -0
  80. data/app/models/subject_relationship.rb +21 -0
  81. data/app/models/subject_type.rb +22 -0
  82. data/app/models/tracing_status.rb +20 -0
  83. data/app/models/transfer.rb +40 -0
  84. data/app/models/unit.rb +14 -0
  85. data/app/models/vital_status.rb +19 -0
  86. data/app/models/zip_code.rb +36 -0
  87. data/config/abstract_fields.yml +1038 -0
  88. data/config/abstract_sections.yml +77 -0
  89. data/config/home_exposure_response_fields.yml +583 -0
  90. data/config/icf_master_tracker_update.yml +56 -0
  91. data/config/live_birth_data_update.yml +56 -0
  92. data/config/shared_use_db.yml +4 -0
  93. data/generators/ccls_engine/USAGE +2 -0
  94. data/generators/ccls_engine/ccls_engine_generator.rb +123 -0
  95. data/generators/ccls_engine/templates/autotest_ccls_engine.rb +3 -0
  96. data/generators/ccls_engine/templates/ccls_engine.rake +12 -0
  97. data/generators/ccls_engine/templates/fixtures/address_types.yml +30 -0
  98. data/generators/ccls_engine/templates/fixtures/context_data_sources.yml +54 -0
  99. data/generators/ccls_engine/templates/fixtures/contexts.yml +19 -0
  100. data/generators/ccls_engine/templates/fixtures/data_sources.yml +40 -0
  101. data/generators/ccls_engine/templates/fixtures/diagnoses.yml +40 -0
  102. data/generators/ccls_engine/templates/fixtures/document_types.yml +65 -0
  103. data/generators/ccls_engine/templates/fixtures/document_versions.csv +155 -0
  104. data/generators/ccls_engine/templates/fixtures/follow_up_types.yml +16 -0
  105. data/generators/ccls_engine/templates/fixtures/hospitals.yml +114 -0
  106. data/generators/ccls_engine/templates/fixtures/ineligible_reasons.yml +35 -0
  107. data/generators/ccls_engine/templates/fixtures/instrument_types.yml +26 -0
  108. data/generators/ccls_engine/templates/fixtures/instrument_versions.yml +22 -0
  109. data/generators/ccls_engine/templates/fixtures/instruments.yml +22 -0
  110. data/generators/ccls_engine/templates/fixtures/interview_methods.yml +30 -0
  111. data/generators/ccls_engine/templates/fixtures/interview_outcomes.yml +31 -0
  112. data/generators/ccls_engine/templates/fixtures/languages.yml +34 -0
  113. data/generators/ccls_engine/templates/fixtures/operational_event_types.yml +141 -0
  114. data/generators/ccls_engine/templates/fixtures/organizations.yml +198 -0
  115. data/generators/ccls_engine/templates/fixtures/people.yml +130 -0
  116. data/generators/ccls_engine/templates/fixtures/phone_types.yml +30 -0
  117. data/generators/ccls_engine/templates/fixtures/project_outcomes.yml +25 -0
  118. data/generators/ccls_engine/templates/fixtures/projects.yml +59 -0
  119. data/generators/ccls_engine/templates/fixtures/races.yml +52 -0
  120. data/generators/ccls_engine/templates/fixtures/refusal_reasons.yml +55 -0
  121. data/generators/ccls_engine/templates/fixtures/sample_outcomes.yml +36 -0
  122. data/generators/ccls_engine/templates/fixtures/sample_temperatures.yml +16 -0
  123. data/generators/ccls_engine/templates/fixtures/sample_types.yml +147 -0
  124. data/generators/ccls_engine/templates/fixtures/sections.yml +31 -0
  125. data/generators/ccls_engine/templates/fixtures/states.yml +363 -0
  126. data/generators/ccls_engine/templates/fixtures/subject_relationships.yml +46 -0
  127. data/generators/ccls_engine/templates/fixtures/subject_types.yml +30 -0
  128. data/generators/ccls_engine/templates/fixtures/tracing_statuses.yml +30 -0
  129. data/generators/ccls_engine/templates/fixtures/units.yml +13 -0
  130. data/generators/ccls_engine/templates/fixtures/vital_statuses.yml +28 -0
  131. data/generators/ccls_engine/templates/functional/roles_controller_test.rb +142 -0
  132. data/generators/ccls_engine/templates/functional/sessions_controller_test.rb +19 -0
  133. data/generators/ccls_engine/templates/functional/users_controller_test.rb +94 -0
  134. data/generators/ccls_engine/templates/images/sort_down.png +0 -0
  135. data/generators/ccls_engine/templates/images/sort_up.png +0 -0
  136. data/generators/ccls_engine/templates/initializer.rb +28 -0
  137. data/generators/ccls_engine/templates/javascripts/ccls_engine.js +24 -0
  138. data/generators/ccls_engine/templates/javascripts/jquery-ui.js +763 -0
  139. data/generators/ccls_engine/templates/javascripts/jquery.js +154 -0
  140. data/generators/ccls_engine/templates/javascripts/jrails.js +1 -0
  141. data/generators/ccls_engine/templates/migrations/create_user_invitations.rb +18 -0
  142. data/generators/ccls_engine/templates/migrations/create_users.rb +33 -0
  143. data/generators/ccls_engine/templates/migrations/drop_user_invitations.rb +18 -0
  144. data/generators/ccls_engine/templates/stylesheets/ccls_engine.css +180 -0
  145. data/generators/ccls_engine/templates/stylesheets/user.css +35 -0
  146. data/generators/ccls_engine/templates/stylesheets/users.css +23 -0
  147. data/generators/ccls_engine/templates/unit/core_extension_test.rb +18 -0
  148. data/generators/ccls_engine/templates/unit/role_test.rb +30 -0
  149. data/generators/ccls_engine/templates/unit/user_test.rb +321 -0
  150. data/lib/ccls-ccls_engine.rb +1 -0
  151. data/lib/ccls_engine.rb +135 -0
  152. data/lib/ccls_engine/action_view_extension.rb +3 -0
  153. data/lib/ccls_engine/action_view_extension/base.rb +53 -0
  154. data/lib/ccls_engine/action_view_extension/form_builder.rb +39 -0
  155. data/lib/ccls_engine/active_record_extension.rb +2 -0
  156. data/lib/ccls_engine/active_record_extension/base.rb +70 -0
  157. data/lib/ccls_engine/active_record_shared.rb +8 -0
  158. data/lib/ccls_engine/assertions.rb +69 -0
  159. data/lib/ccls_engine/autotest.rb +54 -0
  160. data/lib/ccls_engine/ccls_user.rb +117 -0
  161. data/lib/ccls_engine/core_extension.rb +14 -0
  162. data/lib/ccls_engine/date_and_time_formats.rb +30 -0
  163. data/lib/ccls_engine/factories.rb +880 -0
  164. data/lib/ccls_engine/factory_test_helper.rb +276 -0
  165. data/lib/ccls_engine/helper.rb +112 -0
  166. data/lib/ccls_engine/icf_master_tracker_update_test_helper.rb +121 -0
  167. data/lib/ccls_engine/live_birth_data_update_test_helper.rb +110 -0
  168. data/lib/ccls_engine/package_test_helper.rb +49 -0
  169. data/lib/ccls_engine/shared_database.rb +20 -0
  170. data/lib/ccls_engine/tasks.rb +1 -0
  171. data/lib/ccls_engine/test_tasks.rb +52 -0
  172. data/lib/ccls_engine/translation_table.rb +86 -0
  173. data/lib/shared_migration.rb +5 -0
  174. data/lib/surveyor/survey_extensions.rb +125 -0
  175. data/lib/tasks/application.rake +286 -0
  176. data/lib/tasks/calnet_authenticated.rake +6 -0
  177. data/lib/tasks/common_lib.rake +7 -0
  178. data/lib/tasks/database.rake +288 -0
  179. data/lib/tasks/documentation.rake +71 -0
  180. data/lib/tasks/homex_import.rake +723 -0
  181. data/lib/tasks/odms_import.rake +1116 -0
  182. data/lib/tasks/simply_authorized.rake +6 -0
  183. data/lib/tasks/ucb_ccls_engine_tasks.rake +4 -0
  184. data/lib/tasks/use_db.rake +4 -0
  185. data/rails/init.rb +4 -0
  186. data/test/unit/ccls/abstract_search_test.rb +150 -0
  187. data/test/unit/ccls/abstract_test.rb +674 -0
  188. data/test/unit/ccls/address_test.rb +155 -0
  189. data/test/unit/ccls/address_type_test.rb +25 -0
  190. data/test/unit/ccls/addressing_test.rb +466 -0
  191. data/test/unit/ccls/aliquot_sample_format_test.rb +20 -0
  192. data/test/unit/ccls/aliquot_test.rb +156 -0
  193. data/test/unit/ccls/analysis_test.rb +31 -0
  194. data/test/unit/ccls/bc_request_test.rb +43 -0
  195. data/test/unit/ccls/candidate_control_test.rb +712 -0
  196. data/test/unit/ccls/context_data_source_test.rb +26 -0
  197. data/test/unit/ccls/context_test.rb +40 -0
  198. data/test/unit/ccls/core_extension_test.rb +17 -0
  199. data/test/unit/ccls/county_test.rb +34 -0
  200. data/test/unit/ccls/data_source_test.rb +41 -0
  201. data/test/unit/ccls/diagnosis_test.rb +51 -0
  202. data/test/unit/ccls/document_type_test.rb +35 -0
  203. data/test/unit/ccls/document_version_test.rb +68 -0
  204. data/test/unit/ccls/enrollment_test.rb +575 -0
  205. data/test/unit/ccls/follow_up_test.rb +23 -0
  206. data/test/unit/ccls/follow_up_type_test.rb +34 -0
  207. data/test/unit/ccls/gift_card_search_test.rb +153 -0
  208. data/test/unit/ccls/gift_card_test.rb +40 -0
  209. data/test/unit/ccls/home_exposure_response_test.rb +83 -0
  210. data/test/unit/ccls/homex_outcome_test.rb +199 -0
  211. data/test/unit/ccls/hospital_test.rb +102 -0
  212. data/test/unit/ccls/icf_master_id_test.rb +30 -0
  213. data/test/unit/ccls/icf_master_tracker_change_test.rb +14 -0
  214. data/test/unit/ccls/icf_master_tracker_test.rb +132 -0
  215. data/test/unit/ccls/icf_master_tracker_update_test.rb +176 -0
  216. data/test/unit/ccls/ineligible_reason_test.rb +48 -0
  217. data/test/unit/ccls/instrument_test.rb +62 -0
  218. data/test/unit/ccls/instrument_type_test.rb +39 -0
  219. data/test/unit/ccls/instrument_version_test.rb +71 -0
  220. data/test/unit/ccls/interview_method_test.rb +44 -0
  221. data/test/unit/ccls/interview_outcome_test.rb +34 -0
  222. data/test/unit/ccls/interview_test.rb +298 -0
  223. data/test/unit/ccls/language_test.rb +47 -0
  224. data/test/unit/ccls/live_birth_data_update_test.rb +358 -0
  225. data/test/unit/ccls/operational_event_test.rb +187 -0
  226. data/test/unit/ccls/operational_event_type_test.rb +51 -0
  227. data/test/unit/ccls/organization_test.rb +64 -0
  228. data/test/unit/ccls/patient_test.rb +538 -0
  229. data/test/unit/ccls/person_test.rb +55 -0
  230. data/test/unit/ccls/phone_number_test.rb +244 -0
  231. data/test/unit/ccls/phone_type_test.rb +32 -0
  232. data/test/unit/ccls/project_outcome_test.rb +34 -0
  233. data/test/unit/ccls/project_test.rb +60 -0
  234. data/test/unit/ccls/race_test.rb +37 -0
  235. data/test/unit/ccls/refusal_reason_test.rb +52 -0
  236. data/test/unit/ccls/role_test.rb +26 -0
  237. data/test/unit/ccls/sample_kit_test.rb +35 -0
  238. data/test/unit/ccls/sample_outcome_test.rb +34 -0
  239. data/test/unit/ccls/sample_temperature_test.rb +25 -0
  240. data/test/unit/ccls/sample_test.rb +363 -0
  241. data/test/unit/ccls/sample_type_test.rb +58 -0
  242. data/test/unit/ccls/section_test.rb +34 -0
  243. data/test/unit/ccls/state_test.rb +31 -0
  244. data/test/unit/ccls/study_subject_abstracts_test.rb +115 -0
  245. data/test/unit/ccls/study_subject_addresses_test.rb +93 -0
  246. data/test/unit/ccls/study_subject_duplicates_test.rb +407 -0
  247. data/test/unit/ccls/study_subject_enrollments_test.rb +65 -0
  248. data/test/unit/ccls/study_subject_homex_outcome_test.rb +64 -0
  249. data/test/unit/ccls/study_subject_identifier_test.rb +439 -0
  250. data/test/unit/ccls/study_subject_interviews_test.rb +26 -0
  251. data/test/unit/ccls/study_subject_languages_test.rb +142 -0
  252. data/test/unit/ccls/study_subject_operational_events_test.rb +53 -0
  253. data/test/unit/ccls/study_subject_patient_test.rb +249 -0
  254. data/test/unit/ccls/study_subject_pii_test.rb +278 -0
  255. data/test/unit/ccls/study_subject_races_test.rb +203 -0
  256. data/test/unit/ccls/study_subject_search_test.rb +704 -0
  257. data/test/unit/ccls/study_subject_test.rb +770 -0
  258. data/test/unit/ccls/subject_language_test.rb +43 -0
  259. data/test/unit/ccls/subject_race_test.rb +35 -0
  260. data/test/unit/ccls/subject_relationship_test.rb +43 -0
  261. data/test/unit/ccls/subject_type_test.rb +40 -0
  262. data/test/unit/ccls/tracing_status_test.rb +32 -0
  263. data/test/unit/ccls/transfer_test.rb +81 -0
  264. data/test/unit/ccls/translation_table_test.rb +40 -0
  265. data/test/unit/ccls/unit_test.rb +21 -0
  266. data/test/unit/ccls/user_test.rb +156 -0
  267. data/test/unit/ccls/vital_status_test.rb +36 -0
  268. data/test/unit/ccls/zip_code_test.rb +55 -0
  269. metadata +633 -0
@@ -0,0 +1,3 @@
1
+ module Ccls::ActionViewExtension; end
2
+ require 'ccls_engine/action_view_extension/base'
3
+ require 'ccls_engine/action_view_extension/form_builder'
@@ -0,0 +1,53 @@
1
+ module Ccls::ActionViewExtension::Base
2
+
3
+ def self.included(base)
4
+ base.send(:include, InstanceMethods)
5
+ end
6
+
7
+ module InstanceMethods
8
+
9
+ def yndk(value=nil)
10
+ YNDK[value]||' '
11
+ end
12
+
13
+ def ynodk(value=nil)
14
+ YNODK[value]||' '
15
+ end
16
+
17
+ def ynrdk(value=nil)
18
+ YNRDK[value]||' '
19
+ end
20
+
21
+ def adna(value=nil)
22
+ ADNA[value]||' '
23
+ end
24
+
25
+ def _wrapped_yndk_spans(object_name,method,options={})
26
+ object = instance_variable_get("@#{object_name}")
27
+ _wrapped_spans(object_name,method,options.update(
28
+ :value => (YNDK[object.send(method)]||' ') ) )
29
+ end
30
+
31
+ def _wrapped_ynodk_spans(object_name,method,options={})
32
+ object = instance_variable_get("@#{object_name}")
33
+ _wrapped_spans(object_name,method,options.update(
34
+ :value => (YNODK[object.send(method)]||' ') ) )
35
+ end
36
+
37
+ def _wrapped_ynrdk_spans(object_name,method,options={})
38
+ object = instance_variable_get("@#{object_name}")
39
+ _wrapped_spans(object_name,method,options.update(
40
+ :value => (YNRDK[object.send(method)]||' ') ) )
41
+ end
42
+
43
+ def _wrapped_adna_spans(object_name,method,options={})
44
+ object = instance_variable_get("@#{object_name}")
45
+ _wrapped_spans(object_name,method,options.update(
46
+ :value => (ADNA[object.send(method)]||' ') ) )
47
+ end
48
+
49
+ end # module InstanceMethods
50
+
51
+ end # module Ccls::ActionViewExtension::Base
52
+ ActionView::Base.send(:include,
53
+ Ccls::ActionViewExtension::Base )
@@ -0,0 +1,39 @@
1
+ module Ccls::ActionViewExtension::FormBuilder
2
+
3
+ def self.included(base)
4
+ base.send(:include,InstanceMethods)
5
+ end
6
+
7
+ module InstanceMethods
8
+
9
+ # NOTE
10
+ # calling <%= f.wrapped_yndk_select :code %> will NOT call these methods.
11
+ # It will call the method missing and then the @template.method
12
+ # Actually, now I believe that it will.
13
+ #
14
+
15
+ def yndk_select(method,options={},html_options={})
16
+ @template.select(object_name, method, YNDK.selector_options,
17
+ {:include_blank => true}.merge(objectify_options(options)), html_options)
18
+ end
19
+
20
+ def ynrdk_select(method,options={},html_options={})
21
+ @template.select(object_name, method, YNRDK.selector_options,
22
+ {:include_blank => true}.merge(objectify_options(options)), html_options)
23
+ end
24
+
25
+ def ynodk_select(method,options={},html_options={})
26
+ @template.select(object_name, method, YNODK.selector_options,
27
+ {:include_blank => true}.merge(objectify_options(options)), html_options)
28
+ end
29
+
30
+ def adna_select(method,options={},html_options={})
31
+ @template.select(object_name, method, ADNA.selector_options,
32
+ {:include_blank => true}.merge(objectify_options(options)), html_options)
33
+ end
34
+
35
+ end # module InstanceMethods
36
+
37
+ end # module Ccls::ActionViewExtension::FormBuilder
38
+ ActionView::Helpers::FormBuilder.send(:include,
39
+ Ccls::ActionViewExtension::FormBuilder )
@@ -0,0 +1,2 @@
1
+ module Ccls::ActiveRecordExtension; end
2
+ require 'ccls_engine/active_record_extension/base'
@@ -0,0 +1,70 @@
1
+ module Ccls::ActiveRecordExtension::Base
2
+
3
+ def self.included(base)
4
+ # base.send(:include, InstanceMethods)
5
+ base.extend(ClassMethods)
6
+ end
7
+
8
+ module ClassMethods
9
+
10
+ def acts_like_a_hash(*args)
11
+ options = {
12
+ :key => :key,
13
+ :value => :description
14
+ }.update(args.extract_options!)
15
+
16
+ class_eval do
17
+
18
+ validates_presence_of options[:key], options[:value]
19
+ validates_uniqueness_of options[:key], options[:value]
20
+ validates_length_of options[:key], options[:value],
21
+ :maximum => 250, :allow_blank => true
22
+
23
+ # Treats the class a bit like a Hash and
24
+ # searches for a record with a matching key.
25
+ def self.[](key)
26
+ # may need to deal with options[:key] here, but not needed yet
27
+ find_by_key(key.to_s)
28
+ end
29
+
30
+ end # class_eval do
31
+ end # def acts_like_a_hash(*args)
32
+
33
+
34
+ # #
35
+ # # Create virtual attribute accessors for datetime parts,
36
+ # # year, month, day, hour, minute for use by
37
+ # # view selectors and model validations?
38
+ # #
39
+ # # If this all works, may want to separate it out.
40
+ # #
41
+ # def datetime_accessors_for(*args)
42
+ # options = {
43
+ # }.update(args.extract_options!)
44
+ # args.each do |field|
45
+ #
46
+ ## What if there is no 'field'? Typo?
47
+ #
48
+ ## When to actually compile the 'field'
49
+ #
50
+ ## define instance variable "#{field}_year"
51
+ #
52
+ # define_method "#{field}_year" do
53
+ # # return the instance variable? or pull it from 'field'?
54
+ # end
55
+ #
56
+ # define_method "#{field}_year=" do |new_year|
57
+ # # just set the instance variable?
58
+ # end
59
+ #
60
+ # end
61
+ # end # def datetime_accessors_for(*args)
62
+
63
+ end # module ClassMethods
64
+
65
+ # module InstanceMethods
66
+ # end # module InstanceMethods
67
+
68
+ end # module Ccls::ActiveRecordExtension::Base
69
+ ActiveRecord::Base.send(:include,
70
+ Ccls::ActiveRecordExtension::Base )
@@ -0,0 +1,8 @@
1
+ #
2
+ # Due to the possibility of rails adding a class called ActiveRecord::Shared
3
+ # I'm just going to name this ActiveRecordShared
4
+ #
5
+ class ActiveRecordShared < ActiveRecord::Base
6
+ use_db :prefix => "shared_"
7
+ self.abstract_class = true
8
+ end
@@ -0,0 +1,69 @@
1
+ module Ccls::Assertions
2
+
3
+ def self.included(base)
4
+ base.extend(ClassMethods)
5
+ end
6
+
7
+ def assert_subject_is_eligible(study_subject)
8
+ hxe = study_subject.enrollments.find_by_project_id(Project['HomeExposures'].id)
9
+ assert_not_nil hxe
10
+ assert_nil hxe.ineligible_reason_id
11
+ assert_equal hxe.is_eligible, YNDK[:yes]
12
+ end
13
+ alias_method :assert_study_subject_is_eligible, :assert_subject_is_eligible
14
+
15
+ def assert_subject_is_not_eligible(study_subject)
16
+ hxe = study_subject.enrollments.find_by_project_id(Project['HomeExposures'].id)
17
+ assert_not_nil hxe
18
+ assert_not_nil hxe.ineligible_reason_id
19
+ assert_equal hxe.is_eligible, YNDK[:no]
20
+ end
21
+ alias_method :assert_study_subject_is_not_eligible, :assert_subject_is_not_eligible
22
+
23
+ module ClassMethods
24
+
25
+ def assert_should_create_default_object
26
+ # It appears that model_name is a defined class method already in ...
27
+ # activesupport-####/lib/active_support/core_ext/module/model_naming.rb
28
+ test "should create default #{model_name.sub(/Test$/,'').underscore}" do
29
+ assert_difference( "#{model_name}.count", 1 ) do
30
+ object = create_object
31
+ assert !object.new_record?,
32
+ "#{object.errors.full_messages.to_sentence}"
33
+ end
34
+ end
35
+ end
36
+
37
+ def assert_should_behave_like_a_hash(*args)
38
+ options = {
39
+ :key => :key,
40
+ :value => :description
41
+ }
42
+ options.update(args.extract_options!)
43
+
44
+ assert_should_require_attribute( options[:key], options[:value] )
45
+ assert_should_require_unique_attribute( options[:key], options[:value] )
46
+ assert_should_require_attribute_length( options[:key], options[:value],
47
+ :maximum => 250 )
48
+
49
+ test "should find by key with ['string']" do
50
+ object = create_object
51
+ assert object.is_a?(model_name.constantize)
52
+ found = (model_name.constantize)[object.key.to_s]
53
+ assert found.is_a?(model_name.constantize)
54
+ assert_equal object, found
55
+ end
56
+
57
+ test "should find by key with [:symbol]" do
58
+ object = create_object
59
+ assert object.is_a?(model_name.constantize)
60
+ found = (model_name.constantize)[object.key.to_sym]
61
+ assert found.is_a?(model_name.constantize)
62
+ assert_equal object, found
63
+ end
64
+
65
+ end
66
+
67
+ end
68
+ end
69
+ ActiveSupport::TestCase.send(:include,Ccls::Assertions)
@@ -0,0 +1,54 @@
1
+ class Autotest::Rails
2
+
3
+ #
4
+ # Need both the mapping and the extra files
5
+ #
6
+ def run_with_ccls_engine
7
+ add_exception %r%config/%
8
+ add_exception %r%versions/%
9
+ add_exception %r%\.git/%
10
+ self.extra_files << File.expand_path(File.join(
11
+ File.dirname(__FILE__),'/../../test/unit/ccls/'))
12
+
13
+ # self.extra_files << File.expand_path(File.join(
14
+ # File.dirname(__FILE__),'/../../test/functional/ccls/'))
15
+
16
+ # add_mapping(
17
+ # %r{^#{File.expand_path(File.join(File.dirname(__FILE__),'/../../test/'))}/(unit|functional)/ccls/.*_test\.rb$}
18
+ # ) do |filename, _|
19
+ # filename
20
+ # end
21
+
22
+ add_mapping(
23
+ %r{^#{File.expand_path(File.join(File.dirname(__FILE__),'/../../test/'))}/unit/ccls/.*_test\.rb$}
24
+ ) do |filename, _|
25
+ filename
26
+ end
27
+
28
+ ##
29
+ # This stops the ...
30
+ #
31
+ # Unable to map class Ccls::IdentifierTest to a file
32
+ # Unable to map class Ccls::SubjectTest to a file
33
+ #
34
+ # By default autotest is expecting all the namespaces to end with Test
35
+ # ie. CclsTest::IdentifierTest
36
+ # Could have renamed the dir, I suppose.
37
+ #
38
+ Dir[File.join(File.dirname(__FILE__),'/../../test/unit/**/*rb')].each do |f|
39
+ # the condition isn't as important as grabbing "ccls/test_file_name.rb" for camelcasing
40
+ if f =~ /test\/unit\/(ccls\/.*)\.rb/
41
+ self.extra_class_map[$1.camelcase] = File.expand_path(f)
42
+ end
43
+ end
44
+ # Dir[File.join(File.dirname(__FILE__),'/../../test/functional/**/*rb')].each do |f|
45
+ # if f =~ /test\/functional\/(ccls\/.*)\.rb/
46
+ # self.extra_class_map[$1.camelcase] = File.expand_path(f)
47
+ # end
48
+ # end
49
+
50
+ run_without_ccls_engine
51
+ end
52
+ alias_method_chain :run, :ccls_engine
53
+
54
+ end
@@ -0,0 +1,117 @@
1
+ # == requires
2
+ # * uid (unique)
3
+ #
4
+ # == accessible attributes
5
+ # * sn
6
+ # * displayname
7
+ # * mail
8
+ # * telephonenumber
9
+ class Ccls::User < Calnet::User #ActiveRecord::Base
10
+ self.abstract_class = true
11
+
12
+ # def self.search(options={})
13
+ # conditions = {}
14
+ # includes = joins = []
15
+ # if !options[:role_name].blank?
16
+ # includes = [:roles]
17
+ # if Role.all.collect(&:name).include?(options[:role_name])
18
+ # joins = [:roles]
19
+ ## conditions = ["roles.name = '#{options[:role_name]}'"]
20
+ # conditions = ["roles.name = ?",options[:role_name]]
21
+ # # else
22
+ # # @errors = "No such role '#{options[:role_name]}'"
23
+ # end
24
+ # end
25
+ # self.all(
26
+ # :joins => joins,
27
+ # :include => includes,
28
+ # :conditions => conditions )
29
+ # end
30
+ #
31
+ # # Find or Create a user from a given uid, and then
32
+ # # proceed to update the user's information from the
33
+ # # UCB::LDAP::Person.find_by_uid(uid) response.
34
+ # #
35
+ # # Returns: user
36
+ # def self.find_create_and_update_by_uid(uid)
37
+ # user = self.find_or_create_by_uid(uid)
38
+ # person = UCB::LDAP::Person.find_by_uid(uid)
39
+ # user.update_attributes!({
40
+ # :displayname => person.displayname,
41
+ # :sn => person.sn.first,
42
+ # :mail => person.mail.first || '',
43
+ # :telephonenumber => person.telephonenumber.first
44
+ # }) unless person.nil?
45
+ # user
46
+ # end
47
+ #
48
+ # # FYI. gravatar can't deal with a nil email
49
+ # gravatar :mail, :rating => 'PG'
50
+ #
51
+ # # gravatar.url will include & that are not encoded to &amp;
52
+ # # which works just fine, but technically is invalid html.
53
+ # def gravatar_url
54
+ # gravatar.url.gsub(/&/,'&amp;')
55
+ # end
56
+ #
57
+ # def to_s
58
+ # displayname
59
+ # end
60
+
61
+ # this has been included above
62
+ # ucb_authenticated
63
+
64
+ # defined in plugin/engine ...
65
+ #
66
+ # def may_administrate?(*args)
67
+ # (self.role_names & ['superuser','administrator']).length > 0
68
+ # end
69
+ #
70
+ # def may_read?(*args)
71
+ # (self.role_names &
72
+ # ['superuser','administrator','editor','interviewer','reader']
73
+ # ).length > 0
74
+ # end
75
+ #
76
+ # def may_edit?(*args)
77
+ # (self.role_names &
78
+ # ['superuser','administrator','editor']
79
+ # ).length > 0
80
+ # end
81
+
82
+ def self.inherited(subclass)
83
+
84
+ subclass.class_eval do
85
+ # for some reason is nil which causes problems
86
+ self.default_scoping = []
87
+
88
+ # I don't think that having this in a separate gem
89
+ # is necessary anymore. This is the only place that
90
+ # it is ever used. I'll import the calnet_authenticated
91
+ # functionality later.
92
+ # calnet_authenticated
93
+ # validates_presence_of :uid
94
+ # validates_uniqueness_of :uid
95
+
96
+ # include the many may_*? for use in the controllers
97
+ # I don't know why I need this in BOTH Calnet::User AND Ccls::User
98
+ # It works without it in the console, but some random tests fail
99
+ # should probably ensure that calling it twice doesn't do anything bad
100
+ authorized
101
+
102
+ # alias_method :may_create?, :may_edit?
103
+ # alias_method :may_update?, :may_edit?
104
+ # alias_method :may_destroy?, :may_edit?
105
+
106
+ # %w( people races languages refusal_reasons ineligible_reasons
107
+ # ).each do |resource|
108
+ # alias_method "may_create_#{resource}?".to_sym, :may_administrate?
109
+ # alias_method "may_read_#{resource}?".to_sym, :may_administrate?
110
+ # alias_method "may_edit_#{resource}?".to_sym, :may_administrate?
111
+ # alias_method "may_update_#{resource}?".to_sym, :may_administrate?
112
+ # alias_method "may_destroy_#{resource}?".to_sym, :may_administrate?
113
+ # end
114
+ end # class_eval
115
+ end # inherited()
116
+
117
+ end
@@ -0,0 +1,14 @@
1
+ module Ccls::CoreExtension
2
+
3
+ def class_exists?(full_class_name)
4
+ name_spaces = full_class_name.to_s.split('::')
5
+ class_name = name_spaces.pop
6
+ name_space = name_spaces.join('::')
7
+ klass = ((name_space.blank?) ? Module : name_space.constantize).const_get(class_name.to_s)
8
+ return klass.is_a?(Class)
9
+ rescue NameError
10
+ return false
11
+ end
12
+
13
+ end # Ccls::CoreExtension
14
+ include Ccls::CoreExtension
@@ -0,0 +1,30 @@
1
+ # %a - The abbreviated weekday name (``Sun'')
2
+ # %A - The full weekday name (``Sunday'')
3
+ # %b - The abbreviated month name (``Jan'')
4
+ # %B - The full month name (``January'')
5
+ # %c - The preferred local date and time representation
6
+ # %d - Day of the month (01..31)
7
+ # %H - Hour of the day, 24-hour clock (00..23)
8
+ # %I - Hour of the day, 12-hour clock (01..12)
9
+ # %j - Day of the year (001..366)
10
+ # %m - Month of the year (01..12)
11
+ # %M - Minute of the hour (00..59)
12
+ # %p - Meridian indicator (``AM'' or ``PM'')
13
+ # %S - Second of the minute (00..60)
14
+ # %U - Week number of the current year,
15
+ # starting with the first Sunday as the first
16
+ # day of the first week (00..53)
17
+ # %W - Week number of the current year,
18
+ # starting with the first Monday as the first
19
+ # day of the first week (00..53)
20
+ # %w - Day of the week (Sunday is 0, 0..6)
21
+ # %x - Preferred representation for the date alone, no time
22
+ # %X - Preferred representation for the time alone, no date
23
+ # %y - Year without a century (00..99)
24
+ # %Y - Year with century
25
+ # %Z - Time zone name
26
+
27
+ Time::DATE_FORMATS[:mdy] = "%b %d, %Y" # Jan 01, 2009
28
+ Time::DATE_FORMATS[:dob] = "%m/%d/%Y" # 01/01/2009
29
+ Date::DATE_FORMATS[:dob] = "%m/%d/%Y" # 01/01/2009
30
+ Time::DATE_FORMATS[:filename] = "%Y%m%d%H%M%S" # 20091231235959