Skip to content

Commit 1caf693

Browse files
authored
Merge pull request #154 from NivedHari/question-attachment
Add support for single and multiple file attachments to Questions
2 parents 519945b + 68f7439 commit 1caf693

File tree

9 files changed

+34
-7
lines changed

9 files changed

+34
-7
lines changed

Gemfile

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ gem 'ostruct'
88

99
group :development, :test do
1010
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
11-
# Adds support for Capybara system testing and selenium driver
12-
gem 'capybara', '~> 2.13.0'
1311
gem 'selenium-webdriver'
1412
gem 'pry-rails'
1513
end

app/models/rapidfire/question.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ module Rapidfire
22
class Question < ApplicationRecord
33
belongs_to :survey, :inverse_of => :questions
44
has_many :answers
5+
6+
has_many_attached :files
7+
58

69
default_scope { order(:position) }
710

app/services/rapidfire/question_form.rb

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class QuestionForm < Rapidfire::BaseService
2222

2323
attr_accessor :survey, :question, :default_text, :placeholder,
2424
:type, :question_text, :position, :answer_options, :answer_presence,
25-
:answer_minimum_length, :answer_maximum_length,
25+
:answer_minimum_length, :answer_maximum_length, :files,
2626
:answer_greater_than_or_equal_to, :answer_less_than_or_equal_to
2727

2828
delegate :valid?, :errors, :to => :question
@@ -47,11 +47,15 @@ def create_question
4747
return false
4848
end
4949

50-
@question = klass.create(to_question_params)
50+
@question = klass.create(to_question_params).tap do |new_question|
51+
attach_files(new_question)
52+
end
5153
end
5254

5355
def update_question
54-
@question.update(to_question_params)
56+
result = @question.update(to_question_params)
57+
attach_files(@question) if result
58+
result
5559
end
5660

5761
def to_question_params
@@ -73,11 +77,18 @@ def to_question_params
7377
}
7478
end
7579

80+
def attach_files(question)
81+
if files.present?
82+
files.each { |f| question.files.attach(f) }
83+
end
84+
end
85+
7686
def from_question_to_attributes(question)
7787
self.type = question.type
7888
self.survey = question.survey
7989
self.question_text = question.question_text
8090
self.position = question.position
91+
self.files = question.files if question.files.attached?
8192
self.default_text = question.default_text
8293
self.placeholder = question.placeholder
8394
self.answer_options = question.answer_options
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<%= render partial: "rapidfire/answers/errors", locals: {answer: answer} %>
22
<div class="form-group">
3+
<%= render partial: 'rapidfire/answers/file_attachment', locals: { answer: answer } %>
34
<%= f.label :answer_text, answer.question.question_text.html_safe %>
45
<%= f.file_field :file %>
56
</div>
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<% if answer.question.files.attached? %>
2+
<p><strong>Attached Files:</strong></p>
3+
<% answer.question.files.each do |file| %>
4+
<p>
5+
<%= link_to file.filename.to_s, main_app.url_for(file), target: "_blank" %>
6+
</p>
7+
<% end %>
8+
<% end %>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<%= render partial: "rapidfire/answers/errors", locals: {answer: answer} %>
22
<div class="form-group">
3+
<%= render partial: 'rapidfire/answers/file_attachment', locals: { answer: answer } %>
34
<%= f.label :answer_text, answer.question.question_text.html_safe %>
45
<%= f.file_field :files, multiple: true %>
56
</div>

app/views/rapidfire/questions/_form.html.erb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@
3939
<%= f.text_area :answer_options, rows: 5 %>
4040
</div>
4141

42+
<div class="form-group">
43+
<%= f.label :files, "Attach Multiple Files" %>
44+
<%= f.file_field :files, multiple: true %>
45+
</div>
46+
4247
<h4>Other options</h4>
4348
<hr/>
4449

spec/features/rapidfire/managing_questions_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
visit rapidfire.survey_questions_path(survey)
1515

1616
page.within("#question_#{question1.id}") do
17-
click_link "Delete"
17+
click_button "Delete"
1818
end
1919
end
2020

spec/features/rapidfire/managing_surveys_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
allow_any_instance_of(ApplicationController).to receive(:can_administer?).and_return(true)
2828

2929
visit rapidfire.root_path
30-
click_link "Delete"
30+
click_button "Delete"
3131
end
3232

3333
it "deletes the survey" do

0 commit comments

Comments
 (0)