Skip to content
This repository has been archived by the owner on Jan 2, 2018. It is now read-only.

Commit

Permalink
Merge branch 'master' of git://github.com/pvelder/merb-book
Browse files Browse the repository at this point in the history
  dutch 2-getting-started/4-mvc.markdown
  dutch 2-getting-started/4-mvc.markdown
  Getting started until section 3-project-structure.markdown
  improving Dutch sentences
  improving Dutch sentences
  adding dutch translation 1-introduction
  Adding Dutch to the translations. TOC and Front Matter
  Had to 'thor merb:gem:redeploy' to avoid bus error when launching bin/merb
  • Loading branch information
mattetti committed Dec 8, 2008
2 parents 50545cb + bc92fe5 commit 9e13713
Show file tree
Hide file tree
Showing 48 changed files with 535 additions and 73 deletions.
3 changes: 3 additions & 0 deletions book-content/nl/0-front-matter/0-foreword.markdown
@@ -0,0 +1,3 @@
## Voorwoord

Door Yehuda Katz, Merb lead developer
21 changes: 21 additions & 0 deletions book-content/nl/0-front-matter/1-preface.markdown
@@ -0,0 +1,21 @@
# Voorwoord

Terug in de tijd, toen er nog geen Merb stack was, geen locked API, geen georganizeerde documentation en de code base regelmatig wijzigde besloot [Matthew Ford](http://github.com/deimos1986) te werken aan een open source book met een eenvoudig doel: moedige Rubyists te helpen die wilden leven "on the edge" en die besloten om Merb, DataMapper en RSpec een kans te geven.

Sindsdien, is Merb heel wat volwassener geworden. Starten met Merb is heel wat makkelijker geworden en Merb besloot om een **opinionated** versie te brengen van de stack Merb, DataMapper en RSpec!

Als een vroege Merb developer, genoot ik er van gebruik te kunnen maken van Matt's boek en heb ik zelfs bijgedragen tot de vroege versie van dit boek. Sindsdien maakte ik deel uit van het Merb team en samen met de rest van het team, concentreerde ik me op de grote 1.0 release die we succesvol brachten in twee stappen, de eerste Release Candidate gedurende [MerbCamp 2008](http://merbcamp.com) en de finale 1.0 gedurende [RubyConf 2008](http://rubyconf.org).

Een knap framework hebben is fantastisch, maar zoals Jason Seifer van [RailsEnvy.com](http://railsenvy.com) me vertelde nadat 1.0 was uitgebracht:

> Merb heeft ongelofelijke code documentatie, de code is zo makkelijk te lezen, maar de gebruiksdocumentatie was onvoldoende.
Jason had gelijk, onze gebruiksdocumentatie was niet zo fantastisch. Natuurlijk hebben we de [wiki](http://wiki.merbivore.com) en een aantal boeken beschikbaar, maar ik moet zeggen dat - lettend op andere frameworks zoals [Django](http://www.djangobook.com/) - het hele team wist dat er iets moest gebeuren.

Ford's pogingen werden vroeg opgemerkt en hij werd gevraagd een boek te schrijven [Merb book for Apress](http://www.apress.com/book/view/9781430218234). Je kan je allicht wel voorstellen, dat het moeilijk werd voor Matt een boek te schrijven voor een uitgever in combinatie met, een voltijdse job, bijdragen aan verschillende Open Source projecten, bij te blijven met Merb en er uiteindelijk voor te zorgen dat het open source book dat hij een tijd terug maakte up to date bleef. Bovendien, wijzigden een aantal dingen voor 1.0 en een groot deel van de bestaande inhoud vereiste een volledig herschrijven.

Daarom besloot het Merb team dat het tijd was om mee te werken en om de gemeenschap te betrekken bij een gecentralizeerd, gebruikers georienteerd boek.

Ik ben echt blij dat het Merb team besloot verantwoordelijkheid op te nemen voor dit boek en dat we er zullen voor zorgen dat het goed georganizeerd blijft, up to date en relevant. Nochthans kan dit boek, net zoals Merb, niet groeien en evolueren zonder de hulp van de gemeenschap. Dus, a.u.b., stuur ons correcties, nieuwe voorbeelden, nieuwe hoofdstukken zodat dit boek de gemeenschap kan helpen als geheel.

[Matt Aimonetti](http://merbist.com), Merb Core team member
15 changes: 15 additions & 0 deletions book-content/nl/0-front-matter/2-contributors.markdown
@@ -0,0 +1,15 @@
# Mensen die hebben bijgedragen

Zonder de hulp van volgende mensen zou dit boek niet mogelijk geweest zijn. Dank jullie allemaal!

**In alphabetische volgorde:**

* [Matt Aimonetti](http://merbist.com)
* [Fabio Akita](http://akitaonrails.com)
* [Dale Campbell](http://corrupt.save-state.net/)
* [Matthew Ford](http://github.com/deimos1986)
* [Mathieu Fosse](http://blog.kawooa.org)
* [Markus Prinz](http://blog.nuclearsquid.com/)
* [Yehuda Katz](http://yehudakatz.com)
* [Makoto Kuwata](http://www.kuwata-lab.com/)
* [Foy Savas](http://foysavas.com/)
123 changes: 123 additions & 0 deletions book-content/nl/1-introduction/1-ruby.markdown
@@ -0,0 +1,123 @@
# Ruby

* This will become a table of contents (this text will be scraped).
{:toc}

![Ruby](/images/ruby-header.gif){: .no-border}

**Reference website:** [http://ruby-lang.org](http://ruby-lang.org){: .reference}

> Coderen in Ruby maakt me gelukkig omdat het een van de kortste paden is tussen mijn hersenen en een computer. Als ik aan iets denk, kan ik het bondig uitdrukken en meestal ook op een vrij elegante wijze in Ruby zonder de vreemde kronkels die nodig zijn in de meeste andere talen.
> - [Dave Thomas, auteur van "Programming Ruby"](http://pragdave.pragprog.com/){: .quote-author}
{: cite=http://www.infoq.com/interviews/ruby-rails-dave-thomas .lead-quote}

Het zou misdadig zijn te over over het Merb framework te beginnen spreken zonder het eerst te hebben over de echte reden waarom Merb zo flexibel, krachtig, en snel is: **Ruby**.

## Oorsprong ##{: #origin}
![Yukihiro Matsumoto](/images/Yukihiro_Matsumoto.jpg){: .left}
Ruby is een [Open Source](http://en.wikipedia.org/wiki/Open_Source), [dynamische](http://en.wikipedia.org/wiki/Dynamic), [reflectieve](http://en.wikipedia.org/wiki/Reflection_%28computer_science%29), algemeen-doel, [object-georienteerde](http://en.wikipedia.org/wiki/Object-oriented_programming) [programmeertaal](http://en.wikipedia.org/wiki/Programming_language) geschreven midden de jaren 90 door de japanse [software architect](http://en.wikipedia.org/wiki/Software_architect) [Yukihiro "Matz" Matsumoto-san ( まつもとゆきひろ)](http://en.wikipedia.org/wiki/Yukihiro_Matsumoto).

Ruby focust op eenvoud en productiviteit. Ruby heeft een elegante syntax die natuurlijk leest en eenvoudig is om te schrijven.

Matz ontleende ideeën en uitdrukkingen van enkele van zijn favoriete programmeertalen ([Perl](http://en.wikipedia.org/wiki/Perl), [Smalltalk](http://en.wikipedia.org/wiki/Smalltalk), [Eiffel](http://en.wikipedia.org/wiki/Eiffel_%28programming_language%29), [Ada](http://en.wikipedia.org/wiki/Ada_%28programming_language%29), en [Lisp](http://en.wikipedia.org/wiki/Lisp_%28programming_language%29)) tot een nieuwe taal die [functionele programmatie](http://en.wikipedia.org/wiki/Functional_programming) balanceert met [imperatieve programmatie](http://en.wikipedia.org/wiki/Imperative_programming).

Het resultaat is een aantrekkelijke taal die heel natuurlijk aanvoelt. In de Ruby gemeenschap verwijzen we vaak naar de term POLS (Principle of Least Surprise). Het concept achter dit principe is heel eenvoudig: als je een minimum van Ruby kent, ben je niet verrast door de manier waarop de taal zich gedraagt.

## Adoptie ##{: #adoption}
Volgens de [TIOBE index](http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html), zit Ruby in de top 10 van programmeertalen die wereldwijd wordt gebruikt. Een groot deel van de groei is toe te schrijven aan de populariteit van de software die is geschreven in Ruby, in het bijzonder het [Ruby on Rails web framework](http://rubyonrails.org).

## Sleutelelementen van de taal ##{: #key-elements}

> Ik wou een scripting-taal die krachtiger was dan Perl, en meer dan de object-georiënteerde Python.
> - Matz
{: cite=http://www.linuxdevcenter.com/pub/a/linux/2001/11/29/ruby.html}

* Alles is een object
* Alles is uitbreidbaar en kan gewijzigd worden
* Hoge code leesbaarheid

Voor meer informatie over de taal Ruby, bekijk de [Officiele Ruby programmeertaal website](http://www.ruby-lang.org/en/about).

## Code voorbeelden ##{: #code-examples}

**Print de string "Hello world" 10 keer:**

10.times do
print "Hello world!"
end
# => "Hello world!Hello world!Hello world!Hello world!Hello world!Hello, world!
Hello world!Hello world!Hello world!Hello world!"
{:lang=ruby html_use_syntax=true}

**Conditioneel statement:**

access_allowed = true if DateTime.now > DateTime.parse("2008-12-01")
{:lang=ruby html_use_syntax=true}

overeenkomstig met:

if DateTime.now > DateTime.parse("2008-12-01")
access_allowed = true
end
{:lang=ruby html_use_syntax=true}

**Ternary operator:**

age_classification = age > 12 ? "adult" : "child"
{:lang=ruby html_use_syntax=true}

overeenkomstig met:

if age > 12
age_classification = "adult"
else
age_classification = "child"
end
{:lang=ruby html_use_syntax=true}

**Array:**

drinks = ["Coke", "Pepsi", "Orangina", "DrPepper"]
# => ["Coke", "Pepsi", "Orangina", "DrPepper"]
# Access the Array instance
drinks[0] # => "Coke"
drinks.first # => "Coke"
drinks.last # => "DrPepper"
drinks[3] # => "DrPepper"
drinks[-1] # => "DrPepper"
drinks[drinks.length - 1] # => "DrPepper"
{:lang=ruby html_use_syntax=true}


**Kijk of een item bestaat in een Array instance:**

haystack = ["Mac", "NT", "Irix", "Linux"]
needle = "Windows"
haystack.include?(needle) # => false
{:lang=ruby html_use_syntax=true}

**Duw een item in een Array instance:**

haystack = ["Mac", "NT", "Irix", "Linux"]
needle = "Windows"
haystack.push(needle)
# Or do it like this:
haystack << needle
{:lang=ruby html_use_syntax=true}

**Definieer een methode:**

def greet_visitor(visitor_name)
"Hi #{visitor_name}!"
end
{:lang=ruby html_use_syntax=true}

## Merb en Ruby ##{: #merb-and-ruby}

Merb probeert om zo dicht mogelijk bij de Ruby taal zelf te blijven. Daarom is het belangrijk te begrijpen wat wordt verstaan al de "Ruby Way".

Gedurende RubyConf 2008, maakte Matz volgende opmerking over Merb:

> Merb heeft een mooie toekomst voor de mensen die niet tevreden zijn met de vaste manieren van Rails. Ik denk dat Merb gebruikers meer vrijheid zal geven in een Ruby-ish manier van programmeren
> - [Matz, auteur van de Ruby programming language](http://ruby-lang.org/){: .quote-author}
{: cite=http://merbist.com/2008/11/09/merb-1-0-released/}
1 change: 1 addition & 0 deletions book-content/nl/1-introduction/2-merb.markdown
@@ -0,0 +1 @@
## Merb
1 change: 1 addition & 0 deletions book-content/nl/1-introduction/3-datamapper.markdown
@@ -0,0 +1 @@
## DataMapper
1 change: 1 addition & 0 deletions book-content/nl/1-introduction/4-rspec.markdown
@@ -0,0 +1 @@
## RSpec
40 changes: 40 additions & 0 deletions book-content/nl/2-getting-started/1-install-instructions.markdown
@@ -0,0 +1,40 @@
# Aan de slag
Om het framework te gebruiken moeten we eerste Merb installeren. Maar, voor je Merb kan installeren moet je een C compiler, Ruby en [RubyGems](http://www.rubygems.org/) installeren en een database (indien je je modellen wil persisteren).

## OS X

### Vereisten
Je zal XCode (aka Developer Tools) moeten installeren van de Mac OS X DVD of downloaden van de [Apple developer website](http://developer.apple.com/technology/xcode.html).

### Ruby & RubyGems
Heb je OS X 10.5 (Leopard), dan heb je hoogstwaarschijnlijk ook reeds een installatie van Ruby.

### Merb
$ sudo gem install merb


## Linux

### Vereisten

$ sudo apt-get install build-essential libxslt-dev libsqlite3-0 libsqlite3-dev

### Ruby & RubyGems

$ sudo apt-get ruby ruby1.8-dev rdoc irb libyaml-ruby libzlib-ruby ri libopenssl-ruby \
libxml-ruby

$ wget "http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz"
$ tar -xvzf rubygems-1.3.1.tgz
$ rm rubygems-1.3.1.tgz
$ cd rubygems-1.3.1
$ sudo ruby setup.rb
$ cd ..
$ rm -r rubygems-1.3.1
$ sudo ln -s /usr/bin/gem1.8 /usr/bin/gem
$ sudo gem update --system


### Merb

$ sudo gem install merb
@@ -0,0 +1,63 @@
# Genereer een applicatie
Merb komt met een generator (<tt>merb-gen</tt>) voor het aanmaken van Merb applicaties.
De generator kan verschillende types van Merb applicaties gernereren; om de beschikbare generator opties te zien, typ je

$ merb-gen -h

Laat ons het nu even houden op de verschillende types van Merb applicaties die kunnen gegenereerd worden.

## Types
Merb kan gebruikt worden voor alles varierend van zeer kleine, snelle, enkel-bestand applicaties tot grote, complexe web-diensten.
Verschillende applicatie-structuren kunnen worden gegenereerd, afhankelijk van de noden van de developer.

De verschillende applicatie-structuren die je kan genereren zijn <tt>app</tt>, <tt>core</tt>, <tt>flat</tt>, en <tt>very_flat</tt>.

### App
Dit is de opinionated Merb stack.
Dit genereert een volledige applicatie directory structuur met een volledige set van de configuratiebestanden.
Dit voegt ook een <tt>config/dependancies.rb</tt> bestand die alles bevat van <tt>merb-more</tt> en <tt>DataMapper</tt>.

$ merb-gen app my-application

Deze applicatie heeft alles wat nodig is om te starten met het bouwen van een eerste klas web-applicatie, dit is het meest vergelijkbaar met de standaard structuur van Rails.
Een groot deel van dit boek zal verder gaan in de veronderstelling dat u bent gestart op deze manier.

De applicatie kan worden opgestart door <tt>merb</tt> te runnen in de root directory van de applicatie.
Dit commando start Merb op de default poort 4000.
Om je applicatie in actie te zien, open je [http://localhost:4000/](http://localhost:4000/).

### Core
Core zal de volledige applicatie directory structuur genereren met een volledige set van de configuratiebestanden.
In tegenstelling met <tt>app</tt> -- de opinionated full stack -- worden geen dependencies toegevoegd.

$ merb-gen core my-application

Start de applicatie door <tt>merb</tt> te starten de root directory van de applicatie.
Merk op dat, in tegenstelling met de andere drie gegenereerde apps, er geen default inhoud is in core.
Het bezoeken van [http://localhost:4000/](http://localhost:4000/) zal een fout tonen tot de inhoud en routing zijn toegevoegd.

### Flat
Een flat applicatie bevat alle logica in een enkele file, maar heeft verschillende bestanden voor configuratie en een eigen view directory.

$ merb-gen flat my-application

Flat applicatiess worden opgestart, net als de andere gegenereerde merb applicaties, door <tt>merb</tt> te starten in root directory van de applicatie.
Per default, worden alle methodes in de <tt>my-application</tt> class behandeld als acties met <tt>my-application</tt> als de controller. bvb : [http://localhost:4000/my-application/foo](http://localhost:4000/my-application/foo)

Deze zal <tt>MyApplication#foo</tt> oproepen en rendert de output van de <tt>foo.html.*</tt> template.

### Very Flat
Een Very Flat applicatie is vergelijkbaar met andere Ruby micro frameworks, waarbij de volledige applicatie zich in een enkel bestand bevindt.

$ merb-gen very_flat my-applcation

Om de very flat applicatie te starten, start je Merb met het volgende commando (in je applicatie directory):

$ merb -I my-applcation.rb

Dit start Merb op de default port (4000). Om je applicatie in actie zien, bezoek je [http://localhost:4000/](http://localhost:4000/).





92 changes: 92 additions & 0 deletions book-content/nl/2-getting-started/3-project-structure.markdown
@@ -0,0 +1,92 @@
# Project structuur
De typische structuur van een nieuwe Merb app (gegenereerd met <tt>merb-gen app</tt>) ziet er ongeveer uit als volgt:

Application directory (Merb.root)
- app
- controllers
- helpers
- models
- views
- exceptions
- layout
- autotest
- config
- environments
- doc
- gems
- merb
- public
- images
- javascripts
- stylesheets
- spec
- tasks

Hier volgt een kort beschrijving van elke directory en zijn doel.

## app
In deze directory zal je het grootste deel van je tijd doorbrengen, omdat het de "kern" van je Merb applicatie bevat.

### controllers
Al uw applicatie controllers zijn hier opgeslagen (geen verrassing aldaar).
Controllers zijn typisch genoemd in meervoudsvorm.
Bijvoorbeeld, indien de een "<tt>Page</tt>" model hebt, zal de controller file hoogstwaarschijnlijk <tt>pages.rb</tt> worden genoemd.
Dit is eenvoudig een conventie, maar je bent vrij je controllers te noemen zoals je zelf wil.
Zie de [controllers](/getting-started/controllers) sectie voor meer informatie.

### models
Deze directory bevat je model klassen.
Deze klassen dienen gewoonlijk voor je [ORM](http://en.wikipedia.org/wiki/Object-relational_mapping)s en geven object-georienteerde toegang tot je database tabellen.
Zie de [modellen](/getting-started/models) sectie voor meer info.

### views
Alle templates worden hier geplaatst.
Standaard bevat deze directory <tt>exceptions</tt> en <tt>layout</tt> subdirectories.
De <tt>exceptions</tt> directory bevat templates die over het algemeen te maken hebben met HTTP errors.
Bijvoorbeeld, een nieuwe Merb app bevat een <tt>not_found.html.{erb,haml}</tt> bestand, die overeenkomt met de 404 HTTP status code.
De <tt>layout</tt> directory bevat de algemene applicatie templates, waarin actie templates kunnen worden gerenderd.
De standaard application layout file noemt <tt>application.html.{erb,haml}</tt>.
Zie de [views](/getting-started/views) sectie voor meer informatie.

## config
Yep, je raadt het al.
De Merb configuratie-bestanden bevinden zich hier.
De <tt>router.rb</tt> file bevat je applicatie URL [routes](/getting-started/router), die de structuur, volgorde en verschijning van je URLs defineert.
Een andere belangrijke file, <tt>init.rb</tt>, behandeld de basisch Merb configuratie.
Hier configureerd je de ORM, de template engine, en het test framework.
Je kan ook custom configuraties toevoegen aan de <tt>Merb::BootLoader</tt> in zijn <tt>before_app_loads</tt> en <tt>after_app_loads</tt> blocken.
Een ander belangrijk bestand, <tt>dependencies.rb</tt>, is waar je de applicatie afhankelijkheden kan definiëren: andere libraries of gems die je application vereist.
Elke dependency in deze file zal worden geladen bij het opstarten van je Merb app.

### environments
Hier bevinden zich alle omgevings specifieke configuratie bestanden.
Hier bevinden zich een aantal standaard (pure Ruby) configuratie bestanden; elk een komt overeen met een specifieke Merb omgeving (development, production, etc.).

## gems
Wanneer je klaar bent om je applicatie te [deployen](/deployment), is het aanbevolen dat je al je afhankelijkheden [bundelt](/deployment/bundle) binnen de applicatie directory.
De <tt>gems</tt> directory is waar deze verpakte afhankelijkheden worden geplaatst.
Tijdens het opstarten van de Merb applicatie, zal elke gem in deze directory, voorrang hebben op de system-wide gem.

## public
Hier bevinden zich de "statische" bestanden, zoals de <tt>favicon.ico</tt> en <tt>robots.txt</tt> files.

### images
Alle afbeeldingen die je templates nodig hebben, bevinden zich hier.

### javascripts
In een standaard "Merb stack", bevat deze directory twee bestanden: <tt>application.js</tt> en <tt>jquery.js</tt>.
Standaard bevat de Merb stack het mooie [jQuery](http://jquery.com/) JavaScript framework.

Indien je relatief kleine hoeveelheden applicatie-speciefieke JavaScript code hebt, zou je deze in de <tt>application.js</tt> file moeten zetten.
Als dit onwerkbaar blijkt, kan je hulp bestanden toevoegen waar nodig.

### stylesheets
In overeenstemming met het principe van de "separation of concerns", moeten visuele stijlen in stylesheet worden geplaatst.
Wanneer je een Merb app genereert, wordt een stylesheet bestand aangemaakt (met de naam <tt>master.css</tt>), dat kan worden aangepast zoals je wenst.

## spec
Gebruik je [rspec](http://rspec.info/) als je [test](/testing-your-application) framework, dan bevat deze directory je testen.
Standaard, bevat deze directory twee bestanden: een lege <tt>spec.opts</tt> file, die je kan gebruiken om command-line argumenten door te geven naar rspec (toevoegen van kleur output, enz.) en <tt>spec_helper.rb</tt>, waar je onder meer de actuele spec runner kan aanpassen .

## tasks
Deze directory bevat Merb [thor](http://wiki.merbivore.com/faqs/thor) taken.

0 comments on commit 9e13713

Please sign in to comment.