cartodb/lib/carto/styles/style.rb

69 lines
1.8 KiB
Ruby
Raw Normal View History

2020-06-15 10:58:47 +08:00
require_relative './presenters/cartocss'
module Carto
module Styles
class Style
CARTOGRAPHY_DEFINITION_LOCATION =
"#{Rails.root}/lib/assets/javascripts/builder/data/default-cartography.json".freeze
def initialize(definition)
@definition = definition
end
def to_cartocss_array
return [] unless @definition
return @cartocss_array if @cartocss_array
nested_cartocss_array = @definition.map do |key, value|
case key.to_s
when 'fill'
parse_fill(value)
when 'stroke'
parse_stroke(value)
else
CartoDB::Logger.warning(message: 'Carto::Styles: Tried parsing an unkown attribute',
attribute: key,
definition: @definition)
end
end
@cartocss_array = nested_cartocss_array.flatten
end
def to_cartocss
Carto::Styles::Presenters::CartoCSS.new(cartocss_array: to_cartocss_array).to_s
end
def self.accepted_geometry_types
return @accepted_geometry_types if @accepted_geometry_types
descendant_accepted_types = descendants.map(&:accepted_geometry_types)
@accepted_geometry_types = descendant_accepted_types.flatten
end
def self.style_for_geometry_type(geometry_type)
return unless geometry_type
accepted_descendants = descendants.select do |descendant|
descendant.accepted_geometry_types.include?(geometry_type.downcase)
end
accepted_descendants.first
end
private
# NOTE: This method should be overwritten by child classes if needed
def parse_fill(_)
[]
end
# NOTE: This method should be overwritten by child classes if needed
def parse_stroke(_)
[]
end
end
end
end