diff --git a/.gitignore b/.gitignore index 864b11d..9679a17 100755 --- a/.gitignore +++ b/.gitignore @@ -15,8 +15,8 @@ /log/*.log /tmp /config/initializers/devise.rb - -/console +/app/doc/* +console /server /public/uploads/ -*~ \ No newline at end of file + diff --git a/.rspec b/.rspec new file mode 100644 index 0000000..4e1e0d2 --- /dev/null +++ b/.rspec @@ -0,0 +1 @@ +--color diff --git a/Gemfile b/Gemfile index 3fb298c..7fce64e 100755 --- a/Gemfile +++ b/Gemfile @@ -70,4 +70,8 @@ gem 'haml' #gem 'gollum' gem 'awesome_nested_set' gem 'annotate', ">=2.5.0" -gem 'carrierwave' \ No newline at end of file +gem 'carrierwave' +group :development, :test do +gem 'factory_girl_rails' +gem 'rspec-rails' +end diff --git a/Gemfile.lock b/Gemfile.lock index 9508763..2f98cfb 100755 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -56,9 +56,15 @@ GEM orm_adapter (~> 0.1) railties (~> 3.1) warden (~> 1.2.1) + diff-lcs (1.2.4) erubis (2.7.0) execjs (1.4.0) multi_json (~> 1.0) + factory_girl (4.2.0) + activesupport (>= 3.0.0) + factory_girl_rails (4.2.1) + factory_girl (~> 4.2.0) + railties (>= 3.0.0) formtastic (2.2.1) actionpack (>= 3.0) formtastic-bootstrap (2.0.0) @@ -123,6 +129,17 @@ GEM json (~> 1.4) ref (1.0.2) rolify (3.2.0) + rspec-core (2.14.4) + rspec-expectations (2.14.0) + diff-lcs (>= 1.1.3, < 2.0) + rspec-mocks (2.14.1) + rspec-rails (2.14.0) + actionpack (>= 3.0) + activesupport (>= 3.0) + railties (>= 3.0) + rspec-core (~> 2.14.0) + rspec-expectations (~> 2.14.0) + rspec-mocks (~> 2.14.0) sass (3.2.5) sass-rails (3.2.6) railties (~> 3.2.0) @@ -165,6 +182,7 @@ DEPENDENCIES coffee-rails (~> 3.2.1) devise (~> 2.2.3) execjs (~> 1.4.0) + factory_girl_rails formtastic (~> 2.2.1) formtastic-bootstrap git @@ -175,6 +193,7 @@ DEPENDENCIES paperclip (~> 3.4.0) rails (= 3.2.9) rolify + rspec-rails sass-rails (~> 3.2.3) sqlite3 therubyracer diff --git a/app/controllers/beispiele_controller.rb b/app/controllers/beispiele_controller.rb index 48b7856..ac79ec3 100755 --- a/app/controllers/beispiele_controller.rb +++ b/app/controllers/beispiele_controller.rb @@ -2,6 +2,7 @@ class BeispieleController < ApplicationController # GET /beispiele # GET /beispiele.json def index + @lva = params([:lva]) @beispiele = Beispiel.all respond_to do |format| @@ -13,6 +14,7 @@ class BeispieleController < ApplicationController # GET /beispiele/1 # GET /beispiele/1.json def show + @lva = lva unless lva.nil? @beispiel = Beispiel.find(params[:id]) respond_to do |format| @@ -26,7 +28,7 @@ class BeispieleController < ApplicationController def new @beispiel = Beispiel.new @beispiel.lva = Lva.find(params[:lva_id]) - + respond_to do |format| format.html # new.html.erb format.json { render json: @beispiel } diff --git a/app/controllers/lvas_controller.rb b/app/controllers/lvas_controller.rb index 974b089..7b737dd 100755 --- a/app/controllers/lvas_controller.rb +++ b/app/controllers/lvas_controller.rb @@ -3,23 +3,36 @@ class LvasController < ApplicationController before_filter {@toolbar_elements =[]} def index @lvas = Lva.all - + @toolbar_elements=[{:hicon=>'icon-plus-sign',:text =>I18n.t('lva.add'),:path => new_lva_path}] + @tb=[{:hicon=>'icon-list', :text=>I18n.t("studien.allestudien"),:path=>studien_path}, + {:hicon=>'icon-list', :text=>I18n.t("modul.list"),:path=>moduls_path}, + {:hicon=>'icon-list', :text=>I18n.t("lva.list"),:path=>lvas_path}] end # GET /lvas/1 def show @lva = Lva.find_by_id(params[:id]) - @toolbar_elements<<{:icon=>:pencil,:text =>I18n.t('common.edit'),:path => edit_lva_path(@lva)} + + @toolbar_elements<<{:hicon=>'icon-plus-sign', :icon=>:plus, :text => "Neues Beispiel", :path=> new_beispiel_path(:lva_id =>@lva.id)} + @toolbar_elements<<{:hicon=>'icon-pencil', :icon=>:pencil,:text =>I18n.t('common.edit'),:path => edit_lva_path(@lva)} + @topbar_elements =[{:hicon=>'icon-list', :text=>I18n.t("lva.list"), :path=>lvas_path}] + for m in @lva.modul + @topbar_elements << {:newline=>true} + @topbar_elements << {:text=> '' + m.name + '', :path=>modul_path(m)} + for mg in m.modulgruppen + @topbar_elements << {:text => mg.studium.name + ' (' + mg.name + ')', :path=>studium_path(mg.studium)} + end + end end # GET /lvas/new # GET /lvas/new.json def new @lva = Lva.new - modul=Modul.find(params[:modul_id]) - @lva.modul<'icon-plus-sign', :text=>I18n.t("modul.add"), :path=>new_modul_path}] + @topbar_elements=[{:hicon=>'icon-list', :text=>I18n.t("studien.allestudien"),:path=>studien_path}] + @topbar_elements<<{:hicon=>'icon-list', :text=>I18n.t("modul.list"),:path=>moduls_path} + @topbar_elements<<{:hicon=>'icon-list', :text=>I18n.t("lva.list"),:path=>lvas_path} + respond_to do |format| format.html # index.html.erb format.json { render json: @moduls } end end + end # GET /moduls/1 # GET /moduls/1.json def show @modul = Modul.find(params[:id]) + @toolbar_elements = [{:hicon=>'icon-plus-sign', :text=>I18n.t("lva.add"), :path=>new_lva_path(:modul_id =>@modul.id)}] + @toolbar_elements << {:hicon=>'icon-pencil', :text=>I18n.t("modul.edit"), :path=>edit_modul_path(@modul)} + @toolbar_elements << {:hicon=>'icon-remove-circle', :text=>I18n.t("common.delete"),:path=>@modul , :method=>:delete , :data=>{:confirm =>'Are you sure'}} - respond_to do |format| + + @topbar_elements = [{:hicon=>'icon-list', :text=>I18n.t("modul.list"),:path=>moduls_path}] + @tb=[] + for i in @modul.modulgruppen + + if !i.studium.nil? + name =i.studium.name + id = i.studium.id + else + s.name = 'Kein Studium vorhanden' + s.id = nil + end + @tb <<{:text=> i.name + ' ('+i.studium.name + ')', :path=>modulgruppe_path(i)} + end + respond_to do |format| format.html # show.html.erb format.json { render json: @modul } end @@ -31,7 +54,7 @@ class ModulsController < ApplicationController @modul = Modul.new modulgruppe=Modulgruppe.find_by_id(params[:modulgruppen_id]) if !modulgruppe.nil? - @modul.modulgruppen<:plus, :text=> I18n.t('studien.new') ,:path=>new_studium_path } - @toolbar_elements<<{:text=> I18n.t('modulgruppe.show.link') ,:path=>modulgruppen_path } - @toolbar_elements<<{:text=> I18n.t('modul.show.link') ,:path=>moduls_path } - end +def index + @studien = Studium.all + @topbar_elements=[{:hicon=>'icon-list', :text=>I18n.t("studien.allestudien"),:path=>studien_path}] + @topbar_elements<<{:hicon=>'icon-list', :text=>I18n.t("modul.list"),:path=>moduls_path} + @topbar_elements<<{:hicon=>'icon-list', :text=>I18n.t("lva.list"),:path=>lvas_path} + @toolbar_elements<<{:icon =>:plus, :hicon=>'icon-plus-sign', :text=> I18n.t('studien.new') ,:path=>new_studium_path } + # @toolbar_elements<<{:text=> I18n.t('modulgruppe.show.link') ,:path=>modulgruppen_path } +end - def show - @studium= Studium.find(params[:id]) - @studienphasen=[] - [1, 2 ,3].each do |ph| - modulgruppen_phase=@studium.modulgruppen.where(:phase=>ph) - if modulgruppen_phase.count==1 - opts={:width=>12, :slice=>1} - elsif modulgruppen_phase.count <= 4 - opts={:width=>6, :slice=>2} - else - opts={:width=>4, :slice=>3} - end - modulgruppen =[] - modulgruppen_phase.each_slice(opts[:slice]) do |s| - modulgruppen<modulgruppen, :phase => ph}.merge(opts) - end - @toolbar_elements=[{:icon =>:plus ,:text=> I18n.t('studien.new') , :path => new_studium_modulgruppe_path(@studium) }] - @toolbar_elements<<{:icon=>:pencil,:text =>I18n.t('common.edit'),:path => edit_studium_path(@studium)} - @toolbar_elements<<{:text=> I18n.t('common.delete'),:path => studium_path(@studium), :method=> :delete,:confirm=>"Sure?" } - end +def show + @studium= Studium.find(params[:id]) + @text = 'Zu Semesteransicht wechseln' + @path = studium_semesteransicht_path(@studium) + + @studienphasen=[] + [1, 2 ,3].each do |ph| + modulgruppen_phase=@studium.modulgruppen.where(:phase=>ph) + if modulgruppen_phase.count==1 + opts={:width=>12, :slice=>1} + elsif modulgruppen_phase.count <= 4 + opts={:width=>6, :slice=>2} + else + opts={:width=>4, :slice=>3} + end + modulgruppen =[] + modulgruppen_phase.each_slice(opts[:slice]) do |s| + modulgruppen<modulgruppen, :phase => ph}.merge(opts) + end + + @toolbar_elements=[{:icon=>:plus, :hicon =>'icon-plus-sign' ,:text=> I18n.t('studien.new') , :path => new_studium_path(@studium) }, + {:icon=>:pencil, :hicon=>'icon-pencil',:text =>I18n.t('common.edit'),:path => edit_studium_path(@studium)}, + {:hicon=>'icon-remove-circle', :text=> I18n.t('common.delete'),:path => studium_path(@studium), :method=> :delete,:confirm=>"Sure?" }] + + @toolbar_modulgruppen =[ {:hicon=>'icon-plus-sign', :text=> I18n.t('modulgruppe.new'), :path=>new_studium_modulgruppe_path(@studium)}, + {:hicon=>'icon-list', :text => I18n.t('modulgruppe.list'), :path=>modulgruppen_path}] + + @topbar_elements = [ {:hicon=>'icon-list', :text=>I18n.t("studien.allestudien"), :path=>studien_path}, + {:text=>'Zur Semesteransicht wechseln', :path=>studium_semesteransicht_path(@studium)}, + {:newline=>true}] + for i in Studium.all + @topbar_elements << {:text=>i.name, :path=>studium_path(i)} + end + + end - def new @studium = Studium.new end def edit @studium = Studium.find(params[:id]) - @toolbar_elements=[{:text => I18n.t('studien.anzeigen') , :path => url_for(@studium) }] - @toolbar_elements<<{:text =>I18n.t('studien.allestudien'),:path=>studien_path(@studium)} + @toolbar_elements=[{:text => I18n.t('studien.anzeigen') , :path => url_for(@studium) }] + @toolbar_elements<<{:text =>I18n.t('studien.allestudien'),:path=>studien_path(@studium)} end def create @studium = Studium.new(params[:studium]) + respond_to do |format| if @studium.save + @studium.batch_add_semester format.html { redirect_to url_for(@studium), notice: 'Studium was successfully created.' } else format.html { render action: "new" } @@ -57,19 +76,40 @@ class StudienController < ApplicationController def update @studium = Studium.find(params[:id]) + + if @studium.update_attributes(params[:studium]) + redirect_to url_for(@studium), notice: 'Studium was successfully updated.' + else + render action: "edit" + + end - if @studium.update_attributes(params[:studium]) - redirect_to url_for(@studium), notice: 'Studium was successfully updated.' - else - render action: "edit" - - end + end + def semesteransicht + @sem = 'true' + @studium = Studium.find(params[:id]) + if @studium.nil? + @studium = Studium.first + end + @text = 'Zu Modulgruppenansicht wechseln' + @path = studium_path(@studium) + @topbar_elements = [ {:hicon=>'icon-list', :text=>I18n.t("studien.allestudien"), :path=>studien_path}, + {:text=>'Zur Modulgruppenansicht wechseln', :path=>studium_path(@studium)}, + {:newline=>true}] + for i in Studium.all + @topbar_elements << {:text=>i.name, :path=>studium_semesteransicht_path(i)} + end + + + @toolbar_elements = [ {:icon=>:plus, :hicon =>'icon-plus-sign' ,:text=> I18n.t('studien.new') , :path => new_studium_path(@studium) }, + {:icon=>:pencil, :hicon=>'icon-pencil',:text =>I18n.t('common.edit'),:path => edit_studium_path(@studium)}, + {:hicon=>'icon-remove-circle', :text=> I18n.t('common.delete'),:path => studium_path(@studium), :method=> :delete,:confirm=>"Sure?" }] end def destroy - @studium = Studium.find(params[:id]) - @studium.destroy - redirect_to studien_url + @studium = Studium.find(params[:id]) + @studium.destroy + redirect_to studien_url end end diff --git a/app/models/beispiel.rb b/app/models/beispiel.rb index 5a8700f..2ad10de 100755 --- a/app/models/beispiel.rb +++ b/app/models/beispiel.rb @@ -19,4 +19,9 @@ class Beispiel < ActiveRecord::Base attr_accessible :desc, :name, :lva_id, :beispieldatei, :beispieldatei_cache belongs_to :lva mount_uploader :beispieldatei, BeispieldateiUploader + validates :beispieldatei, :presence => true + validates :name, :presence => true + validates :lva_id, :presence => true + validates :lva, :presence => true + end diff --git a/app/models/lva.rb b/app/models/lva.rb index 279af18..bf0b2e8 100755 --- a/app/models/lva.rb +++ b/app/models/lva.rb @@ -17,39 +17,52 @@ class Lva < ActiveRecord::Base has_paper_trail # Versionsverfolgung - attr_accessible :desc, :ects, :lvanr, :name, :stunden, :modul_ids - + attr_accessible :desc, :ects, :lvanr, :name, :stunden, :modul_ids, :semester_ids has_and_belongs_to_many :modul # Gehört zu einem Modul - has_and_belongs_to_many :semester # Gehört zu einem Semester( derzeit nicht implementiert) + has_and_belongs_to_many :semester + #Gehört zu einem Semester( derzeit nicht implementiert) has_many :beispiele , :class_name => "Beispiel" translates :desc, :fallbacks_for_empty_translations => true - validates :lvanr,:format=>{ :with => /^[0-9][0-9][0-9]\.[0-9][0-9][0-9]$/} # , :uniqueness=>true # LVA-Nummer muss das Format 000.000 besitzen (uniqueness?) oder 000 für nicht existent - + validates :lvanr,:format=>{ :with => /^[0-9][0-9][0-9]\.[0-9][0-9][0-9]$/}, :presence=>true, :uniqueness=>true # , :uniqueness=>true # LVA-Nummer muss das Format 000.000 besitzen (uniqueness?) oder 000 für nicht validates_presence_of :ects # ECTS vorhanden? - validates_presence_of :name # Name Eingetragen? + validates :name, :presence=>true + validates :name, :uniqueness=>true# Name Eingetragen? validates_presence_of :stunden # Stunden Eingetragen? validates_presence_of :modul # Zugehöriges Modul eingetragen? (zumindest eines) -private + def add_semesters + # Diese Methode fügt die Instanz automatisch zu allen Studien als "Ohne Semesterempfehlung" (Semester 0) zu, bei denen die Instanz im Studium noch nicht vorkommt. + for m in self.modul + for mg in m.modulgruppen # Über alle Module und alle Modulgruppen iterieren + hits = mg.studium.semester.all.map{|x| x.lvas}.collect{|x| x.find_by_id(self.id)}.compact # Alle einträge in allen semestern mit gleicher LVa-ID suchen und alle nils entfernen -## -# Lade Daten aus TISS und füge diese in die Datenbank ein. -def load_tissdata - url= "https://tiss.tuwien.ac.at/api/course/"+ self.lvanr.to_s+"-2012W" - begin - @hash=Hash.from_xml(open(url).read)["tuvienna"] - @person=[] - if @hash["course"]["lecturers"]["oid"].is_a? String - @person = @hash["course"]["lecturers"]["oid"] - else - @hash["course"]["lecturers"]["oid"].each do |pid| - @person << Hash.from_xml(open("https://tiss.tuwien.ac.at/adressbuch/adressbuch/person_via_oid/" + pid.to_s + ".xml").read)["tuvienna"]["person"] + if hits.empty? # wurde gar kein eintrag gefunden ? + self.semester << mg.studium.semester.where(:nummer => 0) # auf nummer null eintragen + end end end - rescue OpenURI::HTTPError => e - end -end + + end + private + + ## + # Lade Daten aus TISS und füge diese in die Datenbank ein. + def load_tissdata + url= "https://tiss.tuwien.ac.at/api/course/"+ self.lvanr.to_s+"-2012W" + begin + @hash=Hash.from_xml(open(url).read)["tuvienna"] + @person=[] + if @hash["course"]["lecturers"]["oid"].is_a? String + @person = @hash["course"]["lecturers"]["oid"] + else + @hash["course"]["lecturers"]["oid"].each do |pid| + @person << Hash.from_xml(open("https://tiss.tuwien.ac.at/adressbuch/adressbuch/person_via_oid/" + pid.to_s + ".xml").read)["tuvienna"]["person"] + end + end + rescue OpenURI::HTTPError => e + end + end diff --git a/app/models/modul.rb b/app/models/modul.rb index f6939d4..028a86a 100755 --- a/app/models/modul.rb +++ b/app/models/modul.rb @@ -17,6 +17,7 @@ class Modul < ActiveRecord::Base has_and_belongs_to_many :lvas has_and_belongs_to_many :modulgruppen + validates :modulgruppen, :presence=>true # Ein Modul muss zu einer Modulgruppe gehören validates :name, :presence=>true # Ein Modul muss einen Namen haben translates :desc,:depend,:name, :versioning =>true, :fallbacks_for_empty_translations => true diff --git a/app/models/modulgruppe.rb b/app/models/modulgruppe.rb index 47fa049..dc3787b 100755 --- a/app/models/modulgruppe.rb +++ b/app/models/modulgruppe.rb @@ -21,8 +21,8 @@ class Modulgruppe < ActiveRecord::Base validates :studium_id, :presence => true # Bei der Abfrage ist student_id entscheidend validates :studium, :presence => true # Wird gesetzt, um das richtige Feld zu melden bei Fehlern - validates :name, :uniqueness =>{:scope => :studium}, :presence=>true # Funktioniert leider nicht + validates :name, :uniqueness =>{:scope => :studium_id}, :presence=>true # Pro Studium darf ein Name nur einmal vorkommen validates :phase, :inclusion => {:in => [1, 2, 3, 4]} validates :typ, :inclusion => {:in => ["Pflicht","Vertiefungspflicht","Wahl"] } - translates :name,:desc, :versioning =>true,:fallbacks_for_empty_translations => true + translates :desc, :versioning =>true,:fallbacks_for_empty_translations => true end diff --git a/app/models/semester.rb b/app/models/semester.rb index ca866b6..913a370 100755 --- a/app/models/semester.rb +++ b/app/models/semester.rb @@ -1,3 +1,4 @@ + # == Schema Information # # Table name: semesters @@ -12,6 +13,9 @@ # class Semester < ActiveRecord::Base + attr_accessible :name, :nummer, :ssws, :lva_ids has_and_belongs_to_many :lvas - attr_accessible :name, :nummer, :ss, :ws + belongs_to :studium, :foreign_key => "studium_id" + validates :name, :presence => true + validates :nummer, :presence => true end diff --git a/app/models/studium.rb b/app/models/studium.rb index dea3dae..94177f9 100755 --- a/app/models/studium.rb +++ b/app/models/studium.rb @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # == Schema Information # # Table name: studien @@ -10,14 +11,36 @@ # typ :string(255) # created_at :datetime not null # updated_at :datetime not null -# - class Studium < ActiveRecord::Base attr_accessible :desc, :name, :typ, :zahl - has_many :modulgruppen, inverse_of: :studium, :class_name => "Modulgruppe" + has_many :modulgruppen, inverse_of: :studium, :class_name => "Modulgruppe", :dependent => :destroy + has_many :semester, :dependent => :destroy validates :typ, :inclusion => {:in => ["Bachelor","Master"] } validates :name, :uniqueness => true, :presence=>true - validates :zahl, :uniqueness => true, :presence=>true + validates :zahl, :presence=>true, :format=>{:with=>/^0(33|66)[0-9]{3}$/}, :uniqueness => true translates :desc,:shortdesc, :versioning =>true,:fallbacks_for_empty_translations => true + + def batch_add_semester + # Semester automatisch zu Studien hinzufügen + if self.typ == "Bachelor" + length = 6 + else + length = 4 + end + for i in 1..length + semester =Semester.new() + semester.name = i.to_s + '. ' + self.name + semester.nummer = i + semester.ssws = ((i % 2 == 0) ? "SS" : "WS") + semester.save + self.semester << semester + end + semester = Semester.new() + semester.name = 'Ohne Zuordnung (' + self.name + ')' + semester.nummer = 0 + semester.ssws = "WS" + semester.save + self.semester << semester + end end diff --git a/app/views/beispiele/_beispiel_list.html.erb b/app/views/beispiele/_beispiel_list.html.erb new file mode 100644 index 0000000..b739e54 --- /dev/null +++ b/app/views/beispiele/_beispiel_list.html.erb @@ -0,0 +1,19 @@ +
+

+ + <%=link_to beispiel.name, beispiel.beispieldatei.url%> + +

+ Beschreibung: +

+ <%= beispiel.desc %> +

+ +

+ LVA: <%=link_to beispiel.lva.name, lva_path(beispiel.lva.id)%> +

+ + <%= link_to 'Show', beispiel %> + <%= link_to 'Edit', edit_beispiel_path(beispiel) %> + <%= link_to 'Destroy', beispiel, method: :delete, data: { confirm: 'Are you sure?' } %> +
diff --git a/app/views/beispiele/_form.html.erb b/app/views/beispiele/_form.html.erb index dca1eb9..bf0c027 100755 --- a/app/views/beispiele/_form.html.erb +++ b/app/views/beispiele/_form.html.erb @@ -4,7 +4,7 @@ <%= f.input :desc %> <%= f.file_field :beispieldatei %> <%= f.hidden_field :beispieldatei_cache %> - <%= f.input :lva, :as=>:radio, :collection => Lva.all%> + <%= f.input :lva, :as=>:select, :collection => Lva.all%> <% end %> <%= f.actions do %> diff --git a/app/views/beispiele/index.html.erb b/app/views/beispiele/index.html.erb index aca1b90..89bee7d 100755 --- a/app/views/beispiele/index.html.erb +++ b/app/views/beispiele/index.html.erb @@ -1,25 +1,10 @@ -

Listing beispiele

- - - - - - - - - - +

<%= I18n.t("beispiele.list")

+
    <% @beispiele.each do |beispiel| %> -
- - - - - - +
  • +<%= render :partial=> "beispiele/beispiel_list", :object => beispiel, :as=>:beispiel%> <% end %> -
  • NameDesc
    <%= beispiel.name %><%= beispiel.desc %><%= link_to 'Show', beispiel %><%= link_to 'Edit', edit_beispiel_path(beispiel) %><%= link_to 'Destroy', beispiel, method: :delete, data: { confirm: 'Are you sure?' } %>
    - -
    + + <%= link_to 'New Beispiel', new_beispiel_path %> diff --git a/app/views/layouts/_link_all.html.erb b/app/views/layouts/_link_all.html.erb new file mode 100755 index 0000000..0108206 --- /dev/null +++ b/app/views/layouts/_link_all.html.erb @@ -0,0 +1,11 @@ + + + diff --git a/app/views/layouts/_pretty_toolbar.html.erb b/app/views/layouts/_pretty_toolbar.html.erb new file mode 100644 index 0000000..cb8514a --- /dev/null +++ b/app/views/layouts/_pretty_toolbar.html.erb @@ -0,0 +1,7 @@ +<% toolbar_elements = !pretty_toolbar.nil? ? pretty_toolbar : @toolbar_elements %> +<%= I18n.t("common.actions")%> +
    +<% toolbar_elements.each do |t| %> + <%= link_to ''.html_safe+t[:text], t[:path], :method=>t[:method], :confirm=>t[:confirm].to_s, :data=>t[:data], :class=>"btn" %> + <% end %> +
    diff --git a/app/views/layouts/_topbar.html.erb b/app/views/layouts/_topbar.html.erb new file mode 100755 index 0000000..2a4c0de --- /dev/null +++ b/app/views/layouts/_topbar.html.erb @@ -0,0 +1,11 @@ +<% topbar = !topbar.nil? ? topbar : @topbar_elements %> + diff --git a/app/views/lvas/_form.html.erb b/app/views/lvas/_form.html.erb index 488b048..49bbb78 100755 --- a/app/views/lvas/_form.html.erb +++ b/app/views/lvas/_form.html.erb @@ -1,5 +1,6 @@ <%= semantic_form_for @lva do |f| %> <%= f.inputs do %> + <%= f.input :semester, :collection=>Semester.all.sort_by{|n| [:name]}%> <%= f.input :modul %> <%= f.input :name %> <%= f.input :ects %> diff --git a/app/views/lvas/_lva.html.erb b/app/views/lvas/_lva.html.erb new file mode 100755 index 0000000..e78e1f7 --- /dev/null +++ b/app/views/lvas/_lva.html.erb @@ -0,0 +1,28 @@ +<% @lva.modul.each do |modul| %> +<% modul.modulgruppen.each do |g| %> + +<% end %> + +

    <%= notice %>

    +

    + <%= @lva.lvanr %> + <%= @lva.name %> <%= @lva.ects %> ECTS/ <%= @lva.stunden %> Std + +

    +

    + <%= @lva.desc %> +

    +
      +<% @lva.beispiele.each do |b|%> + +
    • <%= render b%>
    • + +<% end %> +
    +<%= toolbar_html(@toolbar_elements) %> diff --git a/app/views/lvas/_lva_semester.html.erb b/app/views/lvas/_lva_semester.html.erb new file mode 100755 index 0000000..a60029d --- /dev/null +++ b/app/views/lvas/_lva_semester.html.erb @@ -0,0 +1,10 @@ + +

    + <%= link_to lva.name, lva_path(lva)%>
    + Module: /<% lva.modul.each do |m| %> <%= link_to m.name + ' / ', modul_path(m) unless m.modulgruppen.map{|x| x.studium}.index(@studium).nil? && !@studium.nil? %><% end %> +
    + <%="LVa-Nr " + lva.lvanr.to_s %> + <%= lva.ects %> ECTS / <%= lva.stunden %> Std <% " / " + lva.beispiele.count.to_s + " Beispiele"%>
    + <%= link_to "Edit", edit_lva_path(lva) %> | <%= link_to "Beispiel hinzufügen", new_beispiel_path(:lva_id=>lva.id) %> +

    +<% #toolbar_html(@toolbar_elements) %> diff --git a/app/views/lvas/index.html.erb b/app/views/lvas/index.html.erb index c09b08a..eb1a57b 100755 --- a/app/views/lvas/index.html.erb +++ b/app/views/lvas/index.html.erb @@ -1,31 +1,8 @@ -

    Listing lvas

    - - - - - - - - - - - - - -<% @lvas.each do |lva| %> - - - - - - - - - - -<% end %> -
    NameDescEctsLvanrStunden
    <%= lva.name %><%= lva.desc %><%= lva.ects %><%= lva.lvanr %><%= lva.stunden %><%= link_to 'Show', lva %><%= link_to 'Edit', edit_lva_path(lva) %><%= link_to 'Destroy', lva, method: :delete, data: { confirm: 'Are you sure?' } %>
    - -
    - -<%= link_to 'New Lva', new_lva_path %> +<%= render :partial=>'layouts/topbar', :object=>@tb %> +

    <%= I18n.t("lva.list")%>

    +
      +<% @lvas.each do |l| %> +
    • <%= render :partial => 'lvas/lva_semester', :locals=> {:lva => l} %> +<%end%> +
    +<%= render 'layouts/pretty_toolbar' %> diff --git a/app/views/lvas/show.html.erb b/app/views/lvas/show.html.erb index f7a4bc7..04038ea 100755 --- a/app/views/lvas/show.html.erb +++ b/app/views/lvas/show.html.erb @@ -1,30 +1,36 @@ -<% @lva.modul.each do |modul| %> -<% modul.modulgruppen.each do |g| %> - -<% end %> - +<%= render 'layouts/topbar'%>

    <%= notice %>

    - <%= @lva.lvanr %> - <%= @lva.name %> <%= @lva.ects %> ECTS/ <%= @lva.stunden %> Std - + +

    <%= @lva.lvanr %><%= @lva.name %> <%= @lva.ects %> ECTS/ <%= @lva.stunden %> Std

    +

    -

    + +

    Beschreibung

    <%= @lva.desc %> <%= link_to "Beispiel neu" , new_beispiel_path(:lva_id=>@lva.id) %>

    +

    Beispiele

      -<% @lva.beispiele.each do |b|%> + <% @lva.beispiele.each do |b|%> -
    • <%= render b%>
    • +
    • <%= render b%>
    • -<% end %> + <% end %>
    -<%= toolbar_html(@toolbar_elements) %> +

    Module

    +
      + <% @lva.modul.each do |modul| %> +
    • <%= link_to modul.name , modul_path(modul)%> +
        + <% modul.modulgruppen.each do |g| %> + +
      • <%= link_to g.studium.name , studium_semesteransicht_path(g.studium)%> (<%=link_to g.name, modulgruppe_path(g)%>)
      • + <% end %> +
      +
    • + + <% end %> +
    +<%= render 'layouts/pretty_toolbar' %> diff --git a/app/views/modulgruppen/index.html.erb b/app/views/modulgruppen/index.html.erb index 871c406..fb37c87 100755 --- a/app/views/modulgruppen/index.html.erb +++ b/app/views/modulgruppen/index.html.erb @@ -1,29 +1,9 @@

    <%= I18n.t("modulgruppe.show.title")%>

    - - - - - - - - - - <% @modulgruppen.sort_by{|n| n[:name]}.each do |modulgruppe| %> - - - - - - - - - + <%= render modulgruppe%> <% end %> -
    TypePhaseStudiumName
    <%= modulgruppe.typ %><%= modulgruppe.phase %><%= modulgruppe.studium.name unless modulgruppe.studium.nil? %><%= modulgruppe.name %><%= link_to 'Show', modulgruppe %><%= link_to 'Edit', edit_modulgruppe_path(modulgruppe) %><%= link_to 'Destroy', modulgruppe, method: :delete, data: { confirm: 'Are you sure?' } %>
    -
    <% if !@studium.nil? %> <%= link_to 'New Modulgruppe', new_studium_modulgruppe_path(@studium) %> diff --git a/app/views/moduls/_form.html.erb b/app/views/moduls/_form.html.erb index fd67fc1..fb6b68b 100755 --- a/app/views/moduls/_form.html.erb +++ b/app/views/moduls/_form.html.erb @@ -1,7 +1,8 @@ <%= semantic_form_for @modul do |f| %> <%= f.inputs do %> - <%= f.input :modulgruppen,:as => :select, :collection => Hash[Modulgruppe.all.map{|m| [m.studium.name + " " + m.name,m.id]}] %> + <% # f.input :modulgruppen,:as => :select, :collection => Hash[Modulgruppe.all.map{|m| [m.studium.name + " " + m.name,m.id]}] %> + <%= f.input :modulgruppen %> <%= f.input :name ,:hint=>true%> <%= f.input :desc, :as=>:tinymce_text %> <%= f.input :depend %> diff --git a/app/views/moduls/_lang.html.erb b/app/views/moduls/_lang.html.erb new file mode 100755 index 0000000..1dbb929 --- /dev/null +++ b/app/views/moduls/_lang.html.erb @@ -0,0 +1,32 @@ +

    + <%= +if modul.name.nil? +name="" +else +name=modul.name +end +link_to "Modul "+name , modul_path(modul) %> +

    +

    + <%= raw(modul.desc) %> +

    +LVAs: + +
      + +<% modul.lvas.each do |lv| %> +
    • +<%= link_to lv.name.to_s, lva_path(lv.id) %> +
    • +<% end %> + +
    + +Modulgruppen: +
      +<% modul.modulgruppen.each do |mg| %> +
    • <%=mg.name%> (<%= mg.studium.name unless mg.studium.nil?%>)
    • +<%end%> +
    +<% # @toolbar_elements << {:icon=>:pencil,:text=>I18n.t("common.edit"),:path=> edit_modul_path(modul)} %> +
    diff --git a/app/views/moduls/index.html.erb b/app/views/moduls/index.html.erb index 933d4a7..385cfb6 100755 --- a/app/views/moduls/index.html.erb +++ b/app/views/moduls/index.html.erb @@ -1,39 +1,8 @@ -

    <%= I18n.t("modul.show.title") %>

    +<%= render 'layouts/topbar' %> +

    <%= I18n.t("modul.list") %>

    - - - - - - - - - +<%= render :partial=>'moduls/lang', :collection=>@moduls, :as=>:modul%> -<% @moduls.sort_by{|n| n[:name]}.each do |modul| %> - - - - - - - - - -<% end %> -
    Modulgruppe (Studium)NameDesc
    - <%modul.modulgruppen.sort_by{|n| n[:name]}.each do |m|%> - - - <%=m.name unless m.nil? %> (<%=m.studium.name unless m.studium.nil? %>) - -
    - <% end %> - -
    <%= modul.name %><%= modul.desc %><%= link_to 'Show', modul_path(modul) %><%= link_to 'Edit', edit_modul_path(modul) %><%= link_to 'Destroy', [modul], method: :delete, data: { confirm: 'Are you sure?' } %>
    - -
    -<% #if !@studium.nil? %> -<%= link_to 'New Modul', new_modul_path() %> -<% #end%> +
    +<%= render 'layouts/pretty_toolbar'%> diff --git a/app/views/moduls/show.html.erb b/app/views/moduls/show.html.erb index 5190cfc..2bf73e9 100755 --- a/app/views/moduls/show.html.erb +++ b/app/views/moduls/show.html.erb @@ -1,16 +1,9 @@ - -<% @modul.modulgruppen.each do |g| %> - - +<%= render 'layouts/topbar'%> +<%= render 'layouts/topbar', :topbar=>@tb%>

    <%= notice %>

    <%= render @modul %> - -<%= link_to 'Add LVA', new_lva_path(:modul_id =>@modul.id) %> -<%= link_to ''.html_safe+ I18n.t("common.edit") , edit_modul_path(@modul) %> -<%= link_to "Loeschen", [@modul],:method=>:delete ,:data => {:confirm =>"Are you sure" } %> +<%= render 'layouts/pretty_toolbar' %> +<% # link_to 'Add LVA', %> +<% # link_to ''.html_safe+ I18n.t("common.edit") , edit_modul_path(@modul) %> +<% # link_to "Loeschen", [@modul],:method=>:delete ,:data => {:confirm =>"Are you sure" } %> diff --git a/app/views/semesters/_form.html.erb b/app/views/semesters/_form.html.erb index 85a79e6..710e4ea 100755 --- a/app/views/semesters/_form.html.erb +++ b/app/views/semesters/_form.html.erb @@ -2,8 +2,8 @@ <%= f.inputs do %> <%= f.input :name %> <%= f.input :nummer %> - <%= f.input :ws %> - <%= f.input :ss %> + <%= f.input :ssws %> + <%= f.input :lvas %> <% end %> <%= f.actions do %> diff --git a/app/views/semesters/index.html.erb b/app/views/semesters/index.html.erb index 1a62a2f..3ec5688 100755 --- a/app/views/semesters/index.html.erb +++ b/app/views/semesters/index.html.erb @@ -15,8 +15,8 @@ <%= semester.name %> <%= semester.nummer %> - <%= semester.ws %> - <%= semester.ss %> + <%= semester.ssws %> + <% %> <%= link_to 'Show', semester %> <%= link_to 'Edit', edit_semester_path(semester) %> <%= link_to 'Destroy', semester, method: :delete, data: { confirm: 'Are you sure?' } %> diff --git a/app/views/semesters/show.html.erb b/app/views/semesters/show.html.erb index b6607ef..c06ceee 100755 --- a/app/views/semesters/show.html.erb +++ b/app/views/semesters/show.html.erb @@ -1,25 +1,20 @@

    <%= notice %>

    - Name: - <%= @semester.name %> + Name: <%= @semester.name %>

    - Nummer: - <%= @semester.nummer %> + Nummer: <%= @semester.nummer %>

    +

    - Ws: - <%= @semester.ws %> + WS/SS?: <%= @semester.ssws %>

    -

    - Ss: - <%= @semester.ss %> +<%= render :partial =>'lvas/lva_semester', :collection=>@semester.lvas, :as=>:lva%>

    - <%= link_to 'Edit', edit_semester_path(@semester) %> | <%= link_to 'Back', semesters_path %> diff --git a/app/views/studien/_navigation.html.erb b/app/views/studien/_navigation.html.erb new file mode 100755 index 0000000..b2c8012 --- /dev/null +++ b/app/views/studien/_navigation.html.erb @@ -0,0 +1,20 @@ + + + diff --git a/app/views/studien/_studium.html.erb b/app/views/studien/_studium.html.erb new file mode 100644 index 0000000..04a654a --- /dev/null +++ b/app/views/studien/_studium.html.erb @@ -0,0 +1,9 @@ +
    +

    <%= link_to studium.name + " " + studium.zahl.to_s, studium_semesteransicht_path(studium)%>

    +
      +
    • <%= studium.typ%>
    • +
    • Beschreibung:
      + <%= !(studium.desc.to_s == "") ? studium.desc.html_safe : I18n.t("keine.beschreibung")%>
    • +
    • <%=link_to "Link zur Modulgruppenansicht",studium_path(studium) %>
    • +
    +
    diff --git a/app/views/studien/edit.html.erb b/app/views/studien/edit.html.erb index 766d5b2..a2f6ed9 100755 --- a/app/views/studien/edit.html.erb +++ b/app/views/studien/edit.html.erb @@ -1,6 +1,6 @@ -

    Editing studium

    +

    <%= I18n.t("studien.edit")%>

    <%= render 'form' %> <%= link_to 'Show', @studium %> | -<%= link_to 'Back', studien_path %> \ No newline at end of file +<%= link_to 'Back', studien_path %> diff --git a/app/views/studien/index.html.erb b/app/views/studien/index.html.erb index 52068d1..c67e6c9 100755 --- a/app/views/studien/index.html.erb +++ b/app/views/studien/index.html.erb @@ -1,15 +1,14 @@ +<%= render 'layouts/topbar' %>

    <%= I18n.t("studien.list") %>

    <% @studien.sort_by{|z| z[:zahl]}.each do |studium| %> - - -

    <%= link_to studium.zahl + " "+ studium.typ+" " + studium.name, studium_path(studium) %>

    - +
      +
    • <%= render studium%>
    • +
    <% end %> -
    -<% link_to I18n.t("studien.new"), new_studium_path %> -<% link_to I18n.t("modulgruppe.show"), modulgruppen_path %> -<%= toolbar_html(@toolbar_elements) %> +
    +<%= render :partial=>'layouts/pretty_toolbar'%> +<% #toolbar_html(@toolbar_elements) %> diff --git a/app/views/studien/semesteransicht.html.erb b/app/views/studien/semesteransicht.html.erb new file mode 100644 index 0000000..22c82c2 --- /dev/null +++ b/app/views/studien/semesteransicht.html.erb @@ -0,0 +1,17 @@ +<%= render :partial=>'layouts/topbar'%> + +

    <%= @studium.typ %> <%= @studium.name %> (<%= @studium.zahl %>)

    +<%= raw(@studium.desc) %> +<% @studium.semester.each do |sem| %> +
    +

    <%= sem.name %>

    +
    +
      + <% sem.lvas.sort_by{|n| n[:name]}.each do |l| %> +
    • <%= render :partial=>'lvas/lva_semester', :locals =>{:lva => l}%> + <% end %> +
    +
    +<% end %> + +<%= render :partial=>'layouts/pretty_toolbar', :locals=>{:elements=>@toolbar_elements} %> diff --git a/app/views/studien/show.html.erb b/app/views/studien/show.html.erb old mode 100755 new mode 100644 index 6c755c2..e813c9c --- a/app/views/studien/show.html.erb +++ b/app/views/studien/show.html.erb @@ -1,33 +1,23 @@ +<%= render 'layouts/topbar'%>
    -
    -

    <%= notice %>

    - - <%= link_to ''.html_safe+ I18n.t("studien.allestudien"), studien_path,:raw=>true %> - -

    <%= @studium.typ %> <%= @studium.name %> (<%= @studium.zahl %>)

    -
    - <%= raw(@studium.desc) %> - <% @studienphasen.each do |sp| %> - <% sp[:modulgruppen].each do |row| %> -
    - <% row.each do |modulgruppe| %> -
    - <%= render modulgruppe %> -
    - <% end %> -
    - <% end %> +
    +

    <%= notice %>

    +

    <%= @studium.typ %> <%= @studium.name %> (<%= @studium.zahl %>)

    +
    +
    + <%= raw(@studium.desc) %> + <% @studienphasen.each do |sp| %> + <% sp[:modulgruppen].each do |row| %> +
    + <% row.each do |modulgruppe| %> +
    + <%= render modulgruppe %> +
    <% end %> - - -
    - -<%= link_to ''.html_safe+I18n.t("studien.newmodulgroup"), new_studium_modulgruppe_path(@studium),:class=>"btn" %> | -<%= link_to ''.html_safe+I18n.t("common.edit"), edit_studium_path(@studium) ,:class=>"btn"%> -<%= link_to 'Destroy', @studium, method: :delete, data: { confirm: 'Are you sure?' } %> - +
    + <% end %> + <% end %> + <%= render :partial=>'layouts/pretty_toolbar', :object=>@toolbar_modulgruppen %> +
    + <%= render 'layouts/pretty_toolbar' %>
    - - -
    -<%= toolbar_html(@toolbar_elements) %> diff --git a/config/locales/de.yml b/config/locales/de.yml index 97cc3af..84fa7a6 100755 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -10,20 +10,26 @@ de: list: "Studien der Fakultät Elektrotechnik" anzeigen: "Studium anzeigen" new: "Neues Studium" - newmodulgroup: "Neue Modulgruppe" allestudien: "Alle Studien" + loeschen: "Dieses Studium löschen" + edit: "Studium bearbeiten" modul: - edit: - title: "Bearbeite Modul" - show: - title: "Auflistung aller Module" - link: "Alle Module auflisten" - + edit: "Modul bearbeiten" + list: "Alle Module" + add: "Neues Modul" + keine: + beschreibung: "Keine Beschreibung vorhanden" + lva: + add: "Lva hinzufügen" + list: "Alle Lvas" + semester: + ohne: "Ohne Semesterzuordnung" modulgruppe: typ: "Typ" addmodul: "Neues Modul hinzufügen" studium: "Studium" new: "Neue Modulgruppe" + list: "Alle Modulgruppen auflisten" show: title: "Auflistung aller Modulgruppen" link: "Modulgruppen auflisten" @@ -85,4 +91,17 @@ de: blank: "Geben Sie die Stunden der LVA an" lvanr: invalid: "Geben Sie eine LVA-Nummer in richtigem Format an. Wenn die LVA noch keine Nummer hat, so geben sie 000 an." + studium: + attributes: + zahl: + blank: "Geben Sie die Studienkennzahl an" + invalid: "Die eingegebene Form stimmt nicht (beginnend mit 033 oder 066, dann 3 Stellen)" + taken: "Die Kennzahl wird bereits verwendet" + name: + blank: "Geben Sie den Namen des Studiums ein" + taken: "Der Name ist bereits vergeben" + typ: + inclusion: 'Wählen Sie "Bachelor" oder "Master" aus' + + diff --git a/config/routes.rb b/config/routes.rb index 4e4ed7d..2603420 100755 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,42 +1,41 @@ Fetsite::Application.routes.draw do + + devise_for :users + resources :home, :only=>[:index] + #get 'home',:controller=>home,:action=>:index,:as=>"home_index" + scope '(:locale)/admin' do + resources :users + get 'config',:controller=>:config,:action=>:index , :as => 'config' + get 'config/get_git_update',:controller=>:config,:action=>:get_git_update, :as=>'config_getgitupdate' + get 'config/get_git_update',:controller=>:config,:action=>:get_git_update + end + devise_for :users - - - devise_for :users - resources :home, :only=>[:index] - #get 'home',:controller=>home,:action=>:index,:as=>"home_index" - scope '(:locale)/admin' do - resources :users - get 'config',:controller=>:config,:action=>:index , :as => 'config' - get 'config/get_git_update',:controller=>:config,:action=>:get_git_update, :as=>'config_getgitupdate' - get 'config/get_git_update',:controller=>:config,:action=>:get_git_update - - -end - -devise_for :users - -resources :pages, :except => [:index] do - member do - post 'preview' - end -end -get 'pages', :to =>'pages#show' -scope '(:locale)' do + resources :pages, :except => [:index] do + member do + post 'preview' + end + end + get 'pages', :to =>'pages#show' + scope '(:locale)' do + resources :studien, :only=>[:show,:new,:edit,:update,:destroy] resources :modulgruppen,:only =>[:create,:index] + resources :studien,:except=>[:show,:new,:edit,:update,:destroy], :shallow=>true do resources :modulgruppen, :path => "(:locale)/modulgruppen" + end + get 'studien/:id/semesteransicht', :controller=>:studien, :action=>:semesteransicht, :as=>'studium_semesteransicht' resources :semesters resources :moduls resources :lvas resources :neuigkeiten get 'rubriken/verwalten', :controller=>:rubriken, :action=>:alle_verwalten, :as=>'alle_verwalten_rubrik' - + resources :rubriken do - resources :neuigkeiten, :only=>[:new, :show] + resources :neuigkeiten, :only=>[:new, :show] end put 'rubriken/(:id)/addmoderator',:controller=>:rubriken,:action=>:addmoderator get 'rubriken/:id/verwalten',:controller=>:rubriken,:action=>:verwalten, :as=>'verwalten_rubrik' @@ -44,7 +43,7 @@ scope '(:locale)' do get 'home/dev', :controller=>:home, :action=>:dev, :as=>'home_dev' resources :beispiele - end + end # The priority is based upon order of creation: # first created -> highest priority. @@ -96,7 +95,7 @@ scope '(:locale)' do # You can have the root of your site routed with "root" # just remember to delete public/index.html. - root :to => 'home#index' + root :to => 'home#index' # See how all your routes lay out with "rake routes" diff --git a/db/migrate/20130729085446_create_lva_semester_join_table.rb b/db/migrate/20130729085446_create_lva_semester_join_table.rb new file mode 100644 index 0000000..cd29e07 --- /dev/null +++ b/db/migrate/20130729085446_create_lva_semester_join_table.rb @@ -0,0 +1,14 @@ +class CreateLvaSemesterJoinTable < ActiveRecord::Migration + def self.up + create_table :lvas_semesters, :id=>false do |t| + t.integer :lva_id + t.integer :semester_id + end + add_index :lvas_semesters, [:lva_id, :semester_id] + add_index :lvas_semesters, :semester_id + end + + def self.down + drop_table :lvas_semesters + end +end diff --git a/db/schema.rb b/db/schema.rb index e41f87b..6a96d37 100755 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,17 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20130214233723) do - - create_table "beispiel_translations", :force => true do |t| - t.string "locale" - t.text "desc" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "beispiele_id" - end - - add_index "beispiel_translations", ["locale"], :name => "index_beispiel_translations_on_locale" +ActiveRecord::Schema.define(:version => 20130729085446) do create_table "beispiele", :force => true do |t| t.string "name" @@ -60,6 +50,11 @@ ActiveRecord::Schema.define(:version => 20130214233723) do t.integer "modul_id" end + create_table "lvas_semesters", :force => true do |t| + t.integer "lva_id" + t.integer "semester_id" + end + create_table "modul_translations", :force => true do |t| t.integer "modul_id" t.string "locale" diff --git a/spec/factories/beispiele.rb b/spec/factories/beispiele.rb new file mode 100644 index 0000000..f9cfcdf --- /dev/null +++ b/spec/factories/beispiele.rb @@ -0,0 +1,6 @@ +# Read about factories at https://github.com/thoughtbot/factory_girl + +FactoryGirl.define do + factory :beispiel do + end +end diff --git a/spec/factories/lvas.rb b/spec/factories/lvas.rb new file mode 100644 index 0000000..7a0091b --- /dev/null +++ b/spec/factories/lvas.rb @@ -0,0 +1,6 @@ +# Read about factories at https://github.com/thoughtbot/factory_girl + +FactoryGirl.define do + factory :lva do + end +end diff --git a/spec/factories/modulgruppen.rb b/spec/factories/modulgruppen.rb new file mode 100644 index 0000000..90946d0 --- /dev/null +++ b/spec/factories/modulgruppen.rb @@ -0,0 +1,15 @@ +# Read about factories at https://github.com/thoughtbot/factory_girl + +FactoryGirl.define do + factory :modulgruppe do + typ "Pflicht" + phase 1 + name "Pflichtmodule 1" + desc "ASDFASDF" + factory :other_modulgruppe do + name "PFlichtmodule 2" + desc "sdafaswdfsfr" + end + end + +end diff --git a/spec/factories/moduls.rb b/spec/factories/moduls.rb new file mode 100644 index 0000000..ef48c30 --- /dev/null +++ b/spec/factories/moduls.rb @@ -0,0 +1,6 @@ +# Read about factories at https://github.com/thoughtbot/factory_girl + +FactoryGirl.define do + factory :modul do + end +end diff --git a/spec/factories/studien.rb b/spec/factories/studien.rb new file mode 100644 index 0000000..5677904 --- /dev/null +++ b/spec/factories/studien.rb @@ -0,0 +1,19 @@ +# Read about factories at https://github.com/thoughtbot/factory_girl + + +FactoryGirl.define do + factory :studium do + zahl "066506" + name "Automatisierung" + desc "TEST DESC" + typ "Master" + + factory :other_studium do + name "Telecommunication" + desc "frueher Telekommungikation" + zahl "066507" + typ "Master" + end + end + +end diff --git a/spec/factories/studium_factory.rb b/spec/factories/studium_factory.rb new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/spec/factories/studium_factory.rb @@ -0,0 +1 @@ + diff --git a/spec/models/beispiel_spec.rb b/spec/models/beispiel_spec.rb new file mode 100644 index 0000000..cfaeb19 --- /dev/null +++ b/spec/models/beispiel_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe Beispiel do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/lva_spec.rb b/spec/models/lva_spec.rb new file mode 100644 index 0000000..4209553 --- /dev/null +++ b/spec/models/lva_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe Lva do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/modul_spec.rb b/spec/models/modul_spec.rb new file mode 100644 index 0000000..c4af626 --- /dev/null +++ b/spec/models/modul_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe Modul do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/modulgruppe_spec.rb b/spec/models/modulgruppe_spec.rb new file mode 100644 index 0000000..3a863e3 --- /dev/null +++ b/spec/models/modulgruppe_spec.rb @@ -0,0 +1,46 @@ +require 'spec_helper' + +describe Modulgruppe do + it "should not be valid without studium" do + mg=FactoryGirl.build(:modulgruppe) + mg.should_not be_valid + mg.should have(1).errors_on(:studium_id) + end + it "should be valid with studium" do + s=FactoryGirl.create(:studium) + mg=FactoryGirl.build(:modulgruppe) + mg.studium=s + mg.should be_valid + end + it "should not be valid without name" do + s=FactoryGirl.create(:studium) + mg=FactoryGirl.build(:modulgruppe) + mg.studium=s + mg.name=nil + mg.should_not be_valid + mg.should have_at_least(1).errors_on(:name) + end + xit "should not be valid with dubble name" do + s=FactoryGirl.create(:studium) + mg=FactoryGirl.build(:modulgruppe, name: "Gruppe 1", desc: "132") + mg.studium=s + mg.save + mg=FactoryGirl.build(:modulgruppe, name: "Gruppe 2", desc: "133") + mg.studium=s + mg.should_not be_valid + mg.should have_at_least(1).errors_on(:name) + end + + it "should be valid with same name on different studien" do + s=FactoryGirl.create(:studium) + s2=FactoryGirl.create(:other_studium) + mg=FactoryGirl.build(:modulgruppe, name: "Gruppe") + mg.studium=s + mg.save + mg=FactoryGirl.build(:other_modulgruppe, name: "Gruppe") + mg.studium=s2 + mg.should be_valid + + end + +end diff --git a/spec/models/studium_spec.rb b/spec/models/studium_spec.rb new file mode 100644 index 0000000..0297604 --- /dev/null +++ b/spec/models/studium_spec.rb @@ -0,0 +1,27 @@ +require 'spec_helper' + +describe Studium do + [:name, :zahl].each do |attr| + it "should not be valid without #{attr}" do + s = FactoryGirl.build(:studium, attr=>nil) + s.should_not be_valid + end + end + it "should create studium with valid data" do + s=FactoryGirl.build(:studium) + lambda { + s.save!}.should change {Studium.count()}.by(1) + end + it "should not accept double entrys" do + FactoryGirl.create(:studium) + s=FactoryGirl.build(:studium) + s.should_not be_valid + s.should have_at_least(1).error_on(:name) + s.should have_at_least(1).error_on(:zahl) + end + it "should expect zahl to be 000.000" do + s=FactoryGirl.build(:studium, :zahl=>"000000") + s.should_not be_valid + s.should have_at_least(1).error_on(:zahl) + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 0000000..d2cbea7 --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1,38 @@ +# This file is copied to spec/ when you run 'rails generate rspec:install' +ENV["RAILS_ENV"] ||= 'test' +require File.expand_path("../../config/environment", __FILE__) +require 'rspec/rails' +require 'rspec/autorun' + +# Requires supporting ruby files with custom matchers and macros, etc, +# in spec/support/ and its subdirectories. +Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f } + +RSpec.configure do |config| + # ## Mock Framework + # + # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line: + # + # config.mock_with :mocha + # config.mock_with :flexmock + # config.mock_with :rr + + # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures + config.fixture_path = "#{::Rails.root}/spec/fixtures" + + # If you're not using ActiveRecord, or you'd prefer not to run each of your + # examples within a transaction, remove the following line or assign false + # instead of true. + config.use_transactional_fixtures = true + + # If true, the base class of anonymous controllers will be inferred + # automatically. This will be the default behavior in future versions of + # rspec-rails. + config.infer_base_class_for_anonymous_controllers = false + + # Run specs in random order to surface order dependencies. If you find an + # order dependency and want to debug it, you can fix the order by providing + # the seed, which is printed after each run. + # --seed 1234 + config.order = "random" +end