From 00f5d09d651842b697d19c9af9dcdcbeebcf1895 Mon Sep 17 00:00:00 2001 From: Will Marshall Date: Thu, 10 Apr 2014 14:48:22 +1000 Subject: [PATCH] Moving our inputs to magical helpers --- .../checkout/details_controller.js.coffee | 4 -- .../controllers/checkout_controller.js.coffee | 41 ------------------- app/helpers/checkout_helper.rb | 8 ++++ app/views/shared/_validated_input.html.haml | 8 ++++ app/views/shop/checkout/_details.html.haml | 23 +---------- spec/helpers/checkout_helper_spec.rb | 13 ++++++ 6 files changed, 31 insertions(+), 66 deletions(-) create mode 100644 app/views/shared/_validated_input.html.haml create mode 100644 spec/helpers/checkout_helper_spec.rb diff --git a/app/assets/javascripts/darkswarm/controllers/checkout/details_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/checkout/details_controller.js.coffee index 5361950bb6..a218e123b1 100644 --- a/app/assets/javascripts/darkswarm/controllers/checkout/details_controller.js.coffee +++ b/app/assets/javascripts/darkswarm/controllers/checkout/details_controller.js.coffee @@ -2,10 +2,6 @@ Darkswarm.controller "DetailsCtrl", ($scope) -> angular.extend(this, new FieldsetMixin($scope)) $scope.name = "details" - - #$scope.detailsValid = -> - #$scope.detailsFields().every (field)-> - #$scope.checkout[field].$valid #$scope.$watch -> #$scope.detailsValid() diff --git a/app/assets/javascripts/darkswarm/controllers/checkout_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/checkout_controller.js.coffee index ce65313eb7..bbde0d123a 100644 --- a/app/assets/javascripts/darkswarm/controllers/checkout_controller.js.coffee +++ b/app/assets/javascripts/darkswarm/controllers/checkout_controller.js.coffee @@ -17,44 +17,3 @@ Darkswarm.controller "CheckoutCtrl", ($scope, Order, storage) -> event.preventDefault() $scope.Order.submit() -FieldsetController = ($scope)-> - $scope.field = (path)-> - $scope[$scope.name][path] - - $scope.fieldValid = (path)-> - not ($scope.dirty(path) and $scope.invalid(path)) - - $scope.dirty = (name)-> - $scope.field(name).$dirty - - $scope.invalid = (name)-> - $scope.field(name).$invalid - - $scope.error = (name)-> - $scope.field(name).$error - - $scope.fieldErrors = (path)-> - # TODO: display server errors - errors = for error, invalid of $scope.error(path) - if invalid - switch error - when "required" then "must not be blank" - when "number" then "must be number" - when "email" then "must be email address" - (errors.filter (error) -> error?).join ", " - - - -Darkswarm.controller "DetailsSubCtrl", ($scope) -> - angular.extend(this, new FieldsetController($scope)) - $scope.name = "details" - #$scope.detailsValid = -> - #$scope.detailsFields().every (field)-> - #$scope.checkout[field].$valid - - #$scope.$watch -> - #$scope.detailsValid() - #, (valid)-> - #if valid - #$scope.show("billing") - diff --git a/app/helpers/checkout_helper.rb b/app/helpers/checkout_helper.rb index b21855bf7a..6cf2aca961 100644 --- a/app/helpers/checkout_helper.rb +++ b/app/helpers/checkout_helper.rb @@ -10,4 +10,12 @@ module CheckoutHelper adjustments end + + def validated_input(name, path, args = {}) + defaults = { + required: true, + type: :text + }.merge args + render partial: "shared/validated_input", locals: {name: name, path: path}.merge(defaults) + end end diff --git a/app/views/shared/_validated_input.html.haml b/app/views/shared/_validated_input.html.haml new file mode 100644 index 0000000000..eb4c524a65 --- /dev/null +++ b/app/views/shared/_validated_input.html.haml @@ -0,0 +1,8 @@ +%label{for: path}= name +%input.medium.input-text{name: path, + "ng-model" => path, + required: required, + type: type, + "ng-class" => "{error: '!fieldValid(\"#{path}\")'}"} +%small.error.medium.input-text{"ng-show" => "!fieldValid('#{path}')"} + = "{{ fieldErrors('#{path}') }}" diff --git a/app/views/shop/checkout/_details.html.haml b/app/views/shop/checkout/_details.html.haml index 94639d5607..74f0ad2c26 100644 --- a/app/views/shop/checkout/_details.html.haml +++ b/app/views/shop/checkout/_details.html.haml @@ -11,29 +11,10 @@ {{ order.bill_address.lastname }} .row .large-6.columns - - - path = "order.email" - %label{for: path} Email - %input.medium.input-text{name: path, - "ng-model" => path, - required: true, - type: :email, - "ng-class" => "{error: '!fieldValid(\"#{path}\")'}"} - %small.error.medium.input-text{"ng-show" => "!fieldValid('#{path}')"} - = "{{ fieldErrors('#{path}') }}" - + = validated_input('Email', 'order.email', type: :email) = f.fields_for :bill_address, @order.bill_address do |ba| .large-6.columns - - - path = "order.bill_address.phone" - %label{for: path} Phone - %input.medium.input-text{name: path, - "ng-model" => path, - required: true, - type: :text, - "ng-class" => "{error: '!fieldValid(\"#{path}\")'}"} - %small.error.medium.input-text{"ng-show" => "!fieldValid('#{path}')"} - = "{{ fieldErrors('#{path}') }}" + = validated_input 'Phone', 'order.bill_address.phone' = f.fields_for :bill_address, @order.bill_address do |ba| .row diff --git a/spec/helpers/checkout_helper_spec.rb b/spec/helpers/checkout_helper_spec.rb new file mode 100644 index 0000000000..a01d2e48d4 --- /dev/null +++ b/spec/helpers/checkout_helper_spec.rb @@ -0,0 +1,13 @@ +require 'spec_helper' + + +describe CheckoutHelper do + it "generates html for validated inputs" do + helper.should_receive(:render).with( + partial: "shared/validated_input", + locals: {name: "test", path: "foo", required: true, type: :email} + ) + + helper.validated_input("test", "foo", type: :email) + end +end