diff options
| author | mo <mo.khan@gmail.com> | 2017-09-07 19:29:50 -0600 |
|---|---|---|
| committer | mo <mo.khan@gmail.com> | 2017-09-07 19:29:50 -0600 |
| commit | bd64649a0f3e2afb887c62686cb904b5a880fa77 (patch) | |
| tree | 62a7a90ac9915362677225c54b8940bf9f8a7337 | |
| parent | 773f6781ef904b73a88a6b9ef8b5f95bde99be0d (diff) | |
load error messages into js for client side validation.
| -rw-r--r-- | Gemfile | 1 | ||||
| -rw-r--r-- | Gemfile.lock | 3 | ||||
| -rw-r--r-- | app/assets/javascripts/application.js | 1 | ||||
| -rw-r--r-- | app/assets/javascripts/models/session.js.coffee | 21 | ||||
| -rw-r--r-- | config/locales/en.yml | 5 | ||||
| -rw-r--r-- | spec/javascripts/models/session_spec.js.coffee | 27 |
6 files changed, 58 insertions, 0 deletions
@@ -40,6 +40,7 @@ gem 'email_validator' gem 'font-awesome-rails' gem 'bootstrap', '4.0.0.beta' gem 'local_time' +gem 'i18n-js' group :development do gem 'better_errors' diff --git a/Gemfile.lock b/Gemfile.lock index 89cbfe49..2fd4a4b1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -659,6 +659,8 @@ GEM rack socksify i18n (0.8.6) + i18n-js (3.0.1) + i18n (~> 0.6, >= 0.6.6) i18n-tasks (0.9.18) activesupport (>= 4.0.2) ast (>= 2.1.0) @@ -969,6 +971,7 @@ DEPENDENCIES foreman geoip github-markdown + i18n-js i18n-tasks jbuilder (~> 2.0) jquery-rails diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index cc3a7093..847e0f9e 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -10,6 +10,7 @@ //= require underscore //= require local-time //= require js-routes +//= require i18n/translations //= require backbone //= require backbone.marionette //= require backbone_rails_sync diff --git a/app/assets/javascripts/models/session.js.coffee b/app/assets/javascripts/models/session.js.coffee new file mode 100644 index 00000000..bfea945e --- /dev/null +++ b/app/assets/javascripts/models/session.js.coffee @@ -0,0 +1,21 @@ +class CakeSide.Models.Session extends Backbone.Model + modelKey: 'session' + defaults: + username: null + password: null + + requiredFields: ['username', 'password'] + + validate: (attributes, options) -> + errors = {} + + _.each @requiredFields, (field) => + if _.isEmpty(attributes[field]) + errors[field] = @errorFor(field, 'blank') + + return errors if _.keys(errors).length > 0 + + errorFor: (attribute, scope) -> + attributeName = I18n.t("activerecord.attributes.#{@modelKey}.#{attribute}") + error = I18n.t("activerecord.errors.messages.#{scope}") + "#{attributeName} #{error}" diff --git a/config/locales/en.yml b/config/locales/en.yml index 534c58e8..d7f9f0bb 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -20,3 +20,8 @@ en: sessions: "Sessions" users: "Users" profile_saved: Your settings have been updated successfully! + activerecord: + attributes: + session: + username: 'Email' + password: 'Password' diff --git a/spec/javascripts/models/session_spec.js.coffee b/spec/javascripts/models/session_spec.js.coffee new file mode 100644 index 00000000..d47ead7a --- /dev/null +++ b/spec/javascripts/models/session_spec.js.coffee @@ -0,0 +1,27 @@ +describe "CakeSide.Models.Session", -> + subject = null + + beforeEach -> + subject = new CakeSide.Models.Session() + + it "is invalid, when the email is missing", -> + attributeName = I18n.t("activerecord.attributes.session.username") + error = I18n.t("activerecord.errors.messages.blank") + expectedError = "#{attributeName} #{error}" + + expect(subject.isValid()).toEqual(false) + expect(subject.validationError['username']).toEqual(expectedError) + + it "is invalid, when the password is missing", -> + attributeName = I18n.t("activerecord.attributes.session.password") + error = I18n.t("activerecord.errors.messages.blank") + expectedError = "#{attributeName} #{error}" + + expect(subject.isValid()).toEqual(false) + expect(subject.validationError['password']).toEqual(expectedError) + + it "is valid", -> + subject.set('username', 'x@example.com') + subject.set('password', 'password') + expect(subject.isValid()).toEqual(true) + expect(subject.validationError).toEqual(null) |
