ceedling 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. data/Rakefile +55 -6
  2. data/examples/temp_sensor/project.yml +2 -2
  3. data/lib/ceedling/version.rb +3 -3
  4. data/lib/ceedling/version.rb.erb +1 -1
  5. data/new_project_template/project.yml +1 -1
  6. data/new_project_template/vendor/ceedling/{vendor/c_exception/docs → docs}/CExceptionSummary.pdf +0 -0
  7. data/new_project_template/vendor/ceedling/vendor/cmock/docs/CMock Summary.pdf b/data/new_project_template/vendor/ceedling/docs/CMock → Summary.pdf +0 -0
  8. data/new_project_template/vendor/ceedling/vendor/c_exception/vendor/unity/docs/Unity Summary.pdf b/data/new_project_template/vendor/ceedling/docs/Unity → Summary.pdf +0 -0
  9. data/new_project_template/vendor/ceedling/lib/configurator.rb +65 -16
  10. data/new_project_template/vendor/ceedling/lib/configurator_builder.rb +1 -8
  11. data/new_project_template/vendor/ceedling/lib/configurator_plugins.rb +8 -1
  12. data/new_project_template/vendor/ceedling/lib/configurator_setup.rb +30 -34
  13. data/new_project_template/vendor/ceedling/lib/configurator_validator.rb +32 -5
  14. data/new_project_template/vendor/ceedling/lib/constants.rb +17 -4
  15. data/new_project_template/vendor/ceedling/lib/defaults.rb +120 -106
  16. data/new_project_template/vendor/ceedling/lib/file_path_utils.rb +1 -1
  17. data/new_project_template/vendor/ceedling/lib/generator.rb +14 -6
  18. data/new_project_template/vendor/ceedling/lib/objects.yml +5 -0
  19. data/new_project_template/vendor/ceedling/lib/plugin.rb +2 -1
  20. data/new_project_template/vendor/ceedling/lib/plugin_manager.rb +6 -1
  21. data/new_project_template/vendor/ceedling/lib/preprocessinator_file_handler.rb +2 -2
  22. data/new_project_template/vendor/ceedling/lib/preprocessinator_includes_handler.rb +2 -2
  23. data/new_project_template/vendor/ceedling/lib/rules_cmock.rake +1 -1
  24. data/new_project_template/vendor/ceedling/lib/rules_preprocess.rake +2 -2
  25. data/new_project_template/vendor/ceedling/lib/rules_release.rake +4 -4
  26. data/new_project_template/vendor/ceedling/lib/rules_release_aux_dependencies.rake +1 -1
  27. data/new_project_template/vendor/ceedling/lib/rules_tests.rake +5 -5
  28. data/new_project_template/vendor/ceedling/lib/rules_tests_aux_dependencies.rake +1 -1
  29. data/new_project_template/vendor/ceedling/lib/setupinator.rb +10 -3
  30. data/new_project_template/vendor/ceedling/lib/system_utils.rb +32 -0
  31. data/new_project_template/vendor/ceedling/lib/system_wrapper.rb +13 -5
  32. data/new_project_template/vendor/ceedling/lib/tasks_base.rake +2 -2
  33. data/new_project_template/vendor/ceedling/lib/tasks_release.rake +1 -1
  34. data/new_project_template/vendor/ceedling/lib/tasks_tests.rake +1 -1
  35. data/new_project_template/vendor/ceedling/lib/tool_executor.rb +38 -10
  36. data/new_project_template/vendor/ceedling/lib/tool_executor_helper.rb +68 -10
  37. data/new_project_template/vendor/ceedling/plugins/bullseye/bullseye.rake +142 -0
  38. data/new_project_template/vendor/ceedling/plugins/bullseye/bullseye.rb +145 -0
  39. data/new_project_template/vendor/ceedling/plugins/bullseye/defaults.yml +49 -0
  40. data/new_project_template/vendor/ceedling/plugins/bullseye/template.erb +15 -0
  41. data/new_project_template/vendor/ceedling/plugins/gcov/defaults.yml +34 -0
  42. data/new_project_template/vendor/ceedling/plugins/gcov/gcov.rake +136 -0
  43. data/new_project_template/vendor/ceedling/plugins/gcov/gcov.rb +115 -0
  44. data/new_project_template/vendor/ceedling/plugins/gcov/template.erb +15 -0
  45. data/new_project_template/vendor/ceedling/plugins/stdout_ide_tests_report/stdout_ide_tests_report.rb +1 -1
  46. data/new_project_template/vendor/ceedling/plugins/stdout_pretty_tests_report/stdout_pretty_tests_report.rb +3 -63
  47. data/new_project_template/vendor/ceedling/plugins/stdout_pretty_tests_report/template.erb +59 -0
  48. data/new_project_template/vendor/ceedling/plugins/warnings_report/warnings_report.rb +71 -0
  49. data/new_project_template/vendor/ceedling/release/build.info +1 -1
  50. data/new_project_template/vendor/ceedling/vendor/c_exception/release/version.info +1 -1
  51. data/new_project_template/vendor/ceedling/vendor/unity/src/unity.c +30 -21
  52. metadata +18 -27
  53. data/new_project_template/vendor/ceedling/docs/Ceedling Packet.odt +0 -0
  54. data/new_project_template/vendor/ceedling/docs/CeedlingLogo.png +0 -0
  55. data/new_project_template/vendor/ceedling/rakefile.rb +0 -59
  56. data/new_project_template/vendor/ceedling/rakefile_helper.rb +0 -23
  57. data/new_project_template/vendor/ceedling/vendor/c_exception/docs/CExceptionSummary.odt +0 -0
  58. data/new_project_template/vendor/ceedling/vendor/c_exception/docs/license.txt +0 -30
  59. data/new_project_template/vendor/ceedling/vendor/c_exception/docs/readme.txt +0 -236
  60. data/new_project_template/vendor/ceedling/vendor/c_exception/vendor/unity/docs/Unity Summary.txt +0 -217
  61. data/new_project_template/vendor/ceedling/vendor/cmock/docs/CMock Summary.odt +0 -0
  62. data/new_project_template/vendor/ceedling/vendor/cmock/docs/license.txt +0 -31
  63. data/new_project_template/vendor/ceedling/vendor/deep_merge/MIT-LICENSE +0 -20
  64. data/new_project_template/vendor/ceedling/vendor/deep_merge/README +0 -94
  65. data/new_project_template/vendor/ceedling/vendor/deep_merge/Rakefile +0 -28
  66. data/new_project_template/vendor/ceedling/vendor/deep_merge/test/test_deep_merge.rb +0 -553
  67. data/new_project_template/vendor/ceedling/vendor/diy/History.txt +0 -28
  68. data/new_project_template/vendor/ceedling/vendor/diy/README.rdoc +0 -233
  69. data/new_project_template/vendor/ceedling/vendor/unity/docs/Unity Summary.odt +0 -0
  70. data/new_project_template/vendor/ceedling/vendor/unity/docs/Unity Summary.pdf +0 -0
  71. data/new_project_template/vendor/ceedling/vendor/unity/docs/Unity Summary.txt +0 -217
  72. data/new_project_template/vendor/ceedling/vendor/unity/docs/license.txt +0 -31
@@ -1,31 +0,0 @@
1
- Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
2
-
3
- Permission is hereby granted, free of charge, to any person
4
- obtaining a copy of this software and associated documentation
5
- files (the "Software"), to deal in the Software without
6
- restriction, including without limitation the rights to use,
7
- copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- copies of the Software, and to permit persons to whom the
9
- Software is furnished to do so, subject to the following
10
- conditions:
11
-
12
- The above copyright notice and this permission notice shall be
13
- included in all copies or substantial portions of the Software.
14
-
15
- The end-user documentation included with the redistribution, if
16
- any, must include the following acknowledgment: "This product
17
- includes software developed for the CMock Project, by Mike Karlesky,
18
- Mark VanderVoord, and Greg Williams and other contributors", in
19
- the same place and form as other third-party acknowledgments.
20
- Alternately, this acknowledgment may appear in the software
21
- itself, in the same form and location as other such third-party
22
- acknowledgments.
23
-
24
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
26
- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
28
- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
29
- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
30
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
31
- OTHER DEALINGS IN THE SOFTWARE.
@@ -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')
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,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