diff --git a/.gitignore b/.gitignore index 9679a17..a978807 100755 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,8 @@ # Ignore the default SQLite database. /db/*.sqlite3 +/db/schema.rb +/db/structure.sql /config/initializers/devise.rb # Ignore all logfiles and tempfiles. @@ -16,6 +18,7 @@ /tmp /config/initializers/devise.rb /app/doc/* + console /server /public/uploads/ diff --git a/Gemfile b/Gemfile index 7fce64e..1fdf2bd 100755 --- a/Gemfile +++ b/Gemfile @@ -12,9 +12,9 @@ gem 'rails', '3.2.9' # Gems used only for assets and not required # in production environments by default. group :assets do - gem 'sass-rails', '~> 3.2.3' + gem 'sass-rails', '~> 3.2' gem 'coffee-rails', '~> 3.2.1' - gem 'bootstrap-sass','~> 2.2.0' + gem 'bootstrap-sass','~> 2.3.2.1' # See https://github.com/sstephenson/execjs#readme for more supported runtimes gem 'therubyracer', :platforms => :ruby gem 'uglifier', '>= 1.0.3' @@ -75,3 +75,6 @@ group :development, :test do gem 'factory_girl_rails' gem 'rspec-rails' end + +gem "simple_calendar", "~> 0.1.9" +gem 'rmagick' diff --git a/Gemfile.lock b/Gemfile.lock index 2f98cfb..ff6d52b 100755 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -35,7 +35,7 @@ GEM activerecord (>= 3.0.0) bcrypt-ruby (3.0.1) bcrypt-ruby (3.0.1-x86-mingw32) - bootstrap-sass (2.2.2.0) + bootstrap-sass (2.3.2.1) sass (~> 3.2) builder (3.0.4) cancan (1.6.9) @@ -128,6 +128,7 @@ GEM rdoc (3.12.1) json (~> 1.4) ref (1.0.2) + rmagick (2.13.2) rolify (3.2.0) rspec-core (2.14.4) rspec-expectations (2.14.0) @@ -145,6 +146,8 @@ GEM railties (~> 3.2.0) sass (>= 3.1.10) tilt (~> 1.3) + simple_calendar (0.1.9) + rails (>= 3.0) sprockets (2.2.2) hike (~> 1.2) multi_json (~> 1.0) @@ -176,7 +179,7 @@ PLATFORMS DEPENDENCIES annotate (>= 2.5.0) awesome_nested_set - bootstrap-sass (~> 2.2.0) + bootstrap-sass (~> 2.3.2.1) cancan carrierwave coffee-rails (~> 3.2.1) @@ -192,9 +195,11 @@ DEPENDENCIES paper_trail (>= 2.7.0) paperclip (~> 3.4.0) rails (= 3.2.9) + rmagick rolify rspec-rails - sass-rails (~> 3.2.3) + sass-rails (~> 3.2) + simple_calendar (~> 0.1.9) sqlite3 therubyracer tinymce-rails (>= 3.5.8) diff --git a/app/assets/javascripts/calendars.js.coffee b/app/assets/javascripts/calendars.js.coffee new file mode 100644 index 0000000..7615679 --- /dev/null +++ b/app/assets/javascripts/calendars.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/javascripts/calentries.js.coffee b/app/assets/javascripts/calentries.js.coffee new file mode 100644 index 0000000..7615679 --- /dev/null +++ b/app/assets/javascripts/calentries.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/stylesheets/application.css.scss b/app/assets/stylesheets/application.css.scss index 71eebc4..ab46a0b 100755 --- a/app/assets/stylesheets/application.css.scss +++ b/app/assets/stylesheets/application.css.scss @@ -10,7 +10,7 @@ * *= require_self *= require_tree . - * require 'bootstrap' + * require 'bootstrap' */ $linkColor: #03006E; @import 'bootstrap'; @@ -30,7 +30,8 @@ border-bottom:1px solid black; height:60px; padding-left:160px; padding-top:0px; -overflow:hidden +overflow:hidden; +margin-bottom: 20px } #menudiv diff --git a/app/assets/stylesheets/bootstrap-responsive.scss b/app/assets/stylesheets/bootstrap-responsive.scss new file mode 100644 index 0000000..f2950bd --- /dev/null +++ b/app/assets/stylesheets/bootstrap-responsive.scss @@ -0,0 +1,5 @@ +@import "bootstrap/responsive"; +@media (max-width: 979px){ +.earlymax { +min-width: 100%; +}} diff --git a/app/assets/stylesheets/calendars.css.scss b/app/assets/stylesheets/calendars.css.scss new file mode 100644 index 0000000..0efb58b --- /dev/null +++ b/app/assets/stylesheets/calendars.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the calendars controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/calentries.css.scss b/app/assets/stylesheets/calentries.css.scss new file mode 100644 index 0000000..47a2dcd --- /dev/null +++ b/app/assets/stylesheets/calentries.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the calentries controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/formtastic-changes.css.scss b/app/assets/stylesheets/formtastic-changes.css.scss new file mode 100644 index 0000000..2b1ad2b --- /dev/null +++ b/app/assets/stylesheets/formtastic-changes.css.scss @@ -0,0 +1,15 @@ +form.formtastic .stringish input { +width:90%; +} +form.formtastic select { +width:90% +} +form.formtastic textarea { +width:90%; +height:20em; +} +form.formtastic .input label.control-label { +font-weight:bold; +font-size:125%; +} + diff --git a/app/assets/stylesheets/lvas.css.scss b/app/assets/stylesheets/lvas.css.scss index 797b72c..9084fc3 100755 --- a/app/assets/stylesheets/lvas.css.scss +++ b/app/assets/stylesheets/lvas.css.scss @@ -1,3 +1,27 @@ // Place all the styles related to the lvas controller here. // They will automatically be included in application.css. // You can use Sass (SCSS) here: http://sass-lang.com/ + +div.lva-semester { +border: solid; +border-width: 1px; +margin: 1px; +padding: 5px; +border-color: green; +border-radius: 5px; +} +div.lva-sidebar { +border:solid; +border-width: 1px; +margin: 2px; +padding:5px; +border-radius:5px; +} +div.lva-beispiele { +border:solid; +border-width: 1px; +margin: 2px; +padding:5px; +border-radius:5px; +border-color: green; +} \ No newline at end of file diff --git a/app/assets/stylesheets/studien.css.scss b/app/assets/stylesheets/studien.css.scss index 7b5973a..5c788c2 100755 --- a/app/assets/stylesheets/studien.css.scss +++ b/app/assets/stylesheets/studien.css.scss @@ -1,3 +1,18 @@ // Place all the styles related to the studia controller here. // They will automatically be included in application.css. // You can use Sass (SCSS) here: http://sass-lang.com/ +div.verwalten-block { +border-width: 1px; +border-style: solid; +padding: 5px; +border-radius:10px; +margin: 2px; +} +div.studien-semester { +border-width: 1px; +border-style: solid; +padding: 5px; +border-radius:10px; +border-color: blue; +margin: 2px; +} diff --git a/app/controllers/beispiele_controller.rb b/app/controllers/beispiele_controller.rb index ccd30a3..0f88686 100755 --- a/app/controllers/beispiele_controller.rb +++ b/app/controllers/beispiele_controller.rb @@ -26,7 +26,8 @@ class BeispieleController < ApplicationController # GET /beispiele/new.json def new @beispiel = Beispiel.new - @beispiel.lva_id = params[:lva_id] + @beispiel.lva = Lva.find(params[:lva_id]) + respond_to do |format| format.html # new.html.erb format.json { render json: @beispiel } @@ -41,8 +42,9 @@ class BeispieleController < ApplicationController # POST /beispiele # POST /beispiele.json def create + lvaid=params[:lva_id] + params.delete(:lva_id) @beispiel = Beispiel.new(params[:beispiel]) - respond_to do |format| if @beispiel.save format.html { redirect_to @beispiel, notice: 'Beispiel was successfully created.' } diff --git a/app/controllers/calendars_controller.rb b/app/controllers/calendars_controller.rb new file mode 100644 index 0000000..059a7f0 --- /dev/null +++ b/app/controllers/calendars_controller.rb @@ -0,0 +1,83 @@ +class CalendarsController < ApplicationController + # GET /calendars + # GET /calendars.json + def index + @calendars = Calendar.all + respond_to do |format| + format.html # index.html.erb + format.json { render json: @calendars } + end + end + + # GET /calendars/1 + # GET /calendars/1.json + def show + @calendar = Calendar.find(params[:id]) + + respond_to do |format| + format.html # show.html.erb + format.json { render json: @calendar } + format.ics { render 'show.ics.erb'} + end + end + + # GET /calendars/new + # GET /calendars/new.json + def new + @calendar = Calendar.new + + respond_to do |format| + format.html # new.html.erb + format.json { render json: @calendar } + end + end + + # GET /calendars/1/edit + def edit + @calendar = Calendar.find(params[:id]) + end + + # POST /calendars + # POST /calendars.json + def create + @calendar = Calendar.new(params[:calendar]) + + respond_to do |format| + if @calendar.save + format.html { redirect_to @calendar, notice: 'Calendar was successfully created.' } + format.json { render json: @calendar, status: :created, location: @calendar } + else + format.html { render action: "new" } + format.json { render json: @calendar.errors, status: :unprocessable_entity } + end + end + end + + # PUT /calendars/1 + # PUT /calendars/1.json + def update + @calendar = Calendar.find(params[:id]) + + respond_to do |format| + if @calendar.update_attributes(params[:calendar]) + format.html { redirect_to @calendar, notice: 'Calendar was successfully updated.' } + format.json { head :no_content } + else + format.html { render action: "edit" } + format.json { render json: @calendar.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /calendars/1 + # DELETE /calendars/1.json + def destroy + @calendar = Calendar.find(params[:id]) + @calendar.destroy + + respond_to do |format| + format.html { redirect_to calendars_url } + format.json { head :no_content } + end + end +end diff --git a/app/controllers/calentries_controller.rb b/app/controllers/calentries_controller.rb new file mode 100644 index 0000000..3452d72 --- /dev/null +++ b/app/controllers/calentries_controller.rb @@ -0,0 +1,84 @@ +class CalentriesController < ApplicationController + # GET /calentries + # GET /calentries.json + def index + @calentries = Calentry.all + + respond_to do |format| + format.html # index.html.erb + format.json { render json: @calentries } + end + end + + # GET /calentries/1 + # GET /calentries/1.json + def show + @calentry = Calentry.find(params[:id]) + + respond_to do |format| + format.html # show.html.erb + format.json { render json: @calentry } + format.ics { render 'show.ics.erb'} + end + end + + # GET /calentries/new + # GET /calentries/new.json + def new + @calentry = Calentry.new + + respond_to do |format| + format.html # new.html.erb + format.json { render json: @calentry } + end + end + + # GET /calentries/1/edit + def edit + @calentry = Calentry.find(params[:id]) + end + + # POST /calentries + # POST /calentries.json + def create + @calentry = Calentry.new(params[:calentry]) + + respond_to do |format| + if @calentry.save + format.html { redirect_to @calentry, notice: 'Calentry was successfully created.' } + format.json { render json: @calentry, status: :created, location: @calentry } + else + format.html { render action: "new" } + format.json { render json: @calentry.errors, status: :unprocessable_entity } + end + end + end + + # PUT /calentries/1 + # PUT /calentries/1.json + def update + @calentry = Calentry.find(params[:id]) + + respond_to do |format| + if @calentry.update_attributes(params[:calentry]) + format.html { redirect_to @calentry, notice: 'Calentry was successfully updated.' } + format.json { head :no_content } + else + format.html { render action: "edit" } + format.json { render json: @calentry.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /calentries/1 + # DELETE /calentries/1.json + def destroy + @calentry = Calentry.find(params[:id]) + @calentry.destroy + + respond_to do |format| + format.html { redirect_to calentries_url } + format.json { head :no_content } + end + end +end diff --git a/app/controllers/lvas_controller.rb b/app/controllers/lvas_controller.rb index 7b737dd..d2ee71f 100755 --- a/app/controllers/lvas_controller.rb +++ b/app/controllers/lvas_controller.rb @@ -16,14 +16,6 @@ class LvasController < ApplicationController @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 diff --git a/app/controllers/modulgruppen_controller.rb b/app/controllers/modulgruppen_controller.rb index c69f8fe..d84de6f 100755 --- a/app/controllers/modulgruppen_controller.rb +++ b/app/controllers/modulgruppen_controller.rb @@ -51,15 +51,10 @@ class ModulgruppenController < ApplicationController def create @modulgruppe = Modulgruppe.new(params[:modulgruppe]) - if !params[:studium_id].nil? - @studium=Studium.find_by_id(params[:studium_id]) - else - @studium=Studium.find_by_id(params[:modulgruppe][:studium_id]) - end respond_to do |format| if @modulgruppe.save - format.html { redirect_to @studium, notice: 'Modulgruppe was successfully created.' } + format.html { redirect_to @modulgruppe.studium, notice: 'Modulgruppe was successfully created.' } else format.html { render action: "new" } diff --git a/app/controllers/semesters_controller.rb b/app/controllers/semesters_controller.rb index 751a4b7..8a527c4 100755 --- a/app/controllers/semesters_controller.rb +++ b/app/controllers/semesters_controller.rb @@ -16,6 +16,7 @@ class SemestersController < ApplicationController def edit @semester = Semester.find(params[:id]) + @studium = @semester.studium end def create @@ -33,7 +34,7 @@ class SemestersController < ApplicationController def update @semester = Semester.find(params[:id]) - + @studium= @semester.studium respond_to do |format| if @semester.update_attributes(params[:semester]) format.html { redirect_to @semester, notice: 'Semester was successfully updated.' } diff --git a/app/controllers/studien_controller.rb b/app/controllers/studien_controller.rb index fb0ae58..f5b9d63 100755 --- a/app/controllers/studien_controller.rb +++ b/app/controllers/studien_controller.rb @@ -1,6 +1,6 @@ class StudienController < ApplicationController before_filter {@toolbar_elements =[]} - + # before_filter :authorize, :only => :verwalten def index @studien = Studium.all @@ -39,10 +39,10 @@ class StudienController < ApplicationController @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}] - if params[:ansicht] == 'semesteransicht' + if params[:ansicht] != 'modulgruppenansicht' @text = 'Zu Modulansicht wechseln' @flip = 'modulgruppenansicht' - render 'semesteransicht' + render 'semesteransicht' else @text = 'Zu Semesteransicht wechseln' @flip = 'semesteransicht' @@ -90,7 +90,147 @@ class StudienController < ApplicationController @studium.destroy redirect_to studien_url end + + def verwalten + @new_params={:std_verw=>params[:std_verw], :mg_verw=>params[:mg_verw], :m_verw=>params[:m_verw], :lva_verw=>params[:lva_verw], :b_verw=>params[:b_verw]} + if @new_params.values.compact.empty? + @studien=Studium.all + @modulgruppen=Modulgruppe.all + @module=Modul.all + @lvas=Lva.all + @beispiele=Beispiel.all + else + if !@new_params[:std_verw].nil? + @studien = [Studium.find(@new_params[:std_verw])] + else + @studien = Studium.all + end + if !@new_params[:mg_verw].nil? + @modulgruppen = [Modulgruppe.find(@new_params[:mg_verw])] + temp = @modulgruppen.map{|x| x.studium}.flatten.uniq # Force Studien + @studien=@studien.select{|k| temp.include?(k)} + + else + @modulgruppen = Modulgruppe.all + temp = @studien.map{|x| x.modulgruppen}.flatten.uniq # Studien forcen Modulgruppen + @modulgruppen = @modulgruppen.select{|k| temp.include?(k)} + end + if !@new_params[:m_verw].nil? + @module = [Modul.find(@new_params[:m_verw])] + temp = @module.map{|x| x.modulgruppen}.flatten.uniq # Force Modulgruppen + @modulgruppen = @modulgruppen.select{|k| temp.include?(k)} + temp = @modulgruppen.map{|x| x.studium}.flatten.uniq # Force Studien + @studien=@studien.select{|k| temp.include?(k)} + + else + @module = Modul.all + temp = @modulgruppen.map{|x| x.moduls}.flatten.uniq + @module=@module.select{|k| temp.include?(k)} + end + if !@new_params[:lva_verw].nil? + @lvas = [Lva.find(@new_params[:lva_verw])] + temp = @lvas.map{|x| x.modul}.flatten.uniq + @module=@module.select{|k| temp.include?(k)} + temp = @module.map{|x| x.modulgruppen}.flatten.uniq # Force Modulgruppen + @modulgruppen = @modulgruppen.select{|k| temp.include?(k)} + temp = @modulgruppen.map{|x| x.studium}.flatten.uniq # Force Studien + @studien=@studien.select{|k| temp.include?(k)} + else + @lvas = Lva.all + temp = @module.map{|x| x.lvas}.flatten.uniq #Force Module + @lvas=@lvas.select{|k| temp.include?(k)} + end + if !@new_params[:b_verw].nil? + @beispiele = [Beispiel.find(@new_params[:b_verw])] + temp = @lvas.map{|x| x.beispiele}.flatten.uniq #Force Force Lvas + @lvas=@lvas.select{|k| temp.include?(k)} + temp = @module.map{|x| x.lvas}.flatten.uniq #Force Module + @module=@module.select{|k| temp.include?(k)} + temp = @module.map{|x| x.modulgruppen}.flatten.uniq # Force Modulgruppen + @modulgruppen = @modulgruppen.select{|k| temp.include?(k)} + temp = @modulgruppen.map{|x| x.studium}.flatten.uniq # Force Studien + @studien=@studien.select{|k| temp.include?(k)} + + + else + @beispiele = Beispiel.all + temp = @lvas.map{|x| x.beispiele}.flatten.uniq # Force beispiel + @beispiele=@beispiele.select{|k| temp.include?(k)} + end + end + + @messages = [] + for s in @studien + + if s.valid? + @messages << s.name + ' hat keine Modulgruppe' if s.modulgruppen.count == 0 + + else + @messages << ''+s.name + ': ' + @messages << s.errors.full_messages + @messages << '' + end + end + for mg in @modulgruppen + + if mg.valid? + @messages << mg.name + ' hat kein Modul' if mg.moduls.count == 0 + else + @messages << ''+mg.name + ': ' + @messages << mg.errors.full_messages + @messages << '' + end + end + for m in @module + + if m.valid? + @messages << m.name.to_s + ' hat keine Modulgruppe' if m.modulgruppen.count == 0 + @messages << m.name.to_s + ' hat keine Lvas' if m.lvas.count == 0 + else + @messages << ''+m.name.to_s + ': ' + @messages << m.errors.full_messages + @messages << '' + end + end + for lva in @lvas + + if lva.valid? + @messages << lva.name + ' hat keine Module' if lva.modul.count == 0 + for s in @studien + stu_sem = s.semester.map{|l| l.lvas}.flatten.uniq.index(lva) + stu_mod = s.modulgruppen.map{|m| m.moduls}.flatten.map{|l| l.lvas}.flatten.uniq.index(lva) + if (stu_sem.nil? && !stu_mod.nil?) + @messages << lva.name + ' erscheint nicht in der Semesteransicht von ' +s.name + ' aber in der Modulgruppenansicht' + end + if (!stu_sem.nil? && stu_mod.nil?) + @messages << lva.name + ' erscheint in der Semesteransicht von ' +s.name + ' aber nicht in der Modulgruppenansicht' + end + end + else + @messages << ''+lva.name + ': ' + @messages << lva.errors.full_messages + @messages << '' + end + end + for b in @beispiele + if b.valid? + @messages << b.name + ' hat keine Lva' if b.lva.nil? + else + @messages << ''+b.name + ': ' + @messages << b.errors.full_messages + @messages << '' + end + end + render 'studien/verwalten' + end + def default_url_options - {ansicht: params[:ansicht]}.merge(super) + {:ansicht=> params[:ansicht], + :std_verw=> params[:std_verw], + :mg_verw=> params[:mg_verw], + :m_verw=>params[:m_verw], + :lva_verw=>params[:lva_verw], + :b_verw=>params[:b_verw]}.merge(super) + end end diff --git a/app/helpers/calendars_helper.rb b/app/helpers/calendars_helper.rb new file mode 100644 index 0000000..9712f62 --- /dev/null +++ b/app/helpers/calendars_helper.rb @@ -0,0 +1,2 @@ +module CalendarsHelper +end diff --git a/app/helpers/calentries_helper.rb b/app/helpers/calentries_helper.rb new file mode 100644 index 0000000..b46fa94 --- /dev/null +++ b/app/helpers/calentries_helper.rb @@ -0,0 +1,2 @@ +module CalentriesHelper +end diff --git a/app/inputs/date_string_input.rb b/app/inputs/date_string_input.rb new file mode 100644 index 0000000..a70ab33 --- /dev/null +++ b/app/inputs/date_string_input.rb @@ -0,0 +1,7 @@ +class DateStringInput < FormtasticBootstrap::Inputs::StringInput + def input_html_options + value = (@object.send(method.to_sym)) + super.merge(:class => "datetext", :onclick =>"beep", :value=>I18n.l((value.is_a?(Time)||value.is_a?(Date)||value.is_a?(DateTime)) ? value : Time.now)) + end + +end diff --git a/app/models/calendar.rb b/app/models/calendar.rb new file mode 100644 index 0000000..4f5de1d --- /dev/null +++ b/app/models/calendar.rb @@ -0,0 +1,5 @@ +class Calendar < ActiveRecord::Base + attr_accessible :name, :public, :picture + has_and_belongs_to_many :calentries + mount_uploader :picture, PictureUploader +end diff --git a/app/models/calentry.rb b/app/models/calentry.rb new file mode 100644 index 0000000..47f90ee --- /dev/null +++ b/app/models/calentry.rb @@ -0,0 +1,20 @@ +class Calentry < ActiveRecord::Base + attr_accessible :ende, :start, :summary, :typ,:calendar_ids + has_and_belongs_to_many :calendars + validates :start, :presence => true + validates :typ, :presence => true + validate do |entry| + if entry.ende.nil? + errors.add(:ende, "Es muss ein Endzeitpunkt vorhanden sein") + end + end + def start_time + start + end + def start1 + start.to_date + end + def name + summary + end +end diff --git a/app/models/lva.rb b/app/models/lva.rb index 86d1c5c..411d913 100755 --- a/app/models/lva.rb +++ b/app/models/lva.rb @@ -16,8 +16,9 @@ # class Lva < ActiveRecord::Base + ERLAUBTE_TYPEN = ['VO', 'UE', 'VU', 'LU', 'SE', 'andere']; has_paper_trail # Versionsverfolgung - attr_accessible :desc, :ects, :lvanr, :name, :stunden, :modul_ids, :semester_ids + attr_accessible :desc, :ects, :lvanr, :name, :stunden, :modul_ids, :semester_ids, :pruefungsinformation, :lernaufwand, :typ 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) @@ -27,8 +28,8 @@ class Lva < ActiveRecord::Base 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 :name, :presence=>true - validates :name, :uniqueness=>true# Name Eingetragen? + validates :name, :presence=>true, :uniqueness=>true# Name Eingetragen? + validates :typ, :presence=>true, :inclusion=> ERLAUBTE_TYPEN validates_presence_of :stunden # Stunden Eingetragen? validates_presence_of :modul # Zugehöriges Modul eingetragen? (zumindest eines) def add_semesters diff --git a/app/models/modulgruppe.rb b/app/models/modulgruppe.rb index dc3787b..236811c 100755 --- a/app/models/modulgruppe.rb +++ b/app/models/modulgruppe.rb @@ -13,7 +13,7 @@ # class Modulgruppe < ActiveRecord::Base - attr_accessible :name, :phase, :typ,:desc, :studium_id + attr_accessible :name, :phase, :typ,:desc, :studium_id, :modul_ids belongs_to :studium, :foreign_key => "studium_id" has_and_belongs_to_many :moduls diff --git a/app/models/studium.rb b/app/models/studium.rb index 94177f9..be8f3be 100755 --- a/app/models/studium.rb +++ b/app/models/studium.rb @@ -12,14 +12,17 @@ # created_at :datetime not null # updated_at :datetime not null class Studium < ActiveRecord::Base - attr_accessible :desc, :name, :typ, :zahl + attr_accessible :desc, :name,:abkuerzung, :typ, :zahl, :semester has_many :modulgruppen, inverse_of: :studium, :class_name => "Modulgruppe", :dependent => :destroy has_many :semester, :dependent => :destroy - + validates :abkuerzung, :length=>{:maximum=>5}, :format=>{:with=>/^[a-zA-z]{0,5}$/} validates :typ, :inclusion => {:in => ["Bachelor","Master"] } validates :name, :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 title_context + return self.abkuerzung.to_s.strip.empty? ? self.name : self.abkuerzung + end def batch_add_semester # Semester automatisch zu Studien hinzufügen diff --git a/app/uploaders/picture_uploader.rb b/app/uploaders/picture_uploader.rb new file mode 100644 index 0000000..ec0f27a --- /dev/null +++ b/app/uploaders/picture_uploader.rb @@ -0,0 +1,51 @@ +# encoding: utf-8 + +class PictureUploader < CarrierWave::Uploader::Base + + # Include RMagick or MiniMagick support: + include CarrierWave::RMagick + # include CarrierWave::MiniMagick + + # Choose what kind of storage to use for this uploader: + storage :file + # storage :fog + + # Override the directory where uploaded files will be stored. + # This is a sensible default for uploaders that are meant to be mounted: + def store_dir + "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" + end + + # Provide a default URL as a default if there hasn't been a file uploaded: + # def default_url + # # For Rails 3.1+ asset pipeline compatibility: + # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) + # + # "/images/fallback/" + [version_name, "default.png"].compact.join('_') + # end + + # Process files as they are uploaded: + # process :scale => [200, 300] + # + # def scale(width, height) + # # do something + # end + + # Create different versions of your uploaded files: + version :thumb do + process :resize_to_fill => [64, 64] + end + + # Add a white list of extensions which are allowed to be uploaded. + # For images you might use something like this: + def extension_white_list + %w(jpg jpeg gif png) + end + + # Override the filename of the uploaded files: + # Avoid using model.id or version_name here, see uploader/store.rb for details. + # def filename + # "something.jpg" if original_filename + # end + +end diff --git a/app/views/beispiele/_beispiel.html.erb b/app/views/beispiele/_beispiel.html.erb index 740e496..07c9cf9 100644 --- a/app/views/beispiele/_beispiel.html.erb +++ b/app/views/beispiele/_beispiel.html.erb @@ -1,4 +1,4 @@ -
+

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

<%= beispiel.desc %>
diff --git a/app/views/beispiele/_form.html.erb b/app/views/beispiele/_form.html.erb index bf0c027..26e018e 100755 --- a/app/views/beispiele/_form.html.erb +++ b/app/views/beispiele/_form.html.erb @@ -1,13 +1,25 @@ -<%= semantic_form_for @beispiel, :html => { :multipart => true } do |f| %> - <%= f.inputs do %> - <%= f.input :name %> - <%= f.input :desc %> - <%= f.file_field :beispieldatei %> - <%= f.hidden_field :beispieldatei_cache %> - <%= f.input :lva, :as=>:select, :collection => Lva.all%> - <% end %> - <%= f.actions do %> + <%= semantic_form_for @beispiel, :html => { :multipart => true } do |f| %> + + <%= f.inputs do %> + <%= f.hidden_field :beispieldatei_cache %> + + <%= f.file_field :beispieldatei, :wrapper_html=>{:class=>"span4"}%> +
+ <%= f.input :name, :wrapper_html=>{:class=>'span6'} %> + <%= f.input :lva, :as=>:select, :collection => Lva.all, :wrapper_html=>{:class=>'span6'}%> + + +
+ +
+ <%= f.input :desc %> +
+ <% end %> + + <%= f.actions do %> <%= f.action :submit, :as => :input %> - <% end %> -<% end %> + + <% end %> + + <% end %> diff --git a/app/views/beispiele/show.html.erb b/app/views/beispiele/show.html.erb index 1115fb3..49501a7 100755 --- a/app/views/beispiele/show.html.erb +++ b/app/views/beispiele/show.html.erb @@ -10,7 +10,9 @@ <%= @beispiel.desc %> <%= @beispiel.beispieldatei.url %>

- +

+ <%= @beispiel.lva.name %> +

<%= link_to 'Edit', edit_beispiel_path(@beispiel) %> | <%= link_to 'Back', beispiele_path %> diff --git a/app/views/calendars/_form.html.erb b/app/views/calendars/_form.html.erb new file mode 100644 index 0000000..139e9d8 --- /dev/null +++ b/app/views/calendars/_form.html.erb @@ -0,0 +1,11 @@ +<%= semantic_form_for @calendar do |f| %> + <%= f.inputs do %> + <%= f.input :name %> + <%= f.input :public %> + <%= f.input :picture, :as => :file %> + <% end %> + + <%= f.actions do %> + <%= f.action :submit, :as => :input %> + <% end %> +<% end %> diff --git a/app/views/calendars/edit.html.erb b/app/views/calendars/edit.html.erb new file mode 100644 index 0000000..e882347 --- /dev/null +++ b/app/views/calendars/edit.html.erb @@ -0,0 +1,6 @@ +

Editing calendar

+ +<%= render 'form' %> + +<%= link_to 'Show', @calendar %> | +<%= link_to 'Back', calendars_path %> diff --git a/app/views/calendars/index.html.erb b/app/views/calendars/index.html.erb new file mode 100644 index 0000000..8d6c591 --- /dev/null +++ b/app/views/calendars/index.html.erb @@ -0,0 +1,14 @@ +

Listing calendars

+ +<% @calendars.each do |calendar| %> +
+ + + +
+

<%= link_to calendar.name, calendar %>

+
+
+<% end %> + +<%= link_to 'New Calendar', new_calendar_path %> diff --git a/app/views/calendars/new.html.erb b/app/views/calendars/new.html.erb new file mode 100644 index 0000000..0d60f9a --- /dev/null +++ b/app/views/calendars/new.html.erb @@ -0,0 +1,5 @@ +

New calendar

+ +<%= render 'form' %> + +<%= link_to 'Back', calendars_path %> diff --git a/app/views/calendars/show.html.erb b/app/views/calendars/show.html.erb new file mode 100644 index 0000000..cb20b2a --- /dev/null +++ b/app/views/calendars/show.html.erb @@ -0,0 +1,30 @@ +
+
+

<%= notice %>

+ +

+ <%= ''.html_safe unless !@calendar.public%> + <%= @calendar.name %> +

+
+
    +<% @calendar.calentries.each do |entry| %> +
  • +<%= link_to entry.summary+ " - " + I18n.l(entry.start1), entry %> +
  • +<% end %> +
+
+
+<%= calendar @calendar.calentries do |entry| %> +
<%= link_to entry.name, entry %>
+<% end %> +
+
+
+<%= link_to 'New Entry', new_calentry_path, {:class=>"btn"} %> +<%= link_to 'Edit', edit_calendar_path(@calendar), {:class=>"btn"} %> +<%= link_to 'Back', calendars_path, {:class=>"btn"} %> +
+
+
diff --git a/app/views/calendars/show.ics.erb b/app/views/calendars/show.ics.erb new file mode 100644 index 0000000..8d3126f --- /dev/null +++ b/app/views/calendars/show.ics.erb @@ -0,0 +1,3 @@ +<% @calendar.calentries.each do |entry| %> +<%= render entry %> +<% end %> diff --git a/app/views/calentries/_calentry.ics.erb b/app/views/calentries/_calentry.ics.erb new file mode 100644 index 0000000..dead832 --- /dev/null +++ b/app/views/calentries/_calentry.ics.erb @@ -0,0 +1,5 @@ + <%= calentry.start %> + <%= calentry.ende %> + <%= calentry.summary %> + <%= calentry.typ %> + diff --git a/app/views/calentries/_form.html.erb b/app/views/calentries/_form.html.erb new file mode 100644 index 0000000..eb9bb02 --- /dev/null +++ b/app/views/calentries/_form.html.erb @@ -0,0 +1,34 @@ +
+<%= semantic_form_for @calentry do |f| %> + <%= f.inputs do %> +
+
+ <%= f.input :start , :as => :date_string %> +
+
+ <%= f.input :ende , :as => :date_string %> +
+
+
+
+ <%= f.input :summary %> +
+
+
+
+ <%= f.input :calendars, :as=> :radio %> +
+
+ <%= f.input :typ %> +
+
+ <% end %> +
+
+ <%= f.actions do %> + <%= f.action :submit, :as => :input %> + <% end %> +
+
+<% end %> +
diff --git a/app/views/calentries/edit.html.erb b/app/views/calentries/edit.html.erb new file mode 100644 index 0000000..2d1c180 --- /dev/null +++ b/app/views/calentries/edit.html.erb @@ -0,0 +1,6 @@ +

Editing calentry

+ +<%= render 'form' %> + +<%= link_to 'Show', @calentry %> | +<%= link_to 'Back', calentries_path %> diff --git a/app/views/calentries/index.html.erb b/app/views/calentries/index.html.erb new file mode 100644 index 0000000..a54afda --- /dev/null +++ b/app/views/calentries/index.html.erb @@ -0,0 +1,29 @@ +

Listing calentries

+ + + + + + + + + + + + +<% @calentries.each do |calentry| %> + + + + + + + + + +<% end %> +
StartEndeSummaryTyp
<%= calentry.start %><%= calentry.ende %><%= calentry.summary %><%= calentry.typ %><%= link_to 'Show', calentry %><%= link_to 'Edit', edit_calentry_path(calentry) %><%= link_to 'Destroy', calentry, method: :delete, data: { confirm: 'Are you sure?' } %>
+ +
+ +<%= link_to 'New Calentry', new_calentry_path %> diff --git a/app/views/calentries/new.html.erb b/app/views/calentries/new.html.erb new file mode 100644 index 0000000..022d6f8 --- /dev/null +++ b/app/views/calentries/new.html.erb @@ -0,0 +1,5 @@ +

New calentry

+ +<%= render 'form' %> + +<%= link_to 'Back', calentries_path %> diff --git a/app/views/calentries/show.html.erb b/app/views/calentries/show.html.erb new file mode 100644 index 0000000..faa5c9c --- /dev/null +++ b/app/views/calentries/show.html.erb @@ -0,0 +1,25 @@ +

<%= notice %>

+
+
+
+ + <%= @calentry.summary %> + + +
+
+
+
+ <%= I18n.l @calentry.start %> + <%= " bis " unless @calentry.ende.nil? %> + <%= I18n.l @calentry.ende %> +
+
+ <%= @calentry.typ %> +
+ +
+
+<%= link_to 'Edit', edit_calentry_path(@calentry) %> | +<%= link_to 'Back', calentries_path %> +
diff --git a/app/views/calentries/show.ics.erb b/app/views/calentries/show.ics.erb new file mode 100644 index 0000000..908d8dc --- /dev/null +++ b/app/views/calentries/show.ics.erb @@ -0,0 +1,25 @@ +

<%= notice %>

+ +

+ Start: + <%= @calentry.start %> +

+ +

+ Ende: + <%= @calentry.ende %> +

+ +

+ Summary: + <%= @calentry.summary %> +

+ +

+ Typ: + <%= @calentry.typ %> +

+ + +<%= link_to 'Edit', edit_calentry_path(@calentry) %> | +<%= link_to 'Back', calentries_path %> diff --git a/app/views/home/index.html.erb b/app/views/home/index.html.erb index 4d56fdb..6e2e796 100755 --- a/app/views/home/index.html.erb +++ b/app/views/home/index.html.erb @@ -1,3 +1,21 @@

<%= t 'home.willkommen' %>

+
+

Alpha Test

+

Die Webseite befindet sich derzeit in einem Entsicklungsstadium, +volle Funktionsfähigkeit ist noch nicht erreicht. Bitte Featurerequests und +Fehlermeldungen auf GitHub melden. +

+

+<%= link_to "Issues", "http://www.github.com/fetsite/fetsite/issues" %> +

+

+Folgene Features sind schon soweit, dass Bugreports sinnvoll sind: +

    +
  • Studien/Beispielsammlung
  • +
+alle anderen sind nur zur Voransicht. Bezüglich Design und Steuerung sind Vorschläge erwünscht. +

+

<%= link_to "Steuerelemente und Komponenten", "http://getbootstrap.com/2.3.2/index.html" %>

+

<%= t 'home.hallobeiderfet' %>

<%= link_to "Entwicklungsstatus" , home_dev_path %> diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 8e3d2d2..83b766f 100755 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -1,6 +1,8 @@ - + + + Fetsite <%= stylesheet_link_tag "application", :media => "all" %> @@ -15,9 +17,9 @@
-
+
-
+
<%= yield %>
diff --git a/app/views/layouts/menu.html.erb b/app/views/layouts/menu.html.erb index 033a319..0d1ce24 100755 --- a/app/views/layouts/menu.html.erb +++ b/app/views/layouts/menu.html.erb @@ -1,27 +1,41 @@ -<%= t 'home.mtitle'%> - -<% if user_signed_in? %> -
  • Logged in as : <%= current_user.email %> - <%= link_to('Logout', destroy_user_session_path, :method => :delete) %> -
  • -<% else %> -
  • - <%= link_to('Login', new_user_session_path) %> -
  • -<% end %> -<%if I18n.locale == :en %> -<%= link_to "Deutsch" ,switch_locale_url(:de)%> -<% elsif I18n.locale == :de %> - <%= link_to "English" ,switch_locale_url(:en)%> - <%end %> -<%= link_to 'Admin' , config_url -%> + diff --git a/app/views/lvas/_form.html.erb b/app/views/lvas/_form.html.erb index 49bbb78..ec38a70 100755 --- a/app/views/lvas/_form.html.erb +++ b/app/views/lvas/_form.html.erb @@ -1,15 +1,49 @@ -<%= 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 %> - <%= f.input :stunden %> - <%= f.input :desc %> - <%= f.input :lvanr %> - <% end %> - <%= f.actions do %> - <%= f.action :submit, :as => :input %> - <% end %> +<%= semantic_form_for @lva do |f| %> +
    + <%= f.inputs do %> + +
    +
    +
    +
    +
    + <%= f.input :typ, :as=>:select, :include_blank=>false, :collection=>Lva::ERLAUBTE_TYPEN, :wrapper_html=>{:class=>'span2'}%> + + <%= f.input :name, :wrapper_html=>{:class=>'span10'}%> +
    +
    +
    +
    + <%= f.input :lvanr, :wrapper_html=>{:class=>'span4'}%> + + <%= f.input :ects, :wrapper_html=>{:class=>'span4'} %> + <%= f.input :stunden, :wrapper_html=>{:class=>'span4'} %> +
    +
    +
    +
    +
    +
    + <%= f.input :desc %> + <%= f.input :pruefungsinformation %> + <%= f.input :lernaufwand %> +
    +
    + +
    +

    BILD

    + <%= f.input :modul, :as=>:check_boxes%> +
    +
    +
    +
    + + <%= f.input :semester, :as=>:check_boxes%> + +
    + <% end %> + <%= f.actions do %> + <%= f.action :submit, :as => :input %> + <% end %> <% end %> diff --git a/app/views/lvas/_lva_semester.html.erb b/app/views/lvas/_lva_semester.html.erb index a60029d..8e92fd7 100755 --- a/app/views/lvas/_lva_semester.html.erb +++ b/app/views/lvas/_lva_semester.html.erb @@ -1,10 +1,9 @@ -

    +

    <%= 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/show.html.erb b/app/views/lvas/show.html.erb index 204c3e4..a294a2e 100755 --- a/app/views/lvas/show.html.erb +++ b/app/views/lvas/show.html.erb @@ -1,36 +1,60 @@
    -<%= render 'layouts/topbar'%> -

    <%= notice %>

    -

    - -

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

    - -

    - + <%= render 'studien/tabs'%> +

    <%= notice %>

    +
    +
    +

    <%=@lva.typ.to_s + ' ' + @lva.name %>

    +

    Prüfungsinformation

    +
    + <%= @lva.pruefungsinformation %> +
    +

    Lernaufwand

    +
    + <%= @lva.lernaufwand %> +
    +

    Beschreibung

    +
    + <%= @lva.desc %> +
    +
    +

    Beispiele

    Beschreibung

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

    -

    Beispiele

    +
      <% @lva.beispiele.each do |b|%> - <%= render b%> - - <% end %> -
    -

    Module

    -
      - <% @lva.modul.each do |modul| %> -
    • <%= link_to modul.name , modul_path(modul)%> + <%= render b%> + <% end %> +
    +
    +
    +
      - <% modul.modulgruppen.each do |g| %> +
    • LVA-Nummer: <%=@lva.lvanr %>
    • +
    • ECTS: <%=@lva.ects %>
    • +
    • Stunden: <%=@lva.ects %>
    • +
    +

    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' %> +
  • <%= link_to g.studium.title_context , studium_path(g.studium)%> (<%=link_to g.name, modulgruppe_path(g)%>)
  • + <% end %> + + + + <% end %> + +
    +
    +
    + + <%= render 'layouts/pretty_toolbar' %>
    diff --git a/app/views/modulgruppen/_form.html.erb b/app/views/modulgruppen/_form.html.erb index 8191af5..52a558e 100755 --- a/app/views/modulgruppen/_form.html.erb +++ b/app/views/modulgruppen/_form.html.erb @@ -1,13 +1,29 @@ <%= semantic_form_for @modulgruppe do |f| %> - <%= f.inputs do %> - <%= f.input :studium_id, :as =>:select, :collection => Studium.all %> - <%= f.input :typ ,:as => :radio, :collection=>["Pflicht","Vertiefungspflicht","Wahl"]%> - <%= f.input :phase,:as => :radio,:collection=>1..3 %> - <%= f.input :name %> - <%= f.input :desc,:input_html=>{:rows=> 3 }%> - <% end %> +<%= f.inputs do %> +
    - <%= f.actions do %> - <%= f.action :submit, :as => :input %> +
    + <%= f.input :name, :wrapper_html=>{:class=>"span12"}%> +
    +
    + <%= f.input :studium_id, :as =>:select, :collection => Studium.all, :wrapper_html=>{:class=>"span4"} %> + <%= f.input :typ, :collection=>["Pflicht","Vertiefungspflicht","Wahl"], :wrapper_html=>{:class=>"span4"}%> + <%= f.input :phase, :as=>:select, :collection=>1..3, :wrapper_html=>{:class=>"span4"} %> +
    + + +
    + <%= f.input :desc %> + +
    + +
    +
    + <%= f.input :moduls, :as=>:check_boxes %> +
    <% end %> +<%= f.actions do %> +<%= f.action :submit, :as => :input %> + +<% end %> <% end %> diff --git a/app/views/modulgruppen/_kurz.html.erb b/app/views/modulgruppen/_kurz.html.erb new file mode 100644 index 0000000..73fad72 --- /dev/null +++ b/app/views/modulgruppen/_kurz.html.erb @@ -0,0 +1 @@ +<%=link_to modulgruppe.name, modulgruppe %> <%= ' ( ' + modulgruppe.studium.title_context + ')' unless modulgruppe.studium.nil? %> diff --git a/app/views/modulgruppen/show.html.erb b/app/views/modulgruppen/show.html.erb index b8a33b3..3c00840 100755 --- a/app/views/modulgruppen/show.html.erb +++ b/app/views/modulgruppen/show.html.erb @@ -1,11 +1,4 @@ - -

    <%= notice %>

    -

    <%= @modulgruppe.name %>

    @@ -19,9 +12,8 @@ <% @modulgruppe.moduls.each do |modul| %> -<%= render modul%> +<%= render 'moduls/kurz', :modul=>modul%> <% end %> -
    <%= I18n.t("common.actions")%> @@ -30,4 +22,4 @@ <%= link_to I18n.t("modulgruppe.studium"), studium_path(@modulgruppe.studium),:class =>"btn" %> <%= link_to I18n.t("common.edit"), edit_modulgruppe_path(@modulgruppe),:class =>"btn" %> <%= link_to I18n.t("common.delete"),[@modulgruppe], :method=>:delete , :data=>{:confirm=>I18n.t("common.sure")} ,:class=>"btn" %> -
    +
    diff --git a/app/views/moduls/_form.html.erb b/app/views/moduls/_form.html.erb index fb6b68b..db03f9d 100755 --- a/app/views/moduls/_form.html.erb +++ b/app/views/moduls/_form.html.erb @@ -1,15 +1,30 @@ +
    + <%= semantic_form_for @modul do |f| %> -<%= 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 %> - <%= f.input :name ,:hint=>true%> - <%= f.input :desc, :as=>:tinymce_text %> - <%= f.input :depend %> +
    +
    + <%= f.input :name ,:hint=>true%> +
    +
    + <%= f.input :desc, :as=>:tinymce_text %> +
    +
    + <%= f.input :depend %> +
    +
    +
    +
    + <%= f.input :modulgruppen,:as => :check_boxes, :collection => Hash[Modulgruppe.all.map{|m| [m.studium.name + " " + m.name,m.id]}.sort] %> +
    +
    + <% end %> <%= f.actions do %> - <%= f.action :submit, :as => :input %> + <%= f.action :submit, :as => :input %> <% end %> -<% end %> + + <% end %> +
    <%= tinymce %> diff --git a/app/views/moduls/_kurz.html.erb b/app/views/moduls/_kurz.html.erb index 7792e5b..2f70525 100755 --- a/app/views/moduls/_kurz.html.erb +++ b/app/views/moduls/_kurz.html.erb @@ -1,10 +1,6 @@

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

    -

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

    - <% link_to ''.html_safe+I18n.t("common.edit"), edit_modul_path(modul) %>
    diff --git a/app/views/moduls/_modul.html.erb b/app/views/moduls/_modul.html.erb index eca542f..0bf3d55 100755 --- a/app/views/moduls/_modul.html.erb +++ b/app/views/moduls/_modul.html.erb @@ -1,26 +1,28 @@ -

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

    + +

    <%=@modul.name %>

    + + + +
    +
    +

    Beschreibung

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

    -LVAs: -
      - -<% modul.lvas.each do |lv| %> -
    • -<%= link_to lv.name.to_s, lva_path(lv.id) %> -
    • +
    +
    +

    Modulgruppen

    +<% @modul.modulgruppen.each do |mg| %> +<%= render 'modulgruppen/kurz', :modulgruppe=>mg %>
    <% end %> - +

    Lvas

    +<% @modul.lvas.each_slice(3) do |row| %> +<% row.each do |lv| %> +<%= render 'lvas/lva_semester', :lva=>lv%> +<% end %> -<% # @toolbar_elements << {:icon=>:pencil,:text=>I18n.t("common.edit"),:path=> edit_modul_path(modul)} %> -
    +<% end %> + +
    diff --git a/app/views/moduls/show.html.erb b/app/views/moduls/show.html.erb index 7e297e7..8253a6b 100755 --- a/app/views/moduls/show.html.erb +++ b/app/views/moduls/show.html.erb @@ -1,8 +1,6 @@ -<%= render 'layouts/topbar'%> + +<%= render 'studien/tabs'%>

    <%= notice %>

    <%= render @modul %> <%= 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 710e4ea..7ff4d18 100755 --- a/app/views/semesters/_form.html.erb +++ b/app/views/semesters/_form.html.erb @@ -1,12 +1,11 @@ <%= semantic_form_for @semester do |f| %> <%= f.inputs do %> - <%= f.input :name %> - <%= f.input :nummer %> - <%= f.input :ssws %> - <%= f.input :lvas %> + <%= f.input :lvas, :as=>:check_boxes%> <% end %> <%= f.actions do %> <%= f.action :submit, :as => :input %> <% end %> <% end %> +<%= link_to 'Zurück',@studium, :class=>"btn"%> +x diff --git a/app/views/semesters/edit.html.erb b/app/views/semesters/edit.html.erb index 10925ec..bf39462 100755 --- a/app/views/semesters/edit.html.erb +++ b/app/views/semesters/edit.html.erb @@ -1,6 +1,3 @@ -

    Editing semester

    +

    <%=@semester.name%>

    + <%= render 'form' %> -<%= render 'form' %> - -<%= link_to 'Show', @semester %> | -<%= link_to 'Back', semesters_path %> diff --git a/app/views/studien/_form.html.erb b/app/views/studien/_form.html.erb index 471a8c3..6cdb5c2 100755 --- a/app/views/studien/_form.html.erb +++ b/app/views/studien/_form.html.erb @@ -1,13 +1,25 @@ +
    <%= tinymce_assets %> -<%= semantic_form_for @studium do |f| %> + <%= semantic_form_for @studium do |f| %> + <%= f.inputs do %> - <%= f.input :zahl %> - <%= f.input :name,:append=>"NAME" %> - <%= f.input :desc, :as=>:tinymce_text %> - <%= f.input :typ, :as=>:radio, :collection=>["Bachelor","Master"]%> + +
    + <%= f.input :name,:append=>"NAME", :wrapper_html=>{:class=>"span6"}%> + + <%= f.input :abkuerzung, :wrapper_html=>{:class=>"span1"}%> + <%= f.input :zahl , :wrapper_html=>{:class=>"span2"}%> + + <%= f.input :typ, :as=>:select, :include_blank=>false, :collection=>["Bachelor","Master"], :wrapper_html=>{:class=>"span2"}%> +
    +
    + <%= f.input :desc, :as=>:tinymce_text , :wrapper_html=>{:class=>"span12"}%> +
    + <% end %> -<%= tinymce %> + <%= tinymce %> <%= f.actions do %> - <%= f.action :submit, :as => :input %> + <%= f.action :submit, :as => :input %> <% end %> -<% end %> + <% end %> +
    diff --git a/app/views/studien/_tabs.html.erb b/app/views/studien/_tabs.html.erb index 5bb202f..12684ca 100644 --- a/app/views/studien/_tabs.html.erb +++ b/app/views/studien/_tabs.html.erb @@ -1,18 +1,25 @@ diff --git a/app/views/studien/_verwalten_menu.html.erb b/app/views/studien/_verwalten_menu.html.erb new file mode 100644 index 0000000..e69de29 diff --git a/app/views/studien/semesteransicht.html.erb b/app/views/studien/semesteransicht.html.erb index ee4d588..e9f423a 100644 --- a/app/views/studien/semesteransicht.html.erb +++ b/app/views/studien/semesteransicht.html.erb @@ -11,16 +11,19 @@ <% @studium.semester.each do |sem| %>
    -
    +
    - +
    +

    <%= sem.name %>

    - - <% sem.lvas.each_slice(2) do |row| %> +
    +
    <%= link_to 'Lvas hinzufügen/entfernen', edit_semester_path(sem), :class=>"btn"%>
    +
    + <% sem.lvas.each_slice(4) do |row| %>
    <% row.each do |l| %> -
    +
    <%= render :partial=>'lvas/lva_semester', :locals =>{:lva => l}%>
    <% end %> diff --git a/app/views/studien/verwalten.html.erb b/app/views/studien/verwalten.html.erb new file mode 100644 index 0000000..c1008e8 --- /dev/null +++ b/app/views/studien/verwalten.html.erb @@ -0,0 +1,172 @@ +
    + <%= render 'studien/tabs'%> +
    +
    + +

    <%= I18n.t("studien.verwaltung.title") %>

    + <%= I18n.t("studien.verwaltung.explanation").html_safe %> +

    Studien

    +
    + + | + <% @studien.each do |s| %> + <%= (s.valid?) ? ' '.html_safe : ''.html_safe %> <%= link_to s.name, s %> | <%=link_to ''.html_safe+ 'edit', edit_studium_path(s)%> ||<% end %> +
    +
    + + <%= params[:std_verw].nil? ? I18n.t("filter.studium") : Studium.find(params[:std_verw]).name %> + + + + +
    + <%= link_to 'Neues Studium', new_studium_path, :class=>'btn'%> +
    + +
    +
    + +
    +

    Modulgruppen

    +
    + <% @modulgruppen.each do |mg| %> + <%= (mg.valid?) ? ' '.html_safe : ''.html_safe %> <%= link_to mg.name, mg %> | <%=link_to ''.html_safe+ 'edit', edit_modulgruppe_path(mg)%>
    + <% end %> +
    +
    + + <%= params[:mg_verw].nil? ? I18n.t("filter.modulgruppe") : Modulgruppe.find(params[:mg_verw]).name %> + + + + + +
    + <%= link_to "Neue Modulgruppe", new_studium_modulgruppe_path(Studium.first), :class=>"btn" unless Studium.first.nil?%> +
    + + +
    +
    +
    +

    Module

    +
    + + + <% @module.each do |m| %> + <%= (m.valid?) ? ' '.html_safe : ''.html_safe %> <%= link_to m.name, m %> + | <%=link_to ''.html_safe+ 'edit', edit_modul_path(m)%>
    + <% end %> +
    +
    + + <%= params[:m_verw].nil? ? I18n.t("filter.modul") : Modul.find(params[:m_verw]).name %> + + + + + +
    + <%= link_to "Neues Modul", new_modul_path, :class=>"btn"%> +
    +
    +
    +
    +

    Lvas

    +
    + + + <% @lvas.each do |lva| %> + <%= (lva.valid?) ? ' '.html_safe : ''.html_safe %><%= link_to lva.name, lva %> | + <%=link_to ''.html_safe+ 'edit', edit_lva_path(lva)%>
    + + <% end %> +
    +
    + + <%= params[:lva_verw].nil? ? I18n.t("filter.lva") : Lva.find(params[:lva_verw]).name %> + + + + + +
    + <%= link_to "Neue LVa", new_lva_path, :class=>'btn'%> +
    +
    +
    + + + + +
    +
    +
    + <%= link_to I18n.t("filter.reset"), studien_verwalten_path(:std_verw=>nil, :mg_verw=>nil, :m_verw=>nil, :lva_verw=>nil, :b_verw=>nil), :class=>"btn" %> +

    Error Log

    +
      +
    • Red: Error, Solve immediately
    • +
    • Black: Warning, should be solved
    • +
    • Green: Everything is fine
    • +
    +
    +
      + <% @messages.flatten.each do |m| %> + <% if !m.strip.empty? %> +
    • <%= m.html_safe %>
    • + <% end %> + <% end %> +
    + <%= I18n.t("verwalten.fehler.keine").html_safe if @messages.empty?%> +
    +

    Beispiele

    +
    + + + <% @beispiele.each do |b| %> +<%= (b.valid?) ? ' '.html_safe : ''.html_safe %> <%= link_to b.name, b %> | <%=link_to ''.html_safe+ 'edit', edit_beispiel_path(b)%> + <% end %> +
    +
    + + <%= params[:b_verw].nil? ? I18n.t("filter.beispiel") : Beispiel.find(params[:b_verw]).name %> + + + + + +
    + <%= link_to "Neues Beispiel", new_beispiel_path, :class=>"btn"%> +
    + +
    +
    + +
    +
    diff --git a/config/locales/de.yml b/config/locales/de.yml index 84fa7a6..8dbaa04 100755 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -13,6 +13,12 @@ de: allestudien: "Alle Studien" loeschen: "Dieses Studium löschen" edit: "Studium bearbeiten" + verwaltung: + title: "Studien verwalten" + explanation: "
      +
    • Klick auf den Namen eines Objektes führt zu dessen Ansicht, ein Klick auf edit direkt zum Bearbeitungsformular
    • +
    • Per Dropdown-Menü kann nach einzelnen Objekten gefiltert werden. Die Filter können kombiniert werden, wobei nur erlaubte Kombinationen möglich sind. Solange validation-Fehler (im Log rot und fett) auftreten, keine Filter verwenden
    • +
    " modul: edit: "Modul bearbeiten" list: "Alle Module" @@ -82,15 +88,21 @@ de: lva: attributes: modul: - blank: "Wählen Sie zumindest ein Modul aus" + blank: "Lva muss zumindest einem Modul zugewiesen sein" name: - blank: "Geben Sie bitte den Namen der LVA an" + blank: "Die Lva muss einen Namen haben" ects: - blank: "Geben Sie die ECTS der LVA an" + blank: "Es müssen ECTS eingetragen sein" stunden: - blank: "Geben Sie die Stunden der LVA an" + blank: "Es muss die Studenanzahl eingettragen sein" lvanr: - invalid: "Geben Sie eine LVA-Nummer in richtigem Format an. Wenn die LVA noch keine Nummer hat, so geben sie 000 an." + invalid: "Die Nummer muss im Format 000.000 eingegeben sein" + blank: "Geben sie eine Lva-Nr an" + taken: "Die Lva-Nummer ist vergeben" + typ: + blank: "Es muss ein Lva-Typ angegeben sein" + inclusion: "Der Typ ist nicht aus der Auswahl der gültigen Typen" + studium: attributes: zahl: @@ -102,6 +114,215 @@ de: taken: "Der Name ist bereits vergeben" typ: inclusion: 'Wählen Sie "Bachelor" oder "Master" aus' - - - + modul: + attributes: + modulgruppen: + blank: "Wählen Sie zumindest eine Modulgruppe aus" + filter: + studium: "Studium" + modulgruppe: "Modulgruppe" + modul: "Modul" + lva: "Lva" + beispiel: "Beispiel" + reset: "Alle Filter zurücksetzen" + verwalten: + fehler: + keine: "Keine Fehlermeldungen oder Warnungen" + support: + array: + two_words_connector: ', ' + date: + abbr_day_names: + - So + - Mo + - Di + - Mi + - Do + - Fr + - Sa + abbr_month_names: + - + - Jan + - Feb + - Mär + - Apr + - Mai + - Jun + - Jul + - Aug + - Sep + - Okt + - Nov + - Dez + day_names: + - Sonntag + - Montag + - Dienstag + - Mittwoch + - Donnerstag + - Freitag + - Samstag + formats: + default: ! '%d.%m.%Y' + long: ! '%e. %B %Y' + short: ! '%e. %b' + month_names: + - + - Januar + - Februar + - März + - April + - Mai + - Juni + - Juli + - August + - September + - Oktober + - November + - Dezember + order: + - :day + - :month + - :year + datetime: + distance_in_words: + about_x_hours: + one: etwa eine Stunde + other: etwa %{count} Stunden + about_x_months: + one: etwa ein Monat + other: etwa %{count} Monate + about_x_years: + one: etwa ein Jahr + other: etwa %{count} Jahre + almost_x_years: + one: fast ein Jahr + other: fast %{count} Jahre + half_a_minute: eine halbe Minute + less_than_x_minutes: + one: weniger als eine Minute + other: weniger als %{count} Minuten + less_than_x_seconds: + one: weniger als eine Sekunde + other: weniger als %{count} Sekunden + over_x_years: + one: mehr als ein Jahr + other: mehr als %{count} Jahre + x_days: + one: ein Tag + other: ! '%{count} Tage' + x_minutes: + one: eine Minute + other: ! '%{count} Minuten' + x_months: + one: ein Monat + other: ! '%{count} Monate' + x_seconds: + one: eine Sekunde + other: ! '%{count} Sekunden' + prompts: + day: Tag + hour: Stunden + minute: Minuten + month: Monat + second: Sekunden + year: Jahr + errors: + format: ! '%{attribute} %{message}' + messages: + accepted: muss akzeptiert werden + blank: muss ausgefüllt werden + confirmation: stimmt nicht mit der Bestätigung überein + empty: muss ausgefüllt werden + equal_to: muss genau %{count} sein + even: muss gerade sein + exclusion: ist nicht verfügbar + greater_than: muss größer als %{count} sein + greater_than_or_equal_to: muss größer oder gleich %{count} sein + inclusion: ist kein gültiger Wert + invalid: ist nicht gültig + less_than: muss kleiner als %{count} sein + less_than_or_equal_to: muss kleiner oder gleich %{count} sein + not_a_number: ist keine Zahl + not_an_integer: muss ganzzahlig sein + odd: muss ungerade sein + record_invalid: ! 'Gültigkeitsprüfung ist fehlgeschlagen: %{errors}' + taken: ist bereits vergeben + too_long: ist zu lang (nicht mehr als %{count} Zeichen) + too_short: ist zu kurz (nicht weniger als %{count} Zeichen) + wrong_length: hat die falsche Länge (muss genau %{count} Zeichen haben) + template: + body: ! 'Bitte überprüfen Sie die folgenden Felder:' + header: + one: ! 'Konnte %{model} nicht speichern: ein Fehler.' + other: ! 'Konnte %{model} nicht speichern: %{count} Fehler.' + helpers: + select: + prompt: Bitte wählen + submit: + create: ! '%{model} erstellen' + submit: ! '%{model} speichern' + update: ! '%{model} aktualisieren' + number: + currency: + format: + delimiter: . + format: ! '%n %u' + precision: 2 + separator: ! ',' + significant: false + strip_insignificant_zeros: false + unit: € + format: + delimiter: . + precision: 2 + separator: ! ',' + significant: false + strip_insignificant_zeros: false + human: + decimal_units: + format: ! '%n %u' + units: + billion: + one: Milliarde + other: Milliarden + million: Millionen + quadrillion: + one: Billiarde + other: Billiarden + thousand: Tausend + trillion: Billionen + unit: '' + format: + delimiter: '' + precision: 1 + significant: true + strip_insignificant_zeros: true + storage_units: + format: ! '%n %u' + units: + byte: + one: Byte + other: Bytes + gb: GB + kb: KB + mb: MB + tb: TB + percentage: + format: + delimiter: '' + precision: + format: + delimiter: '' + support: + array: + last_word_connector: ! ' und ' + two_words_connector: ! ' und ' + words_connector: ! ', ' + time: + am: vormittags + formats: + default: ! '%d.%m.%Y, %H:%M Uhr' + long: ! '%A, %d. %B %Y, %H:%M Uhr' + short: ! '%d.%m.%Y, %H:%M Uhr' + pm: nachmittags \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 530ace4..91a893c 100755 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,124 +1,114 @@ Fetsite::Application.routes.draw do - - resources :fragen - - - resources :attachments - - - - - - - - - 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 :studien, :only=>[:new,:edit,:update,:destroy] - scope '(:ansicht)' do - resources :studien, :only=>[:show] -end -resources :modulgruppen,:only =>[:create,:index] + 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 -resources :studien,:except=>[:show,:new,:edit,:update,:destroy], :shallow=>true do - resources :modulgruppen, :path => "(:locale)/modulgruppen" - -end -# get 'studien/(:ansicht)/:id', :controller=>:studien, :action=>:show, :as=>'studium_ansicht' -resources :semesters -resources :moduls -resources :lvas -resources :neuigkeiten -get 'rubriken/verwalten', :controller=>:rubriken, :action=>:alle_verwalten, :as=>'alle_verwalten_rubrik' + devise_for :users -resources :rubriken do - 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' -resources :home, :only=>[:index] -get 'home/dev', :controller=>:home, :action=>:dev, :as=>'home_dev' -resources :beispiele -resources :themen -resources :themengruppen do -resources :themen, :only=>[:new, :show] -end + resources :pages, :except => [:index] do + member do + post 'preview' + end + end + get 'pages', :to =>'pages#show' + scope '(:locale)' do + + resources :studien, :only=>[:new,:edit,:update,:destroy] + scope '(:ansicht)' do + resources :studien, :only=>[:show] + end + resources :modulgruppen,:only =>[:create,:index] - end + resources :studien,:except=>[:show,:new,:edit,:update,:destroy], :shallow=>true do + resources :modulgruppen, :path => "(:locale)/modulgruppen" + + end + get 'verwalten/studien', :controller=>:studien, :action=>:verwalten, :as=>'studien_verwalten' + resources :semesters + resources :moduls + resources :lvas + resources :neuigkeiten + get 'rubriken/verwalten', :controller=>:rubriken, :action=>:alle_verwalten, :as=>'alle_verwalten_rubrik' - # The priority is based upon order of creation: - # first created -> highest priority. + resources :rubriken do + 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' + resources :home, :only=>[:index] + get 'home/dev', :controller=>:home, :action=>:dev, :as=>'home_dev' + resources :beispiele + resources :themen + resources :themengruppen do + resources :themen, :only=>[:new, :show] + end + + resources :calendars + resources :calentries + end - # Sample of regular route: - # match 'products/:id' => 'catalog#view' - # Keep in mind you can assign values other than :controller and :action + # The priority is based upon order of creation: + # first created -> highest priority. - # Sample of named route: - # match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase - # This route can be invoked with purchase_url(:id => product.id) + # Sample of regular route: + # match 'products/:id' => 'catalog#view' + # Keep in mind you can assign values other than :controller and :action - # Sample resource route (maps HTTP verbs to controller actions automatically): - # resources :products + # Sample of named route: + # match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase + # This route can be invoked with purchase_url(:id => product.id) - # Sample resource route with options: - # resources :products do - # member do - # get 'short' - # post 'toggle' - # end - # - # collection do - # get 'sold' - # end - # end + # Sample resource route (maps HTTP verbs to controller actions automatically): + # resources :products - # Sample resource route with sub-resources: - # resources :products do - # resources :comments, :sales - # resource :seller - # end + # Sample resource route with options: + # resources :products do + # member do + # get 'short' + # post 'toggle' + # end + # + # collection do + # get 'sold' + # end + # end - # Sample resource route with more complex sub-resources - # resources :products do - # resources :comments - # resources :sales do - # get 'recent', :on => :collection - # end - # end + # Sample resource route with sub-resources: + # resources :products do + # resources :comments, :sales + # resource :seller + # end - # Sample resource route within a namespace: - # namespace :admin do - # # Directs /admin/products/* to Admin::ProductsController - # # (app/controllers/admin/products_controller.rb) - # resources :products - # end + # Sample resource route with more complex sub-resources + # resources :products do + # resources :comments + # resources :sales do + # get 'recent', :on => :collection + # end + # end - # You can have the root of your site routed with "root" - # just remember to delete public/index.html. + # Sample resource route within a namespace: + # namespace :admin do + # # Directs /admin/products/* to Admin::ProductsController + # # (app/controllers/admin/products_controller.rb) + # resources :products + # end - root :to => 'home#index' + # You can have the root of your site routed with "root" + # just remember to delete public/index.html. - # See how all your routes lay out with "rake routes" + root :to => 'home#index' - # This is a legacy wild controller route that's not recommended for RESTful applications. - # Note: This route will make all actions in every controller accessible via GET requests. - # match ':controller(/:action(/:id))(.:format)' -end + # See how all your routes lay out with "rake routes" + + # This is a legacy wild controller route that's not recommended for RESTful applications. + # Note: This route will make all actions in every controller accessible via GET requests. + # match ':controller(/:action(/:id))(.:format)' + end diff --git a/db/migrate/20130805191709_create_calentries.rb b/db/migrate/20130805191709_create_calentries.rb new file mode 100644 index 0000000..c4ece84 --- /dev/null +++ b/db/migrate/20130805191709_create_calentries.rb @@ -0,0 +1,12 @@ +class CreateCalentries < ActiveRecord::Migration + def change + create_table :calentries do |t| + t.timestamp :start + t.timestamp :ende + t.string :summary + t.integer :typ + + t.timestamps + end + end +end diff --git a/db/migrate/20130805191817_create_calendars.rb b/db/migrate/20130805191817_create_calendars.rb new file mode 100644 index 0000000..bc12669 --- /dev/null +++ b/db/migrate/20130805191817_create_calendars.rb @@ -0,0 +1,10 @@ +class CreateCalendars < ActiveRecord::Migration + def change + create_table :calendars do |t| + t.string :name + t.boolean :public + + t.timestamps + end + end +end diff --git a/db/migrate/20130808062732_create_calendar_calentries_join_table.rb b/db/migrate/20130808062732_create_calendar_calentries_join_table.rb new file mode 100644 index 0000000..bbf0362 --- /dev/null +++ b/db/migrate/20130808062732_create_calendar_calentries_join_table.rb @@ -0,0 +1,13 @@ +class CreateCalendarCalentriesJoinTable < ActiveRecord::Migration + def up + create_table :calendars_calentries, :id=>false do |t| + t.integer :calentry_id + t.integer :calendar_id + end + add_index :calendars_calentries, [:calentry_id, :calendar_id] + add_index :calendars_calentries, :calendar_id + end + + def down + end +end diff --git a/db/migrate/20130810214456_add_picture_to_calendars.rb b/db/migrate/20130810214456_add_picture_to_calendars.rb new file mode 100644 index 0000000..d1b4b44 --- /dev/null +++ b/db/migrate/20130810214456_add_picture_to_calendars.rb @@ -0,0 +1,5 @@ +class AddPictureToCalendars < ActiveRecord::Migration + def change + add_column :calendars, :picture, :string + end +end diff --git a/db/migrate/20130811191150_add_pruefungsinfos_to_lvas.rb b/db/migrate/20130811191150_add_pruefungsinfos_to_lvas.rb new file mode 100644 index 0000000..a4a2443 --- /dev/null +++ b/db/migrate/20130811191150_add_pruefungsinfos_to_lvas.rb @@ -0,0 +1,6 @@ +class AddPruefungsinfosToLvas < ActiveRecord::Migration + def change + add_column :lvas, :pruefungsinformation, :text + add_column :lvas, :lernaufwand, :text + end +end diff --git a/db/migrate/20130812070544_add_typ_to_lvas.rb b/db/migrate/20130812070544_add_typ_to_lvas.rb new file mode 100644 index 0000000..ed8c291 --- /dev/null +++ b/db/migrate/20130812070544_add_typ_to_lvas.rb @@ -0,0 +1,5 @@ +class AddTypToLvas < ActiveRecord::Migration + def change + add_column :lvas, :typ, :string + end +end diff --git a/db/migrate/20130813145651_add_abkuerzung_to_studien.rb b/db/migrate/20130813145651_add_abkuerzung_to_studien.rb new file mode 100644 index 0000000..bc8ee06 --- /dev/null +++ b/db/migrate/20130813145651_add_abkuerzung_to_studien.rb @@ -0,0 +1,5 @@ +class AddAbkuerzungToStudien < ActiveRecord::Migration + def change + add_column :studien, :abkuerzung, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index 6a96d37..85d18a2 100755 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,14 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20130729085446) do +ActiveRecord::Schema.define(:version => 20130813145651) do + + create_table "attachments", :force => true do |t| + t.string "name" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "thema_id" + end create_table "beispiele", :force => true do |t| t.string "name" @@ -22,6 +29,50 @@ ActiveRecord::Schema.define(:version => 20130729085446) do t.string "beispieldatei" end + create_table "calendars", :force => true do |t| + t.string "name" + t.boolean "public" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "picture" + end + + create_table "calendars_calentries", :id => false, :force => true do |t| + t.integer "calentry_id" + t.integer "calendar_id" + end + + add_index "calendars_calentries", ["calendar_id"], :name => "index_calendars_calentries_on_calendar_id" + add_index "calendars_calentries", ["calentry_id", "calendar_id"], :name => "index_calendars_calentries_on_calentry_id_and_calendar_id" + + create_table "calentries", :force => true do |t| + t.datetime "start" + t.datetime "ende" + t.string "summary" + t.integer "typ" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "frage_translations", :force => true do |t| + t.string "locale" + t.string "title" + t.text "text" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "fragen_id" + end + + add_index "frage_translations", ["locale"], :name => "index_frage_translations_on_locale" + + create_table "fragen", :force => true do |t| + t.string "title" + t.text "text" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "thema_id" + end + create_table "lva_translations", :force => true do |t| t.integer "lva_id" t.string "locale" @@ -39,10 +90,13 @@ ActiveRecord::Schema.define(:version => 20130729085446) do t.decimal "ects" t.string "lvanr" t.decimal "stunden" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false t.integer "modul_id" t.integer "semester_id" + t.text "pruefungsinformation" + t.text "lernaufwand" + t.string "typ" end create_table "lvas_moduls", :id => false, :force => true do |t| @@ -50,11 +104,14 @@ ActiveRecord::Schema.define(:version => 20130729085446) do t.integer "modul_id" end - create_table "lvas_semesters", :force => true do |t| + create_table "lvas_semesters", :id => false, :force => true do |t| t.integer "lva_id" t.integer "semester_id" end + add_index "lvas_semesters", ["lva_id", "semester_id"], :name => "index_lvas_semesters_on_lva_id_and_semester_id" + add_index "lvas_semesters", ["semester_id"], :name => "index_lvas_semesters_on_semester_id" + create_table "modul_translations", :force => true do |t| t.integer "modul_id" t.string "locale" @@ -148,6 +205,7 @@ ActiveRecord::Schema.define(:version => 20130729085446) do t.string "typ" t.datetime "created_at", :null => false t.datetime "updated_at", :null => false + t.string "abkuerzung" end create_table "studium_translations", :force => true do |t| @@ -161,6 +219,43 @@ ActiveRecord::Schema.define(:version => 20130729085446) do add_index "studium_translations", ["locale"], :name => "index_studium_translations_on_locale" + create_table "thema_translations", :force => true do |t| + t.string "locale" + t.string "title" + t.text "text" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "theman_id" + end + + add_index "thema_translations", ["locale"], :name => "index_thema_translations_on_locale" + + create_table "themen", :force => true do |t| + t.string "title" + t.text "text" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "themengruppe_id" + end + + create_table "themengruppe_translations", :force => true do |t| + t.string "locale" + t.string "title" + t.text "text" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "themengruppen_id" + end + + add_index "themengruppe_translations", ["locale"], :name => "index_themengruppe_translations_on_locale" + + create_table "themengruppen", :force => true do |t| + t.string "title" + t.text "text" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + create_table "users", :force => true do |t| t.string "email", :default => "", :null => false t.string "encrypted_password", :default => "", :null => false diff --git a/spec/controllers/calendars_controller_spec.rb b/spec/controllers/calendars_controller_spec.rb new file mode 100644 index 0000000..65fc3e7 --- /dev/null +++ b/spec/controllers/calendars_controller_spec.rb @@ -0,0 +1,160 @@ +require 'spec_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to specify the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. +# +# Compared to earlier versions of this generator, there is very limited use of +# stubs and message expectations in this spec. Stubs are only used when there +# is no simpler way to get a handle on the object needed for the example. +# Message expectations are only used when there is no simpler way to specify +# that an instance is receiving a specific message. + +describe CalendarsController do + + # This should return the minimal set of attributes required to create a valid + # Calendar. As you add validations to Calendar, be sure to + # adjust the attributes here as well. + let(:valid_attributes) { { "name" => "MyString" } } + + # This should return the minimal set of values that should be in the session + # in order to pass any filters (e.g. authentication) defined in + # CalendarsController. Be sure to keep this updated too. + let(:valid_session) { {} } + + describe "GET index" do + it "assigns all calendars as @calendars" do + calendar = Calendar.create! valid_attributes + get :index, {}, valid_session + assigns(:calendars).should eq([calendar]) + end + end + + describe "GET show" do + it "assigns the requested calendar as @calendar" do + calendar = Calendar.create! valid_attributes + get :show, {:id => calendar.to_param}, valid_session + assigns(:calendar).should eq(calendar) + end + end + + describe "GET new" do + it "assigns a new calendar as @calendar" do + get :new, {}, valid_session + assigns(:calendar).should be_a_new(Calendar) + end + end + + describe "GET edit" do + it "assigns the requested calendar as @calendar" do + calendar = Calendar.create! valid_attributes + get :edit, {:id => calendar.to_param}, valid_session + assigns(:calendar).should eq(calendar) + end + end + + describe "POST create" do + describe "with valid params" do + it "creates a new Calendar" do + expect { + post :create, {:calendar => valid_attributes}, valid_session + }.to change(Calendar, :count).by(1) + end + + it "assigns a newly created calendar as @calendar" do + post :create, {:calendar => valid_attributes}, valid_session + assigns(:calendar).should be_a(Calendar) + assigns(:calendar).should be_persisted + end + + it "redirects to the created calendar" do + post :create, {:calendar => valid_attributes}, valid_session + response.should redirect_to(Calendar.last) + end + end + + describe "with invalid params" do + it "assigns a newly created but unsaved calendar as @calendar" do + # Trigger the behavior that occurs when invalid params are submitted + Calendar.any_instance.stub(:save).and_return(false) + post :create, {:calendar => { "name" => "invalid value" }}, valid_session + assigns(:calendar).should be_a_new(Calendar) + end + + it "re-renders the 'new' template" do + # Trigger the behavior that occurs when invalid params are submitted + Calendar.any_instance.stub(:save).and_return(false) + post :create, {:calendar => { "name" => "invalid value" }}, valid_session + response.should render_template("new") + end + end + end + + describe "PUT update" do + describe "with valid params" do + it "updates the requested calendar" do + calendar = Calendar.create! valid_attributes + # Assuming there are no other calendars in the database, this + # specifies that the Calendar created on the previous line + # receives the :update_attributes message with whatever params are + # submitted in the request. + Calendar.any_instance.should_receive(:update_attributes).with({ "name" => "MyString" }) + put :update, {:id => calendar.to_param, :calendar => { "name" => "MyString" }}, valid_session + end + + it "assigns the requested calendar as @calendar" do + calendar = Calendar.create! valid_attributes + put :update, {:id => calendar.to_param, :calendar => valid_attributes}, valid_session + assigns(:calendar).should eq(calendar) + end + + it "redirects to the calendar" do + calendar = Calendar.create! valid_attributes + put :update, {:id => calendar.to_param, :calendar => valid_attributes}, valid_session + response.should redirect_to(calendar) + end + end + + describe "with invalid params" do + it "assigns the calendar as @calendar" do + calendar = Calendar.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + Calendar.any_instance.stub(:save).and_return(false) + put :update, {:id => calendar.to_param, :calendar => { "name" => "invalid value" }}, valid_session + assigns(:calendar).should eq(calendar) + end + + it "re-renders the 'edit' template" do + calendar = Calendar.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + Calendar.any_instance.stub(:save).and_return(false) + put :update, {:id => calendar.to_param, :calendar => { "name" => "invalid value" }}, valid_session + response.should render_template("edit") + end + end + end + + describe "DELETE destroy" do + it "destroys the requested calendar" do + calendar = Calendar.create! valid_attributes + expect { + delete :destroy, {:id => calendar.to_param}, valid_session + }.to change(Calendar, :count).by(-1) + end + + it "redirects to the calendars list" do + calendar = Calendar.create! valid_attributes + delete :destroy, {:id => calendar.to_param}, valid_session + response.should redirect_to(calendars_url) + end + end + +end diff --git a/spec/controllers/calentries_controller_spec.rb b/spec/controllers/calentries_controller_spec.rb new file mode 100644 index 0000000..63605e7 --- /dev/null +++ b/spec/controllers/calentries_controller_spec.rb @@ -0,0 +1,160 @@ +require 'spec_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to specify the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. +# +# Compared to earlier versions of this generator, there is very limited use of +# stubs and message expectations in this spec. Stubs are only used when there +# is no simpler way to get a handle on the object needed for the example. +# Message expectations are only used when there is no simpler way to specify +# that an instance is receiving a specific message. + +describe CalentriesController do + + # This should return the minimal set of attributes required to create a valid + # Calentry. As you add validations to Calentry, be sure to + # adjust the attributes here as well. + let(:valid_attributes) { { "start" => "2013-08-05 21:17:10" } } + + # This should return the minimal set of values that should be in the session + # in order to pass any filters (e.g. authentication) defined in + # CalentriesController. Be sure to keep this updated too. + let(:valid_session) { {} } + + describe "GET index" do + it "assigns all calentries as @calentries" do + calentry = Calentry.create! valid_attributes + get :index, {}, valid_session + assigns(:calentries).should eq([calentry]) + end + end + + describe "GET show" do + it "assigns the requested calentry as @calentry" do + calentry = Calentry.create! valid_attributes + get :show, {:id => calentry.to_param}, valid_session + assigns(:calentry).should eq(calentry) + end + end + + describe "GET new" do + it "assigns a new calentry as @calentry" do + get :new, {}, valid_session + assigns(:calentry).should be_a_new(Calentry) + end + end + + describe "GET edit" do + it "assigns the requested calentry as @calentry" do + calentry = Calentry.create! valid_attributes + get :edit, {:id => calentry.to_param}, valid_session + assigns(:calentry).should eq(calentry) + end + end + + describe "POST create" do + describe "with valid params" do + it "creates a new Calentry" do + expect { + post :create, {:calentry => valid_attributes}, valid_session + }.to change(Calentry, :count).by(1) + end + + it "assigns a newly created calentry as @calentry" do + post :create, {:calentry => valid_attributes}, valid_session + assigns(:calentry).should be_a(Calentry) + assigns(:calentry).should be_persisted + end + + it "redirects to the created calentry" do + post :create, {:calentry => valid_attributes}, valid_session + response.should redirect_to(Calentry.last) + end + end + + describe "with invalid params" do + it "assigns a newly created but unsaved calentry as @calentry" do + # Trigger the behavior that occurs when invalid params are submitted + Calentry.any_instance.stub(:save).and_return(false) + post :create, {:calentry => { "start" => "invalid value" }}, valid_session + assigns(:calentry).should be_a_new(Calentry) + end + + it "re-renders the 'new' template" do + # Trigger the behavior that occurs when invalid params are submitted + Calentry.any_instance.stub(:save).and_return(false) + post :create, {:calentry => { "start" => "invalid value" }}, valid_session + response.should render_template("new") + end + end + end + + describe "PUT update" do + describe "with valid params" do + it "updates the requested calentry" do + calentry = Calentry.create! valid_attributes + # Assuming there are no other calentries in the database, this + # specifies that the Calentry created on the previous line + # receives the :update_attributes message with whatever params are + # submitted in the request. + Calentry.any_instance.should_receive(:update_attributes).with({ "start" => "2013-08-05 21:17:10" }) + put :update, {:id => calentry.to_param, :calentry => { "start" => "2013-08-05 21:17:10" }}, valid_session + end + + it "assigns the requested calentry as @calentry" do + calentry = Calentry.create! valid_attributes + put :update, {:id => calentry.to_param, :calentry => valid_attributes}, valid_session + assigns(:calentry).should eq(calentry) + end + + it "redirects to the calentry" do + calentry = Calentry.create! valid_attributes + put :update, {:id => calentry.to_param, :calentry => valid_attributes}, valid_session + response.should redirect_to(calentry) + end + end + + describe "with invalid params" do + it "assigns the calentry as @calentry" do + calentry = Calentry.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + Calentry.any_instance.stub(:save).and_return(false) + put :update, {:id => calentry.to_param, :calentry => { "start" => "invalid value" }}, valid_session + assigns(:calentry).should eq(calentry) + end + + it "re-renders the 'edit' template" do + calentry = Calentry.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + Calentry.any_instance.stub(:save).and_return(false) + put :update, {:id => calentry.to_param, :calentry => { "start" => "invalid value" }}, valid_session + response.should render_template("edit") + end + end + end + + describe "DELETE destroy" do + it "destroys the requested calentry" do + calentry = Calentry.create! valid_attributes + expect { + delete :destroy, {:id => calentry.to_param}, valid_session + }.to change(Calentry, :count).by(-1) + end + + it "redirects to the calentries list" do + calentry = Calentry.create! valid_attributes + delete :destroy, {:id => calentry.to_param}, valid_session + response.should redirect_to(calentries_url) + end + end + +end diff --git a/spec/factories/calendars.rb b/spec/factories/calendars.rb new file mode 100644 index 0000000..f5cafa0 --- /dev/null +++ b/spec/factories/calendars.rb @@ -0,0 +1,8 @@ +# Read about factories at https://github.com/thoughtbot/factory_girl + +FactoryGirl.define do + factory :calendar do + name "MyString" + public false + end +end diff --git a/spec/factories/calentries.rb b/spec/factories/calentries.rb new file mode 100644 index 0000000..3e2d9b9 --- /dev/null +++ b/spec/factories/calentries.rb @@ -0,0 +1,10 @@ +# Read about factories at https://github.com/thoughtbot/factory_girl + +FactoryGirl.define do + factory :calentry do + start "2013-08-05 21:17:10" + ende "2013-08-05 21:17:10" + summary "MyString" + typ 1 + end +end diff --git a/spec/helpers/calendars_helper_spec.rb b/spec/helpers/calendars_helper_spec.rb new file mode 100644 index 0000000..67df5e7 --- /dev/null +++ b/spec/helpers/calendars_helper_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +# Specs in this file have access to a helper object that includes +# the CalendarsHelper. For example: +# +# describe CalendarsHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +describe CalendarsHelper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/calentries_helper_spec.rb b/spec/helpers/calentries_helper_spec.rb new file mode 100644 index 0000000..b496788 --- /dev/null +++ b/spec/helpers/calentries_helper_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +# Specs in this file have access to a helper object that includes +# the CalentriesHelper. For example: +# +# describe CalentriesHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +describe CalentriesHelper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/calendar_spec.rb b/spec/models/calendar_spec.rb new file mode 100644 index 0000000..f4477ee --- /dev/null +++ b/spec/models/calendar_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe Calendar do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/calentry_spec.rb b/spec/models/calentry_spec.rb new file mode 100644 index 0000000..02e654e --- /dev/null +++ b/spec/models/calentry_spec.rb @@ -0,0 +1,20 @@ +require 'spec_helper' + +describe Calentry do + it "should be valid with full data" do + e = FactoryGirl.build(:calentry) + c = FactoryGirl.create(:calendar) + e.calendars< nil) + c=FactoryGirl.create(:calendar) + e.calendars< "1") + end + + it "routes to #edit" do + get("/calendars/1/edit").should route_to("calendars#edit", :id => "1") + end + + it "routes to #create" do + post("/calendars").should route_to("calendars#create") + end + + it "routes to #update" do + put("/calendars/1").should route_to("calendars#update", :id => "1") + end + + it "routes to #destroy" do + delete("/calendars/1").should route_to("calendars#destroy", :id => "1") + end + + end +end diff --git a/spec/routing/calentries_routing_spec.rb b/spec/routing/calentries_routing_spec.rb new file mode 100644 index 0000000..214c524 --- /dev/null +++ b/spec/routing/calentries_routing_spec.rb @@ -0,0 +1,35 @@ +require "spec_helper" + +describe CalentriesController do + describe "routing" do + + it "routes to #index" do + get("/calentries").should route_to("calentries#index") + end + + it "routes to #new" do + get("/calentries/new").should route_to("calentries#new") + end + + it "routes to #show" do + get("/calentries/1").should route_to("calentries#show", :id => "1") + end + + it "routes to #edit" do + get("/calentries/1/edit").should route_to("calentries#edit", :id => "1") + end + + it "routes to #create" do + post("/calentries").should route_to("calentries#create") + end + + it "routes to #update" do + put("/calentries/1").should route_to("calentries#update", :id => "1") + end + + it "routes to #destroy" do + delete("/calentries/1").should route_to("calentries#destroy", :id => "1") + end + + end +end diff --git a/spec/views/calendars/edit.html.erb_spec.rb b/spec/views/calendars/edit.html.erb_spec.rb new file mode 100644 index 0000000..1332e40 --- /dev/null +++ b/spec/views/calendars/edit.html.erb_spec.rb @@ -0,0 +1,20 @@ +require 'spec_helper' + +describe "calendars/edit" do + before(:each) do + @calendar = assign(:calendar, stub_model(Calendar, + :name => "MyString", + :public => false + )) + end + + it "renders the edit calendar form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form[action=?][method=?]", calendar_path(@calendar), "post" do + assert_select "input#calendar_name[name=?]", "calendar[name]" + assert_select "input#calendar_public[name=?]", "calendar[public]" + end + end +end diff --git a/spec/views/calendars/index.html.erb_spec.rb b/spec/views/calendars/index.html.erb_spec.rb new file mode 100644 index 0000000..2d35f2d --- /dev/null +++ b/spec/views/calendars/index.html.erb_spec.rb @@ -0,0 +1,23 @@ +require 'spec_helper' + +describe "calendars/index" do + before(:each) do + assign(:calendars, [ + stub_model(Calendar, + :name => "Name", + :public => false + ), + stub_model(Calendar, + :name => "Name", + :public => false + ) + ]) + end + + it "renders a list of calendars" do + render + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "tr>td", :text => "Name".to_s, :count => 2 + assert_select "tr>td", :text => false.to_s, :count => 2 + end +end diff --git a/spec/views/calendars/new.html.erb_spec.rb b/spec/views/calendars/new.html.erb_spec.rb new file mode 100644 index 0000000..026c0fd --- /dev/null +++ b/spec/views/calendars/new.html.erb_spec.rb @@ -0,0 +1,20 @@ +require 'spec_helper' + +describe "calendars/new" do + before(:each) do + assign(:calendar, stub_model(Calendar, + :name => "MyString", + :public => false + ).as_new_record) + end + + it "renders new calendar form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form[action=?][method=?]", calendars_path, "post" do + assert_select "input#calendar_name[name=?]", "calendar[name]" + assert_select "input#calendar_public[name=?]", "calendar[public]" + end + end +end diff --git a/spec/views/calendars/show.html.erb_spec.rb b/spec/views/calendars/show.html.erb_spec.rb new file mode 100644 index 0000000..53cecc6 --- /dev/null +++ b/spec/views/calendars/show.html.erb_spec.rb @@ -0,0 +1,17 @@ +require 'spec_helper' + +describe "calendars/show" do + before(:each) do + @calendar = assign(:calendar, stub_model(Calendar, + :name => "Name", + :public => false + )) + end + + it "renders attributes in

    " do + render + # Run the generator again with the --webrat flag if you want to use webrat matchers + rendered.should match(/Name/) + rendered.should match(/false/) + end +end diff --git a/spec/views/calentries/edit.html.erb_spec.rb b/spec/views/calentries/edit.html.erb_spec.rb new file mode 100644 index 0000000..72b00fd --- /dev/null +++ b/spec/views/calentries/edit.html.erb_spec.rb @@ -0,0 +1,20 @@ +require 'spec_helper' + +describe "calentries/edit" do + before(:each) do + @calentry = assign(:calentry, stub_model(Calentry, + :summary => "MyString", + :typ => 1 + )) + end + + it "renders the edit calentry form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form[action=?][method=?]", calentry_path(@calentry), "post" do + assert_select "input#calentry_summary[name=?]", "calentry[summary]" + assert_select "input#calentry_typ[name=?]", "calentry[typ]" + end + end +end diff --git a/spec/views/calentries/index.html.erb_spec.rb b/spec/views/calentries/index.html.erb_spec.rb new file mode 100644 index 0000000..cd488a9 --- /dev/null +++ b/spec/views/calentries/index.html.erb_spec.rb @@ -0,0 +1,23 @@ +require 'spec_helper' + +describe "calentries/index" do + before(:each) do + assign(:calentries, [ + stub_model(Calentry, + :summary => "Summary", + :typ => 1 + ), + stub_model(Calentry, + :summary => "Summary", + :typ => 1 + ) + ]) + end + + it "renders a list of calentries" do + render + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "tr>td", :text => "Summary".to_s, :count => 2 + assert_select "tr>td", :text => 1.to_s, :count => 2 + end +end diff --git a/spec/views/calentries/new.html.erb_spec.rb b/spec/views/calentries/new.html.erb_spec.rb new file mode 100644 index 0000000..32e477b --- /dev/null +++ b/spec/views/calentries/new.html.erb_spec.rb @@ -0,0 +1,20 @@ +require 'spec_helper' + +describe "calentries/new" do + before(:each) do + assign(:calentry, stub_model(Calentry, + :summary => "MyString", + :typ => 1 + ).as_new_record) + end + + it "renders new calentry form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form[action=?][method=?]", calentries_path, "post" do + assert_select "input#calentry_summary[name=?]", "calentry[summary]" + assert_select "input#calentry_typ[name=?]", "calentry[typ]" + end + end +end diff --git a/spec/views/calentries/show.html.erb_spec.rb b/spec/views/calentries/show.html.erb_spec.rb new file mode 100644 index 0000000..588baec --- /dev/null +++ b/spec/views/calentries/show.html.erb_spec.rb @@ -0,0 +1,17 @@ +require 'spec_helper' + +describe "calentries/show" do + before(:each) do + @calentry = assign(:calentry, stub_model(Calentry, + :summary => "Summary", + :typ => 1 + )) + end + + it "renders attributes in

    " do + render + # Run the generator again with the --webrat flag if you want to use webrat matchers + rendered.should match(/Summary/) + rendered.should match(/1/) + end +end