Module: Sqreen::BindingAccessor::Transforms
- Included in:
- Sqreen::BindingAccessor
- Defined in:
- lib/sqreen/binding_accessor/transforms.rb
Overview
Available final transformations
Instance Method Summary collapse
- #concat_keys_and_values(value, max_size = nil) ⇒ Object
- #flat_keys(value, max_iter = 1000) ⇒ Object
- #flat_values(value, max_iter = 1000) ⇒ Object
Instance Method Details
#concat_keys_and_values(value, max_size = nil) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/sqreen/binding_accessor/transforms.rb', line 64 def concat_keys_and_values(value, max_size = nil) return nil if value.nil? values = Set.new max_size = max_size.to_i if max_size res = '' descend(value) do |x| next unless values.add?(x) x = x.to_s return res if max_size && res.size + x.size + 1 > max_size res << "\n" unless res.empty? res << x end res end |
#flat_keys(value, max_iter = 1000) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/sqreen/binding_accessor/transforms.rb', line 12 def flat_keys(value, max_iter = 1000) return nil if value.nil? seen = Set.new look_into = [value] keys = [] idx = 0 until look_into.empty? || max_iter <= idx idx += 1 val = look_into.pop next unless seen.add?(val.object_id) case val when Hash # convert symbols are converted to strings (ARB-60) keys.concat(val.keys.map { |x| sym_to_s(x) }) look_into.concat(val.values) when Array look_into.concat(val) else next if val.respond_to?(:seek) val.each { |v| look_into << v } if val.respond_to?(:each) end end keys end |
#flat_values(value, max_iter = 1000) ⇒ Object
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 |
# File 'lib/sqreen/binding_accessor/transforms.rb', line 37 def flat_values(value, max_iter = 1000) return nil if value.nil? seen = Set.new look_into = [value] values = [] idx = 0 until look_into.empty? || max_iter <= idx idx += 1 val = look_into.shift next unless seen.add?(val.object_id) case val when Hash look_into.concat(val.values) when Array look_into.concat(val) else next if val.respond_to?(:seek) if val.respond_to?(:each) val.each { |v| look_into << v } else values << val end end end values end |