Class: Arachni::Platform::List
- Includes:
- Enumerable
- Defined in:
- lib/arachni/platform/list.rb
Overview
Represents a collection of applicable platforms.
Class Method Summary collapse
Instance Method Summary collapse
-
#<<(platform) ⇒ Platform
`self`.
-
#any? ⇒ Boolean
`true` if there are applicable platforms, `false` otherwise.
-
#clear ⇒ Object
Clears platforms.
-
#dup ⇒ Platform
Copy of `self`.
-
#each(&block) ⇒ Enumerator, Platform
`Enumerator` if no `block` is given, `self` otherwise.
-
#empty? ⇒ Boolean
`true` if there are no applicable platforms, `false` otherwise.
-
#hierarchical? ⇒ Boolean
`true` if the list has a hierarchy, `false` otherwise.
-
#include?(platform) ⇒ Boolean
`true` if `platform` applies to the given resource, `false` otherwise.
-
#include_any?(platforms) ⇒ Boolean
`true` if any platform in `platforms` applies to the given resource, `false` otherwise.
-
#initialize(valid_platforms) ⇒ List
constructor
A new instance of List.
-
#invalid?(platforms) ⇒ Boolean
`true` if platforms are invalid (i.e. not in #valid), `false` otherwise.
- #merge(enum) ⇒ Object (also: #+, #|)
-
#merge!(enum) ⇒ Platform
(also: #update)
Updated `self`.
-
#pick(data_per_platform) ⇒ Hash
Selects appropriate data depending on the applicable platforms from `data_per_platform`.
-
#valid ⇒ Array<Symbol>
Supported platforms.
-
#valid?(platforms) ⇒ Boolean
`true` if platforms are valid (i.e. in #valid), `false` otherwise.
Constructor Details
#initialize(valid_platforms) ⇒ List
Returns a new instance of List.
21 22 23 24 |
# File 'lib/arachni/platform/list.rb', line 21 def initialize( valid_platforms ) @valid_platforms = normalize!( valid_platforms ) @platforms = [] end |
Class Method Details
.normalize(platforms) ⇒ Object
217 218 219 220 221 222 223 224 225 226 227 228 |
# File 'lib/arachni/platform/list.rb', line 217 def self.normalize( platforms ) case platforms when self.class, Symbol platforms when String platforms.to_sym when Hash platforms.my_symbolize_keys when Enumerable, Array platforms.to_a.flatten.map( &:to_sym ).uniq.sort end end |
Instance Method Details
#<<(platform) ⇒ Platform
Returns `self`.
132 133 134 135 |
# File 'lib/arachni/platform/list.rb', line 132 def <<( platform ) @platforms |= [normalize( platform )] self end |
#any? ⇒ Boolean
Returns `true` if there are applicable platforms, `false` otherwise.
121 122 123 |
# File 'lib/arachni/platform/list.rb', line 121 def any? !empty? end |
#clear ⇒ Object
Clears platforms.
201 202 203 |
# File 'lib/arachni/platform/list.rb', line 201 def clear @platforms.clear end |
#dup ⇒ Platform
Returns Copy of `self`.
207 208 209 |
# File 'lib/arachni/platform/list.rb', line 207 def dup self.class.new( @valid_platforms ).tap { |p| p.platforms = @platforms } end |
#each(&block) ⇒ Enumerator, Platform
Returns `Enumerator` if no `block` is given, `self` otherwise.
169 170 171 172 173 |
# File 'lib/arachni/platform/list.rb', line 169 def each( &block ) return enum_for( __method__ ) if !block_given? @platforms.each( &block ) self end |
#empty? ⇒ Boolean
Returns `true` if there are no applicable platforms, `false` otherwise.
115 116 117 |
# File 'lib/arachni/platform/list.rb', line 115 def empty? @platforms.empty? end |
#hierarchical? ⇒ Boolean
Returns `true` if the list has a hierarchy, `false` otherwise.
213 214 215 |
# File 'lib/arachni/platform/list.rb', line 213 def hierarchical? @valid_platforms.is_a? Hash end |
#include?(platform) ⇒ Boolean
Returns `true` if `platform` applies to the given resource, `false` otherwise.
183 184 185 |
# File 'lib/arachni/platform/list.rb', line 183 def include?( platform ) @platforms.include? normalize( platform ) end |
#include_any?(platforms) ⇒ Boolean
Returns `true` if any platform in `platforms` applies to the given resource, `false` otherwise.
196 197 198 |
# File 'lib/arachni/platform/list.rb', line 196 def include_any?( platforms ) (@platforms & normalize( platforms )).any? end |
#invalid?(platforms) ⇒ Boolean
Returns `true` if platforms are invalid (i.e. not in #valid), `false` otherwise.
109 110 111 |
# File 'lib/arachni/platform/list.rb', line 109 def invalid?( platforms ) !valid?( platforms ) end |
#merge(enum) ⇒ Object Also known as: +, |
144 145 146 |
# File 'lib/arachni/platform/list.rb', line 144 def merge( enum ) dup.merge!( enum ) end |
#merge!(enum) ⇒ Platform Also known as: update
Returns Updated `self`.
158 159 160 161 |
# File 'lib/arachni/platform/list.rb', line 158 def merge!( enum ) @platforms |= normalize( enum ) self end |
#pick(data_per_platform) ⇒ Hash
Selects appropriate data depending on the applicable platforms from `data_per_platform`.
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 |
# File 'lib/arachni/platform/list.rb', line 43 def pick( data_per_platform ) orig_data_per_platform = data_per_platform.dup data_per_platform = data_per_platform.dup data_per_platform.select! { |k, v| include? k } # Bail out if the valid platforms are just a flat array, without hierarchy. return data_per_platform if !hierarchical? # Keep track of parents which will be removed due to the existence of # their children. specified_parents = [] # Remove parents if we have children. data_per_platform.keys.each do |platform| specified_parents |= parents = find_parents( platform ) data_per_platform.reject! { |k, _| parents.include? k } end # Include all of the parents' children if parents are specified but no # children for them. children = {} children_for = valid & @platforms.to_a children_for.each do |platform| next if specified_parents.include? platform c = find_children( platform ) children.merge! orig_data_per_platform.select { |k, _| c.include? k } end data_per_platform.merge! children # Include the nearest parent data there is a child platform but there # are no data for it. ignore = data_per_platform.keys | specified_parents orig_data_per_platform.each do |platform, data| next if ignore.include?( platform ) || !include_any?( find_children( platform ) ) data_per_platform[platform] = data end data_per_platform end |
#valid ⇒ Array<Symbol>
Returns Supported platforms.
28 29 30 |
# File 'lib/arachni/platform/list.rb', line 28 def valid hierarchical? ? @valid_platforms.find_symbol_keys_recursively : @valid_platforms end |
#valid?(platforms) ⇒ Boolean
Returns `true` if platforms are valid (i.e. in #valid), `false` otherwise.
95 96 97 98 99 100 |
# File 'lib/arachni/platform/list.rb', line 95 def valid?( platforms ) normalize( platforms ) true rescue false end |