Wer A Sagt

Nuetzliches fuer Webentwickler

Rails 3.1, Sproutcore und Jasmine

| 3 Kommentare

Im Bereich Webprogrammierung ist zur Zeit das JavaScript Umfeld sehr interessant und gewinnt mehr und mehr an Fahrt. Nach den DOM Libraries wie JQuery und Prototype entstehen nun JavaScript MVC Frameworks wie
Backbone und Sproutcore, die das DOM wegabstrahieren und es ermöglichen auch in JavaScript im gewohnten MVC Paradigma zu
programmieren.
Da es ab Sproutcore 2.0 möglich ist, Sproutcore Views als Schnipsel in HTML einzubetten habe ich mir angesehen, was nötig ist um Sproutcore in eine Rails 3.1 Anwendung zu integrieren.
Als Basis habe ich den Tutorial Code für eine Todo Anwendung genommen.

Compass und SASS

Damit das richtige CSS generiert wird fügt muß das compass Gem hinzugefügt werden. Bisher ist dafür noch eine spezielle Version für Rails 3.1 nötig.

Gemfile
gem 'compass', :git => 'https://github.com/chriseppstein/compass.git',:branch => 'rails31'

Nun bindet man noch ein sass-rails Gem ein:

Gemfile
gem 'sass-rails', :git => 'https://github.com/rails/sass-rails.git'

Update: Inzwischen ist es nicht mehr nötig die Git repositories anzugeben. Ein “gem ‘compass’” und “gem ‘sass’” reichen aus.

Die Compass Stylesheets müssen noch dem Sass Ladepfad hinzuzufügt werden.
Für sass-rails macht man dies in config/application.rb:

config/application.rb
config.sass.load_paths ||= []
config.sass.load_paths << "#{Gem.loaded_specs['compass'].full_gem_path}/frameworks/compass/stylesheets"

Im Rails Wurzelverzeichnis gibt man nun:

compass init rails .

ein, was die Datei config/compass.rb erzeugt.

Sproutcore.js einbinden

Für Sproutcore gibt es das Gem sproutcore-rails, das ähnlich wie jquery-rails, Sproutcore.js in einem Gem zur Verfügung stellt.
Es wird dann nur ein

//= require sproutcore

in app/assets/javascripts/application.js benötigt.
Möchte man den Javascript Code jedoch noch testen sollte man sich sproutcore.js seperat in das assets/javascripts Verzeichnis kopieren.
Nun ist Sproutcore in die Rails Anwendung integriert und man kann beginnen Sproutcore zu verwenden.

Jasmine

Zum Testen der Sproutcore Anwendung habe ich Jasmine verwendet, das in der Railscasts Folge 261 vorgestellt wurde. Damit Jasmine mit Rails 3.1 funktioniert, müssen lediglich die JavaScript-Dateien in spec/javascripts/support/jasmine.yml angegeben werden.

spec/javascripts/support/jasmine.yml
src_files:
- app/assets/javascripts/sproutcore-2.0.a.3.js
- app/assets/javascripts/todos.js

Nun kann man mit den Tests beginnen:

spec/javascripts/todos_spec.js
describe("Todos", function() {
  it("should add a todo element", function(){
    var todosController=Todos.todosController;
    todosController.createTodo("new Todo");
    expect(todosController.content.objectAt(0).title).toEqual("new Todo");
  });
});
  • Pingback: Sproutcore 2.0 und Sinatra | Wer A Sagt

  • Yves

    Vieleln Dank für Deinen Artikel.
    Welche Rolle spielt denn Compass in diesem Setup. Ist das nicht unnötig eigentlich?

  • http://twitter.com/rainerblessing Rainer Blessing

    Ich wollte das Sproutcore Todos Tutorial (https://github.com/sproutcore/todos) in einer Rails Anwendung ausprobieren und dort werden im CSS Funktionen von Compass verwendet. Ohne Compass muesste man nur die Sproutcore Library in das Assetsverzeichnis kopieren. Das Setup wuerde dadurch recht einfach.
    Wenn man Funktionen von Compass nicht nutzen moechte braucht man es natuerlich nicht.

Social Widgets powered by AB-WebLog.com.