duck_map 0.8.3 → 0.8.4
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.
- data/lib/duck_map/filter_stack.rb +56 -39
- data/lib/duck_map/mapper.rb +2 -2
- data/lib/duck_map/route_filter.rb +23 -11
- data/lib/duck_map/version.rb +1 -1
- metadata +2 -2
@@ -6,9 +6,8 @@ module DuckMap
|
|
6
6
|
##################################################################################
|
7
7
|
class FilterStack
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
DEFAULT_FILTER = {actions: [:index, :show], verbs: [], names: [], controllers: []}
|
9
|
+
DEFAULT_FILTER = {exclude: {actions: [], controllers: [], names: [], verbs: [:delete, :post, :put]},
|
10
|
+
include: {actions: [:index, :show], controllers: [], names: [], verbs: []}}
|
12
11
|
|
13
12
|
##################################################################################
|
14
13
|
def initialize
|
@@ -41,10 +40,16 @@ module DuckMap
|
|
41
40
|
# Copies a filter
|
42
41
|
# @return [Hash]
|
43
42
|
def copy_filter(filter)
|
44
|
-
buffer = {}
|
45
|
-
|
46
|
-
|
43
|
+
buffer = {exclude: {}, include: {}}
|
44
|
+
|
45
|
+
filter[:exclude].each do |part|
|
46
|
+
buffer[:exclude][part[0]] = part[1].dup
|
47
|
+
end
|
48
|
+
|
49
|
+
filter[:include].each do |part|
|
50
|
+
buffer[:include][part[0]] = part[1].dup
|
47
51
|
end
|
52
|
+
|
48
53
|
return buffer
|
49
54
|
end
|
50
55
|
|
@@ -79,6 +84,37 @@ module DuckMap
|
|
79
84
|
return nil
|
80
85
|
end
|
81
86
|
|
87
|
+
##################################################################################
|
88
|
+
# Clears all types (:actions, :verbs, :names, :controllers) for the {#current_filter}.
|
89
|
+
# @return [Nil]
|
90
|
+
def clear_filters
|
91
|
+
self.current_filter = {exclude: {actions: [], verbs: [], names: [], controllers: []},
|
92
|
+
include: {actions: [], verbs: [], names: [], controllers: []}}
|
93
|
+
return nil
|
94
|
+
end
|
95
|
+
|
96
|
+
##################################################################################
|
97
|
+
# Clears a single type of filter.
|
98
|
+
# @param [Symbol] section The section of filter to update. :exclude or :include.
|
99
|
+
# @param [Symbol] key The key of filter to update. :actions, :verbs, :names, :controllers.
|
100
|
+
# @return [Nil]
|
101
|
+
def clear_filter(section, key)
|
102
|
+
key = key.kind_of?(Symbol) ? key : key.to_sym
|
103
|
+
self.current_filter[section][key] = []
|
104
|
+
return nil
|
105
|
+
end
|
106
|
+
|
107
|
+
##################################################################################
|
108
|
+
# Removes value(s) from the {#current_filter}. Basically, the opposite of {#include_filter}.
|
109
|
+
# @overload exclude_filter(key, value)
|
110
|
+
# @param [Symbol, String] key The type of filter to update. :actions, :verbs, :names, :controllers.
|
111
|
+
# @param [String, Symbol, Array] value A single or Array of items to be added to the filter section specified via key.
|
112
|
+
# @return [NilClass]
|
113
|
+
def exclude_filter(*args)
|
114
|
+
args.insert(0, :exclude)
|
115
|
+
return update_filter(*args)
|
116
|
+
end
|
117
|
+
|
82
118
|
##################################################################################
|
83
119
|
# Adds a value(s) to the {#current_filter}. The filter stack is implemented as an Array of Hashes.
|
84
120
|
# The {#current_filter} will always be a Hash of key/value pairs. Each key represents a type of filter:
|
@@ -152,47 +188,28 @@ module DuckMap
|
|
152
188
|
end
|
153
189
|
end
|
154
190
|
|
155
|
-
|
191
|
+
self.current_filter[action][key].concat(list)
|
192
|
+
self.current_filter[action][key].uniq!
|
156
193
|
|
157
|
-
|
158
|
-
self.current_filter[key].concat(list)
|
159
|
-
self.current_filter[key].uniq!
|
194
|
+
opposite_action = action.eql?(:exclude) ? :include : :exclude
|
160
195
|
|
161
|
-
|
196
|
+
self.current_filter[action][key].each do |value|
|
197
|
+
#puts "action: #{action} key: #{key} value: #{value}"
|
198
|
+
self.current_filter[opposite_action][key].delete(value)
|
199
|
+
end
|
162
200
|
|
163
|
-
|
201
|
+
#if action == :include
|
164
202
|
|
165
|
-
|
203
|
+
## now, simply concatenate the resulting list and make sure the final array is unique
|
204
|
+
#self.current_filter[key].concat(list)
|
205
|
+
#self.current_filter[key].uniq!
|
166
206
|
|
167
|
-
|
168
|
-
end
|
207
|
+
#elsif action == :exclude
|
169
208
|
|
170
|
-
|
171
|
-
# Removes value(s) from the {#current_filter}. Basically, the opposite of {#include_filter}.
|
172
|
-
# @overload exclude_filter(key, value)
|
173
|
-
# @param [Symbol, String] key The type of filter to update. :actions, :verbs, :names, :controllers.
|
174
|
-
# @param [String, Symbol, Array] value A single or Array of items to be added to the filter section specified via key.
|
175
|
-
# @return [NilClass]
|
176
|
-
def exclude_filter(*args)
|
177
|
-
args.insert(0, :exclude)
|
178
|
-
return update_filter(*args)
|
179
|
-
end
|
209
|
+
#self.current_filter[key].reject! {|item| list.include?(item)}
|
180
210
|
|
181
|
-
|
182
|
-
# Clears all types (:actions, :verbs, :names, :controllers) for the {#current_filter}.
|
183
|
-
# @return [Nil]
|
184
|
-
def clear_filters
|
185
|
-
self.current_filter = {actions: [], verbs: [], names: [], controllers: []}
|
186
|
-
return nil
|
187
|
-
end
|
211
|
+
#end
|
188
212
|
|
189
|
-
##################################################################################
|
190
|
-
# Clears a single type of filter.
|
191
|
-
# @param [Symbol, String] key The type of filter to update. :actions, :verbs, :names, :controllers.
|
192
|
-
# @return [Nil]
|
193
|
-
def clear_filter(key)
|
194
|
-
key = key.kind_of?(Symbol) ? key : key.to_sym
|
195
|
-
self.current_filter[key] = []
|
196
213
|
return nil
|
197
214
|
end
|
198
215
|
|
data/lib/duck_map/mapper.rb
CHANGED
@@ -156,8 +156,8 @@ module DuckMap
|
|
156
156
|
end
|
157
157
|
|
158
158
|
##################################################################################
|
159
|
-
def clear_filter(key)
|
160
|
-
@set.sitemap_filters.clear_filter(key)
|
159
|
+
def clear_filter(section, key)
|
160
|
+
@set.sitemap_filters.clear_filter(section, key)
|
161
161
|
end
|
162
162
|
|
163
163
|
##################################################################################
|
@@ -1,10 +1,3 @@
|
|
1
|
-
# the rule is the filter criteria acts as a list of things to include. period.
|
2
|
-
# include methods will add to the list of criteria to include.
|
3
|
-
# exclude methods will remove from the list of criteria to include.
|
4
|
-
# for route level evaluations, the list of criteria to include is empty. therefore, meaning nothing is included.
|
5
|
-
# the include attributes are added to the list of criteria to include, then, the exclude attributes are processed
|
6
|
-
# to remove attributes from the list of criteria to include.
|
7
|
-
# this will match the default behavior of nothing being included unless explicitly included.
|
8
1
|
require 'active_support/concern'
|
9
2
|
|
10
3
|
module DuckMap
|
@@ -90,19 +83,35 @@ module DuckMap
|
|
90
83
|
|
91
84
|
end
|
92
85
|
|
93
|
-
if match_any?(route.action_name, self.sitemap_filters.current_filter[:actions])
|
86
|
+
if match_any?(route.action_name, self.sitemap_filters.current_filter[:exclude][:actions])
|
87
|
+
raise ExplicitExclude, "exclude"
|
88
|
+
end
|
89
|
+
|
90
|
+
if match_any?(route.verb_symbol, self.sitemap_filters.current_filter[:exclude][:verbs])
|
91
|
+
raise ExplicitExclude, "exclude"
|
92
|
+
end
|
93
|
+
|
94
|
+
if match_any?(route.controller_name, self.sitemap_filters.current_filter[:exclude][:controllers])
|
95
|
+
raise ExplicitExclude, "exclude"
|
96
|
+
end
|
97
|
+
|
98
|
+
if match_any?(route.name, self.sitemap_filters.current_filter[:exclude][:names])
|
99
|
+
raise ExplicitExclude, "exclude"
|
100
|
+
end
|
101
|
+
|
102
|
+
if match_any?(route.action_name, self.sitemap_filters.current_filter[:include][:actions])
|
94
103
|
raise ExplicitInclude, "include"
|
95
104
|
end
|
96
105
|
|
97
|
-
if match_any?(route.verb_symbol, self.sitemap_filters.current_filter[:verbs])
|
106
|
+
if match_any?(route.verb_symbol, self.sitemap_filters.current_filter[:include][:verbs])
|
98
107
|
raise ExplicitInclude, "include"
|
99
108
|
end
|
100
109
|
|
101
|
-
if match_any?(route.controller_name, self.sitemap_filters.current_filter[:controllers])
|
110
|
+
if match_any?(route.controller_name, self.sitemap_filters.current_filter[:include][:controllers])
|
102
111
|
raise ExplicitInclude, "include"
|
103
112
|
end
|
104
113
|
|
105
|
-
if match_any?(route.name, self.sitemap_filters.current_filter[:names])
|
114
|
+
if match_any?(route.name, self.sitemap_filters.current_filter[:include][:names])
|
106
115
|
raise ExplicitInclude, "include"
|
107
116
|
end
|
108
117
|
|
@@ -122,6 +131,9 @@ module DuckMap
|
|
122
131
|
DuckMap.logger.debug %(#{"Duckmap Include".rjust(30)} -> #{e})
|
123
132
|
value = true
|
124
133
|
|
134
|
+
rescue ExplicitExclude => e
|
135
|
+
DuckMap.logger.debug %(#{"Explicit Exclude".rjust(30)} -> #{e})
|
136
|
+
|
125
137
|
rescue ExplicitInclude => e
|
126
138
|
DuckMap.logger.debug %(#{"Explicit Include".rjust(30)} -> #{e})
|
127
139
|
value = true
|
data/lib/duck_map/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: duck_map
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-02-
|
12
|
+
date: 2013-02-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: highline
|