Refactor
:my
=>
'code'
Codes
Refactorings
Popular
Best
Submit
Spam
Account
Logout
Login
JavaScript doesn't seem to be activated, expect things to be ugly and sloppy!
More Jobs
Recent
Cheap ruby block templating
Bindings on caller
Initial script execution very slow and skewing results
suppress ERB newlines
Keeping the database clean
Arrays, loops, strings...
Similar virtual attributes and their getters/setter
Check type is XML Serializable
Serena Collage slideshow
Shortest regular expression for matching a subdomain.
Popular
Caching Methods
How to find max, min of three numbers?
Similar virtual attributes and their getters/setter
Shortest regular expression for matching a subdomain.
Arrays, loops, strings...
Cheap ruby block templating
Check type is XML Serializable
Bindings on caller
Apache log file sorting
Tab-Switching in jQuery
Pastable version of
Filtering Method Needs to be DRY'ed Up
<div style="overflow:auto;border:solid 1px #ccc;background:#000;color:#F8F8F8"> <div class="section"> <pre style="float:left;margin:0 10px;border-right:0;color:#666;">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130</pre> <pre class="sunburst"> <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">self.find_matches</span>(<span style="color:#3E87E3;">params</span>) matches <span style="color:#E28964;">=</span> <span style="color:#3E87E3;">self</span>.<span style="color:#89BDFF;">find</span>(<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>all</span>) matches.<span style="color:#89BDFF;">map</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">property</span>| property[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>match_percentage</span>] <span style="color:#E28964;">=</span> { } <span style="color:#E28964;">end</span> <span style="color:#E28964;">unless</span> params[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>property</span>].<span style="color:#89BDFF;">nil?</span> params[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>property</span>].<span style="color:#89BDFF;">keys</span>.<span style="color:#89BDFF;">each</span> { |<span style="color:#3E87E3;">params_key</span>| <span style="color:#E28964;">case</span> params_key; <span style="color:#E28964;">when</span> <span style="color:#65B042;"><span style="color:#65B042;">'</span>destination<span style="color:#65B042;">'</span></span>: selected_destinations <span style="color:#E28964;">=</span> params[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>property</span>][<span style="color:#65B042;"><span style="color:#65B042;">'</span>destination<span style="color:#65B042;">'</span></span>].<span style="color:#89BDFF;">keys</span>.<span style="color:#89BDFF;">map</span> { |<span style="color:#3E87E3;">key</span>| key.<span style="color:#89BDFF;">to_i</span> } matches.<span style="color:#89BDFF;">delete_if</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">property</span>| (selected_destinations <span style="color:#E28964;">&</span> property.<span style="color:#89BDFF;">destination</span>.<span style="color:#89BDFF;">id</span>.<span style="color:#89BDFF;">to_a</span>).<span style="color:#89BDFF;">empty?</span> <span style="color:#E28964;">end</span> <span style="color:#AEAEAE;font-style:italic;"> <span style="color:#AEAEAE;font-style:italic;">#</span> Properties must have value greater or equal to selected value (drop-downs)</span> <span style="color:#E28964;">when</span> <span style="color:#65B042;"><span style="color:#65B042;">'</span>hotel_rating<span style="color:#65B042;">'</span></span>: selected_hotel_rating <span style="color:#E28964;">=</span> (params[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>property</span>][<span style="color:#65B042;"><span style="color:#65B042;">'</span>hotel_rating<span style="color:#65B042;">'</span></span>].<span style="color:#89BDFF;">to_i</span> .. <span style="color:#3387CC;">5</span>).<span style="color:#89BDFF;">to_a</span> matches.<span style="color:#89BDFF;">delete_if</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">property</span>| <span style="color:#E28964;">!</span>selected_hotel_rating.<span style="color:#89BDFF;">include?</span> property.<span style="color:#89BDFF;">hotel_rating</span> <span style="color:#E28964;">end</span> <span style="color:#AEAEAE;font-style:italic;"> <span style="color:#AEAEAE;font-style:italic;">#</span> Properties must have one of the selecte values- Percentage based on number matched versus total options selected</span> <span style="color:#E28964;">when</span> <span style="color:#65B042;"><span style="color:#65B042;">'</span>honeymoon_type_attribute_ids<span style="color:#65B042;">'</span></span>: selected_honeymoon_types <span style="color:#E28964;">=</span> params[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>property</span>][<span style="color:#65B042;"><span style="color:#65B042;">'</span>honeymoon_type_attribute_ids<span style="color:#65B042;">'</span></span>].<span style="color:#89BDFF;">keys</span>.<span style="color:#89BDFF;">map</span> { |<span style="color:#3E87E3;">key</span>| key.<span style="color:#89BDFF;">to_i</span> } matches.<span style="color:#89BDFF;">delete_if</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">property</span>| <span style="color:#E28964;">if</span> (selected_honeymoon_types <span style="color:#E28964;">&</span> property.<span style="color:#89BDFF;">honeymoon_type_attribute_ids</span>.<span style="color:#89BDFF;">to_a</span>).<span style="color:#89BDFF;">empty?</span> <span style="color:#3387CC;">true</span> <span style="color:#E28964;">else</span> property[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>match_percentage</span>][<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>honeymoon_type</span>] <span style="color:#E28964;">=</span> ((selected_honeymoon_types <span style="color:#E28964;">&</span> property.<span style="color:#89BDFF;">honeymoon_type_attribute_ids</span>.<span style="color:#89BDFF;">to_a</span>).<span style="color:#89BDFF;">length</span> <span style="color:#E28964;">/</span> selected_honeymoon_types.<span style="color:#89BDFF;">length</span>.<span style="color:#89BDFF;">to_f</span> <span style="color:#E28964;">*</span> <span style="color:#3387CC;">100</span> ).<span style="color:#89BDFF;">round</span> <span style="color:#3387CC;">false</span> <span style="color:#E28964;">end</span> <span style="color:#E28964;">end</span> <span style="color:#E28964;">when</span> <span style="color:#65B042;"><span style="color:#65B042;">'</span>hotel_setting_attribute_ids<span style="color:#65B042;">'</span></span>: selected_hotel_settings <span style="color:#E28964;">=</span> params[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>property</span>][<span style="color:#65B042;"><span style="color:#65B042;">'</span>hotel_setting_attribute_ids<span style="color:#65B042;">'</span></span>].<span style="color:#89BDFF;">keys</span>.<span style="color:#89BDFF;">map</span> { |<span style="color:#3E87E3;">key</span>| key.<span style="color:#89BDFF;">to_i</span> } matches.<span style="color:#89BDFF;">delete_if</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">property</span>| <span style="color:#E28964;">if</span> (selected_hotel_settings <span style="color:#E28964;">&</span> property.<span style="color:#89BDFF;">hotel_setting_attribute_ids</span>.<span style="color:#89BDFF;">to_a</span>).<span style="color:#89BDFF;">empty?</span> <span style="color:#3387CC;">true</span> <span style="color:#E28964;">else</span> property[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>match_percentage</span>][<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>hotel_setting</span>] <span style="color:#E28964;">=</span> ((selected_hotel_settings <span style="color:#E28964;">&</span> property.<span style="color:#89BDFF;">hotel_setting_attribute_ids</span>.<span style="color:#89BDFF;">to_a</span>).<span style="color:#89BDFF;">length</span> <span style="color:#E28964;">/</span> selected_hotel_settings.<span style="color:#89BDFF;">length</span>.<span style="color:#89BDFF;">to_f</span> <span style="color:#E28964;">*</span> <span style="color:#3387CC;">100</span> ).<span style="color:#89BDFF;">round</span> <span style="color:#3387CC;">false</span> <span style="color:#E28964;">end</span> <span style="color:#E28964;">end</span> <span style="color:#E28964;">when</span> <span style="color:#65B042;"><span style="color:#65B042;">'</span>hotel_style_attribute_ids<span style="color:#65B042;">'</span></span>: selected_hotel_styles <span style="color:#E28964;">=</span> params[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>property</span>][<span style="color:#65B042;"><span style="color:#65B042;">'</span>hotel_style_attribute_ids<span style="color:#65B042;">'</span></span>].<span style="color:#89BDFF;">keys</span>.<span style="color:#89BDFF;">map</span> { |<span style="color:#3E87E3;">key</span>| key.<span style="color:#89BDFF;">to_i</span> } matches.<span style="color:#89BDFF;">delete_if</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">property</span>| <span style="color:#E28964;">if</span>(selected_hotel_styles <span style="color:#E28964;">&</span> property.<span style="color:#89BDFF;">hotel_style_attribute_ids</span>.<span style="color:#89BDFF;">to_a</span>).<span style="color:#89BDFF;">empty?</span> <span style="color:#3387CC;">true</span> <span style="color:#E28964;">else</span> property[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>match_percentage</span>][<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>hotel_style</span>] <span style="color:#E28964;">=</span> ((selected_hotel_styles <span style="color:#E28964;">&</span> property.<span style="color:#89BDFF;">hotel_style_attribute_ids</span>.<span style="color:#89BDFF;">to_a</span>).<span style="color:#89BDFF;">length</span> <span style="color:#E28964;">/</span> selected_hotel_styles.<span style="color:#89BDFF;">length</span>.<span style="color:#89BDFF;">to_f</span> <span style="color:#E28964;">*</span> <span style="color:#3387CC;">100</span> ).<span style="color:#89BDFF;">round</span> <span style="color:#3387CC;">false</span> <span style="color:#E28964;">end</span> <span style="color:#E28964;">end</span> <span style="color:#AEAEAE;font-style:italic;"> <span style="color:#AEAEAE;font-style:italic;">#</span> Properties must have all selected values - Will not effect match percentage</span> <span style="color:#E28964;">when</span> <span style="color:#65B042;"><span style="color:#65B042;">'</span>required_amenity_tag_ids<span style="color:#65B042;">'</span></span>: params[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>property</span>][<span style="color:#65B042;"><span style="color:#65B042;">'</span>required_amenity_tag_ids<span style="color:#65B042;">'</span></span>].<span style="color:#89BDFF;">keys</span>.<span style="color:#89BDFF;">each</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">key</span>| matches.<span style="color:#89BDFF;">delete_if</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">property</span>| <span style="color:#E28964;">!</span>(property.<span style="color:#89BDFF;">amenity_tag_ids</span>.<span style="color:#89BDFF;">to_a</span>.<span style="color:#89BDFF;">include?</span> key.<span style="color:#89BDFF;">to_i</span>) <span style="color:#E28964;">end</span> <span style="color:#E28964;">end</span> <span style="color:#E28964;">when</span> <span style="color:#65B042;"><span style="color:#65B042;">'</span>required_activity_tag_ids<span style="color:#65B042;">'</span></span>: params[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>property</span>][<span style="color:#65B042;"><span style="color:#65B042;">'</span>required_activity_tag_ids<span style="color:#65B042;">'</span></span>].<span style="color:#89BDFF;">keys</span>.<span style="color:#89BDFF;">each</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">key</span>| matches.<span style="color:#89BDFF;">delete_if</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">property</span>| <span style="color:#E28964;">!</span>(property.<span style="color:#89BDFF;">activity_tag_ids</span>.<span style="color:#89BDFF;">to_a</span>.<span style="color:#89BDFF;">include?</span> key.<span style="color:#89BDFF;">to_i</span>) <span style="color:#E28964;">end</span> <span style="color:#E28964;">end</span> <span style="color:#AEAEAE;font-style:italic;"> <span style="color:#AEAEAE;font-style:italic;">#</span> These will not filter out any matchs; only effects match percentage</span> <span style="color:#E28964;">when</span> <span style="color:#65B042;"><span style="color:#65B042;">'</span>preferred_activity_tag_ids<span style="color:#65B042;">'</span></span>: matches.<span style="color:#89BDFF;">each</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">property</span>| number_of_activities_matched <span style="color:#E28964;">=</span> <span style="color:#3387CC;">0</span> params[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>property</span>][<span style="color:#65B042;"><span style="color:#65B042;">'</span>preferred_activity_tag_ids<span style="color:#65B042;">'</span></span>].<span style="color:#89BDFF;">keys</span>.<span style="color:#89BDFF;">each</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">key</span>| number_of_activities_matched <span style="color:#E28964;">+=</span> <span style="color:#3387CC;">1</span> <span style="color:#E28964;">if</span>(property.<span style="color:#89BDFF;">activity_tag_ids</span>.<span style="color:#89BDFF;">to_a</span>.<span style="color:#89BDFF;">include?</span> key.<span style="color:#89BDFF;">to_i</span>) <span style="color:#E28964;">end</span> property[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>match_percentage</span>][<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>preferred_activities</span>] <span style="color:#E28964;">=</span> (number_of_activities_matched <span style="color:#E28964;">/</span> params[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>property</span>][<span style="color:#65B042;"><span style="color:#65B042;">'</span>preferred_activity_tag_ids<span style="color:#65B042;">'</span></span>].<span style="color:#89BDFF;">keys</span>.<span style="color:#89BDFF;">length</span>.<span style="color:#89BDFF;">to_f</span> <span style="color:#E28964;">*</span> <span style="color:#3387CC;">100</span> ).<span style="color:#89BDFF;">round</span> <span style="color:#E28964;">end</span> <span style="color:#E28964;">when</span> <span style="color:#65B042;"><span style="color:#65B042;">'</span>preferred_amenity_tag_ids<span style="color:#65B042;">'</span></span>: matches.<span style="color:#89BDFF;">each</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">property</span>| number_of_amenities_matched <span style="color:#E28964;">=</span> <span style="color:#3387CC;">0</span> params[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>property</span>][<span style="color:#65B042;"><span style="color:#65B042;">'</span>preferred_amenity_tag_ids<span style="color:#65B042;">'</span></span>].<span style="color:#89BDFF;">keys</span>.<span style="color:#89BDFF;">each</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">key</span>| number_of_amenities_matched <span style="color:#E28964;">+=</span> <span style="color:#3387CC;">1</span> <span style="color:#E28964;">if</span>(property.<span style="color:#89BDFF;">amenity_tag_ids</span>.<span style="color:#89BDFF;">to_a</span>.<span style="color:#89BDFF;">include?</span> key.<span style="color:#89BDFF;">to_i</span>) <span style="color:#E28964;">end</span> property[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>match_percentage</span>][<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>preferred_amenities</span>] <span style="color:#E28964;">=</span> (number_of_amenities_matched <span style="color:#E28964;">/</span> params[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>property</span>][<span style="color:#65B042;"><span style="color:#65B042;">'</span>preferred_amenity_tag_ids<span style="color:#65B042;">'</span></span>].<span style="color:#89BDFF;">keys</span>.<span style="color:#89BDFF;">length</span>.<span style="color:#89BDFF;">to_f</span> <span style="color:#E28964;">*</span> <span style="color:#3387CC;">100</span> ).<span style="color:#89BDFF;">round</span> <span style="color:#E28964;">end</span> <span style="color:#E28964;">when</span> <span style="color:#65B042;"><span style="color:#65B042;">'</span>has_good_food<span style="color:#65B042;">'</span></span>: <span style="color:#E28964;">if</span> params[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>property</span>][<span style="color:#65B042;"><span style="color:#65B042;">'</span>has_good_food<span style="color:#65B042;">'</span></span>] <span style="color:#E28964;">==</span> <span style="color:#65B042;"><span style="color:#65B042;">'</span>yes<span style="color:#65B042;">'</span></span> matches.<span style="color:#89BDFF;">each</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">property</span>| property[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>match_percentage</span>][<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>has_good_food</span>] <span style="color:#E28964;">=</span> <span style="color:#3387CC;">100</span> <span style="color:#E28964;">if</span> property.<span style="color:#89BDFF;">has_good_food</span> <span style="color:#E28964;">==</span> <span style="color:#3387CC;">true</span> property[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>match_percentage</span>][<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>has_good_food</span>] <span style="color:#E28964;">=</span> <span style="color:#3387CC;">0</span> <span style="color:#E28964;">if</span> property.<span style="color:#89BDFF;">has_good_food</span> <span style="color:#E28964;">==</span> <span style="color:#3387CC;">false</span> <span style="color:#E28964;">end</span> <span style="color:#E28964;">end</span> <span style="color:#E28964;">when</span> <span style="color:#65B042;"><span style="color:#65B042;">'</span>has_good_nightlife<span style="color:#65B042;">'</span></span>: <span style="color:#E28964;">if</span> params[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>property</span>][<span style="color:#65B042;"><span style="color:#65B042;">'</span>has_good_nightlife<span style="color:#65B042;">'</span></span>] <span style="color:#E28964;">==</span> <span style="color:#65B042;"><span style="color:#65B042;">'</span>yes<span style="color:#65B042;">'</span></span> matches.<span style="color:#89BDFF;">each</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">property</span>| property[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>match_percentage</span>][<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>has_good_nightlife</span>] <span style="color:#E28964;">=</span> <span style="color:#3387CC;">100</span> <span style="color:#E28964;">if</span> property.<span style="color:#89BDFF;">has_good_nightlife</span> <span style="color:#E28964;">==</span> <span style="color:#3387CC;">true</span> property[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>match_percentage</span>][<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>has_good_nightlife</span>] <span style="color:#E28964;">=</span> <span style="color:#3387CC;">0</span> <span style="color:#E28964;">if</span> property.<span style="color:#89BDFF;">has_good_nightlife</span> <span style="color:#E28964;">!=</span> <span style="color:#3387CC;">false</span> <span style="color:#E28964;">end</span> <span style="color:#E28964;">end</span> <span style="color:#E28964;">end</span> matches <span style="color:#E28964;">=</span> <span style="color:#89BDFF;">calculate_match_percentage</span>(matches) } <span style="color:#E28964;">end</span> <span style="color:#E28964;">return</span> matches <span style="color:#E28964;">end</span> <span style="color:#AEAEAE;font-style:italic;"> <span style="color:#AEAEAE;font-style:italic;">#</span> no longer weighting different attributes so some of this is left in case of later implementation -Brad</span> <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">self.calculate_match_percentage</span>(<span style="color:#3E87E3;">matches</span>) matches.<span style="color:#89BDFF;">each</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">property</span>| <span style="color:#E28964;">if</span> property[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>match_percentage</span>].<span style="color:#89BDFF;">length</span>.<span style="color:#89BDFF;">to_i</span> <span style="color:#E28964;">!=</span> <span style="color:#3387CC;">0</span> <span style="color:#AEAEAE;font-style:italic;"> <span style="color:#AEAEAE;font-style:italic;">#</span> weighted_percentages = []</span> <span style="color:#AEAEAE;font-style:italic;"> <span style="color:#AEAEAE;font-style:italic;">#</span> property[:match_percentage].each_pair { | percent, weight| weighted_percentage << percent * weight }</span> property[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>total_match_percentage</span>] <span style="color:#E28964;">=</span> <span style="color:#89BDFF;">calculate_mean</span>(property[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>match_percentage</span>].<span style="color:#89BDFF;">values</span>) <span style="color:#E28964;">end</span> <span style="color:#E28964;">end</span> <span style="color:#E28964;">return</span> matches <span style="color:#E28964;">end</span> </pre> </div> </div> <a href="http://refactormycode.com/codes/204-filtering-method-needs-to-be-dry-ed-up" style="color:#fff" title="As seen on RefactorMyCode.com"><img alt="Small_logo" src="http://refactormycode.com/images/small_logo.gif" style="border:0" /></a>