unimatrixzxero's posterous

RailwayJS

Validations invoked after create, save and updateAttributes, it also possible to skip validations when use save method:

obj.save({validate: false});

Validations can be called manually using isValid method of object

Normally all validations result in errors member of object, which is a hash of arrays of error messages:

obj.errors 
{
    email: [
        'can\'t be blank',
        'format is invalid'
    ],
    password: [ 'too short' ]
}

It also can raise exception, if you want, just pass throws: true as param of save method:

// be carefull, now it will throw Error object
obj.save({throws: true});

To setup validation, call it configurator on class:

Person.validatesPresenceOf('email', 'name')
Person.validatesLengthOf('password', {min: 5})

Each configurator accepts set of string arguments, and one optional last argument, which is actually specify how validator should work, of course it depends on each validator, but there's few common options:

  • if
  • unless
  • message
  • allowNull
  • allowBlank

if and unless methods is for skipping validations depending on conditions, it can be function, or string. Function invoked in context of object, where validation performed. If string passed, then one of object's member checked.

message member allows to configure error message, it can be string or object (depends on validator), see usage examples

allowNull and allowBlank is self explanatory :)

Examples of different types of validations:

length
User.validatesLengthOf 'password', min: 3, max: 10, allowNull: true
User.validatesLengthOf 'state', is: 2, allowBlank: true
user = new User validAttributes

user.password = 'qw'
test.ok not user.isValid(), 'Invalid: too short'
test.equal user.errors.password[0], 'too short'

user.password = '12345678901'
test.ok not user.isValid(), 'Invalid: too long'
test.equal user.errors.password[0], 'too long'

user.password = 'hello'
test.ok user.isValid(), 'Valid with value'
test.ok not user.errors

user.password = null
test.ok user.isValid(), 'Valid without value'
test.ok not user.errors

user.state = 'Texas'
test.ok not user.isValid(), 'Invalid state'
test.equal user.errors.state[0], 'length is wrong'

user.state = 'TX'
test.ok user.isValid(), 'Valid with value of state'
test.ok not user.errors
numericality
User.validatesNumericalityOf 'age', int: true
user = new User validAttributes

user.age = '26'
test.ok not user.isValid(), 'User is not valid: not a number'
test.equal user.errors.age[0], 'is not a number'

user.age = 26.1
test.ok not user.isValid(), 'User is not valid: not integer'
test.equal user.errors.age[0], 'is not an integer'

user.age = 26
test.ok user.isValid(), 'User valid: integer age'
test.ok not user.errors
inclusion
User.validatesInclusionOf 'gender', in: ['male', 'female']
user = new User validAttributes

user.gender = 'any'
test.ok not user.isValid()
test.equal user.errors.gender[0], 'is not included in the list'

user.gender = 'female'
test.ok user.isValid()

user.gender = 'male'
test.ok user.isValid()

user.gender = 'man'
test.ok not user.isValid()
test.equal user.errors.gender[0], 'is not included in the list'
exclusion
User.validatesExclusionOf 'domain', in: ['www', 'admin']
user = new User validAttributes

user.domain = 'www'
test.ok not user.isValid()
test.equal user.errors.domain[0], 'is reserved'

user.domain = 'my'
test.ok user.isValid()
format
User.validatesFormatOf 'email', with: /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
user = new User validAttributes

user.email = 'invalid email'
test.ok not user.isValid()

user.email = 'valid@email.tld'
test.ok user.isValid()

re:think

I love it when companies start to re:think things they have been doing for ages for the sake of doing what they have always been doing because it's easy. Essentially fighting their lizard brains with the end benefit of saving costs. Which also usually goes long ways to help the environment in the process.

Take a look a Puma's new shoe "box" design:

Flash Ghromirum

"Just when we thought that Google was the champion of HTML5 they turn around and partner with Adobe on Flash to ensure that the web remains a mess of proprietary brain damage." — Daniel Hansen
http://blog.chromium.org/2010/03/bringing-improved-support-for-adobe.html

Shazamを使ってDaft PunkのAround The Worldという曲を見つけました。


Shazamを使ってDaft PunkAround The Worldを見つけたので、この曲をあなたに教えてあげようと思いました。
iPhoneまたはiPod touchでShazamを利用している場合は、ここをクリックして、タグリストにこの曲を加えることができます。iTunes

Greetz,

Sam Figueroa 

「予知」consider the environment before printing this mail.  

Mein Bericht zum Barcamp Nürnberg 2

Barcamp Nürnberg 2

Um einiges verspätet — besser spät als nie — mein Beitrag zum Barcamp Nürnberg 2. Für mich war es das erste Barcamp in Nürnberg. Und alleine die Tatsache als alter Ex-Nürnberger mal wieder in der Stadt zu sein hat mich schon freudig gestimmt. Die lange Fahrt von Münster aus war also halb so wild. Zudem war ich nicht allein unterwegs, @pfandtasse und @Tamer_  waren mit dabei. 

Um es mal vorweg zu nehmen mir hat das #bcnue2 gut gefallen. Es war der Einstig ins Barcamp Jahr für mich — und wenn das so weiter geht wird 2010 der Knaller. Es war eine sehr spannende Mischung aus Bekannten und neuen Gesichtern — frisch Fleisch ;-). Zu den alten Barcamp-Hasen gesellten sich Menschen aus allen Richtungen. Die Mischung machte für mich einiges an der Stimmung aus. Zudem dadurch auch einiges an untechnischem Inhalt in die Sessions einfloss.

Und da wären wir auch schon beim Hauptthema, den Sessions. Das #bcnue2 hatte eines meiner Lieblingsprobleme eines Barcamps. Platzmangel auf den Sessionboards. Für mich fast das beste Qualitätsmerkmal eines Barcamps. So viele interessante Angebote und Interessenten das man in Bedrängnis kommt — und das ist etwas gutes. 
Frei nach dem Sinne der Selbstorganisation wurde kurzerhand noch die Lobby und die Lounge als Session-Raum hinzugenommen, Themen ähnliche Sessions zum Kolaborationsprojekt erklärt oder Inhalte auf die Late-Night-Sessions verlegt.  Ja richtig Late-Night, aber dazu später mehr. 

Meine Lieblings-Sessions des ersten Tags waren die der OP-Schwester (Sorry I forgot your name), in der offene Fragen zum OP-Alltag beantwortet wurden, und die Session zur Verbesserung von Service von @adamstjohn und Partner gehalten wurde. Die haben eine sehr belebte Mit-Mach-Session veranstaltet mit einer "live bar chart" mit einem super interessanten Ansatz zur Übertragung von Erfahrungen aus dem Theater in die Gestaltung von Dienstleistungen.  Dich auf war die Session von @jweiss zum Thema No-SQL und besonders dabei das Thema CouchDB im Einsatz mit Rails. 

Und nun zu den Late-Night-Sessions. Eine echte Neuerung für mich was Barcamps angeht — die mir sehr gut gefallen hat. Die Sessions waren vom Inhalt meist locker und spassig. Was dem kein Abbruch tat, schließlich will man auf einem Barcamp ja auch nicht nur neues lernen sondern auch eine gute Zeit verbringen. Es gab Sessions mit Warewolf, PowerPoint-Karaoke, und Chatroulette — alle sehr witzig. Auch die kleine Fotografenrunde die sich zu einer Session mit kleinem Erfahrungsaustausch traff fand ich für mich persönlich sehr schön. Doch im Ganzen haben die Late-Night-Sessions auch für das Barcamp etwas sehr schönes bewirkt.

Jan gives me the stare

Bei vielen vergangenen Barcamps habe ich erlebt das nach 19 Uhr alle Teilnehmer in alle Himmelsrichtungen verstreut in kleinen Gruppen zersplittert oder allein das weite suchten. Hier war das nicht der Fall. Selbst um 02:00 Uhr waren noch so einige der Teilnehmer anwesend und gut gelaunt dabei. So hatte man viel Zeit sich auszutauschen und Bekanntschaften zu vertiefen. Eine sehr schöne Idee von den Organisatoren die gut aufgegangen ist. Danke.
Sehr schön fand ich auch die gestellte Übernachtungsmöglichkeit vor Ort im Südwestpark. Es hat was Besonders zu den zu gehören, die als aller ersten Morgens dabei sind und dann als letzte in die Puschen springen — und die ersparten Kosten eines Hotels mal ganz außen vor zu lassen. 

Am zweiten Tag war die Fülle an Sessions ähnlich dem des Vortages. Kein üblicher Barcamp Sonntag in meinen Augen. Nicht das ich damit sagen will Sonntags kann man generell vergessen, aber es ist oft schon so erlebt worden das sich Sonntagsmorgens das Brett sich einfach nicht füllen wollte. 
Gefallen haben mir die Kommunikations-Session und die Kaffee-Session von @pfandtasse. Obwohl ich ihn schon sehr lange kenne und Sonntagmorgen.com seit der Entstehung kenne habe ich trotzdem wieder viel Neues über Kaffee — und was da alles mit dran hängt — gelernt. 

Hier möchte ich auch nicht unerwähnt lassen das die Nürnberger es wussten uns mit vielen leckeren Speisen und Getränken bei Kräften zu halten. Vielen Dank an alle Sponsoren des Barcamps Nürnberg 2 die dieses ermöglicht haben. Und auch vielen Dank an die Organisationsatoren. Wenn ihr vor habt ein drittes Barcamp in Nürnberg zu veranstalten bin ich gerne nach Möglichkeit dabei. 

 

Hier noch einige meiner Fotos vom Barcamp Nürnberg 2

Magnificent Video

I love this clip. Please, do enjoy it fullscreen.

12
To Posterous, Love Metalab