diff --git a/.hound.yml b/.hound.yml new file mode 100644 index 0000000..d93d98e --- /dev/null +++ b/.hound.yml @@ -0,0 +1,2 @@ +StringLiterals: + EnforcedStyle: single_quotes diff --git a/.ruby-version b/.ruby-version new file mode 100644 index 0000000..5859406 --- /dev/null +++ b/.ruby-version @@ -0,0 +1 @@ +2.2.3 diff --git a/Gemfile b/Gemfile index 93ee59e..1e34879 100644 --- a/Gemfile +++ b/Gemfile @@ -9,6 +9,7 @@ gem 'jbuilder', '~> 2.0' gem 'jquery-rails' gem 'less-rails' gem 'minitest-reporters' +gem 'minitest-rails' gem 'omniauth-mit-oauth2' gem 'rails', '4.2.4' gem 'sass-rails', '~> 5.0' @@ -26,3 +27,7 @@ end group :development do gem 'web-console', '~> 2.0' end + +group :test do + gem 'minitest-rails-capybara' +end diff --git a/Gemfile.lock b/Gemfile.lock index b036f25..d58ba74 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -48,6 +48,12 @@ GEM debug_inspector (>= 0.0.1) builder (3.2.2) byebug (6.0.2) + capybara (2.5.0) + mime-types (>= 1.16) + nokogiri (>= 1.3.3) + rack (>= 1.0.0) + rack-test (>= 0.5.4) + xpath (~> 2.0) coffee-rails (4.1.0) coffee-script (>= 2.2.0) railties (>= 4.0.0, < 5.0) @@ -108,6 +114,20 @@ GEM mime-types (2.6.2) mini_portile (0.6.2) minitest (5.8.1) + minitest-capybara (0.7.2) + capybara (~> 2.2) + minitest (~> 5.0) + rake + minitest-metadata (0.5.3) + minitest (>= 4.7, < 6.0) + minitest-rails (2.2.0) + minitest (~> 5.7) + railties (~> 4.1) + minitest-rails-capybara (2.1.1) + capybara (~> 2.0) + minitest-capybara (~> 0.7.0) + minitest-metadata (~> 0.5.0) + minitest-rails (~> 2.1) minitest-reporters (1.1.4) ansi builder @@ -224,6 +244,8 @@ GEM binding_of_caller (>= 0.7.2) railties (>= 4.0) sprockets-rails (>= 2.0, < 4.0) + xpath (2.0.0) + nokogiri (~> 1.3) PLATFORMS ruby @@ -238,6 +260,8 @@ DEPENDENCIES jbuilder (~> 2.0) jquery-rails less-rails + minitest-rails + minitest-rails-capybara minitest-reporters omniauth-mit-oauth2 rails (= 4.2.4) diff --git a/app/controllers/workflows_controller.rb b/app/controllers/workflows_controller.rb new file mode 100644 index 0000000..4f7234e --- /dev/null +++ b/app/controllers/workflows_controller.rb @@ -0,0 +1,25 @@ +class WorkflowsController < ApplicationController + def show + @workflow = Workflow.find(params[:id]) + end + + def form_submit + @workflow = Workflow.find(params[:id]) + @form_errors = error_check(@workflow, params) + + if @form_errors.empty? + flash[:success] = 'Submission was valid.' + redirect_to root_path + else + flash[:danger] = 'There was a problem with the form submission.' + render 'show' + end + end + + private + + def error_check(wf, params) + required_fields = wf.elements.map { |e| e.display_id if e.required }.compact + required_fields.map { |field| field unless params[field].present? }.compact + end +end diff --git a/app/models/element.rb b/app/models/element.rb index ca17ad8..f2a4327 100644 --- a/app/models/element.rb +++ b/app/models/element.rb @@ -40,6 +40,15 @@ def accepted_element_types ElementType.where(id: accepted_element_type_ids).order(:name) end + def display_id + "#{element_type.name}_#{id}" + end + + def display_label + return label unless required + "* #{label}" + end + def legal_parent return unless parent.present? return if parent.accepts_type?(element_type) @@ -47,7 +56,9 @@ def legal_parent end def traverse(&block) + yield self, '_open' yield self children.map { |child| child.traverse(&block) } + yield self, '_close' end end diff --git a/app/views/workflows/elements/_fieldset.html.erb b/app/views/workflows/elements/_fieldset.html.erb new file mode 100644 index 0000000..e69de29 diff --git a/app/views/workflows/elements/_fieldset_close.html.erb b/app/views/workflows/elements/_fieldset_close.html.erb new file mode 100644 index 0000000..8188702 --- /dev/null +++ b/app/views/workflows/elements/_fieldset_close.html.erb @@ -0,0 +1 @@ + diff --git a/app/views/workflows/elements/_fieldset_open.html.erb b/app/views/workflows/elements/_fieldset_open.html.erb new file mode 100644 index 0000000..189f488 --- /dev/null +++ b/app/views/workflows/elements/_fieldset_open.html.erb @@ -0,0 +1,4 @@ +