can :show, :version
if Settings.status != "database_offline"
- can [:show, :download, :query], Changeset
+ can [:index, :show, :download], Changeset
can [:index, :create, :feed, :show, :search], Note
can :index, Tracepoint
can [:index, :show], User
# Return a copy of the updated changeset
@changeset = changeset
- render "api/changesets/changeset"
+ render "api/changesets/show"
respond_to do |format|
format.xml
# Return a copy of the updated changeset
@changeset = comment.changeset
- render "api/changesets/changeset"
+ render "api/changesets/show"
respond_to do |format|
format.xml
# Return a copy of the updated changeset
@changeset = comment.changeset
- render "api/changesets/changeset"
+ render "api/changesets/show"
respond_to do |format|
format.xml
module Api
class ChangesetsController < ApiController
before_action :check_api_writable, :only => [:create, :update, :upload, :subscribe, :unsubscribe]
- before_action :check_api_readable, :except => [:create, :update, :upload, :download, :query, :subscribe, :unsubscribe]
+ before_action :check_api_readable, :except => [:index, :create, :update, :upload, :download, :subscribe, :unsubscribe]
before_action :setup_user_auth, :only => [:show]
before_action :authorize, :only => [:create, :update, :upload, :close, :subscribe, :unsubscribe]
# Helper methods for checking consistency
include ConsistencyValidations
+ ##
+ # query changesets by bounding box, time, user or open/closed status.
+ def index
+ raise OSM::APIBadUserInput, "cannot use order=oldest with time" if params[:time] && params[:order] == "oldest"
+
+ # find any bounding box
+ bbox = BoundingBox.from_bbox_params(params) if params["bbox"]
+
+ # create the conditions that the user asked for. some or all of
+ # these may be nil.
+ changesets = Changeset.all
+ changesets = conditions_bbox(changesets, bbox)
+ changesets = conditions_user(changesets, params["user"], params["display_name"])
+ changesets = conditions_time(changesets, params["time"])
+ changesets = conditions_from_to(changesets, params["from"], params["to"])
+ changesets = conditions_open(changesets, params["open"])
+ changesets = conditions_closed(changesets, params["closed"])
+ changesets = conditions_ids(changesets, params["changesets"])
+
+ # sort the changesets
+ changesets = if params[:order] == "oldest"
+ changesets.order(:created_at => :asc)
+ else
+ changesets.order(:created_at => :desc)
+ end
+
+ # limit the result
+ changesets = changesets.limit(result_limit)
+
+ # preload users, tags and comments, and render result
+ @changesets = changesets.preload(:user, :changeset_tags, :comments)
+
+ respond_to do |format|
+ format.xml
+ format.json
+ end
+ end
+
##
# Return XML giving the basic info about the changeset. Does not
# return anything about the nodes, ways and relations in the changeset.
@comments = @comments.unscope(:where => :visible) if params[:show_hidden_comments].presence && can?(:restore, ChangesetComment)
@comments = @comments.includes(:author)
end
- render "changeset"
respond_to do |format|
format.xml
end
end
- ##
- # query changesets by bounding box, time, user or open/closed status.
- def query
- raise OSM::APIBadUserInput, "cannot use order=oldest with time" if params[:time] && params[:order] == "oldest"
-
- # find any bounding box
- bbox = BoundingBox.from_bbox_params(params) if params["bbox"]
-
- # create the conditions that the user asked for. some or all of
- # these may be nil.
- changesets = Changeset.all
- changesets = conditions_bbox(changesets, bbox)
- changesets = conditions_user(changesets, params["user"], params["display_name"])
- changesets = conditions_time(changesets, params["time"])
- changesets = conditions_from_to(changesets, params["from"], params["to"])
- changesets = conditions_open(changesets, params["open"])
- changesets = conditions_closed(changesets, params["closed"])
- changesets = conditions_ids(changesets, params["changesets"])
-
- # sort the changesets
- changesets = if params[:order] == "oldest"
- changesets.order(:created_at => :asc)
- else
- changesets.order(:created_at => :desc)
- end
-
- # limit the result
- changesets = changesets.limit(result_limit)
-
- # preload users, tags and comments, and render result
- @changesets = changesets.preload(:user, :changeset_tags, :comments)
- render "changesets"
-
- respond_to do |format|
- format.xml
- format.json
- end
- end
-
##
# updates a changeset's tags. none of the changeset's attributes are
# user-modifiable, so they will be ignored.
check_changeset_consistency(@changeset, current_user)
@changeset.update_from(new_changeset, current_user)
- render "changeset"
+ render "show"
respond_to do |format|
format.xml
# Return a copy of the updated changeset
@changeset = changeset
- render "changeset"
+ render "show"
respond_to do |format|
format.xml
# Return a copy of the updated changeset
@changeset = changeset
- render "changeset"
+ render "show"
respond_to do |format|
format.xml
# Generic checks that are run for the updates and deletes of
# node, ways and relations. This code is here to avoid duplication,
# and allow the extension of the checks without having to modify the
- # code in 6 places for all the updates and deletes. Some of these tests are
- # needed for creates, but are currently not run :-(
+ # code in 6 places for all the updates and deletes.
# This will throw an exception if there is an inconsistency
- def check_consistency(old, new, user)
+ def check_update_element_consistency(old, new, user)
if new.id != old.id || new.id.nil? || old.id.nil?
raise OSM::APIPreconditionFailedError, "New and old IDs don't match on #{new.class}. #{new.id} != #{old.id}."
elsif new.version != old.version
raise OSM::APIVersionMismatchError.new(new.id, new.class.to_s, new.version, old.version)
- elsif new.changeset.nil?
- raise OSM::APIChangesetMissingError
- elsif new.changeset.user_id != user.id
- raise OSM::APIUserChangesetMismatchError
- elsif !new.changeset.open?
- raise OSM::APIChangesetAlreadyClosedError, new.changeset
end
+
+ check_changeset_consistency(new.changeset, user)
end
# This is similar to above, just some validations don't apply
- def check_create_consistency(new, user)
- if new.changeset.nil?
- raise OSM::APIChangesetMissingError
- elsif new.changeset.user_id != user.id
- raise OSM::APIUserChangesetMismatchError
- elsif !new.changeset.open?
- raise OSM::APIChangesetAlreadyClosedError, new.changeset
- end
+ def check_create_element_consistency(new, user)
+ check_changeset_consistency(new.changeset, user)
end
##
# shouldn't be possible to get race conditions.
Node.transaction do
lock!
- check_consistency(self, new_node, user)
+ check_update_element_consistency(self, new_node, user)
ways = Way.joins(:way_nodes).where(:visible => true, :current_way_nodes => { :node_id => id }).order(:id)
raise OSM::APIPreconditionFailedError, "Node #{id} is still used by ways #{ways.collect(&:id).join(',')}." unless ways.empty?
def update_from(new_node, user)
Node.transaction do
lock!
- check_consistency(self, new_node, user)
+ check_update_element_consistency(self, new_node, user)
# update changeset first
self.changeset_id = new_node.changeset_id
end
def create_with_history(user)
- check_create_consistency(self, user)
+ check_create_element_consistency(self, user)
self.version = 0
self.visible = true
# shouldn't be possible to get race conditions.
Relation.transaction do
lock!
- check_consistency(self, new_relation, user)
+ check_update_element_consistency(self, new_relation, user)
# This will check to see if this relation is used by another relation
rel = RelationMember.joins(:relation).find_by("visible = ? AND member_type = 'Relation' and member_id = ? ", true, id)
raise OSM::APIPreconditionFailedError, "The relation #{new_relation.id} is used in relation #{rel.relation.id}." unless rel.nil?
def update_from(new_relation, user)
Relation.transaction do
lock!
- check_consistency(self, new_relation, user)
+ check_update_element_consistency(self, new_relation, user)
raise OSM::APIPreconditionFailedError, "Cannot update relation #{id}: data or member data is invalid." unless new_relation.preconditions_ok?(members)
self.changeset_id = new_relation.changeset_id
end
def create_with_history(user)
- check_create_consistency(self, user)
+ check_create_element_consistency(self, user)
raise OSM::APIPreconditionFailedError, "Cannot create relation: data or member data is invalid." unless preconditions_ok?
self.version = 0
def update_from(new_way, user)
Way.transaction do
lock!
- check_consistency(self, new_way, user)
+ check_update_element_consistency(self, new_way, user)
raise OSM::APIPreconditionFailedError, "Cannot update way #{id}: data is invalid." unless new_way.preconditions_ok?(nds)
self.changeset_id = new_way.changeset_id
end
def create_with_history(user)
- check_create_consistency(self, user)
+ check_create_element_consistency(self, user)
raise OSM::APIPreconditionFailedError, "Cannot create way: data is invalid." unless preconditions_ok?
self.version = 0
# shouldn't be possible to get race conditions.
Way.transaction do
lock!
- check_consistency(self, new_way, user)
+ check_update_element_consistency(self, new_way, user)
rels = Relation.joins(:relation_members).where(:visible => true, :current_relation_members => { :member_type => "Way", :member_id => id }).order(:id)
raise OSM::APIPreconditionFailedError, "Way #{id} is still used by relations #{rels.collect(&:id).join(',')}." unless rels.empty?
<% content_for :heading do %>
- <h1><%= t ".heading", :user => @diary_entry.user.display_name %></h1>
+ <h1><%= t ".heading" %></h1>
<% end %>
<%= render :partial => "diary_entry_heading", :object => @diary_entry, :as => "diary_entry" %>
<% content_for :heading do %>
- <h1><%= t ".heading", :user => @diary_entry.user.display_name %></h1>
+ <h1><%= t ".heading" %></h1>
<% end %>
<%= render :partial => "diary_entry_heading", :object => @diary_entry, :as => "diary_entry" %>
# Author: Mohammed Qubati
# Author: Mutarjem horr
# Author: NEHAOUA
+# Author: NO1xMOHAMED
# Author: Omda4wady
# Author: OsamaK
# Author: Ruila
messages:
invalid_email_address: لا يبدو أنه عنوان بريد إلكتروني صالح
email_address_not_routable: غير قابل للتوجيه
+ models:
+ user_mute:
+ is_already_muted: تمت كتم الصوت بالفعل
models:
acl: لائحة التحكم بالوصول
changeset: حزمة التغييرات
reopened_at_by_html: تم التنشيط %{when} مِن قِبَل %{user}
rss:
title: ملاحظات خريطة الشارع المفتوحة
+ description_all: قائمة بالملاحظات التي تم الإبلاغ عنها أو التعليق عليها أو
+ إغلاقها
description_area: قائمة بالملاحظات أو التقارير أو التعليق عليها أو إغلاقها
في منطقتك [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
description_item: خلاصة rss للملاحظة %{id}
retain_changeset_discussions: سيجري الاحتفاظ بمناقشات مجموعة التغييرات الخاصة
بك، إن وجدت.
retain_email: سيتم الاحتفاظ بعنوان بريدك الإلكتروني.
+ recent_editing_html: نظرًا لأنك قمت بتحرير حسابك مؤخرًا، فلا يمكن حذفه حاليًا.
+ سيكون الحذف ممكنًا خلال %{time}.
confirm_delete: هل أنت متأكد؟
cancel: إلغاء
accounts:
deleted_ago_by_html: تم حذف %{time_ago} بواسطة %{user}
edited_ago_by_html: تم تحرير %{time_ago} بواسطة %{user}
version: الإصدار
+ redacted_version: النسخة المنقحة
in_changeset: مجموعة التغييرات
anonymous: مجهول
no_comment: (لا تعليق)
other: '%{count} طريقٍ'
download_xml: تنزيل XML
view_history: عرض السجل
+ view_unredacted_history: عرض التاريخ غير المُحرف
view_details: شاهد التفاصيل
location: 'الموقع:'
node:
created: تم الإنشاء
closed: تم الإغلاق
belongs_to: الصانع
+ subscribe:
+ heading: الاشتراك في مناقشة التغييرات التالية؟
+ button: الاشتراك في المناقشة
+ unsubscribe:
+ heading: الاشتراك في مناقشة التغييرات التالية؟
+ button: إلغاء الاشتراك من المناقشة
+ heading:
+ title: تغييرات %{id}
+ created_by_html: تم إنشاؤه بواسطة %{link_user} على %{created}.
+ no_such_entry:
+ title: لا يوجد مثل هذه التغييرات
+ heading: 'لا يوجد إدخال بالمعرف: %{id}'
+ body: عذرًا، لا يوجد مجموعة تغيير بالمعرف %{id}. يرجى التحقق من الإملاء، أو
+ ربما الرابط الذي قمت بالنقر عليه خاطئ.
show:
title: حزمة التغييرات %{id}
+ created: 'تم إنشاؤه: %{when}'
+ closed: 'مغلق: %{when}'
created_ago_html: تم إنشاء %{time_ago}
closed_ago_html: مغلق %{time_ago}
created_ago_by_html: تم إنشاء %{time_ago} بواسطة %{user}
show:
title: يوميات %{user} | %{title}
user_title: يومية %{user}
+ discussion: مناقشة
leave_a_comment: اترك تعليقًا
login_to_leave_a_comment_html: '%{login_link} لترك تعليق'
login: تسجيل الدخول
zero: لا تعليق
one: '%{count} تعليق'
other: '%{count} تعليقات'
+ no_comments: لا يوجد تعليقات
edit_link: عدل هذه المدخلة
hide_link: اخفِ هذه المدخلة
unhide_link: إظهار هذا الإدخال
comment: التعليق
newer_comments: التعليقات الأحدث
older_comments: التعليقات الأقدم
+ subscribe:
+ heading: اشترك في مناقشة مدونة الدخول التالية؟
+ button: الاشتراك في المناقشة
+ unsubscribe:
+ heading: إلغاء الاشتراك في مناقشة إدخال اليوميات التالية؟
+ button: إلغاء الاشتراك من المناقشة
doorkeeper:
+ errors:
+ messages:
+ account_selection_required: يتطلب خادم المصادقة اختيار حساب المستخدم النهائي
flash:
applications:
create:
intro_text: OpenStreetMap - гэта карта свету, створаная людзьмі, як вы, і бясплатная
для выкарыстання на ўмовах адкрытай ліцэнзіі.
intro_2_create_account: Стварыць уліковы запіс удзельніка
- partners_partners: партнёрамi
+ hosting_partners_2024_html: Хостынг падтрымліваюць %{fastly}, %{corpmembers} і
+ іншыя %{partners}.
+ partners_partners: партнёры
tou: Умовы карыстання
osm_offline: База дадзеных OpenStreetMap зараз па-за сецівам, таму што праходзіць
неабходная тэхнічная праца.
flash changed: Ваш пароль быў зменены.
profiles:
edit:
- image: 'Выява:'
+ image: Выява
gravatar:
gravatar: Выкарыстоўваць Gravatar
disabled: Граватар быў адключаны.
new:
title: Уваход
heading: Уваход
- email or username: 'Пошта ці імя карыстальніка:'
- password: 'Пароль:'
+ email or username: Электронны адрас або Імя карыстальніка
+ password: Пароль
remember: Памятаць мяне
lost password link: Згубілі пароль?
login_button: Увайсці
register now: Зарэгістравацца зараз
- with external: 'Ð\94лÑ\8f алÑ\8cÑ\82Ñ\8dÑ\80наÑ\82Ñ\8bÑ\9eнага Ñ\9eваÑ\85одÑ\83, залагÑ\96нÑ\8cÑ\86еÑ\81Ñ\8f Ñ\86еÑ\80аз:'
+ with external: 'У Ñ\8fкаÑ\81Ñ\86Ñ\96 алÑ\8cÑ\82Ñ\8dÑ\80наÑ\82Ñ\8bвÑ\8b вÑ\8bкаÑ\80Ñ\8bÑ\81Ñ\82айÑ\86е длÑ\8f Ñ\9eваÑ\85одÑ\83 Ñ\81Ñ\82аÑ\80оннÑ\96 Ñ\81еÑ\80вÑ\96Ñ\81:'
no account: Не маеце асабістага рахунка?
auth failure: Прабачце, немагчыма увайсці з такім адрасам і паролем.
openid_logo_alt: Увайсці з дапамогай OpenID
title: Увайсці праз Facebook
alt: Увайсці праз уліковы запіс Facebook
microsoft:
- title: Увайсці праз Windows live
- alt: Увайсці праз уліковы запіс Windows Live
+ title: Увайсці праз Microsoft
+ alt: Увайсці праз уліковы запіс Microsoft
github:
title: Уваход праз GitHub
alt: Увайсці праз уліковы запіс GitHub
site:
about:
next: Далей
- used_by_html: '%{name} забÑ\8fÑ\81пеÑ\87вае каÑ\80Ñ\82агÑ\80аÑ\84Ñ\96Ñ\87нÑ\8bмÑ\96 дадзенÑ\8bмÑ\96 Ñ\82Ñ\8bÑ\81Ñ\8fÑ\87Ñ\8b Ñ\81айÑ\82аÑ\9e,
- мабÑ\96лÑ\8cнÑ\8bÑ\85 пÑ\80агÑ\80ам Ñ\96 пÑ\80Ñ\8bÑ\81Ñ\82аÑ\81аваннÑ\8fÑ\9e'
+ used_by_html: '%{name} забÑ\8fÑ\81пеÑ\87вае каÑ\80Ñ\82агÑ\80аÑ\84Ñ\96Ñ\87нÑ\8bмÑ\96 данÑ\8bмÑ\96 Ñ\82Ñ\8bÑ\81Ñ\8fÑ\87Ñ\8b Ñ\81айÑ\82аÑ\9e, мабÑ\96лÑ\8cнÑ\8bÑ\85
+ пÑ\80агÑ\80ам Ñ\96 пÑ\80Ñ\8bлад'
lede_text: OpenStreetMap створаны супольнасцю картографаў, якія дадаюць і падтрымліваюць
дадзеныя аб дарогах, сцежках, кафэ, вакзалах і многіх іншых аб'ектах па ўсім
свеце.
legal_babble:
title_html: Аўтарскія правы і ліцэнзія
credit_title_html: Як спасылацца на OpenStreetMap
- credit_1_html: |-
- Мы патрабуем, каб выкарыстоўвалася спасылка “© OpenStreetMap
- contributors”.
+ credit_1_html: 'Там, дзе вы выкарыстоўваеце даныя OpenStreetMap, вы павінны
+ выканаць наступныя дзве рэчы:'
attribution_example:
alt: Прыклад таго, як трэба спасылацца на OpenStreetMap на старонцы
title: Прыклад спасылкі
reserve: Запаведнік
military: Ваенная зона
school: Школа
- university: універсітэт
+ university: Універсітэт
building: Значны будынак
station: Чыгуначны вакзал
summit: Вяршыня
Многія ўдзельнічаюць паасобку, іншыя стварылі свае супольнасці.
Супольнасці бываюць розных памераў і могуць прадстаўляць як невялікія гарады, так і цэлыя рэгіёны з некалькімі краінамі.
Яны таксама могуць быць афіцыйнымі і неафіцыйнымі.
+ local_chapters:
+ title: Мясцовыя аддзяленні
+ about_text: Мясцовыя аддзяленні - гэта групы на ўзроўні краіны або рэгіёна,
+ якія зрабілі фармальны крок і афіцыйна зарэгістравалі некамерцыйную юрыдычную
+ асобу. Яны прадстаўляюць карту рэгіёна і картографаў перад мясцовымі органамі
+ ўлады, бізнесам і СМІ. Яны таксама прыядналіся да OpenStreetMap Foundation
+ (OSMF), што дало сувязь з юрыдычным і аўтарскім органам кіравання.
+ list_text: 'Наступныя суполкі афіцыйна зарэгістраваны ў якасці мясцовых аддзяленняў:'
+ other_groups:
+ title: Іншыя супольнасці
+ other_groups_html: Няма неабходнасці афіцыйна рэгістраваць групу як мясцовае
+ аддзяленне. Насамрэч многія групы вельмі паспяхова існуюць у выглядзе нефармальных
+ сустрэч або суполак. Кожны можа заснаваць такую суполку або далучыцца да
+ яе. Больш падрабязна на старонцы %{communities_wiki_link}.
traces:
visibility:
private: Прыватны (ананімны з неспарадкаванымі пунктамі)
display name description: Ваша імя, якое будзе бачнае ўсім. Вы можаце змяніць
яго потым ў вашых параметрах.
external auth: 'Аўтэнтыфікацыя праз:'
- use external auth: 'Для альтэрнатыўнага ўваходу, залагіньцеся цераз:'
+ use external auth: У якасці альтэрнатывы выкарыстайце для ўваходу старонні сервіс
auth no password: Пры выкарыстанні знешняй аўтэнтыфікацыі пароль не патрэбны,
але для некаторых дадатковых інструментаў або сервераў ён усё яшчэ спатрэбіцца.
continue: Зарэгістравацца
title: '%{block_on} заблакіраваны %{block_by}'
heading_html: '%{block_on} заблакіраваны %{block_by}'
created: Створаны
- status: Статус
+ status: 'Статус:'
show: Паказаць
edit: Рэдагаваць
revoke: Адазваць!
index:
title: Implijerien
heading: Implijerien
+ older: Implijerien goshoc'h
+ newer: Implijerien nevesoc'h
+ found_users:
+ one: '%{count} implijer kavet'
+ two: '%{count} implijer kavet'
+ few: '%{count} implijer kavet'
+ many: '%{count} implijer kavet'
+ other: '%{count} implijer'
summary_html: '%{name} krouet eus %{ip_address} d''an %{date}'
summary_no_ip_html: '%{name} krouet d''an %{date}'
confirm: Kadarnaat an implijerien diuzet
# Author: Thomas Bohn
# Author: Til
# Author: Timonade
+# Author: TomatoCake
# Author: Twistqj
# Author: Umherirrender
# Author: Unkn0wnCat
deleted_ago_by_html: Gelöscht %{time_ago} von %{user}
edited_ago_by_html: Bearbeitet %{time_ago} von %{user}
version: Version
+ redacted_version: Zensierte Version
in_changeset: Änderungssatz
anonymous: anonym
no_comment: (kein Kommentar)
other: '%{count} Wege'
download_xml: XML herunterladen
view_history: Verlauf anzeigen
+ view_unredacted_history: Unzensierten Verlauf ansehen
view_details: Details anzeigen
+ view_redacted_data: Zensierte Daten ansehen
+ view_redaction_message: Zensurnachricht ansehen
location: 'Standort:'
node:
title_html: 'Knoten: %{name}'
introduction: Klicke auf die Karte, um benachbarte Objekte zu finden.
nearby: Benachbarte Objekte
enclosing: Umschließende Objekte
+ old_nodes:
+ not_found:
+ sorry: 'Entschuldigung, Knoten #%{id} Version %{version} konnte nicht gefunden
+ werden.'
+ old_ways:
+ not_found:
+ sorry: 'Entschuldigung, Weg #%{id} Version %{version} konnte nicht gefunden
+ werden.'
+ old_relations:
+ not_found:
+ sorry: 'Entschuldigung, Relation #%{id} Version %{version} konnte nicht gefunden
+ werden.'
changesets:
changeset_paging_nav:
showing_page: Seite %{page}
created: Erstellt
closed: Geschlossen
belongs_to: Autor
+ subscribe:
+ heading: Die folgende Änderungssatz-Diskussion abonnieren?
+ button: Diskussion abonnieren
+ unsubscribe:
+ heading: Von der folgenden Änderungssatz-Diskussion abmelden?
+ button: Von der Diskussion abmelden
+ heading:
+ title: Änderungssatz %{id}
+ created_by_html: Erstellt von %{link_user} am %{created}.
+ no_such_entry:
+ title: Dieser Änderungssatz existiert nicht
+ heading: 'Kein Eintrag mit der ID: %{id}'
+ body: Es gibt leider keinen Änderungssatz mit der ID %{id}. Bitte überprüfe
+ deine Rechtschreibung, oder vielleicht ist der Link, auf den du geklickt hast,
+ falsch.
show:
title: 'Änderungssatz: %{id}'
+ created: 'Erstellt: %{when}'
+ closed: 'Geschlossen: %{when}'
created_ago_html: Erstellt %{time_ago}
closed_ago_html: Geschlossen %{time_ago}
created_ago_by_html: Erstellt %{time_ago} von %{user}
show:
title: Blog von %{user} | %{title}
user_title: Blog von %{user}
+ discussion: Diskussion
leave_a_comment: Schreibe einen Kommentar
login_to_leave_a_comment_html: '%{login_link}, um einen Kommentar zu schreiben'
login: Anmelden
comment: Kommentar
newer_comments: Neuere Kommentare
older_comments: Ältere Kommentare
+ subscribe:
+ heading: Folgende Tagebucheintragsdiskussion abonnieren?
+ button: Diskussion abonnieren
+ unsubscribe:
+ heading: Von der folgenden Tagebucheintragsdiskussion abmelden?
+ button: Von der Diskussion abmelden
doorkeeper:
errors:
messages:
intro_text: OpenStreetMap ist eine Karte der Welt, erstellt von Menschen wie dir
und frei verwendbar unter einer offenen Lizenz.
intro_2_create_account: Erstelle ein Benutzerkonto
+ hosting_partners_2024_html: Das Hosting wird von %{fastly}, %{corpmembers} und
+ anderen %{partners} unterstützt.
partners_fastly: Fastly
+ partners_corpmembers: OSMF-Unternehmensmitglieder
partners_partners: Partnern
tou: Nutzungsbedingungen
osm_offline: Die OpenStreetMap-Datenbank ist im Moment wegen wichtiger Wartungsarbeiten
more: Mehr
user_mailer:
diary_comment_notification:
+ description: 'OpenStreetMap-Tagebucheintrag #%{id}'
subject: '[OpenStreetMap] %{user} hat zu einem Blogeintrag kommentiert'
hi: Hallo %{to_user},
header: '%{from_user} hat zu dem OpenStreetMap-Blogeintrag mit dem Thema %{subject}
oder dem Autor unter %{replyurl} antworten.
footer_html: Hier gehts zum Kommentar %{readurl}, Du kannst ihn kommentieren
%{commenturl} oder dem Autor unter %{replyurl} eine Nachricht senden.
+ footer_unsubscribe: Du kannst dich von der Diskussion auf %{unsubscribeurl}
+ abmelden.
+ footer_unsubscribe_html: Du kannst dich von der Diskussion auf %{unsubscribeurl}
+ abmelden.
message_notification:
subject: '[OpenStreetMap] %{message_title}'
hi: Hallo %{to_user},
click_the_link: Wenn du das bist, klicke bitte auf den Link unten, um dein Passwort
zurückzusetzen.
note_comment_notification:
+ description: 'OpenStreetMap-Notiz #%{id}'
anonymous: Ein anonymer Benutzer
greeting: Hallo,
commented:
details: Weitere Details über den Hinweis findest du unter %{url}.
details_html: Weitere Details über den Hinweis findest du unter %{url}.
changeset_comment_notification:
+ description: 'OpenStreetMap-Änderungssatz #%{id}'
hi: Hallo %{to_user},
greeting: Hallo,
commented:
details: Weitere Details über den Änderungssatz können gefunden werden unter
%{url}.
details_html: Weitere Details über den Änderungssatz findest Du unter %{url}.
- unsubscribe: Um die Aktualisierungen an diesem Änderungssatz abzubestellen,
- besuche %{url} und klicke auf „Abmelden“.
- unsubscribe_html: Um Aktualisierungen an diesem Änderungssatz abzubestellen,
- besuche %{url} und klicke auf „Abmelden“.
+ unsubscribe: Du kannst dich auf %{url} von den Benachrichtigungen dieses Änderungssatzes
+ abmelden.
+ unsubscribe_html: Du kannst dich auf %{url} von den Benachrichtigungen dieses
+ Änderungssatzes abmelden.
confirmations:
confirm:
heading: Bitte überprüfe deine E-Mails!
other: '%{count} stummgeschatete Nachrichten'
reply:
wrong_user: Du bist angemeldet als '%{user}', aber die Nachricht, auf die du
- antworten wolltest, wurde an einen anderen Benutzer geschickt. Bitte melde
- dich zum Beantworten mit dem richtigen Benutzer an.
+ antworten wolltest, wurde nicht an diesen Benutzer gesendet. Bitte melde dich
+ zum Beantworten mit dem richtigen Benutzer an.
show:
title: Nachricht lesen
reply_button: Antworten
destroy_button: Löschen
back: Zurück
wrong_user: Du bist angemeldet als '%{user}', aber die Nachricht, die du lesen
- wolltest, wurde an einen anderen Benutzer geschickt. Bitte melde dich zum
- Lesen mit dem richtigen Benutzer an.
+ wolltest, wurde von einem oder an einen anderen Benutzer geschickt. Bitte
+ melde dich zum Lesen mit dem richtigen Benutzer an.
sent_message_summary:
destroy_button: Löschen
heading:
new:
title: Passwort vergessen
heading: Passwort vergessen?
- email address: 'E-Mail-Adresse:'
+ email address: E-Mail-Adresse
new password button: Passwort zurücksetzen
help_text: Bitte gib deine E-Mail-Adresse ein, mit der du dich angemeldet hast.
Wir werden dir dann einen Link schicken, mit dem du dein Passwort zurücksetzen
kannst.
+ create:
+ send_paranoid_instructions: Wenn deine E-Mail-Adresse in unserer Datenbank existiert
+ erhältst du in wenigen Minuten einen Passwortwiederherstellungs-Link an deiner
+ E-Mail-Adresse.
edit:
title: Passwort zurücksetzen
heading: Passwort für %{user} zurücksetzen
new:
title: Anmelden
heading: Anmelden
- email or username: 'E-Mail-Adresse oder Benutzername:'
- password: 'Passwort:'
+ email or username: E-Mail-Adresse oder Benutzername
+ password: Passwort
remember: Anmeldedaten merken
lost password link: Passwort vergessen?
login_button: Anmelden
register now: Jetzt registrieren
- with external: 'Verwende alternativ eine Drittpartei zur Anmeldung:'
+ with external: 'Verwende alternativ einen Drittanbieter für die Anmeldung:'
no account: Du hast noch kein Benutzerkonto?
auth failure: Mit diesen Daten leider keine Anmeldung möglich.
openid_logo_alt: Mit einer OpenID anmelden
title: Anleitung für Anfänger
description: Eine durch die Gemeinschaft gewartete Anleitung für Anfänger.
community:
- title: Community-Forum
- description: Ein gemeinsamer Ort für Gespräche über OpenStreetMap.
+ title: Hilfe- und Community-Forum
+ description: Ein gemeinsamer Ort, um Hilfe zu erhalten und Gespräche über
+ OpenStreetMap zu führen.
mailing_lists:
title: Mailinglisten
description: Stelle eine Frage und diskutiere interessante Sachen zu einem
identifiable: IDENTIFIZIERBAR
private: PRIVAT
trackable: VERFOLGBAR
+ details_with_tags_html: '%{time_ago} von %{user} in %{tags}'
+ details_without_tags_html: '%{time_ago} von %{user}'
index:
public_traces: Öffentliche GPS-Tracks
my_gps_traces: Meine GPS-Tracks
oauth_clients:
new:
title: Eine neue Anwendung registrieren
+ disabled: Die Registrierung von OAuth-1-Anwendungen wurde deaktiviert
edit:
title: Anwendung bearbeiten
show:
title: Meine autorisierten Anwendungen
application: Anwendung
permissions: Berechtigungen
+ last_authorized: Zuletzt autorisiert
no_applications_html: Du hast noch keine %{oauth2}-Anwendungen autorisiert.
application:
revoke: Zugriff entziehen
display name description: Dein öffentlich angezeigter Benutzername. Er kann
später in den Einstellungen geändert werden.
external auth: 'Drittparteiauthentifikation:'
- use external auth: Verwende alternativ eine Drittpartei zur Anmeldung
+ use external auth: Verwende alternativ einen Drittanbieter für die Anmeldung
auth no password: Mit Drittparteiauthentifikation ist kein Passwort erforderlich,
jedoch können einige Extrawerkzeuge oder Server eines benötigen.
continue: Registrieren
index:
title: Benutzer
heading: Benutzer
+ older: Ältere Benutzer
+ newer: Neuere Benutzer
+ found_users:
+ one: '%{count} Benutzer gefunden'
+ other: '%{count} Benutzer gefunden'
summary_html: '%{name} erstellt von %{ip_address} am %{date}'
summary_no_ip_html: '%{name} erstellt am %{date}'
confirm: Bestätige ausgewählte Benutzer
identifiable: IDENTIFICABLE
private: PRIVADA
trackable: RASTREABLE
+ details_with_tags_html: '%{time_ago} por %{user} en %{tags}'
+ details_without_tags_html: '%{time_ago} por %{user}'
index:
public_traces: Trazas GPS públicas
my_gps_traces: Mis trazas GPS
identifiable: IDENTIFICÁBEL
private: PRIVADO
trackable: RASTREXÁBEL
+ details_with_tags_html: '%{time_ago} por %{user} en %{tags}'
+ details_without_tags_html: '%{time_ago} por %{user}'
index:
public_traces: Pistas GPS públicas
my_gps_traces: A miñas pistas GPS
index:
title: Usuarios
heading: Usuarios
+ older: Usuarios máis vellos
+ newer: Usuarios máis novos
+ found_users:
+ one: Atopouse %{count} usuario
+ other: Atopáronse %{count} usuarios
summary_html: '%{name} creado dende %{ip_address} o %{date}'
summary_no_ip_html: '%{name} creado o %{date}'
confirm: Confirmar os usuarios seleccionados
index:
title: משתמשים
heading: משתמשים
+ older: משתמשים ישנים יותר
+ newer: משתמשים חדשים יותר
+ found_users:
+ one: נמצא משתמש אחד
+ two: נמצאו שני משתמשים
+ many: נמצאו %{count} משתמשים
+ other: נמצאו %{count} משתמשים
summary_html: '%{name} נוצר מכתובת %{ip_address} ב־%{date}'
summary_no_ip_html: '%{name} נוצר ב־%{date}'
confirm: אישור משתמשים נבחרים
deleted_ago_by_html: Cancellato %{time_ago} da %{user}
edited_ago_by_html: Modificato %{time_ago} da %{user}
version: Versione
+ redacted_version: Versione rimossa
in_changeset: Gruppo di modifiche
anonymous: anonimo
no_comment: (nessun commento)
view_history: Visualizza cronologia
view_unredacted_history: Visualizza la cronologia non oscurata
view_details: Vedi dettagli
+ view_redacted_data: Mostra dati rimossi
+ view_redaction_message: Vedi messaggio di rimozione
location: 'Posizione:'
node:
title_html: 'Nodo: %{name}'
old_ways:
not_found:
sorry: 'Impossibile trovare il percorso #%{id} alla versione %{version}.'
+ old_relations:
+ not_found:
+ sorry: 'Impossibile trovare la relazione #%{id} alla versione %{version}.'
changesets:
changeset_paging_nav:
showing_page: Pagina %{page}
o che il collegamento sul quale hai cliccato non sia errato.
show:
title: 'Gruppo di modifiche: %{id}'
+ created: 'Creato: %{when}'
+ closed: 'Chiuso: %{when}'
created_ago_html: Creato %{time_ago}
closed_ago_html: Chiuso %{time_ago}
created_ago_by_html: Creato %{time_ago} da %{user}
read_gpx: Leggi tracciati GPS privati
write_gpx: Carica tracciati GPS
write_notes: Modifica le note
+ write_redactions: Rimuovi dati cartografici
read_email: Leggere indirizzo di posta elettronica utente
skip_authorization: Approvazione automatica applicazione
oauth_clients:
title: Le mie applicazioni autorizzate
application: Applicazione
permissions: Permessi
+ last_authorized: Ultima autorizzazione
no_applications_html: Non hai ancora alcuna applicazione %{oauth2}.
application:
revoke: Revoca accesso
index:
title: Utenti
heading: Utenti
+ older: Utenti più vecchi
+ newer: Utenti più recenti
found_users:
one: '%{count} utente trovato'
other: '%{count} utenti trovati'
# Author: Ajeje Brazorf
# Author: Amire80
# Author: Atysn
+# Author: Chqaz
# Author: CmplstofB
# Author: Danieldegroot2
# Author: Endres
no home location: あなたはまだホーム地点を登録していません。
update home location on click: ホーム地点を、地図上のクリックした地点に変更
delete: 削除
+ undelete: 削除を取り消し
update:
success: プロフィール更新済み。
failure: プロファイルを更新できませんでした。
showing_page: ページ %{page}
next: 次へ »
previous: « 前へ
+ user_mutes:
+ index:
+ table:
+ thead:
+ actions: 操作
notes:
index:
title: '%{user} さんが投稿またはコメントしたメモ'
index:
title: Benotzer
heading: Benotzer
+ older: Eeler Benotzer
+ newer: Méi nei Benotzer
+ found_users:
+ one: '%{count} Benotzer fonnt'
+ other: '%{count} Benotzer fonnt'
confirm: Erausgesicht Benotzer confirméieren
hide: Erausgesicht Benotzer vrstoppen
empty: Et goufe keng sou Benotzer fonnt
index:
title: Brukere
heading: Brukere
+ older: Eldre brukere
+ newer: Nyere brukere
summary_html: '%{name} opprettet fra %{ip_address} den %{date}'
summary_no_ip_html: '%{name} opprettet %{date}'
confirm: Bekreft valgte brukere
# Author: JasonZe
# Author: Jgpacker
# Author: Jgrocha
+# Author: Lc97
# Author: Leosls
# Author: Luckas
# Author: Luckas Blade
index:
title: Usuários
heading: Usuários
+ older: Usuários antigos
+ newer: Novos usuários
+ found_users:
+ one: '%{count} usuário encontrado'
+ other: '%{count} usuários encontrados'
summary_html: '%{name} criado no computador %{ip_address} em %{date}'
summary_no_ip_html: '%{name} criado em %{date}'
confirm: Confirmar Usuários Selecionados
alt: Вход с использованием учётной записи в Википедии
wordpress:
title: Войти с помощью Wordpress
- alt: Войти с помощью Wordpress OpenID
+ alt: Войти с помощью Wordpress OpenI
aol:
title: Войти с помощью AOL
alt: Войти с помощью AOL OpenID
identifiable: ИДЕНТИФИЦИРУЕМЫЙ
private: ЧАСТНЫЙ
trackable: ОТСЛЕЖИВАЕМЫЙ
+ details_with_tags_html: '%{time_ago} от %{user} в %{tags}'
+ details_without_tags_html: '%{time_ago} от %{user}'
index:
public_traces: Общедоступные GPS-треки
my_gps_traces: Мои GPS-треки
index:
title: Пользователи
heading: Пользователи
+ older: Участники с большим стажем
+ newer: Новые участники
summary_html: '%{name} создан %{date}, с адреса %{ip_address}'
summary_no_ip_html: '%{name} создан %{date}'
confirm: Подтвердить выделенных пользователей
post "changeset/:id/unsubscribe" => "changesets#unsubscribe", :as => :api_changeset_unsubscribe, :id => /\d+/
put "changeset/:id" => "changesets#update", :id => /\d+/
put "changeset/:id/close" => "changesets#close", :as => :changeset_close, :id => /\d+/
- get "changesets" => "changesets#query"
+ get "changesets" => "changesets#index"
post "changeset/:id/comment" => "changeset_comments#create", :as => :changeset_comment, :id => /\d+/
post "changeset/comment/:id/hide" => "changeset_comments#destroy", :as => :changeset_comment_hide, :id => /\d+/
post "changeset/comment/:id/unhide" => "changeset_comments#restore", :as => :changeset_comment_unhide, :id => /\d+/
get "/user/:display_name/diary/rss" => "diary_entries#rss", :defaults => { :format => :rss }
get "/diary/:language/rss" => "diary_entries#rss", :defaults => { :format => :rss }
get "/diary/rss" => "diary_entries#rss", :defaults => { :format => :rss }
- get "/user/:display_name/diary/comments/:page" => "diary_entries#comments", :page => /[1-9][0-9]*/
- get "/user/:display_name/diary/comments/" => "diary_entries#comments", :as => :diary_comments
+ get "/user/:display_name/diary/comments/:page", :page => /[1-9][0-9]*/, :to => redirect(:path => "/user/%{display_name}/diary/comments")
+ get "/user/:display_name/diary/comments" => "diary_entries#comments", :as => :diary_comments
get "/user/:display_name/diary" => "diary_entries#index"
get "/diary/:language" => "diary_entries#index"
scope "/user/:display_name" do
)
assert_routing(
{ :path => "/api/0.6/changesets", :method => :get },
- { :controller => "api/changesets", :action => "query" }
+ { :controller => "api/changesets", :action => "index" }
)
assert_routing(
{ :path => "/api/0.6/changesets.json", :method => :get },
- { :controller => "api/changesets", :action => "query", :format => "json" }
+ { :controller => "api/changesets", :action => "index", :format => "json" }
)
end
{ :path => "/user/username/diary/comments", :method => :get },
{ :controller => "diary_entries", :action => "comments", :display_name => "username" }
)
- assert_routing(
- { :path => "/user/username/diary/comments/1", :method => :get },
- { :controller => "diary_entries", :action => "comments", :display_name => "username", :page => "1" }
- )
assert_routing(
{ :path => "/diary/new", :method => :get },
{ :path => "/user/username/diary/1/unsubscribe", :method => :post },
{ :controller => "diary_entries", :action => "unsubscribe", :display_name => "username", :id => "1" }
)
+
+ get "/user/username/diary/comments/1"
+ assert_redirected_to "/user/username/diary/comments"
end
def test_new_no_login
assert_equal relation_member2.relation.id, cr.second.id
assert_equal relation_member3.relation.id, cr.third.id
end
+
+ test "raises missing changeset exception when creating" do
+ user = create(:user)
+ node = Node.new
+ assert_raises OSM::APIChangesetMissingError do
+ node.create_with_history(user)
+ end
+ end
+
+ test "raises user-changeset mismatch exception when creating" do
+ user = create(:user)
+ changeset = create(:changeset)
+ node = Node.new(:changeset => changeset)
+ assert_raises OSM::APIUserChangesetMismatchError do
+ node.create_with_history(user)
+ end
+ end
+
+ test "raises already closed changeset exception when creating" do
+ user = create(:user)
+ changeset = create(:changeset, :closed, :user => user)
+ node = Node.new(:changeset => changeset)
+ assert_raises OSM::APIChangesetAlreadyClosedError do
+ node.create_with_history(user)
+ end
+ end
+
+ test "raises id precondition exception when updating" do
+ user = create(:user)
+ node = Node.new(:id => 23)
+ new_node = Node.new(:id => 42)
+ assert_raises OSM::APIPreconditionFailedError do
+ node.update_from(new_node, user)
+ end
+ end
+
+ test "raises version mismatch exception when updating" do
+ user = create(:user)
+ node = Node.new(:id => 42, :version => 7)
+ new_node = Node.new(:id => 42, :version => 12)
+ assert_raises OSM::APIVersionMismatchError do
+ node.update_from(new_node, user)
+ end
+ end
+
+ test "raises missing changeset exception when updating" do
+ user = create(:user)
+ node = Node.new(:id => 42, :version => 12)
+ new_node = Node.new(:id => 42, :version => 12)
+ assert_raises OSM::APIChangesetMissingError do
+ node.update_from(new_node, user)
+ end
+ end
+
+ test "raises user-changeset mismatch exception when updating" do
+ user = create(:user)
+ changeset = create(:changeset)
+ node = Node.new(:id => 42, :version => 12)
+ new_node = Node.new(:id => 42, :version => 12, :changeset => changeset)
+ assert_raises OSM::APIUserChangesetMismatchError do
+ node.update_from(new_node, user)
+ end
+ end
+
+ test "raises already closed changeset exception when updating" do
+ user = create(:user)
+ changeset = create(:changeset, :closed, :user => user)
+ node = Node.new(:id => 42, :version => 12)
+ new_node = Node.new(:id => 42, :version => 12, :changeset => changeset)
+ assert_raises OSM::APIChangesetAlreadyClosedError do
+ node.update_from(new_node, user)
+ end
+ end
+
+ test "raises id precondition exception when deleting" do
+ user = create(:user)
+ node = Node.new(:id => 23, :visible => true)
+ new_node = Node.new(:id => 42, :visible => false)
+ assert_raises OSM::APIPreconditionFailedError do
+ node.delete_with_history!(new_node, user)
+ end
+ end
end
end
end
end
+
+ test "raises missing changeset exception when creating" do
+ user = create(:user)
+ relation = Relation.new
+ assert_raises OSM::APIChangesetMissingError do
+ relation.create_with_history(user)
+ end
+ end
+
+ test "raises user-changeset mismatch exception when creating" do
+ user = create(:user)
+ changeset = create(:changeset)
+ relation = Relation.new(:changeset => changeset)
+ assert_raises OSM::APIUserChangesetMismatchError do
+ relation.create_with_history(user)
+ end
+ end
+
+ test "raises already closed changeset exception when creating" do
+ user = create(:user)
+ changeset = create(:changeset, :closed, :user => user)
+ relation = Relation.new(:changeset => changeset)
+ assert_raises OSM::APIChangesetAlreadyClosedError do
+ relation.create_with_history(user)
+ end
+ end
+
+ test "raises id precondition exception when updating" do
+ user = create(:user)
+ relation = Relation.new(:id => 23)
+ new_relation = Relation.new(:id => 42)
+ assert_raises OSM::APIPreconditionFailedError do
+ relation.update_from(new_relation, user)
+ end
+ end
+
+ test "raises version mismatch exception when updating" do
+ user = create(:user)
+ relation = Relation.new(:id => 42, :version => 7)
+ new_relation = Relation.new(:id => 42, :version => 12)
+ assert_raises OSM::APIVersionMismatchError do
+ relation.update_from(new_relation, user)
+ end
+ end
+
+ test "raises missing changeset exception when updating" do
+ user = create(:user)
+ relation = Relation.new(:id => 42, :version => 12)
+ new_relation = Relation.new(:id => 42, :version => 12)
+ assert_raises OSM::APIChangesetMissingError do
+ relation.update_from(new_relation, user)
+ end
+ end
+
+ test "raises user-changeset mismatch exception when updating" do
+ user = create(:user)
+ changeset = create(:changeset)
+ relation = Relation.new(:id => 42, :version => 12)
+ new_relation = Relation.new(:id => 42, :version => 12, :changeset => changeset)
+ assert_raises OSM::APIUserChangesetMismatchError do
+ relation.update_from(new_relation, user)
+ end
+ end
+
+ test "raises already closed changeset exception when updating" do
+ user = create(:user)
+ changeset = create(:changeset, :closed, :user => user)
+ relation = Relation.new(:id => 42, :version => 12)
+ new_relation = Relation.new(:id => 42, :version => 12, :changeset => changeset)
+ assert_raises OSM::APIChangesetAlreadyClosedError do
+ relation.update_from(new_relation, user)
+ end
+ end
+
+ test "raises id precondition exception when deleting" do
+ user = create(:user)
+ relation = Relation.new(:id => 23, :visible => true)
+ new_relation = Relation.new(:id => 42, :visible => false)
+ assert_raises OSM::APIPreconditionFailedError do
+ relation.delete_with_history!(new_relation, user)
+ end
+ end
end
assert_equal 1, cr.size
assert_equal relation.id, cr.first.id
end
+
+ test "raises missing changeset exception when creating" do
+ user = create(:user)
+ way = Way.new
+ assert_raises OSM::APIChangesetMissingError do
+ way.create_with_history(user)
+ end
+ end
+
+ test "raises user-changeset mismatch exception when creating" do
+ user = create(:user)
+ changeset = create(:changeset)
+ way = Way.new(:changeset => changeset)
+ assert_raises OSM::APIUserChangesetMismatchError do
+ way.create_with_history(user)
+ end
+ end
+
+ test "raises already closed changeset exception when creating" do
+ user = create(:user)
+ changeset = create(:changeset, :closed, :user => user)
+ way = Way.new(:changeset => changeset)
+ assert_raises OSM::APIChangesetAlreadyClosedError do
+ way.create_with_history(user)
+ end
+ end
+
+ test "raises id precondition exception when updating" do
+ user = create(:user)
+ way = Way.new(:id => 23)
+ new_way = Way.new(:id => 42)
+ assert_raises OSM::APIPreconditionFailedError do
+ way.update_from(new_way, user)
+ end
+ end
+
+ test "raises version mismatch exception when updating" do
+ user = create(:user)
+ way = Way.new(:id => 42, :version => 7)
+ new_way = Way.new(:id => 42, :version => 12)
+ assert_raises OSM::APIVersionMismatchError do
+ way.update_from(new_way, user)
+ end
+ end
+
+ test "raises missing changeset exception when updating" do
+ user = create(:user)
+ way = Way.new(:id => 42, :version => 12)
+ new_way = Way.new(:id => 42, :version => 12)
+ assert_raises OSM::APIChangesetMissingError do
+ way.update_from(new_way, user)
+ end
+ end
+
+ test "raises user-changeset mismatch exception when updating" do
+ user = create(:user)
+ changeset = create(:changeset)
+ way = Way.new(:id => 42, :version => 12)
+ new_way = Way.new(:id => 42, :version => 12, :changeset => changeset)
+ assert_raises OSM::APIUserChangesetMismatchError do
+ way.update_from(new_way, user)
+ end
+ end
+
+ test "raises already closed changeset exception when updating" do
+ user = create(:user)
+ changeset = create(:changeset, :closed, :user => user)
+ way = Way.new(:id => 42, :version => 12)
+ new_way = Way.new(:id => 42, :version => 12, :changeset => changeset)
+ assert_raises OSM::APIChangesetAlreadyClosedError do
+ way.update_from(new_way, user)
+ end
+ end
+
+ test "raises id precondition exception when deleting" do
+ user = create(:user)
+ way = Way.new(:id => 23, :visible => true)
+ new_way = Way.new(:id => 42, :visible => false)
+ assert_raises OSM::APIPreconditionFailedError do
+ way.delete_with_history!(new_way, user)
+ end
+ end
end