X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/baf10cd39289cd7e94a819305e46f43e85a136c6..18d26c0d81f1d0e39e90e1339b73037762df4e6f:/lib/potlatch.rb?ds=sidebyside diff --git a/lib/potlatch.rb b/lib/potlatch.rb index 80d4d7225..a077d4c4d 100644 --- a/lib/potlatch.rb +++ b/lib/potlatch.rb @@ -1,4 +1,4 @@ -require 'stringio' +require "stringio" # The Potlatch module provides helper functions for potlatch and its communication with the server module Potlatch @@ -24,44 +24,41 @@ module Potlatch # Return eight-byte double-precision float def self.getdouble(s) - a = s.read(8).unpack('G') # G big-endian, E little-endian + a = s.read(8).unpack("G") # G big-endian, E little-endian a[0] end # Return numeric array def self.getarray(s) - len = getlong(s) - arr = [] - for i in (0..len - 1) - arr[i] = getvalue(s) + getlong(s).times.collect do + getvalue(s) end - arr end # Return object/hash def self.getobject(s) arr = {} while (key = getstring(s)) - if (key == '') then break end + break if key == "" arr[key] = getvalue(s) end - s.getbyte # skip the 9 'end of object' value + s.getbyte # skip the 9 'end of object' value arr end # Parse and get value def self.getvalue(s) case s.getbyte - when 0 then return getdouble(s) # number - when 1 then return s.getbyte # boolean - when 2 then return getstring(s) # string - when 3 then return getobject(s) # object/hash - when 5 then return nil # null - when 6 then return nil # undefined - when 8 then s.read(4) # mixedArray - return getobject(s) # | - when 10 then return getarray(s) # array - else; return nil # error + when 0 then return getdouble(s) # number + when 1 then return s.getbyte # boolean + when 2 then return getstring(s) # string + when 3 then return getobject(s) # object/hash + when 5 then return nil # null + when 6 then return nil # undefined + when 8 then s.read(4) # mixedArray + return getobject(s) # | + when 10 then return getarray(s) # array + else return nil # error end end @@ -77,30 +74,30 @@ module Potlatch # Pack variables as AMF def self.encodevalue(n) case n.class.to_s - when 'Array' + when "Array" a = 10.chr + encodelong(n.length) n.each do |b| a += encodevalue(b) end a - when 'Hash' + when "Hash" a = 3.chr n.each do |k, v| a += encodestring(k.to_s) + encodevalue(v) end a + 0.chr + 0.chr + 9.chr - when 'String' + when "String" 2.chr + encodestring(n) - when 'Bignum', 'Fixnum', 'Float' + when "Bignum", "Fixnum", "Float" 0.chr + encodedouble(n) - when 'NilClass' + when "NilClass" 5.chr - when 'TrueClass' - 0.chr + encodedouble(1) - when 'FalseClass' - 0.chr + encodedouble(0) - else - Rails.logger.error("Unexpected Ruby type for AMF conversion: " + n.class.to_s) + when "TrueClass" + 0.chr + encodedouble(1) + when "FalseClass" + 0.chr + encodedouble(0) + else + Rails.logger.error("Unexpected Ruby type for AMF conversion: " + n.class.to_s) end end @@ -113,12 +110,12 @@ module Potlatch # Encode number as eight-byte double precision float def self.encodedouble(n) - [n].pack('G') + [n].pack("G") end # Encode number as four-byte long def self.encodelong(n) - [n].pack('N') + [n].pack("N") end end @@ -178,62 +175,66 @@ module Potlatch # Read preset menus presets = {} - presetmenus = {}; presetmenus['point'] = []; presetmenus['way'] = []; presetmenus['POI'] = [] - presetnames = {}; presetnames['point'] = {}; presetnames['way'] = {}; presetnames['POI'] = {} - presettype = '' - presetcategory = '' + presetmenus = { "point" => [], "way" => [], "POI" => [] } + presetnames = { "point" => {}, "way" => {}, "POI" => {} } + presettype = "" + presetcategory = "" # StringIO.open(txt) do |file| File.open("#{Rails.root}/config/potlatch/presets.txt") do |file| file.each_line do|line| t = line.chomp - if t =~ /(\w+)\/(\w+)/ + if t =~ %r{(\w+)/(\w+)} presettype = $1 presetcategory = $2 presetmenus[presettype].push(presetcategory) presetnames[presettype][presetcategory] = ["(no preset)"] elsif t =~ /^([\w\s]+):\s?(.+)$/ - pre = $1; kv = $2 + pre = $1 + kv = $2 presetnames[presettype][presetcategory].push(pre) presets[pre] = {} - kv.split(',').each do|a| - if a =~ /^(.+)=(.*)$/ then presets[pre][$1] = $2 end + kv.split(",").each do|a| + presets[pre][$1] = $2 if a =~ /^(.+)=(.*)$/ end end end end # Read colours/styling - colours = {}; casing = {}; areas = {} + colours = {} + casing = {} + areas = {} File.open("#{Rails.root}/config/potlatch/colours.txt") do |file| - file.each_line do|line| - t = line.chomp - if t =~ /(\w+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)/ - tag = $1 - if ($2 != '-') then colours[tag] = $2.hex end - if ($3 != '-') then casing[tag] = $3.hex end - if ($4 != '-') then areas[tag] = $4.hex end - end + file.each_line do |line| + next unless line.chomp =~ /(\w+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)/ + + tag = $1 + colours[tag] = $2.hex if $2 != "-" + casing[tag] = $3.hex if $3 != "-" + areas[tag] = $4.hex if $4 != "-" end end # Read relations colours/styling - relcolours = {}; relalphas = {}; relwidths = {} + relcolours = {} + relalphas = {} + relwidths = {} File.open("#{Rails.root}/config/potlatch/relation_colours.txt") do |file| - file.each_line do|line| - t = line.chomp - if t =~ /(\w+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)/ - tag = $1 - if ($2 != '-') then relcolours[tag] = $2.hex end - if ($3 != '-') then relalphas[tag] = $3.to_i end - if ($4 != '-') then relwidths[tag] = $4.to_i end - end + file.each_line do |line| + next unless line.chomp =~ /(\w+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)/ + + tag = $1 + relcolours[tag] = $2.hex if $2 != "-" + relalphas[tag] = $3.to_i if $3 != "-" + relwidths[tag] = $4.to_i if $4 != "-" end end # Read POI presets - icon_list = []; icon_tags = {} + icon_list = [] + icon_tags = {} File.open("#{Rails.root}/config/potlatch/icon_presets.txt") do |file| - file.each_line do|line| + file.each_line do |line| (icon, tags) = line.chomp.split("\t") icon_list.push(icon) icon_tags[icon] = Hash[*tags.scan(/([^;=]+)=([^;=]+)/).flatten] @@ -242,17 +243,18 @@ module Potlatch icon_list.reverse! # Read auto-complete - autotags = {}; autotags['point'] = {}; autotags['way'] = {}; autotags['POI'] = {} + autotags = { "point" => {}, "way" => {}, "POI" => {} } File.open("#{Rails.root}/config/potlatch/autocomplete.txt") do |file| file.each_line do|line| - t = line.chomp - if t =~ /^([\w:]+)\/(\w+)\s+(.+)$/ - tag = $1; type = $2; values = $3 - if values == '-' - autotags[type][tag] = [] - else - autotags[type][tag] = values.split(',').sort.reverse - end + next unless line.chomp =~ %r{^([\w:]+)/(\w+)\s+(.+)$} + + tag = $1 + type = $2 + values = $3 + if values == "-" + autotags[type][tag] = [] + else + autotags[type][tag] = values.split(",").sort.reverse end end end