class ScaffoldPlus::Generators::GeocoderGenerator

Public Instance Methods

update_model() click to toggle source
# File lib/generators/scaffold_plus/geocoder/geocoder_generator.rb, line 23
def update_model
  geocoded = "  geocoded_by :#{options.address}"
  geocoded << ", latitude: :#{options.latitude}"
  geocoded << ", longitude: :#{options.longitude}"
  if options.country?
    geocoded << " do |obj,results|"
    country = [
      "    if geo = results.first",
      "      # puts JSON.pretty_generate(geo.as_json)",
      "      if geo.country_code.upcase == 'DE'",
      "        obj.country = 'DE'",
      "        obj.address = geo.address.gsub(/, Deutschland/, '')",
      "        if obj.#{options.latitude}.blank? and obj.#{options.longitude}.blank?",
      "          obj.#{options.latitude} = geo.latitude",
      "          obj.#{options.longitude} = geo.longitude",
      "        end",
      "      end",
      "    end",
      "  end"
    ]
  else
    country = []
  end
  lines = options.before? ? [ "" ] : []
  lines << [
    geocoded,
    country,
    "  after_validation :geocode" +
      ", if: ->(obj){ obj.#{options.address}.present?" +
      " and obj.#{options.address}_changed? }",
    ""
  ]
  lines << "" if options.after?
  inject_into_class "app/models/#{name}.rb", class_name do
    lines.flatten.join("\n")
  end
end