ShelbyTV / shelby_gt

Rails API services for Shelby GT
2 stars 0 forks source link

upvote & undo-upvote should be idempotent #82

Closed spinosa closed 12 years ago

spinosa commented 12 years ago

from @ArtSabintsev -- One downside though I found through testing: if you don't heart something, and accidentally sent a /upvote?undo=1, it automatically heart that frame. I'm assuming undo=1 just changes the state from on to off or vice versa, depending on the existing state.

"undoing an upvote" on a frame that hasn't been upvoted should not do anything. That is, both upvote and un-upvote should be idempotent.

spinosa commented 12 years ago

this seems related & simultaneously fixable:

A NoMethodError occurred in frame#upvote:

undefined method destroy' for nil:NilClass lib/gt/framer.rb:159:inremove_dupe_of_frame_from_roll!' ------------------------------- Request:

lib/gt/framer.rb:159:in remove_dupe_of_frame_from_roll!' app/models/frame.rb:139:inupvote_undo!' app/controllers/v1/frame_controller.rb:392:in block in upvote' lib/stats/stats_manager.rb:35:intime' app/controllers/v1/frame_controller.rb:387:in upvote' actionpack (3.2.2) lib/action_controller/metal/implicit_render.rb:4:insend_action' actionpack (3.2.2) lib/abstract_controller/base.rb:167:in process_action' actionpack (3.2.2) lib/action_controller/metal/rendering.rb:10:inprocess_action' actionpack (3.2.2) lib/abstract_controller/callbacks.rb:18:in block in process_action' activesupport (3.2.2) lib/active_support/callbacks.rb:436:in_run3146261660570648742process_action3359774308037667786callbacks' activesupport (3.2.2) lib/active_support/callbacks.rb:405:in __run_callback' activesupport (3.2.2) lib/active_support/callbacks.rb:385:in_run_process_action_callbacks' activesupport (3.2.2) lib/active_support/callbacks.rb:81:in run_callbacks' actionpack (3.2.2) lib/abstract_controller/callbacks.rb:17:inprocess_action' actionpack (3.2.2) lib/action_controller/metal/rescue.rb:29:in process_action' actionpack (3.2.2) lib/action_controller/metal/instrumentation.rb:30:inblock in process_action' activesupport (3.2.2) lib/active_support/notifications.rb:123:in block in instrument' activesupport (3.2.2) lib/active_support/notifications/instrumenter.rb:20:ininstrument' activesupport (3.2.2) lib/active_support/notifications.rb:123:in instrument' actionpack (3.2.2) lib/action_controller/metal/instrumentation.rb:29:inprocess_action' actionpack (3.2.2) lib/action_controller/metal/params_wrapper.rb:205:in process_action' newrelic_rpm (3.3.5) lib/new_relic/agent/instrumentation/rails3/action_controller.rb:34:inblock in process_action' newrelic_rpm (3.3.5) lib/new_relic/agent/instrumentation/controller_instrumentation.rb:257:in block in perform_action_with_newrelic_trace' newrelic_rpm (3.3.5) lib/new_relic/agent/method_tracer.rb:242:intrace_execution_scoped' newrelic_rpm (3.3.5) lib/new_relic/agent/instrumentation/controller_instrumentation.rb:252:in perform_action_with_newrelic_trace' newrelic_rpm (3.3.5) lib/new_relic/agent/instrumentation/rails3/action_controller.rb:33:inprocess_action' actionpack (3.2.2) lib/abstract_controller/base.rb:121:in process' actionpack (3.2.2) lib/abstract_controller/rendering.rb:45:inprocess' actionpack (3.2.2) lib/action_controller/metal.rb:203:in dispatch' actionpack (3.2.2) lib/action_controller/metal/rack_delegation.rb:14:indispatch' actionpack (3.2.2) lib/action_controller/metal.rb:246:in block in action' actionpack (3.2.2) lib/action_dispatch/routing/route_set.rb:67:incall' actionpack (3.2.2) lib/action_dispatch/routing/route_set.rb:67:in dispatch' actionpack (3.2.2) lib/action_dispatch/routing/route_set.rb:30:incall' journey (1.0.3) lib/journey/router.rb:68:in block in call' journey (1.0.3) lib/journey/router.rb:56:ineach' journey (1.0.3) lib/journey/router.rb:56:in call' actionpack (3.2.2) lib/action_dispatch/routing/route_set.rb:594:incall' omniauth (1.0.3) lib/omniauth/strategy.rb:168:in call!' omniauth (1.0.3) lib/omniauth/strategy.rb:148:incall' omniauth (1.0.3) lib/omniauth/strategy.rb:168:in call!' omniauth (1.0.3) lib/omniauth/strategy.rb:148:incall' omniauth (1.0.3) lib/omniauth/strategy.rb:168:in call!' omniauth (1.0.3) lib/omniauth/strategy.rb:148:incall' omniauth (1.0.3) lib/omniauth/builder.rb:42:in call' exception_notification (2.5.2) lib/exception_notifier.rb:25:incall' newrelic_rpm (3.3.5) lib/new_relic/rack/browser_monitoring.rb:12:in call' rack-oauth2-server (2.6.0) lib/rack/oauth2/server.rb:272:incall' /home/gt/.rvm/gems/ruby-1.9.3-p125/bundler/gems/mongomapper-f856b5d6c85b/lib/mongo_mapper/middleware/identity_map.rb:10:in call' sass (3.1.15) lib/sass/plugin/rack.rb:54:incall' rack-cors (0.2.4) lib/rack/cors.rb:51:in call' warden (1.1.1) lib/warden/manager.rb:35:inblock in call' warden (1.1.1) lib/warden/manager.rb:34:in catch' warden (1.1.1) lib/warden/manager.rb:34:incall' actionpack (3.2.2) lib/action_dispatch/middleware/best_standards_support.rb:17:in call' rack (1.4.1) lib/rack/etag.rb:23:incall' rack (1.4.1) lib/rack/conditionalget.rb:35:in call' actionpack (3.2.2) lib/action_dispatch/middleware/head.rb:14:incall' actionpack (3.2.2) lib/action_dispatch/middleware/params_parser.rb:21:in call' actionpack (3.2.2) lib/action_dispatch/middleware/flash.rb:242:incall' rack (1.4.1) lib/rack/session/abstract/id.rb:205:in context' rack (1.4.1) lib/rack/session/abstract/id.rb:200:incall' actionpack (3.2.2) lib/action_dispatch/middleware/cookies.rb:338:in call' actionpack (3.2.2) lib/action_dispatch/middleware/callbacks.rb:28:inblock in call' activesupport (3.2.2) lib/active_support/callbacks.rb:405:in _run__1482501248003686213__call__3649713428287851125__callbacks' activesupport (3.2.2) lib/active_support/callbacks.rb:405:in__run_callback' activesupport (3.2.2) lib/active_support/callbacks.rb:385:in _run_call_callbacks' activesupport (3.2.2) lib/active_support/callbacks.rb:81:inrun_callbacks' actionpack (3.2.2) lib/action_dispatch/middleware/callbacks.rb:27:in call' actionpack (3.2.2) lib/action_dispatch/middleware/remote_ip.rb:31:incall' actionpack (3.2.2) lib/action_dispatch/middleware/debug_exceptions.rb:16:in call' actionpack (3.2.2) lib/action_dispatch/middleware/show_exceptions.rb:56:incall' railties (3.2.2) lib/rails/rack/logger.rb:26:in call_app' railties (3.2.2) lib/rails/rack/logger.rb:16:incall' actionpack (3.2.2) lib/action_dispatch/middleware/request_id.rb:22:in call' rack (1.4.1) lib/rack/methodoverride.rb:21:incall' rack (1.4.1) lib/rack/runtime.rb:17:in call' activesupport (3.2.2) lib/active_support/cache/strategy/local_cache.rb:72:incall' rack (1.4.1) lib/rack/lock.rb:15:in call' rack-cache (1.2) lib/rack/cache/context.rb:136:inforward' rack-cache (1.2) lib/rack/cache/context.rb:143:in pass' rack-cache (1.2) lib/rack/cache/context.rb:155:ininvalidate' rack-cache (1.2) lib/rack/cache/context.rb:71:in call!' rack-cache (1.2) lib/rack/cache/context.rb:51:incall' railties (3.2.2) lib/rails/engine.rb:479:in call' railties (3.2.2) lib/rails/application.rb:220:incall' railties (3.2.2) lib/rails/railtie/configurable.rb:30:in method_missing' passenger (3.0.11) lib/phusion_passenger/rack/request_handler.rb:96:inprocess_request' passenger (3.0.11) lib/phusion_passenger/abstract_request_handler.rb:513:in accept_and_process_next_request' passenger (3.0.11) lib/phusion_passenger/abstract_request_handler.rb:274:inmain_loop' passenger (3.0.11) lib/phusion_passenger/rack/application_spawner.rb:206:in start_request_handler' passenger (3.0.11) lib/phusion_passenger/rack/application_spawner.rb:171:inblock in handle_spawn_application' passenger (3.0.11) lib/phusion_passenger/utils.rb:479:in safe_fork' passenger (3.0.11) lib/phusion_passenger/rack/application_spawner.rb:166:inhandle_spawn_application' passenger (3.0.11) lib/phusion_passenger/abstract_server.rb:357:in server_main_loop' passenger (3.0.11) lib/phusion_passenger/abstract_server.rb:206:instart_synchronously' passenger (3.0.11) lib/phusion_passenger/abstract_server.rb:180:in start' passenger (3.0.11) lib/phusion_passenger/rack/application_spawner.rb:129:instart' passenger (3.0.11) lib/phusion_passenger/spawn_manager.rb:253:in block (2 levels) in spawn_rack_application' passenger (3.0.11) lib/phusion_passenger/abstract_server_collection.rb:132:inlookup_or_add' passenger (3.0.11) lib/phusion_passenger/spawn_manager.rb:246:in block in spawn_rack_application' passenger (3.0.11) lib/phusion_passenger/abstract_server_collection.rb:82:inblock in synchronize' internal:prelude:10:in synchronize' passenger (3.0.11) lib/phusion_passenger/abstract_server_collection.rb:79:insynchronize' passenger (3.0.11) lib/phusion_passenger/spawn_manager.rb:244:in spawn_rack_application' passenger (3.0.11) lib/phusion_passenger/spawn_manager.rb:137:inspawn_application' passenger (3.0.11) lib/phusion_passenger/spawn_manager.rb:275:in handle_spawn_application' passenger (3.0.11) lib/phusion_passenger/abstract_server.rb:357:inserver_main_loop' passenger (3.0.11) lib/phusion_passenger/abstract_server.rb:206:in start_synchronously' passenger (3.0.11) helper-scripts/passenger-spawn-server:99:in

'