ceedling 0.30.0 → 0.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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