Commit bd64649a

mo <mo.khan@gmail.com>
2017-09-08 01:29:50
load error messages into js for client side validation.
1 parent 773f678
Changed files (6)
app
assets
config
locales
spec
javascripts
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}"
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
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'
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)
Gemfile
@@ -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'
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