ceedling 0.30.0 → 0.31.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (733) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +1 -0
  3. data/Gemfile.lock +4 -2
  4. data/README.md +9 -6
  5. data/assets/auto_link_deep_dependencies/src/a.c +7 -0
  6. data/assets/auto_link_deep_dependencies/src/b.c +7 -0
  7. data/assets/auto_link_deep_dependencies/src/c.c +8 -0
  8. data/assets/auto_link_deep_dependencies/src/internal_inc/a.h +6 -0
  9. data/assets/auto_link_deep_dependencies/src/internal_inc/b.h +6 -0
  10. data/assets/auto_link_deep_dependencies/src/internal_inc/c.h +6 -0
  11. data/assets/auto_link_deep_dependencies/src/internal_inc/never_compiled.h +6 -0
  12. data/assets/auto_link_deep_dependencies/src/never_compiled.c +6 -0
  13. data/assets/auto_link_deep_dependencies/test/test_a.c +11 -0
  14. data/assets/auto_link_deep_dependencies/test/test_b.c +11 -0
  15. data/assets/auto_link_deep_dependencies/test/test_c.c +11 -0
  16. data/assets/test_example_file_unity_printf.c +12 -0
  17. data/assets/test_example_with_parameterized_tests.c +19 -0
  18. data/assets/tests_with_defines/src/adc_hardware.c +11 -0
  19. data/assets/tests_with_defines/src/adc_hardware.h +6 -0
  20. data/assets/tests_with_defines/src/adc_hardware_configurator.c +11 -0
  21. data/assets/tests_with_defines/src/adc_hardware_configurator.h +10 -0
  22. data/assets/tests_with_defines/test/test_adc_hardware.c +21 -0
  23. data/assets/tests_with_defines/test/test_adc_hardware_special.c +21 -0
  24. data/bin/ceedling +0 -1
  25. data/ceedling.gemspec +5 -4
  26. data/ceedling.sublime-project +28 -0
  27. data/ceedling.sublime-workspace +452 -0
  28. data/config/test_environment.rb +0 -1
  29. data/docs/CeedlingPacket.md +59 -6
  30. data/examples/blinky/project.yml +3 -1
  31. data/examples/blinky/rakefile.rb +1 -2
  32. data/examples/temp_sensor/build/test/cache/AdcConductor.h +20 -0
  33. data/examples/temp_sensor/build/test/cache/AdcHardware.h +16 -0
  34. data/examples/temp_sensor/build/test/cache/AdcHardwareConfigurator.h +14 -0
  35. data/examples/temp_sensor/build/test/cache/AdcModel.h +20 -0
  36. data/examples/temp_sensor/build/test/cache/AdcTemperatureSensor.h +14 -0
  37. data/examples/temp_sensor/build/test/cache/Executor.h +12 -0
  38. data/examples/temp_sensor/build/test/cache/IntrinsicsWrapper.h +9 -0
  39. data/examples/temp_sensor/build/test/cache/Model.h +10 -0
  40. data/examples/temp_sensor/build/test/cache/TaskScheduler.h +16 -0
  41. data/examples/temp_sensor/build/test/cache/TemperatureCalculator.h +10 -0
  42. data/examples/temp_sensor/build/test/cache/TemperatureFilter.h +14 -0
  43. data/examples/temp_sensor/build/test/cache/TestAdcConductor.c +169 -0
  44. data/examples/temp_sensor/build/test/cache/TestAdcHardware.c +82 -0
  45. data/examples/temp_sensor/build/test/cache/TestAdcModel.c +59 -0
  46. data/examples/temp_sensor/build/test/cache/TestExecutor.c +63 -0
  47. data/examples/temp_sensor/build/test/cache/TestMain.c +43 -0
  48. data/examples/temp_sensor/build/test/cache/TestModel.c +34 -0
  49. data/examples/temp_sensor/build/test/cache/TestTaskScheduler.c +204 -0
  50. data/examples/temp_sensor/build/test/cache/TestTemperatureCalculator.c +70 -0
  51. data/examples/temp_sensor/build/test/cache/TestTemperatureFilter.c +154 -0
  52. data/examples/temp_sensor/build/test/cache/TestTimerConductor.c +57 -0
  53. data/examples/temp_sensor/build/test/cache/TestTimerHardware.c +47 -0
  54. data/examples/temp_sensor/build/test/cache/TestTimerModel.c +31 -0
  55. data/examples/temp_sensor/build/test/cache/TestUsartBaudRateRegisterCalculator.c +38 -0
  56. data/examples/temp_sensor/build/test/cache/TestUsartConductor.c +73 -0
  57. data/examples/temp_sensor/build/test/cache/TestUsartHardware.c +66 -0
  58. data/examples/temp_sensor/build/test/cache/TestUsartModel.c +73 -0
  59. data/examples/temp_sensor/build/test/cache/TimerConductor.h +12 -0
  60. data/examples/temp_sensor/build/test/cache/TimerConfigurator.h +24 -0
  61. data/examples/temp_sensor/build/test/cache/TimerHardware.h +10 -0
  62. data/examples/temp_sensor/build/test/cache/TimerInterruptHandler.h +14 -0
  63. data/examples/temp_sensor/build/test/cache/TimerModel.h +10 -0
  64. data/examples/temp_sensor/build/test/cache/UsartBaudRateRegisterCalculator.h +10 -0
  65. data/examples/temp_sensor/build/test/cache/UsartConductor.h +9 -0
  66. data/examples/temp_sensor/build/test/cache/UsartConfigurator.h +20 -0
  67. data/examples/temp_sensor/build/test/cache/UsartHardware.h +12 -0
  68. data/examples/temp_sensor/build/test/cache/UsartModel.h +14 -0
  69. data/examples/temp_sensor/build/test/cache/UsartPutChar.h +10 -0
  70. data/examples/temp_sensor/build/test/cache/defines_dependency.yml +77 -0
  71. data/examples/temp_sensor/build/test/cache/input.yml +310 -0
  72. data/examples/temp_sensor/build/test/dependencies/AdcConductor.d +2 -0
  73. data/examples/temp_sensor/build/test/dependencies/AdcHardware.d +3 -0
  74. data/examples/temp_sensor/build/test/dependencies/AdcModel.d +3 -0
  75. data/examples/temp_sensor/build/test/dependencies/Executor.d +3 -0
  76. data/examples/temp_sensor/build/test/dependencies/Main.d +11 -0
  77. data/examples/temp_sensor/build/test/dependencies/MockAdcConductor.d +6 -0
  78. data/examples/temp_sensor/build/test/dependencies/MockAdcHardware.d +6 -0
  79. data/examples/temp_sensor/build/test/dependencies/MockAdcHardwareConfigurator.d +8 -0
  80. data/examples/temp_sensor/build/test/dependencies/MockAdcModel.d +6 -0
  81. data/examples/temp_sensor/build/test/dependencies/MockAdcTemperatureSensor.d +8 -0
  82. data/examples/temp_sensor/build/test/dependencies/MockExecutor.d +6 -0
  83. data/examples/temp_sensor/build/test/dependencies/MockIntrinsicsWrapper.d +7 -0
  84. data/examples/temp_sensor/build/test/dependencies/MockModel.d +6 -0
  85. data/examples/temp_sensor/build/test/dependencies/MockTaskScheduler.d +7 -0
  86. data/examples/temp_sensor/build/test/dependencies/MockTemperatureCalculator.d +8 -0
  87. data/examples/temp_sensor/build/test/dependencies/MockTemperatureFilter.d +8 -0
  88. data/examples/temp_sensor/build/test/dependencies/MockTimerConductor.d +7 -0
  89. data/examples/temp_sensor/build/test/dependencies/MockTimerConfigurator.d +8 -0
  90. data/examples/temp_sensor/build/test/dependencies/MockTimerHardware.d +7 -0
  91. data/examples/temp_sensor/build/test/dependencies/MockTimerInterruptHandler.d +8 -0
  92. data/examples/temp_sensor/build/test/dependencies/MockTimerModel.d +6 -0
  93. data/examples/temp_sensor/build/test/dependencies/MockUsartBaudRateRegisterCalculator.d +8 -0
  94. data/examples/temp_sensor/build/test/dependencies/MockUsartConductor.d +7 -0
  95. data/examples/temp_sensor/build/test/dependencies/MockUsartConfigurator.d +8 -0
  96. data/examples/temp_sensor/build/test/dependencies/MockUsartHardware.d +7 -0
  97. data/examples/temp_sensor/build/test/dependencies/MockUsartModel.d +6 -0
  98. data/examples/temp_sensor/build/test/dependencies/MockUsartPutChar.d +6 -0
  99. data/examples/temp_sensor/build/test/dependencies/Model.d +2 -0
  100. data/examples/temp_sensor/build/test/dependencies/TaskScheduler.d +2 -0
  101. data/examples/temp_sensor/build/test/dependencies/TemperatureCalculator.d +2 -0
  102. data/examples/temp_sensor/build/test/dependencies/TemperatureFilter.d +2 -0
  103. data/examples/temp_sensor/build/test/dependencies/TestAdcConductor.d +6 -0
  104. data/examples/temp_sensor/build/test/dependencies/TestAdcConductor_runner.d +8 -0
  105. data/examples/temp_sensor/build/test/dependencies/TestAdcHardware.d +7 -0
  106. data/examples/temp_sensor/build/test/dependencies/TestAdcHardware_runner.d +9 -0
  107. data/examples/temp_sensor/build/test/dependencies/TestAdcModel.d +7 -0
  108. data/examples/temp_sensor/build/test/dependencies/TestAdcModel_runner.d +10 -0
  109. data/examples/temp_sensor/build/test/dependencies/TestExecutor.d +8 -0
  110. data/examples/temp_sensor/build/test/dependencies/TestExecutor_runner.d +11 -0
  111. data/examples/temp_sensor/build/test/dependencies/TestMain.d +4 -0
  112. data/examples/temp_sensor/build/test/dependencies/TestMain_runner.d +6 -0
  113. data/examples/temp_sensor/build/test/dependencies/TestModel.d +6 -0
  114. data/examples/temp_sensor/build/test/dependencies/TestModel_runner.d +8 -0
  115. data/examples/temp_sensor/build/test/dependencies/TestTaskScheduler.d +4 -0
  116. data/examples/temp_sensor/build/test/dependencies/TestTaskScheduler_runner.d +4 -0
  117. data/examples/temp_sensor/build/test/dependencies/TestTemperatureCalculator.d +5 -0
  118. data/examples/temp_sensor/build/test/dependencies/TestTemperatureCalculator_runner.d +4 -0
  119. data/examples/temp_sensor/build/test/dependencies/TestTemperatureFilter.d +4 -0
  120. data/examples/temp_sensor/build/test/dependencies/TestTemperatureFilter_runner.d +4 -0
  121. data/examples/temp_sensor/build/test/dependencies/TestTimerConductor.d +7 -0
  122. data/examples/temp_sensor/build/test/dependencies/TestTimerConductor_runner.d +10 -0
  123. data/examples/temp_sensor/build/test/dependencies/TestTimerHardware.d +5 -0
  124. data/examples/temp_sensor/build/test/dependencies/TestTimerHardware_runner.d +8 -0
  125. data/examples/temp_sensor/build/test/dependencies/TestTimerModel.d +5 -0
  126. data/examples/temp_sensor/build/test/dependencies/TestTimerModel_runner.d +7 -0
  127. data/examples/temp_sensor/build/test/dependencies/TestUsartBaudRateRegisterCalculator.d +5 -0
  128. data/examples/temp_sensor/build/test/dependencies/TestUsartBaudRateRegisterCalculator_runner.d +4 -0
  129. data/examples/temp_sensor/build/test/dependencies/TestUsartConductor.d +7 -0
  130. data/examples/temp_sensor/build/test/dependencies/TestUsartConductor_runner.d +9 -0
  131. data/examples/temp_sensor/build/test/dependencies/TestUsartHardware.d +6 -0
  132. data/examples/temp_sensor/build/test/dependencies/TestUsartHardware_runner.d +8 -0
  133. data/examples/temp_sensor/build/test/dependencies/TestUsartModel.d +7 -0
  134. data/examples/temp_sensor/build/test/dependencies/TestUsartModel_runner.d +9 -0
  135. data/examples/temp_sensor/build/test/dependencies/TimerConductor.d +3 -0
  136. data/examples/temp_sensor/build/test/dependencies/TimerHardware.d +2 -0
  137. data/examples/temp_sensor/build/test/dependencies/TimerModel.d +2 -0
  138. data/examples/temp_sensor/build/test/dependencies/UnityHelper.d +4 -0
  139. data/examples/temp_sensor/build/test/dependencies/UsartBaudRateRegisterCalculator.d +3 -0
  140. data/examples/temp_sensor/build/test/dependencies/UsartConductor.d +3 -0
  141. data/examples/temp_sensor/build/test/dependencies/UsartHardware.d +2 -0
  142. data/examples/temp_sensor/build/test/dependencies/UsartModel.d +3 -0
  143. data/examples/temp_sensor/build/test/dependencies/cmock.d +6 -0
  144. data/examples/temp_sensor/build/test/dependencies/unity.d +4 -0
  145. data/examples/temp_sensor/build/test/mocks/MockAdcConductor.c +391 -0
  146. data/examples/temp_sensor/build/test/mocks/MockAdcConductor.h +64 -0
  147. data/examples/temp_sensor/build/test/mocks/MockAdcHardware.c +313 -0
  148. data/examples/temp_sensor/build/test/mocks/MockAdcHardware.h +58 -0
  149. data/examples/temp_sensor/build/test/mocks/MockAdcHardwareConfigurator.c +218 -0
  150. data/examples/temp_sensor/build/test/mocks/MockAdcHardwareConfigurator.h +52 -0
  151. data/examples/temp_sensor/build/test/mocks/MockAdcModel.c +453 -0
  152. data/examples/temp_sensor/build/test/mocks/MockAdcModel.h +64 -0
  153. data/examples/temp_sensor/build/test/mocks/MockAdcTemperatureSensor.c +252 -0
  154. data/examples/temp_sensor/build/test/mocks/MockAdcTemperatureSensor.h +52 -0
  155. data/examples/temp_sensor/build/test/mocks/MockExecutor.c +174 -0
  156. data/examples/temp_sensor/build/test/mocks/MockExecutor.h +46 -0
  157. data/examples/temp_sensor/build/test/mocks/MockIntrinsicsWrapper.c +157 -0
  158. data/examples/temp_sensor/build/test/mocks/MockIntrinsicsWrapper.h +46 -0
  159. data/examples/temp_sensor/build/test/mocks/MockModel.c +96 -0
  160. data/examples/temp_sensor/build/test/mocks/MockModel.h +40 -0
  161. data/examples/temp_sensor/build/test/mocks/MockTaskScheduler.c +326 -0
  162. data/examples/temp_sensor/build/test/mocks/MockTaskScheduler.h +58 -0
  163. data/examples/temp_sensor/build/test/mocks/MockTemperatureCalculator.c +126 -0
  164. data/examples/temp_sensor/build/test/mocks/MockTemperatureCalculator.h +40 -0
  165. data/examples/temp_sensor/build/test/mocks/MockTemperatureFilter.c +248 -0
  166. data/examples/temp_sensor/build/test/mocks/MockTemperatureFilter.h +52 -0
  167. data/examples/temp_sensor/build/test/mocks/MockTimerConductor.c +157 -0
  168. data/examples/temp_sensor/build/test/mocks/MockTimerConductor.h +46 -0
  169. data/examples/temp_sensor/build/test/mocks/MockTimerConfigurator.c +523 -0
  170. data/examples/temp_sensor/build/test/mocks/MockTimerConfigurator.h +82 -0
  171. data/examples/temp_sensor/build/test/mocks/MockTimerHardware.c +96 -0
  172. data/examples/temp_sensor/build/test/mocks/MockTimerHardware.h +40 -0
  173. data/examples/temp_sensor/build/test/mocks/MockTimerInterruptHandler.c +248 -0
  174. data/examples/temp_sensor/build/test/mocks/MockTimerInterruptHandler.h +52 -0
  175. data/examples/temp_sensor/build/test/mocks/MockTimerModel.c +109 -0
  176. data/examples/temp_sensor/build/test/mocks/MockTimerModel.h +40 -0
  177. data/examples/temp_sensor/build/test/mocks/MockUsartBaudRateRegisterCalculator.c +133 -0
  178. data/examples/temp_sensor/build/test/mocks/MockUsartBaudRateRegisterCalculator.h +40 -0
  179. data/examples/temp_sensor/build/test/mocks/MockUsartConductor.c +157 -0
  180. data/examples/temp_sensor/build/test/mocks/MockUsartConductor.h +46 -0
  181. data/examples/temp_sensor/build/test/mocks/MockUsartConfigurator.c +414 -0
  182. data/examples/temp_sensor/build/test/mocks/MockUsartConfigurator.h +70 -0
  183. data/examples/temp_sensor/build/test/mocks/MockUsartHardware.c +183 -0
  184. data/examples/temp_sensor/build/test/mocks/MockUsartHardware.h +46 -0
  185. data/examples/temp_sensor/build/test/mocks/MockUsartModel.c +269 -0
  186. data/examples/temp_sensor/build/test/mocks/MockUsartModel.h +52 -0
  187. data/examples/temp_sensor/build/test/mocks/MockUsartPutChar.c +109 -0
  188. data/examples/temp_sensor/build/test/mocks/MockUsartPutChar.h +40 -0
  189. data/examples/temp_sensor/build/test/out/TestAdcConductor.out +0 -0
  190. data/examples/temp_sensor/build/test/out/TestAdcHardware.out +0 -0
  191. data/examples/temp_sensor/build/test/out/TestAdcModel.out +0 -0
  192. data/examples/temp_sensor/build/test/out/TestExecutor.out +0 -0
  193. data/examples/temp_sensor/build/test/out/TestMain.out +0 -0
  194. data/examples/temp_sensor/build/test/out/TestModel.out +0 -0
  195. data/examples/temp_sensor/build/test/out/TestTaskScheduler.out +0 -0
  196. data/examples/temp_sensor/build/test/out/TestTemperatureCalculator.out +0 -0
  197. data/examples/temp_sensor/build/test/out/TestTemperatureFilter.out +0 -0
  198. data/examples/temp_sensor/build/test/out/TestTimerConductor.out +0 -0
  199. data/examples/temp_sensor/build/test/out/TestTimerHardware.out +0 -0
  200. data/examples/temp_sensor/build/test/out/TestTimerModel.out +0 -0
  201. data/examples/temp_sensor/build/test/out/TestUsartBaudRateRegisterCalculator.out +0 -0
  202. data/examples/temp_sensor/build/test/out/TestUsartConductor.out +0 -0
  203. data/examples/temp_sensor/build/test/out/TestUsartHardware.out +0 -0
  204. data/examples/temp_sensor/build/test/out/TestUsartModel.out +0 -0
  205. data/examples/temp_sensor/build/test/out/c/AdcConductor.o +0 -0
  206. data/examples/temp_sensor/build/test/out/c/AdcHardware.o +0 -0
  207. data/examples/temp_sensor/build/test/out/c/AdcModel.o +0 -0
  208. data/examples/temp_sensor/build/test/out/c/Executor.o +0 -0
  209. data/examples/temp_sensor/build/test/out/c/Main.o +0 -0
  210. data/examples/temp_sensor/build/test/out/c/MockAdcConductor.o +0 -0
  211. data/examples/temp_sensor/build/test/out/c/MockAdcHardware.o +0 -0
  212. data/examples/temp_sensor/build/test/out/c/MockAdcHardwareConfigurator.o +0 -0
  213. data/examples/temp_sensor/build/test/out/c/MockAdcModel.o +0 -0
  214. data/examples/temp_sensor/build/test/out/c/MockAdcTemperatureSensor.o +0 -0
  215. data/examples/temp_sensor/build/test/out/c/MockExecutor.o +0 -0
  216. data/examples/temp_sensor/build/test/out/c/MockIntrinsicsWrapper.o +0 -0
  217. data/examples/temp_sensor/build/test/out/c/MockModel.o +0 -0
  218. data/examples/temp_sensor/build/test/out/c/MockTaskScheduler.o +0 -0
  219. data/examples/temp_sensor/build/test/out/c/MockTemperatureCalculator.o +0 -0
  220. data/examples/temp_sensor/build/test/out/c/MockTemperatureFilter.o +0 -0
  221. data/examples/temp_sensor/build/test/out/c/MockTimerConductor.o +0 -0
  222. data/examples/temp_sensor/build/test/out/c/MockTimerConfigurator.o +0 -0
  223. data/examples/temp_sensor/build/test/out/c/MockTimerHardware.o +0 -0
  224. data/examples/temp_sensor/build/test/out/c/MockTimerInterruptHandler.o +0 -0
  225. data/examples/temp_sensor/build/test/out/c/MockTimerModel.o +0 -0
  226. data/examples/temp_sensor/build/test/out/c/MockUsartBaudRateRegisterCalculator.o +0 -0
  227. data/examples/temp_sensor/build/test/out/c/MockUsartConductor.o +0 -0
  228. data/examples/temp_sensor/build/test/out/c/MockUsartConfigurator.o +0 -0
  229. data/examples/temp_sensor/build/test/out/c/MockUsartHardware.o +0 -0
  230. data/examples/temp_sensor/build/test/out/c/MockUsartModel.o +0 -0
  231. data/examples/temp_sensor/build/test/out/c/MockUsartPutChar.o +0 -0
  232. data/examples/temp_sensor/build/test/out/c/Model.o +0 -0
  233. data/examples/temp_sensor/build/test/out/c/TaskScheduler.o +0 -0
  234. data/examples/temp_sensor/build/test/out/c/TemperatureCalculator.o +0 -0
  235. data/examples/temp_sensor/build/test/out/c/TemperatureFilter.o +0 -0
  236. data/examples/temp_sensor/build/test/out/c/TestAdcConductor.o +0 -0
  237. data/examples/temp_sensor/build/test/out/c/TestAdcConductor_runner.o +0 -0
  238. data/examples/temp_sensor/build/test/out/c/TestAdcHardware.o +0 -0
  239. data/examples/temp_sensor/build/test/out/c/TestAdcHardware_runner.o +0 -0
  240. data/examples/temp_sensor/build/test/out/c/TestAdcModel.o +0 -0
  241. data/examples/temp_sensor/build/test/out/c/TestAdcModel_runner.o +0 -0
  242. data/examples/temp_sensor/build/test/out/c/TestExecutor.o +0 -0
  243. data/examples/temp_sensor/build/test/out/c/TestExecutor_runner.o +0 -0
  244. data/examples/temp_sensor/build/test/out/c/TestMain.o +0 -0
  245. data/examples/temp_sensor/build/test/out/c/TestMain_runner.o +0 -0
  246. data/examples/temp_sensor/build/test/out/c/TestModel.o +0 -0
  247. data/examples/temp_sensor/build/test/out/c/TestModel_runner.o +0 -0
  248. data/examples/temp_sensor/build/test/out/c/TestTaskScheduler.o +0 -0
  249. data/examples/temp_sensor/build/test/out/c/TestTaskScheduler_runner.o +0 -0
  250. data/examples/temp_sensor/build/test/out/c/TestTemperatureCalculator.o +0 -0
  251. data/examples/temp_sensor/build/test/out/c/TestTemperatureCalculator_runner.o +0 -0
  252. data/examples/temp_sensor/build/test/out/c/TestTemperatureFilter.o +0 -0
  253. data/examples/temp_sensor/build/test/out/c/TestTemperatureFilter_runner.o +0 -0
  254. data/examples/temp_sensor/build/test/out/c/TestTimerConductor.o +0 -0
  255. data/examples/temp_sensor/build/test/out/c/TestTimerConductor_runner.o +0 -0
  256. data/examples/temp_sensor/build/test/out/c/TestTimerHardware.o +0 -0
  257. data/examples/temp_sensor/build/test/out/c/TestTimerHardware_runner.o +0 -0
  258. data/examples/temp_sensor/build/test/out/c/TestTimerModel.o +0 -0
  259. data/examples/temp_sensor/build/test/out/c/TestTimerModel_runner.o +0 -0
  260. data/examples/temp_sensor/build/test/out/c/TestUsartBaudRateRegisterCalculator.o +0 -0
  261. data/examples/temp_sensor/build/test/out/c/TestUsartBaudRateRegisterCalculator_runner.o +0 -0
  262. data/examples/temp_sensor/build/test/out/c/TestUsartConductor.o +0 -0
  263. data/examples/temp_sensor/build/test/out/c/TestUsartConductor_runner.o +0 -0
  264. data/examples/temp_sensor/build/test/out/c/TestUsartHardware.o +0 -0
  265. data/examples/temp_sensor/build/test/out/c/TestUsartHardware_runner.o +0 -0
  266. data/examples/temp_sensor/build/test/out/c/TestUsartModel.o +0 -0
  267. data/examples/temp_sensor/build/test/out/c/TestUsartModel_runner.o +0 -0
  268. data/examples/temp_sensor/build/test/out/c/TimerConductor.o +0 -0
  269. data/examples/temp_sensor/build/test/out/c/TimerHardware.o +0 -0
  270. data/examples/temp_sensor/build/test/out/c/TimerModel.o +0 -0
  271. data/examples/temp_sensor/build/test/out/c/UnityHelper.o +0 -0
  272. data/examples/temp_sensor/build/test/out/c/UsartBaudRateRegisterCalculator.o +0 -0
  273. data/examples/temp_sensor/build/test/out/c/UsartConductor.o +0 -0
  274. data/examples/temp_sensor/build/test/out/c/UsartHardware.o +0 -0
  275. data/examples/temp_sensor/build/test/out/c/UsartModel.o +0 -0
  276. data/examples/temp_sensor/build/test/out/c/cmock.o +0 -0
  277. data/examples/temp_sensor/build/test/out/c/unity.o +0 -0
  278. data/examples/temp_sensor/build/test/preprocess/files/AdcConductor.h +20 -0
  279. data/examples/temp_sensor/build/test/preprocess/files/AdcHardware.h +16 -0
  280. data/examples/temp_sensor/build/test/preprocess/files/AdcHardwareConfigurator.h +14 -0
  281. data/examples/temp_sensor/build/test/preprocess/files/AdcModel.h +20 -0
  282. data/examples/temp_sensor/build/test/preprocess/files/AdcTemperatureSensor.h +14 -0
  283. data/examples/temp_sensor/build/test/preprocess/files/Executor.h +12 -0
  284. data/examples/temp_sensor/build/test/preprocess/files/IntrinsicsWrapper.h +9 -0
  285. data/examples/temp_sensor/build/test/preprocess/files/Model.h +10 -0
  286. data/examples/temp_sensor/build/test/preprocess/files/TaskScheduler.h +16 -0
  287. data/examples/temp_sensor/build/test/preprocess/files/TemperatureCalculator.h +10 -0
  288. data/examples/temp_sensor/build/test/preprocess/files/TemperatureFilter.h +14 -0
  289. data/examples/temp_sensor/build/test/preprocess/files/TestAdcConductor.c +169 -0
  290. data/examples/temp_sensor/build/test/preprocess/files/TestAdcHardware.c +82 -0
  291. data/examples/temp_sensor/build/test/preprocess/files/TestAdcModel.c +59 -0
  292. data/examples/temp_sensor/build/test/preprocess/files/TestExecutor.c +63 -0
  293. data/examples/temp_sensor/build/test/preprocess/files/TestMain.c +43 -0
  294. data/examples/temp_sensor/build/test/preprocess/files/TestModel.c +34 -0
  295. data/examples/temp_sensor/build/test/preprocess/files/TestTaskScheduler.c +204 -0
  296. data/examples/temp_sensor/build/test/preprocess/files/TestTemperatureCalculator.c +70 -0
  297. data/examples/temp_sensor/build/test/preprocess/files/TestTemperatureFilter.c +154 -0
  298. data/examples/temp_sensor/build/test/preprocess/files/TestTimerConductor.c +57 -0
  299. data/examples/temp_sensor/build/test/preprocess/files/TestTimerHardware.c +47 -0
  300. data/examples/temp_sensor/build/test/preprocess/files/TestTimerModel.c +31 -0
  301. data/examples/temp_sensor/build/test/preprocess/files/TestUsartBaudRateRegisterCalculator.c +38 -0
  302. data/examples/temp_sensor/build/test/preprocess/files/TestUsartConductor.c +73 -0
  303. data/examples/temp_sensor/build/test/preprocess/files/TestUsartHardware.c +66 -0
  304. data/examples/temp_sensor/build/test/preprocess/files/TestUsartModel.c +73 -0
  305. data/examples/temp_sensor/build/test/preprocess/files/TimerConductor.h +12 -0
  306. data/examples/temp_sensor/build/test/preprocess/files/TimerConfigurator.h +24 -0
  307. data/examples/temp_sensor/build/test/preprocess/files/TimerHardware.h +10 -0
  308. data/examples/temp_sensor/build/test/preprocess/files/TimerInterruptHandler.h +14 -0
  309. data/examples/temp_sensor/build/test/preprocess/files/TimerModel.h +10 -0
  310. data/examples/temp_sensor/build/test/preprocess/files/UsartBaudRateRegisterCalculator.h +10 -0
  311. data/examples/temp_sensor/build/test/preprocess/files/UsartConductor.h +9 -0
  312. data/examples/temp_sensor/build/test/preprocess/files/UsartConfigurator.h +20 -0
  313. data/examples/temp_sensor/build/test/preprocess/files/UsartHardware.h +12 -0
  314. data/examples/temp_sensor/build/test/preprocess/files/UsartModel.h +14 -0
  315. data/examples/temp_sensor/build/test/preprocess/files/UsartPutChar.h +10 -0
  316. data/examples/temp_sensor/build/test/preprocess/includes/AdcConductor.h +2 -0
  317. data/examples/temp_sensor/build/test/preprocess/includes/AdcHardware.h +2 -0
  318. data/examples/temp_sensor/build/test/preprocess/includes/AdcHardwareConfigurator.h +2 -0
  319. data/examples/temp_sensor/build/test/preprocess/includes/AdcModel.h +2 -0
  320. data/examples/temp_sensor/build/test/preprocess/includes/AdcTemperatureSensor.h +2 -0
  321. data/examples/temp_sensor/build/test/preprocess/includes/Executor.h +2 -0
  322. data/examples/temp_sensor/build/test/preprocess/includes/IntrinsicsWrapper.h +1 -0
  323. data/examples/temp_sensor/build/test/preprocess/includes/Model.h +2 -0
  324. data/examples/temp_sensor/build/test/preprocess/includes/TaskScheduler.h +2 -0
  325. data/examples/temp_sensor/build/test/preprocess/includes/TemperatureCalculator.h +2 -0
  326. data/examples/temp_sensor/build/test/preprocess/includes/TemperatureFilter.h +2 -0
  327. data/examples/temp_sensor/build/test/preprocess/includes/TestAdcConductor.c +7 -0
  328. data/examples/temp_sensor/build/test/preprocess/includes/TestAdcHardware.c +6 -0
  329. data/examples/temp_sensor/build/test/preprocess/includes/TestAdcModel.c +7 -0
  330. data/examples/temp_sensor/build/test/preprocess/includes/TestExecutor.c +9 -0
  331. data/examples/temp_sensor/build/test/preprocess/includes/TestMain.c +5 -0
  332. data/examples/temp_sensor/build/test/preprocess/includes/TestModel.c +6 -0
  333. data/examples/temp_sensor/build/test/preprocess/includes/TestTaskScheduler.c +4 -0
  334. data/examples/temp_sensor/build/test/preprocess/includes/TestTemperatureCalculator.c +4 -0
  335. data/examples/temp_sensor/build/test/preprocess/includes/TestTemperatureFilter.c +4 -0
  336. data/examples/temp_sensor/build/test/preprocess/includes/TestTimerConductor.c +7 -0
  337. data/examples/temp_sensor/build/test/preprocess/includes/TestTimerHardware.c +5 -0
  338. data/examples/temp_sensor/build/test/preprocess/includes/TestTimerModel.c +5 -0
  339. data/examples/temp_sensor/build/test/preprocess/includes/TestUsartBaudRateRegisterCalculator.c +4 -0
  340. data/examples/temp_sensor/build/test/preprocess/includes/TestUsartConductor.c +7 -0
  341. data/examples/temp_sensor/build/test/preprocess/includes/TestUsartHardware.c +6 -0
  342. data/examples/temp_sensor/build/test/preprocess/includes/TestUsartModel.c +7 -0
  343. data/examples/temp_sensor/build/test/preprocess/includes/TimerConductor.h +2 -0
  344. data/examples/temp_sensor/build/test/preprocess/includes/TimerConfigurator.h +2 -0
  345. data/examples/temp_sensor/build/test/preprocess/includes/TimerHardware.h +2 -0
  346. data/examples/temp_sensor/build/test/preprocess/includes/TimerInterruptHandler.h +2 -0
  347. data/examples/temp_sensor/build/test/preprocess/includes/TimerModel.h +2 -0
  348. data/examples/temp_sensor/build/test/preprocess/includes/UsartBaudRateRegisterCalculator.h +2 -0
  349. data/examples/temp_sensor/build/test/preprocess/includes/UsartConductor.h +1 -0
  350. data/examples/temp_sensor/build/test/preprocess/includes/UsartConfigurator.h +2 -0
  351. data/examples/temp_sensor/build/test/preprocess/includes/UsartHardware.h +2 -0
  352. data/examples/temp_sensor/build/test/preprocess/includes/UsartModel.h +2 -0
  353. data/examples/temp_sensor/build/test/preprocess/includes/UsartPutChar.h +2 -0
  354. data/examples/temp_sensor/build/test/results/TestAdcConductor.pass +46 -0
  355. data/examples/temp_sensor/build/test/results/TestAdcHardware.pass +30 -0
  356. data/examples/temp_sensor/build/test/results/TestAdcModel.pass +26 -0
  357. data/examples/temp_sensor/build/test/results/TestExecutor.pass +22 -0
  358. data/examples/temp_sensor/build/test/results/TestMain.pass +18 -0
  359. data/examples/temp_sensor/build/test/results/TestModel.pass +18 -0
  360. data/examples/temp_sensor/build/test/results/TestTaskScheduler.pass +46 -0
  361. data/examples/temp_sensor/build/test/results/TestTemperatureCalculator.pass +22 -0
  362. data/examples/temp_sensor/build/test/results/TestTemperatureFilter.pass +30 -0
  363. data/examples/temp_sensor/build/test/results/TestTimerConductor.pass +22 -0
  364. data/examples/temp_sensor/build/test/results/TestTimerHardware.pass +18 -0
  365. data/examples/temp_sensor/build/test/results/TestTimerModel.pass +18 -0
  366. data/examples/temp_sensor/build/test/results/TestUsartBaudRateRegisterCalculator.pass +18 -0
  367. data/examples/temp_sensor/build/test/results/TestUsartConductor.pass +26 -0
  368. data/examples/temp_sensor/build/test/results/TestUsartHardware.pass +22 -0
  369. data/examples/temp_sensor/build/test/results/TestUsartModel.pass +30 -0
  370. data/examples/temp_sensor/build/test/runners/TestAdcConductor_runner.c +105 -0
  371. data/examples/temp_sensor/build/test/runners/TestAdcHardware_runner.c +97 -0
  372. data/examples/temp_sensor/build/test/runners/TestAdcModel_runner.c +99 -0
  373. data/examples/temp_sensor/build/test/runners/TestExecutor_runner.c +105 -0
  374. data/examples/temp_sensor/build/test/runners/TestMain_runner.c +87 -0
  375. data/examples/temp_sensor/build/test/runners/TestModel_runner.c +91 -0
  376. data/examples/temp_sensor/build/test/runners/TestTaskScheduler_runner.c +95 -0
  377. data/examples/temp_sensor/build/test/runners/TestTemperatureCalculator_runner.c +83 -0
  378. data/examples/temp_sensor/build/test/runners/TestTemperatureFilter_runner.c +87 -0
  379. data/examples/temp_sensor/build/test/runners/TestTimerConductor_runner.c +97 -0
  380. data/examples/temp_sensor/build/test/runners/TestTimerHardware_runner.c +87 -0
  381. data/examples/temp_sensor/build/test/runners/TestTimerModel_runner.c +87 -0
  382. data/examples/temp_sensor/build/test/runners/TestUsartBaudRateRegisterCalculator_runner.c +81 -0
  383. data/examples/temp_sensor/build/test/runners/TestUsartConductor_runner.c +99 -0
  384. data/examples/temp_sensor/build/test/runners/TestUsartHardware_runner.c +93 -0
  385. data/examples/temp_sensor/build/test/runners/TestUsartModel_runner.c +97 -0
  386. data/examples/temp_sensor/project.yml +3 -1
  387. data/lib/ceedling/configurator.rb +6 -1
  388. data/lib/ceedling/configurator_builder.rb +18 -6
  389. data/lib/ceedling/configurator_setup.rb +1 -0
  390. data/lib/ceedling/constants.rb +1 -1
  391. data/lib/ceedling/defaults.rb +23 -0
  392. data/lib/ceedling/objects.yml +2 -0
  393. data/lib/ceedling/preprocessinator.rb +17 -8
  394. data/lib/ceedling/preprocessinator_extractor.rb +23 -0
  395. data/lib/ceedling/preprocessinator_file_handler.rb +13 -0
  396. data/lib/ceedling/preprocessinator_includes_handler.rb +61 -53
  397. data/lib/ceedling/project_config_manager.rb +2 -2
  398. data/lib/ceedling/rakefile.rb +0 -1
  399. data/lib/ceedling/rules_tests.rake +1 -1
  400. data/lib/ceedling/setupinator.rb +1 -1
  401. data/lib/ceedling/tasks_tests.rake +8 -6
  402. data/lib/ceedling/test_invoker.rb +1 -0
  403. data/lib/ceedling/version.rb +1 -1
  404. data/out.fail +24 -0
  405. data/plugins/bullseye/bullseye.rake +5 -5
  406. data/plugins/dependencies/README.md +1 -1
  407. data/plugins/dependencies/dependencies.rake +3 -0
  408. data/plugins/dependencies/lib/dependencies.rb +9 -3
  409. data/plugins/gcov/README.md +21 -0
  410. data/plugins/gcov/config/defaults.yml +4 -0
  411. data/plugins/gcov/gcov.rake +5 -5
  412. data/plugins/gcov/lib/gcov.rb +8 -5
  413. data/plugins/gcov/lib/gcovr_reportinator.rb +2 -2
  414. data/plugins/gcov/lib/reportgenerator_reportinator.rb +45 -3
  415. data/spec/gcov/gcov_deployment_spec.rb +1 -0
  416. data/spec/gcov/gcov_test_cases_spec.rb +71 -2
  417. data/spec/preprocessinator_extractor_spec.rb +36 -0
  418. data/spec/preprocessinator_includes_handler_spec.rb +70 -19
  419. data/spec/spec_helper.rb +0 -1
  420. data/spec/spec_system_helper.rb +119 -79
  421. data/spec/system/deployment_spec.rb +30 -0
  422. data/vendor/c_exception/README.md +4 -6
  423. data/vendor/c_exception/docs/CException.md +2 -2
  424. data/vendor/c_exception/lib/CException.h +1 -1
  425. data/vendor/c_exception/lib/meson.build +2 -2
  426. data/vendor/c_exception/meson.build +2 -36
  427. data/vendor/cmock/README.md +9 -4
  428. data/vendor/cmock/docs/CMock_Summary.md +26 -1
  429. data/vendor/cmock/lib/cmock.rb +16 -9
  430. data/vendor/cmock/lib/cmock_config.rb +1 -0
  431. data/vendor/cmock/lib/cmock_generator.rb +27 -9
  432. data/vendor/cmock/lib/cmock_generator_plugin_cexception.rb +1 -0
  433. data/vendor/cmock/lib/cmock_generator_plugin_ignore_stateless.rb +85 -0
  434. data/vendor/cmock/lib/cmock_generator_plugin_return_thru_ptr.rb +4 -4
  435. data/vendor/cmock/lib/cmock_generator_utils.rb +6 -3
  436. data/vendor/cmock/lib/cmock_header_parser.rb +40 -14
  437. data/vendor/cmock/meson.build +1 -37
  438. data/vendor/cmock/src/cmock.h +13 -7
  439. data/vendor/cmock/src/meson.build +1 -1
  440. data/vendor/cmock/test/system/test_interactions/ignore_and_return_stateless.yml +325 -0
  441. data/vendor/cmock/test/unit/cmock_generator_main_test.rb +3 -0
  442. data/vendor/cmock/test/unit/cmock_generator_plugin_cexception_test.rb +12 -0
  443. data/vendor/cmock/test/unit/cmock_generator_plugin_ignore_stateless_test.rb +116 -0
  444. data/vendor/cmock/test/unit/cmock_generator_plugin_return_thru_ptr_test.rb +4 -4
  445. data/vendor/cmock/test/unit/cmock_generator_utils_test.rb +14 -9
  446. data/vendor/cmock/test/unit/cmock_header_parser_test.rb +129 -3
  447. data/vendor/cmock/test/unit/cmock_plugin_manager_test.rb +2 -1
  448. data/vendor/cmock/vendor/c_exception/README.md +4 -6
  449. data/vendor/cmock/vendor/c_exception/docs/CException.md +2 -2
  450. data/vendor/cmock/vendor/c_exception/lib/CException.h +1 -1
  451. data/vendor/cmock/vendor/c_exception/lib/meson.build +2 -2
  452. data/vendor/cmock/vendor/c_exception/meson.build +2 -36
  453. data/vendor/cmock/vendor/unity/CMakeLists.txt +32 -6
  454. data/vendor/cmock/vendor/unity/LICENSE.txt +1 -1
  455. data/vendor/cmock/vendor/unity/README.md +13 -4
  456. data/vendor/cmock/vendor/unity/auto/generate_module.rb +11 -10
  457. data/vendor/cmock/vendor/unity/auto/generate_test_runner.rb +2 -2
  458. data/vendor/cmock/vendor/unity/auto/run_test.erb +1 -1
  459. data/vendor/cmock/vendor/unity/meson.build +1 -35
  460. data/vendor/cmock/vendor/unity/src/meson.build +1 -1
  461. data/vendor/cmock/vendor/unity/src/unity.c +5 -4
  462. data/vendor/cmock/vendor/unity/src/unity.h +6 -6
  463. data/vendor/cmock/vendor/unity/src/unity_internals.h +15 -6
  464. data/vendor/cmock/vendor/unity/test/Makefile +1 -0
  465. data/vendor/cmock/vendor/unity/test/rakefile_helper.rb +2 -2
  466. data/vendor/unity/CMakeLists.txt +32 -6
  467. data/vendor/unity/LICENSE.txt +1 -1
  468. data/vendor/unity/README.md +13 -4
  469. data/vendor/unity/auto/generate_module.rb +11 -10
  470. data/vendor/unity/auto/generate_test_runner.rb +2 -2
  471. data/vendor/unity/auto/run_test.erb +1 -1
  472. data/vendor/unity/meson.build +1 -35
  473. data/vendor/unity/src/meson.build +1 -1
  474. data/vendor/unity/src/unity.c +5 -4
  475. data/vendor/unity/src/unity.h +6 -6
  476. data/vendor/unity/src/unity_internals.h +15 -6
  477. data/vendor/unity/test/Makefile +1 -0
  478. data/vendor/unity/test/rakefile_helper.rb +2 -2
  479. metadata +409 -271
  480. data/assets/project_with_guts_gcov_abortonuncovered.yml +0 -93
  481. data/examples/temp_sensor/rakefile.rb +0 -6
  482. data/vendor/c_exception/vendor/unity/README.md +0 -220
  483. data/vendor/c_exception/vendor/unity/auto/colour_prompt.rb +0 -118
  484. data/vendor/c_exception/vendor/unity/auto/colour_reporter.rb +0 -39
  485. data/vendor/c_exception/vendor/unity/auto/generate_config.yml +0 -36
  486. data/vendor/c_exception/vendor/unity/auto/generate_module.rb +0 -308
  487. data/vendor/c_exception/vendor/unity/auto/generate_test_runner.rb +0 -437
  488. data/vendor/c_exception/vendor/unity/auto/parse_output.rb +0 -220
  489. data/vendor/c_exception/vendor/unity/auto/stylize_as_junit.rb +0 -252
  490. data/vendor/c_exception/vendor/unity/auto/test_file_filter.rb +0 -25
  491. data/vendor/c_exception/vendor/unity/auto/type_sanitizer.rb +0 -6
  492. data/vendor/c_exception/vendor/unity/auto/unity_test_summary.py +0 -139
  493. data/vendor/c_exception/vendor/unity/auto/unity_test_summary.rb +0 -136
  494. data/vendor/c_exception/vendor/unity/auto/unity_to_junit.py +0 -146
  495. data/vendor/c_exception/vendor/unity/docs/ThrowTheSwitchCodingStandard.md +0 -207
  496. data/vendor/c_exception/vendor/unity/docs/UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf +0 -0
  497. data/vendor/c_exception/vendor/unity/docs/UnityAssertionsReference.md +0 -716
  498. data/vendor/c_exception/vendor/unity/docs/UnityConfigurationGuide.md +0 -398
  499. data/vendor/c_exception/vendor/unity/docs/UnityGettingStartedGuide.md +0 -191
  500. data/vendor/c_exception/vendor/unity/docs/UnityHelperScriptsGuide.md +0 -242
  501. data/vendor/c_exception/vendor/unity/docs/license.txt +0 -21
  502. data/vendor/c_exception/vendor/unity/examples/example_1/makefile +0 -71
  503. data/vendor/c_exception/vendor/unity/examples/example_1/readme.txt +0 -5
  504. data/vendor/c_exception/vendor/unity/examples/example_1/src/ProductionCode.c +0 -24
  505. data/vendor/c_exception/vendor/unity/examples/example_1/src/ProductionCode.h +0 -3
  506. data/vendor/c_exception/vendor/unity/examples/example_1/src/ProductionCode2.c +0 -11
  507. data/vendor/c_exception/vendor/unity/examples/example_1/src/ProductionCode2.h +0 -2
  508. data/vendor/c_exception/vendor/unity/examples/example_1/test/TestProductionCode.c +0 -62
  509. data/vendor/c_exception/vendor/unity/examples/example_1/test/TestProductionCode2.c +0 -31
  510. data/vendor/c_exception/vendor/unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c +0 -53
  511. data/vendor/c_exception/vendor/unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c +0 -57
  512. data/vendor/c_exception/vendor/unity/examples/example_2/makefile +0 -70
  513. data/vendor/c_exception/vendor/unity/examples/example_2/readme.txt +0 -5
  514. data/vendor/c_exception/vendor/unity/examples/example_2/src/ProductionCode.c +0 -24
  515. data/vendor/c_exception/vendor/unity/examples/example_2/src/ProductionCode.h +0 -3
  516. data/vendor/c_exception/vendor/unity/examples/example_2/src/ProductionCode2.c +0 -11
  517. data/vendor/c_exception/vendor/unity/examples/example_2/src/ProductionCode2.h +0 -2
  518. data/vendor/c_exception/vendor/unity/examples/example_2/test/TestProductionCode.c +0 -64
  519. data/vendor/c_exception/vendor/unity/examples/example_2/test/TestProductionCode2.c +0 -33
  520. data/vendor/c_exception/vendor/unity/examples/example_2/test/test_runners/TestProductionCode2_Runner.c +0 -9
  521. data/vendor/c_exception/vendor/unity/examples/example_2/test/test_runners/TestProductionCode_Runner.c +0 -11
  522. data/vendor/c_exception/vendor/unity/examples/example_2/test/test_runners/all_tests.c +0 -12
  523. data/vendor/c_exception/vendor/unity/examples/example_3/helper/UnityHelper.c +0 -10
  524. data/vendor/c_exception/vendor/unity/examples/example_3/helper/UnityHelper.h +0 -12
  525. data/vendor/c_exception/vendor/unity/examples/example_3/rakefile.rb +0 -43
  526. data/vendor/c_exception/vendor/unity/examples/example_3/rakefile_helper.rb +0 -249
  527. data/vendor/c_exception/vendor/unity/examples/example_3/readme.txt +0 -13
  528. data/vendor/c_exception/vendor/unity/examples/example_3/src/ProductionCode.c +0 -24
  529. data/vendor/c_exception/vendor/unity/examples/example_3/src/ProductionCode.h +0 -3
  530. data/vendor/c_exception/vendor/unity/examples/example_3/src/ProductionCode2.c +0 -11
  531. data/vendor/c_exception/vendor/unity/examples/example_3/src/ProductionCode2.h +0 -2
  532. data/vendor/c_exception/vendor/unity/examples/example_3/target_gcc_32.yml +0 -46
  533. data/vendor/c_exception/vendor/unity/examples/example_3/test/TestProductionCode.c +0 -62
  534. data/vendor/c_exception/vendor/unity/examples/example_3/test/TestProductionCode2.c +0 -31
  535. data/vendor/c_exception/vendor/unity/examples/unity_config.h +0 -237
  536. data/vendor/c_exception/vendor/unity/extras/eclipse/error_parsers.txt +0 -26
  537. data/vendor/c_exception/vendor/unity/extras/fixture/rakefile.rb +0 -48
  538. data/vendor/c_exception/vendor/unity/extras/fixture/rakefile_helper.rb +0 -178
  539. data/vendor/c_exception/vendor/unity/extras/fixture/readme.txt +0 -9
  540. data/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture.c +0 -432
  541. data/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture.h +0 -83
  542. data/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture_internals.h +0 -51
  543. data/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture_malloc_overrides.h +0 -47
  544. data/vendor/c_exception/vendor/unity/extras/fixture/test/Makefile +0 -74
  545. data/vendor/c_exception/vendor/unity/extras/fixture/test/main/AllTests.c +0 -22
  546. data/vendor/c_exception/vendor/unity/extras/fixture/test/template_fixture_tests.c +0 -39
  547. data/vendor/c_exception/vendor/unity/extras/fixture/test/unity_fixture_Test.c +0 -543
  548. data/vendor/c_exception/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c +0 -57
  549. data/vendor/c_exception/vendor/unity/extras/fixture/test/unity_output_Spy.c +0 -57
  550. data/vendor/c_exception/vendor/unity/extras/fixture/test/unity_output_Spy.h +0 -17
  551. data/vendor/c_exception/vendor/unity/release/build.info +0 -2
  552. data/vendor/c_exception/vendor/unity/release/version.info +0 -2
  553. data/vendor/c_exception/vendor/unity/src/unity.c +0 -1517
  554. data/vendor/c_exception/vendor/unity/src/unity.h +0 -339
  555. data/vendor/c_exception/vendor/unity/src/unity_internals.h +0 -784
  556. data/vendor/c_exception/vendor/unity/test/Makefile +0 -63
  557. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_cmd.c +0 -61
  558. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_def.c +0 -57
  559. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_head1.c +0 -55
  560. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_head1.h +0 -15
  561. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_cmd.c +0 -80
  562. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_def.c +0 -76
  563. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_head1.c +0 -75
  564. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_head1.h +0 -13
  565. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_new1.c +0 -89
  566. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_new2.c +0 -89
  567. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_param.c +0 -77
  568. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_run1.c +0 -89
  569. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_run2.c +0 -89
  570. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_yaml.c +0 -90
  571. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_new1.c +0 -67
  572. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_new2.c +0 -70
  573. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_param.c +0 -58
  574. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_run1.c +0 -67
  575. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_run2.c +0 -70
  576. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_yaml.c +0 -71
  577. data/vendor/c_exception/vendor/unity/test/rakefile +0 -125
  578. data/vendor/c_exception/vendor/unity/test/rakefile_helper.rb +0 -260
  579. data/vendor/c_exception/vendor/unity/test/spec/generate_module_existing_file_spec.rb +0 -158
  580. data/vendor/c_exception/vendor/unity/test/targets/clang_file.yml +0 -78
  581. data/vendor/c_exception/vendor/unity/test/targets/clang_strict.yml +0 -78
  582. data/vendor/c_exception/vendor/unity/test/targets/gcc_32.yml +0 -49
  583. data/vendor/c_exception/vendor/unity/test/targets/gcc_64.yml +0 -50
  584. data/vendor/c_exception/vendor/unity/test/targets/gcc_auto_limits.yml +0 -47
  585. data/vendor/c_exception/vendor/unity/test/targets/gcc_auto_stdint.yml +0 -59
  586. data/vendor/c_exception/vendor/unity/test/targets/gcc_manual_math.yml +0 -47
  587. data/vendor/c_exception/vendor/unity/test/targets/hitech_picc18.yml +0 -101
  588. data/vendor/c_exception/vendor/unity/test/targets/iar_arm_v4.yml +0 -90
  589. data/vendor/c_exception/vendor/unity/test/targets/iar_arm_v5.yml +0 -80
  590. data/vendor/c_exception/vendor/unity/test/targets/iar_arm_v5_3.yml +0 -80
  591. data/vendor/c_exception/vendor/unity/test/targets/iar_armcortex_LM3S9B92_v5_4.yml +0 -94
  592. data/vendor/c_exception/vendor/unity/test/targets/iar_cortexm3_v5.yml +0 -84
  593. data/vendor/c_exception/vendor/unity/test/targets/iar_msp430.yml +0 -95
  594. data/vendor/c_exception/vendor/unity/test/targets/iar_sh2a_v6.yml +0 -86
  595. data/vendor/c_exception/vendor/unity/test/testdata/CException.h +0 -11
  596. data/vendor/c_exception/vendor/unity/test/testdata/Defs.h +0 -8
  597. data/vendor/c_exception/vendor/unity/test/testdata/cmock.h +0 -14
  598. data/vendor/c_exception/vendor/unity/test/testdata/mockMock.h +0 -13
  599. data/vendor/c_exception/vendor/unity/test/testdata/testRunnerGenerator.c +0 -183
  600. data/vendor/c_exception/vendor/unity/test/testdata/testRunnerGeneratorSmall.c +0 -67
  601. data/vendor/c_exception/vendor/unity/test/testdata/testRunnerGeneratorWithMocks.c +0 -192
  602. data/vendor/c_exception/vendor/unity/test/tests/test_generate_test_runner.rb +0 -1252
  603. data/vendor/c_exception/vendor/unity/test/tests/testparameterized.c +0 -110
  604. data/vendor/c_exception/vendor/unity/test/tests/testunity.c +0 -4993
  605. data/vendor/cmock/vendor/c_exception/vendor/unity/README.md +0 -220
  606. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/colour_prompt.rb +0 -118
  607. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/colour_reporter.rb +0 -39
  608. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/generate_config.yml +0 -36
  609. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/generate_module.rb +0 -308
  610. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/generate_test_runner.rb +0 -437
  611. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/parse_output.rb +0 -220
  612. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/stylize_as_junit.rb +0 -252
  613. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/test_file_filter.rb +0 -25
  614. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/type_sanitizer.rb +0 -6
  615. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/unity_test_summary.py +0 -139
  616. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/unity_test_summary.rb +0 -136
  617. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/unity_to_junit.py +0 -146
  618. data/vendor/cmock/vendor/c_exception/vendor/unity/docs/ThrowTheSwitchCodingStandard.md +0 -207
  619. data/vendor/cmock/vendor/c_exception/vendor/unity/docs/UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf +0 -0
  620. data/vendor/cmock/vendor/c_exception/vendor/unity/docs/UnityAssertionsReference.md +0 -716
  621. data/vendor/cmock/vendor/c_exception/vendor/unity/docs/UnityConfigurationGuide.md +0 -398
  622. data/vendor/cmock/vendor/c_exception/vendor/unity/docs/UnityGettingStartedGuide.md +0 -191
  623. data/vendor/cmock/vendor/c_exception/vendor/unity/docs/UnityHelperScriptsGuide.md +0 -242
  624. data/vendor/cmock/vendor/c_exception/vendor/unity/docs/license.txt +0 -21
  625. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_1/makefile +0 -71
  626. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_1/readme.txt +0 -5
  627. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_1/src/ProductionCode.c +0 -24
  628. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_1/src/ProductionCode.h +0 -3
  629. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_1/src/ProductionCode2.c +0 -11
  630. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_1/src/ProductionCode2.h +0 -2
  631. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_1/test/TestProductionCode.c +0 -62
  632. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_1/test/TestProductionCode2.c +0 -31
  633. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c +0 -53
  634. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c +0 -57
  635. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_2/makefile +0 -70
  636. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_2/readme.txt +0 -5
  637. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_2/src/ProductionCode.c +0 -24
  638. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_2/src/ProductionCode.h +0 -3
  639. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_2/src/ProductionCode2.c +0 -11
  640. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_2/src/ProductionCode2.h +0 -2
  641. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_2/test/TestProductionCode.c +0 -64
  642. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_2/test/TestProductionCode2.c +0 -33
  643. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_2/test/test_runners/TestProductionCode2_Runner.c +0 -9
  644. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_2/test/test_runners/TestProductionCode_Runner.c +0 -11
  645. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_2/test/test_runners/all_tests.c +0 -12
  646. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/helper/UnityHelper.c +0 -10
  647. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/helper/UnityHelper.h +0 -12
  648. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/rakefile.rb +0 -43
  649. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/rakefile_helper.rb +0 -249
  650. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/readme.txt +0 -13
  651. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/src/ProductionCode.c +0 -24
  652. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/src/ProductionCode.h +0 -3
  653. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/src/ProductionCode2.c +0 -11
  654. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/src/ProductionCode2.h +0 -2
  655. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/target_gcc_32.yml +0 -46
  656. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/test/TestProductionCode.c +0 -62
  657. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/test/TestProductionCode2.c +0 -31
  658. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/unity_config.h +0 -237
  659. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/eclipse/error_parsers.txt +0 -26
  660. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/rakefile.rb +0 -48
  661. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/rakefile_helper.rb +0 -178
  662. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/readme.txt +0 -9
  663. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture.c +0 -432
  664. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture.h +0 -83
  665. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture_internals.h +0 -51
  666. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture_malloc_overrides.h +0 -47
  667. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/Makefile +0 -74
  668. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/main/AllTests.c +0 -22
  669. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/template_fixture_tests.c +0 -39
  670. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/unity_fixture_Test.c +0 -543
  671. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c +0 -57
  672. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/unity_output_Spy.c +0 -57
  673. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/unity_output_Spy.h +0 -17
  674. data/vendor/cmock/vendor/c_exception/vendor/unity/release/build.info +0 -2
  675. data/vendor/cmock/vendor/c_exception/vendor/unity/release/version.info +0 -2
  676. data/vendor/cmock/vendor/c_exception/vendor/unity/src/unity.c +0 -1517
  677. data/vendor/cmock/vendor/c_exception/vendor/unity/src/unity.h +0 -339
  678. data/vendor/cmock/vendor/c_exception/vendor/unity/src/unity_internals.h +0 -784
  679. data/vendor/cmock/vendor/c_exception/vendor/unity/test/Makefile +0 -63
  680. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_cmd.c +0 -61
  681. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_def.c +0 -57
  682. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_head1.c +0 -55
  683. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_head1.h +0 -15
  684. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_cmd.c +0 -80
  685. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_def.c +0 -76
  686. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_head1.c +0 -75
  687. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_head1.h +0 -13
  688. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_new1.c +0 -89
  689. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_new2.c +0 -89
  690. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_param.c +0 -77
  691. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_run1.c +0 -89
  692. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_run2.c +0 -89
  693. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_yaml.c +0 -90
  694. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_new1.c +0 -67
  695. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_new2.c +0 -70
  696. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_param.c +0 -58
  697. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_run1.c +0 -67
  698. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_run2.c +0 -70
  699. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_yaml.c +0 -71
  700. data/vendor/cmock/vendor/c_exception/vendor/unity/test/rakefile +0 -125
  701. data/vendor/cmock/vendor/c_exception/vendor/unity/test/rakefile_helper.rb +0 -260
  702. data/vendor/cmock/vendor/c_exception/vendor/unity/test/spec/generate_module_existing_file_spec.rb +0 -158
  703. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/clang_file.yml +0 -78
  704. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/clang_strict.yml +0 -78
  705. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/gcc_32.yml +0 -49
  706. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/gcc_64.yml +0 -50
  707. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/gcc_auto_limits.yml +0 -47
  708. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/gcc_auto_stdint.yml +0 -59
  709. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/gcc_manual_math.yml +0 -47
  710. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/hitech_picc18.yml +0 -101
  711. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/iar_arm_v4.yml +0 -90
  712. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/iar_arm_v5.yml +0 -80
  713. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/iar_arm_v5_3.yml +0 -80
  714. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/iar_armcortex_LM3S9B92_v5_4.yml +0 -94
  715. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/iar_cortexm3_v5.yml +0 -84
  716. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/iar_msp430.yml +0 -95
  717. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/iar_sh2a_v6.yml +0 -86
  718. data/vendor/cmock/vendor/c_exception/vendor/unity/test/testdata/CException.h +0 -11
  719. data/vendor/cmock/vendor/c_exception/vendor/unity/test/testdata/Defs.h +0 -8
  720. data/vendor/cmock/vendor/c_exception/vendor/unity/test/testdata/cmock.h +0 -14
  721. data/vendor/cmock/vendor/c_exception/vendor/unity/test/testdata/mockMock.h +0 -13
  722. data/vendor/cmock/vendor/c_exception/vendor/unity/test/testdata/testRunnerGenerator.c +0 -183
  723. data/vendor/cmock/vendor/c_exception/vendor/unity/test/testdata/testRunnerGeneratorSmall.c +0 -67
  724. data/vendor/cmock/vendor/c_exception/vendor/unity/test/testdata/testRunnerGeneratorWithMocks.c +0 -192
  725. data/vendor/cmock/vendor/c_exception/vendor/unity/test/tests/test_generate_test_runner.rb +0 -1252
  726. data/vendor/cmock/vendor/c_exception/vendor/unity/test/tests/testparameterized.c +0 -110
  727. data/vendor/cmock/vendor/c_exception/vendor/unity/test/tests/testunity.c +0 -4993
  728. data/vendor/deep_merge/MIT-LICENSE +0 -20
  729. data/vendor/deep_merge/README +0 -94
  730. data/vendor/deep_merge/Rakefile +0 -28
  731. data/vendor/deep_merge/lib/deep_merge.rb +0 -211
  732. data/vendor/deep_merge/pkg/deep_merge-0.1.0.gem +0 -0
  733. data/vendor/deep_merge/test/test_deep_merge.rb +0 -553
@@ -1,20 +0,0 @@
1
- Copyright (c) 2008 [name of plugin creator]
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,94 +0,0 @@
1
- DeepMerge Overview
2
- ==================
3
-
4
- Deep Merge is a simple set of utility functions for Hash. It permits
5
- you to merge elements inside a hash together recursively. The manner
6
- by which it does this is somewhat arbitrary (since there is no defining
7
- standard for this) but it should end up being pretty intuitive and do what
8
- you expect.
9
-
10
- You can learn a lot more about this by reading the test file. It's pretty
11
- well documented and has many examples of various merges from very simple
12
- to pretty complex.
13
-
14
- The primary need that caused me to write this library is the merging of elements
15
- coming from HTTP parameters and related stored parameters in session. This lets
16
- a user build up a set of parameters over time, modifying individual items.
17
-
18
- Deep Merge Core Documentation
19
- =============================
20
- There are three key methods that are added to Hash when you require deep_merge:
21
-
22
- deep_merge!(new_hash[, opts]) -- merges and new_hash wins unmergeable situations
23
- deep_merge(new_hash[, opts]) -- merges and "self" hash wins unmergeable situations
24
- ko_deep_merge!(new_hash[, opts]) -- same as deep_merge! but "--" provides "knockout" functions
25
-
26
- deep_merge! method permits merging of arbitrary child elements. The two top level
27
- elements must be hashes. These hashes can contain unlimited (to stack limit) levels
28
- of child elements. These child elements to not have to be of the same types.
29
- Where child elements are of the same type, deep_merge will attempt to merge them together.
30
- Where child elements are not of the same type, deep_merge will skip or optionally overwrite
31
- the destination element with the contents of the source element at that level.
32
- So if you have two hashes like this:
33
- source = {:x => [1,2,3], :y => 2}
34
- dest = {:x => [4,5,'6'], :y => [7,8,9]}
35
- dest.deep_merge!(source)
36
- Results: {:x => [1,2,3,4,5,'6'], :y => 2}
37
- By default, "deep_merge!" will overwrite any unmergeables and merge everything else.
38
- To avoid this, use "deep_merge" (no bang/exclamation mark)
39
-
40
- Options:
41
- Options are specified in the last parameter passed, which should be in hash format:
42
- hash.deep_merge!({:x => [1,2]}, {:knockout_prefix => '--'})
43
- :preserve_unmergeables DEFAULT: false
44
- Set to true to skip any unmergeable elements from source
45
- :knockout_prefix DEFAULT: nil
46
- Set to string value to signify prefix which deletes elements from existing element
47
- :sort_merged_arrays DEFAULT: false
48
- Set to true to sort all arrays that are merged together
49
- :unpack_arrays DEFAULT: nil
50
- Set to string value to run "Array::join" then "String::split" against all arrays
51
- :merge_debug DEFAULT: false
52
- Set to true to get console output of merge process for debugging
53
-
54
- Selected Options Details:
55
- :knockout_prefix => The purpose of this is to provide a way to remove elements
56
- from existing Hash by specifying them in a special way in incoming hash
57
- source = {:x => ['--1', '2']}
58
- dest = {:x => ['1', '3']}
59
- dest.ko_deep_merge!(source)
60
- Results: {:x => ['2','3']}
61
- Additionally, if the knockout_prefix is passed alone as a string, it will cause
62
- the entire element to be removed:
63
- source = {:x => '--'}
64
- dest = {:x => [1,2,3]}
65
- dest.ko_deep_merge!(source)
66
- Results: {:x => ""}
67
- :unpack_arrays => The purpose of this is to permit compound elements to be passed
68
- in as strings and to be converted into discrete array elements
69
- irsource = {:x => ['1,2,3', '4']}
70
- dest = {:x => ['5','6','7,8']}
71
- dest.deep_merge!(source, {:unpack_arrays => ','})
72
- Results: {:x => ['1','2','3','4','5','6','7','8'}
73
- Why: If receiving data from an HTML form, this makes it easy for a checkbox
74
- to pass multiple values from within a single HTML element
75
-
76
- There are many tests for this library - and you can learn more about the features
77
- and usages of deep_merge! by just browsing the test examples
78
-
79
-
80
- Simple Example Code
81
- ===================
82
-
83
- require 'deep_merge'
84
- x = {:x => [3,4,5]}
85
- y = {:x => [1,2,3]}
86
- y.deep_merge!(x)
87
- # results: y = {:x => [1,2,3,4,5]}
88
-
89
- Availablility
90
- =============
91
- SVN Repo here: http://trac.misuse.org/science/wiki/DeepMerge
92
- Contact author: http://www.misuse.org/science
93
-
94
- Copyright (c) 2008 Steve Midgley, released under the MIT license
@@ -1,28 +0,0 @@
1
- require 'rubygems'
2
- require 'lib/deep_merge'
3
- Gem::manage_gems
4
- require 'rake/gempackagetask'
5
-
6
- spec = Gem::Specification.new do |s|
7
- s.platform = Gem::Platform::RUBY
8
- s.name = "deep_merge"
9
- s.version = DeepMerge::VERSION
10
- s.author = "Steve Midgley"
11
- s.email = "public@misuse.org"
12
- s.summary = "Permits recursive/deep merges of arrays and hashes."
13
- s.files = FileList['lib/*.rb', 'test/*'].to_a
14
- s.require_path = "lib"
15
- s.autorequire = "deep_merge"
16
- s.test_files = Dir.glob('tests/*.rb', File::FNM_PATHNAME)
17
- s.has_rdoc = true
18
- s.extra_rdoc_files = ["README"]
19
- end
20
-
21
- Rake::GemPackageTask.new(spec) do |pkg|
22
- pkg.need_tar = true
23
- end
24
-
25
- task :default => "pkg/#{spec.name}-#{spec.version}.gem" do
26
- puts "generated latest version"
27
- end
28
-
@@ -1,211 +0,0 @@
1
- module DeepMerge
2
-
3
- MAJOR_VERSION = 0
4
- MINOR_VERSION = 1
5
- FIX_VERSION = 0
6
- VERSION = "#{MAJOR_VERSION}.#{MINOR_VERSION}.#{FIX_VERSION}"
7
-
8
- class InvalidParameter < StandardError; end
9
-
10
- DEFAULT_FIELD_KNOCKOUT_PREFIX = '--'
11
-
12
- module DeepMergeHash
13
- # ko_hash_merge! will merge and knockout elements prefixed with DEFAULT_FIELD_KNOCKOUT_PREFIX
14
- def ko_deep_merge!(source, options = {})
15
- default_opts = {:knockout_prefix => "--", :preserve_unmergeables => false}
16
- DeepMerge::deep_merge!(source, self, default_opts.merge(options))
17
- end
18
-
19
- # deep_merge! will merge and overwrite any unmergeables in destination hash
20
- def deep_merge!(source, options = {})
21
- default_opts = {:preserve_unmergeables => false}
22
- DeepMerge::deep_merge!(source, self, default_opts.merge(options))
23
- end
24
-
25
- # deep_merge will merge and skip any unmergeables in destination hash
26
- def deep_merge(source, options = {})
27
- default_opts = {:preserve_unmergeables => true}
28
- DeepMerge::deep_merge!(source, self, default_opts.merge(options))
29
- end
30
-
31
- end # DeepMergeHashExt
32
-
33
- # Deep Merge core documentation.
34
- # deep_merge! method permits merging of arbitrary child elements. The two top level
35
- # elements must be hashes. These hashes can contain unlimited (to stack limit) levels
36
- # of child elements. These child elements to not have to be of the same types.
37
- # Where child elements are of the same type, deep_merge will attempt to merge them together.
38
- # Where child elements are not of the same type, deep_merge will skip or optionally overwrite
39
- # the destination element with the contents of the source element at that level.
40
- # So if you have two hashes like this:
41
- # source = {:x => [1,2,3], :y => 2}
42
- # dest = {:x => [4,5,'6'], :y => [7,8,9]}
43
- # dest.deep_merge!(source)
44
- # Results: {:x => [1,2,3,4,5,'6'], :y => 2}
45
- # By default, "deep_merge!" will overwrite any unmergeables and merge everything else.
46
- # To avoid this, use "deep_merge" (no bang/exclamation mark)
47
- #
48
- # Options:
49
- # Options are specified in the last parameter passed, which should be in hash format:
50
- # hash.deep_merge!({:x => [1,2]}, {:knockout_prefix => '--'})
51
- # :preserve_unmergeables DEFAULT: false
52
- # Set to true to skip any unmergeable elements from source
53
- # :knockout_prefix DEFAULT: nil
54
- # Set to string value to signify prefix which deletes elements from existing element
55
- # :sort_merged_arrays DEFAULT: false
56
- # Set to true to sort all arrays that are merged together
57
- # :unpack_arrays DEFAULT: nil
58
- # Set to string value to run "Array::join" then "String::split" against all arrays
59
- # :merge_debug DEFAULT: false
60
- # Set to true to get console output of merge process for debugging
61
- #
62
- # Selected Options Details:
63
- # :knockout_prefix => The purpose of this is to provide a way to remove elements
64
- # from existing Hash by specifying them in a special way in incoming hash
65
- # source = {:x => ['--1', '2']}
66
- # dest = {:x => ['1', '3']}
67
- # dest.ko_deep_merge!(source)
68
- # Results: {:x => ['2','3']}
69
- # Additionally, if the knockout_prefix is passed alone as a string, it will cause
70
- # the entire element to be removed:
71
- # source = {:x => '--'}
72
- # dest = {:x => [1,2,3]}
73
- # dest.ko_deep_merge!(source)
74
- # Results: {:x => ""}
75
- # :unpack_arrays => The purpose of this is to permit compound elements to be passed
76
- # in as strings and to be converted into discrete array elements
77
- # irsource = {:x => ['1,2,3', '4']}
78
- # dest = {:x => ['5','6','7,8']}
79
- # dest.deep_merge!(source, {:unpack_arrays => ','})
80
- # Results: {:x => ['1','2','3','4','5','6','7','8'}
81
- # Why: If receiving data from an HTML form, this makes it easy for a checkbox
82
- # to pass multiple values from within a single HTML element
83
- #
84
- # There are many tests for this library - and you can learn more about the features
85
- # and usages of deep_merge! by just browsing the test examples
86
- def DeepMerge.deep_merge!(source, dest, options = {})
87
- # turn on this line for stdout debugging text
88
- merge_debug = options[:merge_debug] || false
89
- overwrite_unmergeable = !options[:preserve_unmergeables]
90
- knockout_prefix = options[:knockout_prefix] || nil
91
- if knockout_prefix == "" then raise InvalidParameter, "knockout_prefix cannot be an empty string in deep_merge!"; end
92
- if knockout_prefix && !overwrite_unmergeable then raise InvalidParameter, "overwrite_unmergeable must be true if knockout_prefix is specified in deep_merge!"; end
93
- # if present: we will split and join arrays on this char before merging
94
- array_split_char = options[:unpack_arrays] || false
95
- # request that we sort together any arrays when they are merged
96
- sort_merged_arrays = options[:sort_merged_arrays] || false
97
- di = options[:debug_indent] || ''
98
- # do nothing if source is nil
99
- if source.nil? || (source.respond_to?(:blank?) && source.blank?) then return dest; end
100
- # if dest doesn't exist, then simply copy source to it
101
- if dest.nil? && overwrite_unmergeable then dest = source; return dest; end
102
-
103
- puts "#{di}Source class: #{source.class.inspect} :: Dest class: #{dest.class.inspect}" if merge_debug
104
- if source.kind_of?(Hash)
105
- puts "#{di}Hashes: #{source.inspect} :: #{dest.inspect}" if merge_debug
106
- source.each do |src_key, src_value|
107
- if dest.kind_of?(Hash)
108
- puts "#{di} looping: #{src_key.inspect} => #{src_value.inspect} :: #{dest.inspect}" if merge_debug
109
- if not dest[src_key].nil?
110
- puts "#{di} ==>merging: #{src_key.inspect} => #{src_value.inspect} :: #{dest[src_key].inspect}" if merge_debug
111
- dest[src_key] = deep_merge!(src_value, dest[src_key], options.merge(:debug_indent => di + ' '))
112
- else # dest[src_key] doesn't exist so we want to create and overwrite it (but we do this via deep_merge!)
113
- puts "#{di} ==>merging over: #{src_key.inspect} => #{src_value.inspect}" if merge_debug
114
- # note: we rescue here b/c some classes respond to "dup" but don't implement it (Numeric, TrueClass, FalseClass, NilClass among maybe others)
115
- begin
116
- src_dup = src_value.dup # we dup src_value if possible because we're going to merge into it (since dest is empty)
117
- rescue TypeError
118
- src_dup = src_value
119
- end
120
- dest[src_key] = deep_merge!(src_value, src_dup, options.merge(:debug_indent => di + ' '))
121
- end
122
- else # dest isn't a hash, so we overwrite it completely (if permitted)
123
- if overwrite_unmergeable
124
- puts "#{di} overwriting dest: #{src_key.inspect} => #{src_value.inspect} -over-> #{dest.inspect}" if merge_debug
125
- dest = overwrite_unmergeables(source, dest, options)
126
- end
127
- end
128
- end
129
- elsif source.kind_of?(Array)
130
- puts "#{di}Arrays: #{source.inspect} :: #{dest.inspect}" if merge_debug
131
- # if we are instructed, join/split any source arrays before processing
132
- if array_split_char
133
- puts "#{di} split/join on source: #{source.inspect}" if merge_debug
134
- source = source.join(array_split_char).split(array_split_char)
135
- if dest.kind_of?(Array) then dest = dest.join(array_split_char).split(array_split_char); end
136
- end
137
- # if there's a naked knockout_prefix in source, that means we are to truncate dest
138
- if source.index(knockout_prefix) then dest = clear_or_nil(dest); source.delete(knockout_prefix); end
139
- if dest.kind_of?(Array)
140
- if knockout_prefix
141
- print "#{di} knocking out: " if merge_debug
142
- # remove knockout prefix items from both source and dest
143
- source.delete_if do |ko_item|
144
- retval = false
145
- item = ko_item.respond_to?(:gsub) ? ko_item.gsub(%r{^#{knockout_prefix}}, "") : ko_item
146
- if item != ko_item
147
- print "#{ko_item} - " if merge_debug
148
- dest.delete(item)
149
- dest.delete(ko_item)
150
- retval = true
151
- end
152
- retval
153
- end
154
- puts if merge_debug
155
- end
156
- puts "#{di} merging arrays: #{source.inspect} :: #{dest.inspect}" if merge_debug
157
- dest = dest | source
158
- if sort_merged_arrays then dest.sort!; end
159
- elsif overwrite_unmergeable
160
- puts "#{di} overwriting dest: #{source.inspect} -over-> #{dest.inspect}" if merge_debug
161
- dest = overwrite_unmergeables(source, dest, options)
162
- end
163
- else # src_hash is not an array or hash, so we'll have to overwrite dest
164
- puts "#{di}Others: #{source.inspect} :: #{dest.inspect}" if merge_debug
165
- dest = overwrite_unmergeables(source, dest, options)
166
- end
167
- puts "#{di}Returning #{dest.inspect}" if merge_debug
168
- dest
169
- end # deep_merge!
170
-
171
- # allows deep_merge! to uniformly handle overwriting of unmergeable entities
172
- def DeepMerge::overwrite_unmergeables(source, dest, options)
173
- merge_debug = options[:merge_debug] || false
174
- overwrite_unmergeable = !options[:preserve_unmergeables]
175
- knockout_prefix = options[:knockout_prefix] || false
176
- di = options[:debug_indent] || ''
177
- if knockout_prefix && overwrite_unmergeable
178
- if source.kind_of?(String) # remove knockout string from source before overwriting dest
179
- src_tmp = source.gsub(%r{^#{knockout_prefix}},"")
180
- elsif source.kind_of?(Array) # remove all knockout elements before overwriting dest
181
- src_tmp = source.delete_if {|ko_item| ko_item.kind_of?(String) && ko_item.match(%r{^#{knockout_prefix}}) }
182
- else
183
- src_tmp = source
184
- end
185
- if src_tmp == source # if we didn't find a knockout_prefix then we just overwrite dest
186
- puts "#{di}#{src_tmp.inspect} -over-> #{dest.inspect}" if merge_debug
187
- dest = src_tmp
188
- else # if we do find a knockout_prefix, then we just delete dest
189
- puts "#{di}\"\" -over-> #{dest.inspect}" if merge_debug
190
- dest = ""
191
- end
192
- elsif overwrite_unmergeable
193
- dest = source
194
- end
195
- dest
196
- end
197
-
198
- def DeepMerge::clear_or_nil(obj)
199
- if obj.respond_to?(:clear)
200
- obj.clear
201
- else
202
- obj = nil
203
- end
204
- obj
205
- end
206
-
207
- end # module DeepMerge
208
-
209
- class Hash
210
- include DeepMerge::DeepMergeHash
211
- end
@@ -1,553 +0,0 @@
1
- require 'test/unit'
2
- require '../lib/deep_merge.rb'
3
-
4
- class TestDeepMerge < Test::Unit::TestCase
5
-
6
- def setup
7
- end
8
-
9
- # show that Hash object has deep merge capabilities in form of three methods:
10
- # ko_deep_merge! # uses '--' knockout and overwrites unmergeable
11
- # deep_merge! # overwrites unmergeable
12
- # deep_merge # skips unmergeable
13
- def test_hash_deep_merge
14
- x = {}
15
- assert x.respond_to?('deep_merge!'.to_sym)
16
- hash_src = {'id' => [3,4,5]}
17
- hash_dest = {'id' => [1,2,3]}
18
- assert hash_dest.ko_deep_merge!(hash_src)
19
- assert_equal({'id' => [1,2,3,4,5]}, hash_dest)
20
-
21
- hash_src = {'id' => [3,4,5]}
22
- hash_dest = {'id' => [1,2,3]}
23
- assert hash_dest.deep_merge!(hash_src)
24
- assert_equal({'id' => [1,2,3,4,5]}, hash_dest)
25
-
26
- hash_src = {'id' => 'xxx'}
27
- hash_dest = {'id' => [1,2,3]}
28
- assert hash_dest.deep_merge(hash_src)
29
- assert_equal({'id' => [1,2,3]}, hash_dest)
30
- end
31
-
32
- FIELD_KNOCKOUT_PREFIX = DeepMerge::DEFAULT_FIELD_KNOCKOUT_PREFIX
33
-
34
- # tests DeepMerge::deep_merge! function
35
- def test_deep_merge
36
- # merge tests (moving from basic to more complex)
37
-
38
- # test merging an hash w/array into blank hash
39
- hash_src = {'id' => '2'}
40
- hash_dst = {}
41
- DeepMerge::deep_merge!(hash_src.dup, hash_dst, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ","})
42
- assert_equal hash_src, hash_dst
43
-
44
- # test merging an hash w/array into blank hash
45
- hash_src = {'region' => {'id' => ['227', '2']}}
46
- hash_dst = {}
47
- DeepMerge::deep_merge!(hash_src, hash_dst, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ","})
48
- assert_equal hash_src, hash_dst
49
-
50
- # merge from empty hash
51
- hash_src = {}
52
- hash_dst = {"property" => ["2","4"]}
53
- DeepMerge::deep_merge!(hash_src, hash_dst)
54
- assert_equal({"property" => ["2","4"]}, hash_dst)
55
-
56
- # merge to empty hash
57
- hash_src = {"property" => ["2","4"]}
58
- hash_dst = {}
59
- DeepMerge::deep_merge!(hash_src, hash_dst)
60
- assert_equal({"property" => ["2","4"]}, hash_dst)
61
-
62
- # simple string overwrite
63
- hash_src = {"name" => "value"}
64
- hash_dst = {"name" => "value1"}
65
- DeepMerge::deep_merge!(hash_src, hash_dst)
66
- assert_equal({"name" => "value"}, hash_dst)
67
-
68
- # simple string overwrite of empty hash
69
- hash_src = {"name" => "value"}
70
- hash_dst = {}
71
- DeepMerge::deep_merge!(hash_src, hash_dst)
72
- assert_equal(hash_src, hash_dst)
73
-
74
- # hashes holding array
75
- hash_src = {"property" => ["1","3"]}
76
- hash_dst = {"property" => ["2","4"]}
77
- DeepMerge::deep_merge!(hash_src, hash_dst)
78
- assert_equal(["2","4","1","3"], hash_dst['property'])
79
-
80
- # hashes holding array (sorted)
81
- hash_src = {"property" => ["1","3"]}
82
- hash_dst = {"property" => ["2","4"]}
83
- DeepMerge::deep_merge!(hash_src, hash_dst, {:sort_merged_arrays => true})
84
- assert_equal(["1","2","3","4"].sort, hash_dst['property'])
85
-
86
- # hashes holding hashes holding arrays (array with duplicate elements is merged with dest then src
87
- hash_src = {"property" => {"bedroom_count" => ["1", "2"], "bathroom_count" => ["1", "4+"]}}
88
- hash_dst = {"property" => {"bedroom_count" => ["3", "2"], "bathroom_count" => ["2"]}}
89
- DeepMerge::deep_merge!(hash_src, hash_dst)
90
- assert_equal({"property" => {"bedroom_count" => ["3","2","1"], "bathroom_count" => ["2", "1", "4+"]}}, hash_dst)
91
-
92
- # hash holding hash holding array v string (string is overwritten by array)
93
- hash_src = {"property" => {"bedroom_count" => ["1", "2"], "bathroom_count" => ["1", "4+"]}}
94
- hash_dst = {"property" => {"bedroom_count" => "3", "bathroom_count" => ["2"]}}
95
- DeepMerge::deep_merge!(hash_src, hash_dst)
96
- assert_equal({"property" => {"bedroom_count" => ["1", "2"], "bathroom_count" => ["2","1","4+"]}}, hash_dst)
97
-
98
- # hash holding hash holding array v string (string is NOT overwritten by array)
99
- hash_src = {"property" => {"bedroom_count" => ["1", "2"], "bathroom_count" => ["1", "4+"]}}
100
- hash_dst = {"property" => {"bedroom_count" => "3", "bathroom_count" => ["2"]}}
101
- DeepMerge::deep_merge!(hash_src, hash_dst, {:preserve_unmergeables => true})
102
- assert_equal({"property" => {"bedroom_count" => "3", "bathroom_count" => ["2","1","4+"]}}, hash_dst)
103
-
104
- # hash holding hash holding string v array (array is overwritten by string)
105
- hash_src = {"property" => {"bedroom_count" => "3", "bathroom_count" => ["1", "4+"]}}
106
- hash_dst = {"property" => {"bedroom_count" => ["1", "2"], "bathroom_count" => ["2"]}}
107
- DeepMerge::deep_merge!(hash_src, hash_dst)
108
- assert_equal({"property" => {"bedroom_count" => "3", "bathroom_count" => ["2","1","4+"]}}, hash_dst)
109
-
110
- # hash holding hash holding string v array (array does NOT overwrite string)
111
- hash_src = {"property" => {"bedroom_count" => "3", "bathroom_count" => ["1", "4+"]}}
112
- hash_dst = {"property" => {"bedroom_count" => ["1", "2"], "bathroom_count" => ["2"]}}
113
- DeepMerge::deep_merge!(hash_src, hash_dst, {:preserve_unmergeables => true})
114
- assert_equal({"property" => {"bedroom_count" => ["1", "2"], "bathroom_count" => ["2","1","4+"]}}, hash_dst)
115
-
116
- # hash holding hash holding hash v array (array is overwritten by hash)
117
- hash_src = {"property" => {"bedroom_count" => {"king_bed" => 3, "queen_bed" => 1}, "bathroom_count" => ["1", "4+"]}}
118
- hash_dst = {"property" => {"bedroom_count" => ["1", "2"], "bathroom_count" => ["2"]}}
119
- DeepMerge::deep_merge!(hash_src, hash_dst)
120
- assert_equal({"property" => {"bedroom_count" => {"king_bed" => 3, "queen_bed" => 1}, "bathroom_count" => ["2","1","4+"]}}, hash_dst)
121
-
122
- # hash holding hash holding hash v array (array is NOT overwritten by hash)
123
- hash_src = {"property" => {"bedroom_count" => {"king_bed" => 3, "queen_bed" => 1}, "bathroom_count" => ["1", "4+"]}}
124
- hash_dst = {"property" => {"bedroom_count" => ["1", "2"], "bathroom_count" => ["2"]}}
125
- DeepMerge::deep_merge!(hash_src, hash_dst, {:preserve_unmergeables => true})
126
- assert_equal({"property" => {"bedroom_count" => ["1", "2"], "bathroom_count" => ["2","1","4+"]}}, hash_dst)
127
-
128
- # 3 hash layers holding integers (integers are overwritten by source)
129
- hash_src = {"property" => {"bedroom_count" => {"king_bed" => 3, "queen_bed" => 1}, "bathroom_count" => ["1", "4+"]}}
130
- hash_dst = {"property" => {"bedroom_count" => {"king_bed" => 2, "queen_bed" => 4}, "bathroom_count" => ["2"]}}
131
- DeepMerge::deep_merge!(hash_src, hash_dst)
132
- assert_equal({"property" => {"bedroom_count" => {"king_bed" => 3, "queen_bed" => 1}, "bathroom_count" => ["2","1","4+"]}}, hash_dst)
133
-
134
- # 3 hash layers holding arrays of int (arrays are merged)
135
- hash_src = {"property" => {"bedroom_count" => {"king_bed" => [3], "queen_bed" => [1]}, "bathroom_count" => ["1", "4+"]}}
136
- hash_dst = {"property" => {"bedroom_count" => {"king_bed" => [2], "queen_bed" => [4]}, "bathroom_count" => ["2"]}}
137
- DeepMerge::deep_merge!(hash_src, hash_dst)
138
- assert_equal({"property" => {"bedroom_count" => {"king_bed" => [2,3], "queen_bed" => [4,1]}, "bathroom_count" => ["2","1","4+"]}}, hash_dst)
139
-
140
- # 1 hash overwriting 3 hash layers holding arrays of int
141
- hash_src = {"property" => "1"}
142
- hash_dst = {"property" => {"bedroom_count" => {"king_bed" => [2], "queen_bed" => [4]}, "bathroom_count" => ["2"]}}
143
- DeepMerge::deep_merge!(hash_src, hash_dst)
144
- assert_equal({"property" => "1"}, hash_dst)
145
-
146
- # 1 hash NOT overwriting 3 hash layers holding arrays of int
147
- hash_src = {"property" => "1"}
148
- hash_dst = {"property" => {"bedroom_count" => {"king_bed" => [2], "queen_bed" => [4]}, "bathroom_count" => ["2"]}}
149
- DeepMerge::deep_merge!(hash_src, hash_dst, {:preserve_unmergeables => true})
150
- assert_equal({"property" => {"bedroom_count" => {"king_bed" => [2], "queen_bed" => [4]}, "bathroom_count" => ["2"]}}, hash_dst)
151
-
152
- # 3 hash layers holding arrays of int (arrays are merged) but second hash's array is overwritten
153
- hash_src = {"property" => {"bedroom_count" => {"king_bed" => [3], "queen_bed" => [1]}, "bathroom_count" => "1"}}
154
- hash_dst = {"property" => {"bedroom_count" => {"king_bed" => [2], "queen_bed" => [4]}, "bathroom_count" => ["2"]}}
155
- DeepMerge::deep_merge!(hash_src, hash_dst)
156
- assert_equal({"property" => {"bedroom_count" => {"king_bed" => [2,3], "queen_bed" => [4,1]}, "bathroom_count" => "1"}}, hash_dst)
157
-
158
- # 3 hash layers holding arrays of int (arrays are merged) but second hash's array is NOT overwritten
159
- hash_src = {"property" => {"bedroom_count" => {"king_bed" => [3], "queen_bed" => [1]}, "bathroom_count" => "1"}}
160
- hash_dst = {"property" => {"bedroom_count" => {"king_bed" => [2], "queen_bed" => [4]}, "bathroom_count" => ["2"]}}
161
- DeepMerge::deep_merge!(hash_src, hash_dst, {:preserve_unmergeables => true})
162
- assert_equal({"property" => {"bedroom_count" => {"king_bed" => [2,3], "queen_bed" => [4,1]}, "bathroom_count" => ["2"]}}, hash_dst)
163
-
164
- # 3 hash layers holding arrays of int, but one holds int. This one overwrites, but the rest merge
165
- hash_src = {"property" => {"bedroom_count" => {"king_bed" => 3, "queen_bed" => [1]}, "bathroom_count" => ["1"]}}
166
- hash_dst = {"property" => {"bedroom_count" => {"king_bed" => [2], "queen_bed" => [4]}, "bathroom_count" => ["2"]}}
167
- DeepMerge::deep_merge!(hash_src, hash_dst)
168
- assert_equal({"property" => {"bedroom_count" => {"king_bed" => 3, "queen_bed" => [4,1]}, "bathroom_count" => ["2","1"]}}, hash_dst)
169
-
170
- # 3 hash layers holding arrays of int, but source is incomplete.
171
- hash_src = {"property" => {"bedroom_count" => {"king_bed" => [3]}, "bathroom_count" => ["1"]}}
172
- hash_dst = {"property" => {"bedroom_count" => {"king_bed" => [2], "queen_bed" => [4]}, "bathroom_count" => ["2"]}}
173
- DeepMerge::deep_merge!(hash_src, hash_dst)
174
- assert_equal({"property" => {"bedroom_count" => {"king_bed" => [2,3], "queen_bed" => [4]}, "bathroom_count" => ["2","1"]}}, hash_dst)
175
-
176
- # 3 hash layers holding arrays of int, but source is shorter and has new 2nd level ints.
177
- hash_src = {"property" => {"bedroom_count" => {2=>3, "king_bed" => [3]}, "bathroom_count" => ["1"]}}
178
- hash_dst = {"property" => {"bedroom_count" => {"king_bed" => [2], "queen_bed" => [4]}, "bathroom_count" => ["2"]}}
179
- DeepMerge::deep_merge!(hash_src, hash_dst)
180
- assert_equal({"property" => {"bedroom_count" => {2=>3, "king_bed" => [2,3], "queen_bed" => [4]}, "bathroom_count" => ["2","1"]}}, hash_dst)
181
-
182
- # 3 hash layers holding arrays of int, but source is empty
183
- hash_src = {}
184
- hash_dst = {"property" => {"bedroom_count" => {"king_bed" => [2], "queen_bed" => [4]}, "bathroom_count" => ["2"]}}
185
- DeepMerge::deep_merge!(hash_src, hash_dst)
186
- assert_equal({"property" => {"bedroom_count" => {"king_bed" => [2], "queen_bed" => [4]}, "bathroom_count" => ["2"]}}, hash_dst)
187
-
188
- # 3 hash layers holding arrays of int, but dest is empty
189
- hash_src = {"property" => {"bedroom_count" => {2=>3, "king_bed" => [3]}, "bathroom_count" => ["1"]}}
190
- hash_dst = {}
191
- DeepMerge::deep_merge!(hash_src, hash_dst)
192
- assert_equal({"property" => {"bedroom_count" => {2=>3, "king_bed" => [3]}, "bathroom_count" => ["1"]}}, hash_dst)
193
-
194
- # test parameter management for knockout_prefix and overwrite unmergable
195
- assert_raise(DeepMerge::InvalidParameter) {DeepMerge::deep_merge!(hash_src, hash_dst, {:knockout_prefix => ""})}
196
- assert_raise(DeepMerge::InvalidParameter) {DeepMerge::deep_merge!(hash_src, hash_dst, {:preserve_unmergeables => true, :knockout_prefix => ""})}
197
- assert_raise(DeepMerge::InvalidParameter) {DeepMerge::deep_merge!(hash_src, hash_dst, {:preserve_unmergeables => true, :knockout_prefix => "--"})}
198
- assert_nothing_raised(DeepMerge::InvalidParameter) {DeepMerge::deep_merge!(hash_src, hash_dst, {:knockout_prefix => "--"})}
199
- assert_nothing_raised(DeepMerge::InvalidParameter) {DeepMerge::deep_merge!(hash_src, hash_dst)}
200
- assert_nothing_raised(DeepMerge::InvalidParameter) {DeepMerge::deep_merge!(hash_src, hash_dst, {:preserve_unmergeables => true})}
201
-
202
- # hash holding arrays of arrays
203
- hash_src = {["1", "2", "3"] => ["1", "2"]}
204
- hash_dst = {["4", "5"] => ["3"]}
205
- DeepMerge::deep_merge!(hash_src, hash_dst)
206
- assert_equal({["1","2","3"] => ["1", "2"], ["4", "5"] => ["3"]}, hash_dst)
207
-
208
- # test merging of hash with blank hash, and make sure that source array split still functions
209
- hash_src = {'property' => {'bedroom_count' => ["1","2,3"]}}
210
- hash_dst = {}
211
- DeepMerge::deep_merge!(hash_src, hash_dst, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ","})
212
- assert_equal({'property' => {'bedroom_count' => ["1","2","3"]}}, hash_dst)
213
-
214
- # test merging of hash with blank hash, and make sure that source array split does not function when turned off
215
- hash_src = {'property' => {'bedroom_count' => ["1","2,3"]}}
216
- hash_dst = {}
217
- DeepMerge::deep_merge!(hash_src, hash_dst, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX})
218
- assert_equal({'property' => {'bedroom_count' => ["1","2,3"]}}, hash_dst)
219
-
220
- # test merging into a blank hash with overwrite_unmergeables turned on
221
- hash_src = {"action"=>"browse", "controller"=>"results"}
222
- hash_dst = {}
223
- DeepMerge::deep_merge!(hash_src, hash_dst, {:overwrite_unmergeables => true, :knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ","})
224
- assert_equal hash_src, hash_dst
225
-
226
- # KNOCKOUT_PREFIX testing
227
- # the next few tests are looking for correct behavior from specific real-world params/session merges
228
- # using the custom modifiers built for param/session merges
229
-
230
- [nil, ","].each do |ko_split|
231
- # typical params/session style hash with knockout_merge elements
232
- hash_params = {"property"=>{"bedroom_count"=>[FIELD_KNOCKOUT_PREFIX+"1", "2", "3"]}}
233
- hash_session = {"property"=>{"bedroom_count"=>["1", "2", "3"]}}
234
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ko_split})
235
- assert_equal({"property"=>{"bedroom_count"=>["2", "3"]}}, hash_session)
236
-
237
- # typical params/session style hash with knockout_merge elements
238
- hash_params = {"property"=>{"bedroom_count"=>[FIELD_KNOCKOUT_PREFIX+"1", "2", "3"]}}
239
- hash_session = {"property"=>{"bedroom_count"=>["3"]}}
240
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ko_split})
241
- assert_equal({"property"=>{"bedroom_count"=>["3","2"]}}, hash_session)
242
-
243
- # typical params/session style hash with knockout_merge elements
244
- hash_params = {"property"=>{"bedroom_count"=>[FIELD_KNOCKOUT_PREFIX+"1", "2", "3"]}}
245
- hash_session = {"property"=>{"bedroom_count"=>["4"]}}
246
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ko_split})
247
- assert_equal({"property"=>{"bedroom_count"=>["4","2","3"]}}, hash_session)
248
-
249
- # typical params/session style hash with knockout_merge elements
250
- hash_params = {"property"=>{"bedroom_count"=>[FIELD_KNOCKOUT_PREFIX+"1", "2", "3"]}}
251
- hash_session = {"property"=>{"bedroom_count"=>[FIELD_KNOCKOUT_PREFIX+"1", "4"]}}
252
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ko_split})
253
- assert_equal({"property"=>{"bedroom_count"=>["4","2","3"]}}, hash_session)
254
-
255
- # typical params/session style hash with knockout_merge elements
256
- hash_params = {"amenity"=>{"id"=>[FIELD_KNOCKOUT_PREFIX+"1", FIELD_KNOCKOUT_PREFIX+"2", "3", "4"]}}
257
- hash_session = {"amenity"=>{"id"=>["1", "2"]}}
258
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ko_split})
259
- assert_equal({"amenity"=>{"id"=>["3","4"]}}, hash_session)
260
- end
261
-
262
- # special params/session style hash with knockout_merge elements in form src: ["1","2"] dest:["--1,--2", "3,4"]
263
- hash_params = {"amenity"=>{"id"=>[FIELD_KNOCKOUT_PREFIX+"1,"+FIELD_KNOCKOUT_PREFIX+"2", "3,4"]}}
264
- hash_session = {"amenity"=>{"id"=>["1", "2"]}}
265
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ","})
266
- assert_equal({"amenity"=>{"id"=>["3","4"]}}, hash_session)
267
-
268
- # same as previous but without ko_split value, this merge should fail
269
- hash_params = {"amenity"=>{"id"=>[FIELD_KNOCKOUT_PREFIX+"1,"+FIELD_KNOCKOUT_PREFIX+"2", "3,4"]}}
270
- hash_session = {"amenity"=>{"id"=>["1", "2"]}}
271
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX})
272
- assert_equal({"amenity"=>{"id"=>["1","2","3,4"]}}, hash_session)
273
-
274
- # special params/session style hash with knockout_merge elements in form src: ["1","2"] dest:["--1,--2", "3,4"]
275
- hash_params = {"amenity"=>{"id"=>[FIELD_KNOCKOUT_PREFIX+"1,2", "3,4", "--5", "6"]}}
276
- hash_session = {"amenity"=>{"id"=>["1", "2"]}}
277
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ","})
278
- assert_equal({"amenity"=>{"id"=>["2","3","4","6"]}}, hash_session)
279
-
280
- # special params/session style hash with knockout_merge elements in form src: ["--1,--2", "3,4", "--5", "6"] dest:["1,2", "3,4"]
281
- hash_params = {"amenity"=>{"id"=>["#{FIELD_KNOCKOUT_PREFIX}1,#{FIELD_KNOCKOUT_PREFIX}2", "3,4", "#{FIELD_KNOCKOUT_PREFIX}5", "6"]}}
282
- hash_session = {"amenity"=>{"id"=>["1", "2", "3", "4"]}}
283
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ","})
284
- assert_equal({"amenity"=>{"id"=>["3","4","6"]}}, hash_session)
285
-
286
-
287
- hash_src = {"url_regions"=>[], "region"=>{"ids"=>["227,233"]}, "action"=>"browse", "task"=>"browse", "controller"=>"results"}
288
- hash_dst = {"region"=>{"ids"=>["227"]}}
289
- DeepMerge::deep_merge!(hash_src.dup, hash_dst, {:overwrite_unmergeables => true, :knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ","})
290
- assert_equal({"url_regions"=>[], "region"=>{"ids"=>["227","233"]}, "action"=>"browse", "task"=>"browse", "controller"=>"results"}, hash_dst)
291
-
292
- hash_src = {"region"=>{"ids"=>["--","227"], "id"=>"230"}}
293
- hash_dst = {"region"=>{"ids"=>["227", "233", "324", "230", "230"], "id"=>"230"}}
294
- DeepMerge::deep_merge!(hash_src, hash_dst, {:overwrite_unmergeables => true, :knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ","})
295
- assert_equal({"region"=>{"ids"=>["227"], "id"=>"230"}}, hash_dst)
296
-
297
- hash_src = {"region"=>{"ids"=>["--","227", "232", "233"], "id"=>"232"}}
298
- hash_dst = {"region"=>{"ids"=>["227", "233", "324", "230", "230"], "id"=>"230"}}
299
- DeepMerge::deep_merge!(hash_src, hash_dst, {:overwrite_unmergeables => true, :knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ","})
300
- assert_equal({"region"=>{"ids"=>["227", "232", "233"], "id"=>"232"}}, hash_dst)
301
-
302
- hash_src = {"region"=>{"ids"=>["--,227,232,233"], "id"=>"232"}}
303
- hash_dst = {"region"=>{"ids"=>["227", "233", "324", "230", "230"], "id"=>"230"}}
304
- DeepMerge::deep_merge!(hash_src, hash_dst, {:overwrite_unmergeables => true, :knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ","})
305
- assert_equal({"region"=>{"ids"=>["227", "232", "233"], "id"=>"232"}}, hash_dst)
306
-
307
- hash_src = {"region"=>{"ids"=>["--,227,232","233"], "id"=>"232"}}
308
- hash_dst = {"region"=>{"ids"=>["227", "233", "324", "230", "230"], "id"=>"230"}}
309
- DeepMerge::deep_merge!(hash_src, hash_dst, {:overwrite_unmergeables => true, :knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ","})
310
- assert_equal({"region"=>{"ids"=>["227", "232", "233"], "id"=>"232"}}, hash_dst)
311
-
312
- hash_src = {"region"=>{"ids"=>["--,227"], "id"=>"230"}}
313
- hash_dst = {"region"=>{"ids"=>["227", "233", "324", "230", "230"], "id"=>"230"}}
314
- DeepMerge::deep_merge!(hash_src, hash_dst, {:overwrite_unmergeables => true, :knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ","})
315
- assert_equal({"region"=>{"ids"=>["227"], "id"=>"230"}}, hash_dst)
316
-
317
- hash_src = {"region"=>{"ids"=>["--,227"], "id"=>"230"}}
318
- hash_dst = {"region"=>{"ids"=>["227", "233", "324", "230", "230"], "id"=>"230"}, "action"=>"browse", "task"=>"browse", "controller"=>"results", "property_order_by"=>"property_type.descr"}
319
- DeepMerge::deep_merge!(hash_src, hash_dst, {:overwrite_unmergeables => true, :knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ","})
320
- assert_equal({"region"=>{"ids"=>["227"], "id"=>"230"}, "action"=>"browse", "task"=>"browse",
321
- "controller"=>"results", "property_order_by"=>"property_type.descr"}, hash_dst)
322
-
323
- hash_src = {"query_uuid"=>"6386333d-389b-ab5c-8943-6f3a2aa914d7", "region"=>{"ids"=>["--,227"], "id"=>"230"}}
324
- hash_dst = {"query_uuid"=>"6386333d-389b-ab5c-8943-6f3a2aa914d7", "url_regions"=>[], "region"=>{"ids"=>["227", "233", "324", "230", "230"], "id"=>"230"}, "action"=>"browse", "task"=>"browse", "controller"=>"results", "property_order_by"=>"property_type.descr"}
325
- DeepMerge::deep_merge!(hash_src, hash_dst, {:overwrite_unmergeables => true, :knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ","})
326
- assert_equal({"query_uuid" => "6386333d-389b-ab5c-8943-6f3a2aa914d7", "url_regions"=>[],
327
- "region"=>{"ids"=>["227"], "id"=>"230"}, "action"=>"browse", "task"=>"browse",
328
- "controller"=>"results", "property_order_by"=>"property_type.descr"}, hash_dst)
329
-
330
- # knock out entire dest hash if "--" is passed for source
331
- hash_params = {'amenity' => "--"}
332
- hash_session = {"amenity" => "1"}
333
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => "--", :unpack_arrays => ","})
334
- assert_equal({'amenity' => ""}, hash_session)
335
-
336
- # knock out entire dest hash if "--" is passed for source
337
- hash_params = {'amenity' => ["--"]}
338
- hash_session = {"amenity" => "1"}
339
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => "--", :unpack_arrays => ","})
340
- assert_equal({'amenity' => []}, hash_session)
341
-
342
- # knock out entire dest hash if "--" is passed for source
343
- hash_params = {'amenity' => "--"}
344
- hash_session = {"amenity" => ["1"]}
345
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => "--", :unpack_arrays => ","})
346
- assert_equal({'amenity' => ""}, hash_session)
347
-
348
- # knock out entire dest hash if "--" is passed for source
349
- hash_params = {'amenity' => ["--"]}
350
- hash_session = {"amenity" => ["1"]}
351
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => "--", :unpack_arrays => ","})
352
- assert_equal({'amenity' => []}, hash_session)
353
-
354
- # knock out entire dest hash if "--" is passed for source
355
- hash_params = {'amenity' => ["--"]}
356
- hash_session = {"amenity" => "1"}
357
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => "--", :unpack_arrays => ","})
358
- assert_equal({'amenity' => []}, hash_session)
359
-
360
- # knock out entire dest hash if "--" is passed for source
361
- hash_params = {'amenity' => ["--", "2"]}
362
- hash_session = {'amenity' => ["1", "3", "7+"]}
363
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => "--", :unpack_arrays => ","})
364
- assert_equal({'amenity' => ["2"]}, hash_session)
365
-
366
- # knock out entire dest hash if "--" is passed for source
367
- hash_params = {'amenity' => ["--", "2"]}
368
- hash_session = {'amenity' => "5"}
369
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => "--", :unpack_arrays => ","})
370
- assert_equal({'amenity' => ['2']}, hash_session)
371
-
372
- # knock out entire dest hash if "--" is passed for source
373
- hash_params = {'amenity' => "--"}
374
- hash_session = {"amenity"=>{"id"=>["1", "2", "3", "4"]}}
375
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => "--", :unpack_arrays => ","})
376
- assert_equal({'amenity' => ""}, hash_session)
377
-
378
- # knock out entire dest hash if "--" is passed for source
379
- hash_params = {'amenity' => ["--"]}
380
- hash_session = {"amenity"=>{"id"=>["1", "2", "3", "4"]}}
381
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => "--", :unpack_arrays => ","})
382
- assert_equal({'amenity' => []}, hash_session)
383
-
384
- # knock out dest array if "--" is passed for source
385
- hash_params = {"region" => {'ids' => FIELD_KNOCKOUT_PREFIX}}
386
- hash_session = {"region"=>{"ids"=>["1", "2", "3", "4"]}}
387
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ","})
388
- assert_equal({'region' => {'ids' => ""}}, hash_session)
389
-
390
- # knock out dest array but leave other elements of hash intact
391
- hash_params = {"region" => {'ids' => FIELD_KNOCKOUT_PREFIX}}
392
- hash_session = {"region"=>{"ids"=>["1", "2", "3", "4"], 'id'=>'11'}}
393
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ","})
394
- assert_equal({'region' => {'ids' => "", 'id'=>'11'}}, hash_session)
395
-
396
- # knock out entire tree of dest hash
397
- hash_params = {"region" => FIELD_KNOCKOUT_PREFIX}
398
- hash_session = {"region"=>{"ids"=>["1", "2", "3", "4"], 'id'=>'11'}}
399
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ","})
400
- assert_equal({'region' => ""}, hash_session)
401
-
402
- # knock out entire tree of dest hash - retaining array format
403
- hash_params = {"region" => {'ids' => [FIELD_KNOCKOUT_PREFIX]}}
404
- hash_session = {"region"=>{"ids"=>["1", "2", "3", "4"], 'id'=>'11'}}
405
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ","})
406
- assert_equal({'region' => {'ids' => [], 'id'=>'11'}}, hash_session)
407
-
408
- # knock out entire tree of dest hash & replace with new content
409
- hash_params = {"region" => {'ids' => ["2", FIELD_KNOCKOUT_PREFIX, "6"]}}
410
- hash_session = {"region"=>{"ids"=>["1", "2", "3", "4"], 'id'=>'11'}}
411
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ","})
412
- assert_equal({'region' => {'ids' => ["2", "6"], 'id'=>'11'}}, hash_session)
413
-
414
- # knock out entire tree of dest hash & replace with new content
415
- hash_params = {"region" => {'ids' => ["7", FIELD_KNOCKOUT_PREFIX, "6"]}}
416
- hash_session = {"region"=>{"ids"=>["1", "2", "3", "4"], 'id'=>'11'}}
417
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ","})
418
- assert_equal({'region' => {'ids' => ["7", "6"], 'id'=>'11'}}, hash_session)
419
-
420
- # edge test: make sure that when we turn off knockout_prefix that all values are processed correctly
421
- hash_params = {"region" => {'ids' => ["7", "--", "2", "6,8"]}}
422
- hash_session = {"region"=>{"ids"=>["1", "2", "3", "4"], 'id'=>'11'}}
423
- DeepMerge::deep_merge!(hash_params, hash_session, {:unpack_arrays => ","})
424
- assert_equal({'region' => {'ids' => ["1", "2", "3", "4", "7", "--", "6", "8"], 'id'=>'11'}}, hash_session)
425
-
426
- # edge test 2: make sure that when we turn off source array split that all values are processed correctly
427
- hash_params = {"region" => {'ids' => ["7", "3", "--", "6,8"]}}
428
- hash_session = {"region"=>{"ids"=>["1", "2", "3", "4"], 'id'=>'11'}}
429
- DeepMerge::deep_merge!(hash_params, hash_session)
430
- assert_equal({'region' => {'ids' => ["1", "2", "3", "4", "7", "--", "6,8"], 'id'=>'11'}}, hash_session)
431
-
432
- # Example: src = {'key' => "--1"}, dst = {'key' => "1"} -> merges to {'key' => ""}
433
- hash_params = {"amenity"=>"--1"}
434
- hash_session = {"amenity"=>"1"}
435
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX})
436
- assert_equal({"amenity"=>""}, hash_session)
437
-
438
- # Example: src = {'key' => "--1"}, dst = {'key' => "2"} -> merges to {'key' => ""}
439
- hash_params = {"amenity"=>"--1"}
440
- hash_session = {"amenity"=>"2"}
441
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX})
442
- assert_equal({"amenity"=>""}, hash_session)
443
-
444
- # Example: src = {'key' => "--1"}, dst = {'key' => "1"} -> merges to {'key' => ""}
445
- hash_params = {"amenity"=>["--1"]}
446
- hash_session = {"amenity"=>"1"}
447
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX})
448
- assert_equal({"amenity"=>[]}, hash_session)
449
-
450
- # Example: src = {'key' => "--1"}, dst = {'key' => "1"} -> merges to {'key' => ""}
451
- hash_params = {"amenity"=>["--1"]}
452
- hash_session = {"amenity"=>["1"]}
453
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX})
454
- assert_equal({"amenity"=>[]}, hash_session)
455
-
456
- # Example: src = {'key' => "--1"}, dst = {'key' => "1"} -> merges to {'key' => ""}
457
- hash_params = {"amenity"=>"--1"}
458
- hash_session = {}
459
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX})
460
- assert_equal({"amenity"=>""}, hash_session)
461
-
462
-
463
- # Example: src = {'key' => "--1"}, dst = {'key' => "1"} -> merges to {'key' => ""}
464
- hash_params = {"amenity"=>"--1"}
465
- hash_session = {"amenity"=>["1"]}
466
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX})
467
- assert_equal({"amenity"=>""}, hash_session)
468
-
469
- #are unmerged hashes passed unmodified w/out :unpack_arrays?
470
- hash_params = {"amenity"=>{"id"=>["26,27"]}}
471
- hash_session = {}
472
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX})
473
- assert_equal({"amenity"=>{"id"=>["26,27"]}}, hash_session)
474
-
475
- #hash should be merged
476
- hash_params = {"amenity"=>{"id"=>["26,27"]}}
477
- hash_session = {}
478
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ","})
479
- assert_equal({"amenity"=>{"id"=>["26","27"]}}, hash_session)
480
-
481
- # second merge of same values should result in no change in output
482
- hash_params = {"amenity"=>{"id"=>["26,27"]}}
483
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ","})
484
- assert_equal({"amenity"=>{"id"=>["26","27"]}}, hash_session)
485
-
486
- #hashes with knockout values are suppressed
487
- hash_params = {"amenity"=>{"id"=>["#{FIELD_KNOCKOUT_PREFIX}26,#{FIELD_KNOCKOUT_PREFIX}27,28"]}}
488
- hash_session = {}
489
- DeepMerge::deep_merge!(hash_params, hash_session, {:knockout_prefix => FIELD_KNOCKOUT_PREFIX, :unpack_arrays => ","})
490
- assert_equal({"amenity"=>{"id"=>["28"]}}, hash_session)
491
-
492
- hash_src= {'region' =>{'ids'=>['--']}, 'query_uuid' => 'zzz'}
493
- hash_dst= {'region' =>{'ids'=>['227','2','3','3']}, 'query_uuid' => 'zzz'}
494
- DeepMerge::deep_merge!(hash_src, hash_dst, {:knockout_prefix => '--', :unpack_arrays => ","})
495
- assert_equal({'region' =>{'ids'=>[]}, 'query_uuid' => 'zzz'}, hash_dst)
496
-
497
- hash_src= {'region' =>{'ids'=>['--']}, 'query_uuid' => 'zzz'}
498
- hash_dst= {'region' =>{'ids'=>['227','2','3','3'], 'id' => '3'}, 'query_uuid' => 'zzz'}
499
- DeepMerge::deep_merge!(hash_src, hash_dst, {:knockout_prefix => '--', :unpack_arrays => ","})
500
- assert_equal({'region' =>{'ids'=>[], 'id'=>'3'}, 'query_uuid' => 'zzz'}, hash_dst)
501
-
502
- hash_src= {'region' =>{'ids'=>['--']}, 'query_uuid' => 'zzz'}
503
- hash_dst= {'region' =>{'muni_city_id' => '2244', 'ids'=>['227','2','3','3'], 'id'=>'3'}, 'query_uuid' => 'zzz'}
504
- DeepMerge::deep_merge!(hash_src, hash_dst, {:knockout_prefix => '--', :unpack_arrays => ","})
505
- assert_equal({'region' =>{'muni_city_id' => '2244', 'ids'=>[], 'id'=>'3'}, 'query_uuid' => 'zzz'}, hash_dst)
506
-
507
- hash_src= {'region' =>{'ids'=>['--'], 'id' => '5'}, 'query_uuid' => 'zzz'}
508
- hash_dst= {'region' =>{'muni_city_id' => '2244', 'ids'=>['227','2','3','3'], 'id'=>'3'}, 'query_uuid' => 'zzz'}
509
- DeepMerge::deep_merge!(hash_src, hash_dst, {:knockout_prefix => '--', :unpack_arrays => ","})
510
- assert_equal({'region' =>{'muni_city_id' => '2244', 'ids'=>[], 'id'=>'5'}, 'query_uuid' => 'zzz'}, hash_dst)
511
-
512
- hash_src= {'region' =>{'ids'=>['--', '227'], 'id' => '5'}, 'query_uuid' => 'zzz'}
513
- hash_dst= {'region' =>{'muni_city_id' => '2244', 'ids'=>['227','2','3','3'], 'id'=>'3'}, 'query_uuid' => 'zzz'}
514
- DeepMerge::deep_merge!(hash_src, hash_dst, {:knockout_prefix => '--', :unpack_arrays => ","})
515
- assert_equal({'region' =>{'muni_city_id' => '2244', 'ids'=>['227'], 'id'=>'5'}, 'query_uuid' => 'zzz'}, hash_dst)
516
-
517
- hash_src= {'region' =>{'muni_city_id' => '--', 'ids'=>'--', 'id'=>'5'}, 'query_uuid' => 'zzz'}
518
- hash_dst= {'region' =>{'muni_city_id' => '2244', 'ids'=>['227','2','3','3'], 'id'=>'3'}, 'query_uuid' => 'zzz'}
519
- DeepMerge::deep_merge!(hash_src, hash_dst, {:knockout_prefix => '--', :unpack_arrays => ","})
520
- assert_equal({'region' =>{'muni_city_id' => '', 'ids'=>'', 'id'=>'5'}, 'query_uuid' => 'zzz'}, hash_dst)
521
-
522
- hash_src= {'region' =>{'muni_city_id' => '--', 'ids'=>['--'], 'id'=>'5'}, 'query_uuid' => 'zzz'}
523
- hash_dst= {'region' =>{'muni_city_id' => '2244', 'ids'=>['227','2','3','3'], 'id'=>'3'}, 'query_uuid' => 'zzz'}
524
- DeepMerge::deep_merge!(hash_src, hash_dst, {:knockout_prefix => '--', :unpack_arrays => ","})
525
- assert_equal({'region' =>{'muni_city_id' => '', 'ids'=>[], 'id'=>'5'}, 'query_uuid' => 'zzz'}, hash_dst)
526
-
527
- hash_src= {'region' =>{'muni_city_id' => '--', 'ids'=>['--','227'], 'id'=>'5'}, 'query_uuid' => 'zzz'}
528
- hash_dst= {'region' =>{'muni_city_id' => '2244', 'ids'=>['227','2','3','3'], 'id'=>'3'}, 'query_uuid' => 'zzz'}
529
- DeepMerge::deep_merge!(hash_src, hash_dst, {:knockout_prefix => '--', :unpack_arrays => ","})
530
- assert_equal({'region' =>{'muni_city_id' => '', 'ids'=>['227'], 'id'=>'5'}, 'query_uuid' => 'zzz'}, hash_dst)
531
-
532
- hash_src = {"muni_city_id"=>"--", "id"=>""}
533
- hash_dst = {"muni_city_id"=>"", "id"=>""}
534
- DeepMerge::deep_merge!(hash_src, hash_dst, {:knockout_prefix => '--', :unpack_arrays => ","})
535
- assert_equal({"muni_city_id"=>"", "id"=>""}, hash_dst)
536
-
537
- hash_src = {"region"=>{"muni_city_id"=>"--", "id"=>""}}
538
- hash_dst = {"region"=>{"muni_city_id"=>"", "id"=>""}}
539
- DeepMerge::deep_merge!(hash_src, hash_dst, {:knockout_prefix => '--', :unpack_arrays => ","})
540
- assert_equal({"region"=>{"muni_city_id"=>"", "id"=>""}}, hash_dst)
541
-
542
- hash_src = {"query_uuid"=>"a0dc3c84-ec7f-6756-bdb0-fff9157438ab", "url_regions"=>[], "region"=>{"muni_city_id"=>"--", "id"=>""}, "property"=>{"property_type_id"=>"", "search_rate_min"=>"", "search_rate_max"=>""}, "task"=>"search", "run_query"=>"Search"}
543
- hash_dst = {"query_uuid"=>"a0dc3c84-ec7f-6756-bdb0-fff9157438ab", "url_regions"=>[], "region"=>{"muni_city_id"=>"", "id"=>""}, "property"=>{"property_type_id"=>"", "search_rate_min"=>"", "search_rate_max"=>""}, "task"=>"search", "run_query"=>"Search"}
544
- DeepMerge::deep_merge!(hash_src, hash_dst, {:knockout_prefix => '--', :unpack_arrays => ","})
545
- assert_equal({"query_uuid"=>"a0dc3c84-ec7f-6756-bdb0-fff9157438ab", "url_regions"=>[], "region"=>{"muni_city_id"=>"", "id"=>""}, "property"=>{"property_type_id"=>"", "search_rate_min"=>"", "search_rate_max"=>""}, "task"=>"search", "run_query"=>"Search"}, hash_dst)
546
-
547
- # hash of array of hashes
548
- hash_src = {"item" => [{"1" => "3"}, {"2" => "4"}]}
549
- hash_dst = {"item" => [{"3" => "5"}]}
550
- DeepMerge::deep_merge!(hash_src, hash_dst)
551
- assert_equal({"item" => [{"3" => "5"}, {"1" => "3"}, {"2" => "4"}]}, hash_dst)
552
- end # test_deep_merge
553
- end