working on sibling students

pull/1/head
Jared Cosulich 9 years ago
parent a28a201deb
commit f4a2c103d6

@ -18,8 +18,8 @@ class Attempt < ApplicationRecord
def messages
[
question.text,
"#{question.option1}: Reply 1\n\r#{question.option2}: Reply 2\n\r#{question.option3}: Reply 3\n\r#{question.option4}: Reply 4\n\r#{question.option5}: Reply 5\n\rReply 'stop' to stop these messages."
#question.text,
"#{question.text}\r\n#{question.option1}: Reply 1\n\r#{question.option2}: Reply 2\n\r#{question.option3}: Reply 3\n\r#{question.option4}: Reply 4\n\r#{question.option5}: Reply 5\n\rReply 'stop' to stop these messages."
]
end

@ -7,6 +7,8 @@ class Recipient < ApplicationRecord
has_many :recipient_schedules
has_many :attempts
has_many :students
validates :name, presence: true
scope :for_school, -> (school) { where(school: school) }

@ -9,12 +9,18 @@ class RecipientSchedule < ApplicationRecord
validates :next_attempt_at, presence: true
scope :ready, -> { where('next_attempt_at <= ?', Time.new) }
scope :for, -> (recipient_or_recipient_id) {
scope :for_recipient, -> (recipient_or_recipient_id) {
id = recipient_or_recipient_id.is_a?(Recipient) ?
recipient_or_recipient_id.id :
recipient_or_recipient_id
where(recipient_id: id)
}
scope :for_schedule, -> (schedule_or_schedule_id) {
id = schedule_or_schedule_id.is_a?(Schedule) ?
schedule_or_schedule_id.id :
schedule_or_schedule_id
where(schedule_id: id)
}
def next_question
if queued_question_ids.present?
@ -31,11 +37,24 @@ class RecipientSchedule < ApplicationRecord
return if question.nil? && unanswered_attempt.nil?
student = nil
if unanswered_attempt.nil?
if question.for_recipient_students?
students = recipient.students
student = students.first
queued = queued_question_ids.try(:split, /,/) || []
students[1...students.length].each do
queued << "#{question.id}:#{student.id}"
end
self.queued_question_ids = queued.join(',')
end
attempt = recipient.attempts.create(
schedule: schedule,
recipient_schedule: self,
question: question
question: question,
student: student
)
end

@ -0,0 +1,3 @@
class Student < ApplicationRecord
belongs_to :recipient
end

@ -1,29 +1,27 @@
[
{"category": "6-A-i", "text": "How often do you meet in person with teachers or administrators at your child's school?", "answers": ["Almost never", "Once or twice a year", "Every few months", "Monthly", "Weekly or more"]},
{"category": "6-A-i", "text": "In the past year, how often have you discussed your child's school with other parents from the school?", "answers": ["Almost never", "Once or twice a year", "Every few months", "Monthly", "Weekly or more"]},
{"category": "6-A-i", "text": "How involved have you been in activities at your child's school?", "answers": ["Not involved at all", "A little bit involved ", "Somewhat involved", "Quite involved", "Extremely involved"]},
{"category": "6-A-i", "text": "In the past year, how often have you helped out at your child's school?", "answers": ["Almost never", "Once or twice ", "Every few months", "Monthly", "Weekly or more"]},
{"category": "6-A-i", "text": "How confident are you in your ability to connect with other parents? ", "answers": ["Not confident at all", "A little bit confident", "Somewhat confident", "Quite confident", "Extremely confident"]},
{"category": "6-A-i", "text": "How confident are you in your ability to make sure your child's school meets your child's learning needs? ", "answers": ["Not confident at all", "A little bit confident", "Somewhat confident", "Quite confident", "Extremely confident"]},
{"category": "6-A-i", "text": "How confident are you in your ability to make choices about your child's schooling? ", "answers": ["Not confident at all", "A little bit confident", "Somewhat confident", "Quite confident", "Extremely confident"]},
{"category": "6-A-i", "text": "How confident are you that you can motivate your child to try hard in school? ", "answers": ["Not confident at all", "A little bit confident", "Somewhat confident", "Quite confident", "Extremely confident"]},
{"category": "6-A-i", "text": "How confident are you in your ability to support your child's learning at home? ", "answers": ["Not confident at all", "A little bit confident", "Somewhat confident", "Quite confident", "Extremely confident"]},
{"category": "6-A-i", "text": "How confident are you that you can help your child develop good friendships? ", "answers": ["Not confident at all", "A little bit confident", "Somewhat confident", "Quite confident", "Extremely confident"]},
{"category": "6-A-i", "child": true, "text": "How confident are you in your ability to make sure your child's school meets your child's learning needs? ", "answers": ["Not confident at all", "A little bit confident", "Somewhat confident", "Quite confident", "Extremely confident"]},
{"category": "6-A-i", "text": "How confident are you in your ability to make choices about your child's schooling?", "answers": ["Not confident at all", "A little bit confident", "Somewhat confident", "Quite confident", "Extremely confident"]},
{"category": "6-A-i", "child": true, "text": "How confident are you that you can motivate your child to try hard in school?", "answers": ["Not confident at all", "A little bit confident", "Somewhat confident", "Quite confident", "Extremely confident"]},
{"category": "6-A-i", "child": true, "text": "How confident are you in your ability to support your child's learning at home?", "answers": ["Not confident at all", "A little bit confident", "Somewhat confident", "Quite confident", "Extremely confident"]},
{"category": "6-A-i", "child": true, "text": "How confident are you that you can help your child develop good friendships?", "answers": ["Not confident at all", "A little bit confident", "Somewhat confident", "Quite confident", "Extremely confident"]},
{"category": "6-A-i", "text": "Overall, how good is this school at communicating with parents?", "answers": ["Not good at all", "Slightly good", "Somewhat good", "Quite good", "Extremely good"]},
{"category": "6-A-i", "text": "How often do you visit your child's school for an event, activity, or to volunteer? ", "answers": ["Almost never", "Once or twice a year", "Every few months", "Monthly", "Weekly or more"]},
{"category": "6-A-i", "text": "How often do you discuss your child's school with other parents from the school? ", "answers": ["Almost never", "Once or twice a year", "Every few months", "Monthly", "Weekly or more"]},
{"category": "6-A-i", "text": "How often do you visit your child's school for an event, activity, or to volunteer?", "answers": ["Almost never", "Once or twice a year", "Every few months", "Monthly", "Weekly or more"]},
{"category": "6-A-i", "text": "How often do you discuss your child's school with other parents from the school?", "answers": ["Almost never", "Once or twice a year", "Every few months", "Monthly", "Weekly or more"]},
{"category": "6-A-i", "text": "How confident are you in your ability to connect with other parents at the school? ", "answers": ["Not confident at all", "Slightly confident", "Somewhat confident", "Quite confident", "Extremely confident"]},
{"category": "6-A-ii", "text": "How often would you like the school to host social events for families?", "answers": ["Almost never", "Once or twice a year", "Every few months", "Monthly", "Weekly or more"]},
{"category": "6-A-ii", "text": "How often would you like to meet with school staff to talk about helping children succeed academically?", "answers": ["Almost never", "Once or twice a year", "Every few months", "Monthly", "Weekly or more"]},
{"category": "6-A-ii", "text": "How much would you enjoy spending an hour in your childs classroom?", "answers": ["Would not enjoy that at all", "Would enjoy that a little bit", "Would enjoy that somewhat", "Would enjoy that quite a bit", "Would enjoy that a tremendous amount"]},
{"category": "6-A-ii", "child": true, "text": "How much would you enjoy spending an hour in your childs classroom?", "answers": ["Would not enjoy that at all", "Would enjoy that a little bit", "Would enjoy that somewhat", "Would enjoy that quite a bit", "Would enjoy that a tremendous amount"]},
{"category": "6-A-ii", "text": "How much would you like to receive text messages from the school about upcoming events?", "answers": ["Would not like that at all", "Would like that a little bit", "Would like that somewhat", "Would like that quite a bit", "Would like that a tremendous amount"]},
{"category": "6-A-ii", "text": "How much would you like to receive messages from the school translated into another language?", "answers": ["Would not like that at all", "Would like that a little bit", "Would like that somewhat", "Would like that quite a bit", "Would like that a tremendous amount"]},
{"category": "6-A-iii", "text": "How would you describe your sense of belonging in the school community? ", "answers": ["Very weak", "Weak", "Neutral", "Strong", "Very strong"]},
{"category": "6-A-iii", "text": "Overall, how good is this school?", "answers": ["Not good at all", "Slightly good", "Somewhat good", "Quite good", "Extremely good"]},
{"category": "6-A-iii", "text": "Overall, how welcome do you feel at this school?", "answers": ["Not welcome at all", "Slightly welcome", "Somewhat welcome", "Quite welcome", "Extremely welcome"]},
{"category": "6-A-iii", "text": "Overall, how well do you get along well with your childs teacher(s)?", "answers": ["Do not get along well at all", "Get along a little bit", "Get along somewhat", "Get along quite well", "Get along extremely well"]},
{"category": "6-A-iii", "text": "Overall, how much do the teachers at this school care about your child?", "answers": ["Do not care about my child at all", "Care about my child a little bit", "Care about my child somewhat", "Care about my child quite a bit", "Care about my child a tremendous amount"]},
{"category": "6-A-iii", "child": true, "text": "Overall, how well do you get along well with your childs teacher(s)?", "answers": ["Do not get along well at all", "Get along a little bit", "Get along somewhat", "Get along quite well", "Get along extremely well"]},
{"category": "6-A-iii", "child": true, "text": "Overall, how much do the teachers at this school care about your child?", "answers": ["Do not care about my child at all", "Care about my child a little bit", "Care about my child somewhat", "Care about my child quite a bit", "Care about my child a tremendous amount"]},
{"category": "6-A-iii", "text": "Overall, how much do people at this school care about your family?", "answers": ["Dont care at all", "Care a little bit", "Care about my family somewhat ", "Care about my family quite a bit", "Care about my family a tremendous amount"]}
]

@ -0,0 +1,18 @@
class CreateStudents < ActiveRecord::Migration[5.0]
def change
create_table :students do |t|
t.string :name
t.string :teacher
t.date :birthdate
t.string :gender
t.string :age
t.string :ethnicity
t.integer :recipient_id
t.timestamps
end
add_column :questions, :for_recipient_students, :boolean, default: false
add_column :attempts, :student_id, :integer
end
end

@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20170417203127) do
ActiveRecord::Schema.define(version: 20170418173141) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@ -29,6 +29,7 @@ ActiveRecord::Schema.define(version: 20170417203127) do
t.datetime "updated_at", null: false
t.text "twilio_details"
t.string "twilio_sid"
t.integer "student_id"
t.index ["twilio_sid"], name: "index_attempts_on_twilio_sid", using: :btree
end
@ -67,9 +68,10 @@ ActiveRecord::Schema.define(version: 20170417203127) do
t.string "option4"
t.string "option5"
t.integer "category_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "target_group", default: 0
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "target_group", default: 0
t.boolean "for_recipient_students", default: false
end
create_table "recipient_lists", force: :cascade do |t|
@ -155,6 +157,18 @@ ActiveRecord::Schema.define(version: 20170417203127) do
t.index ["slug"], name: "index_schools_on_slug", unique: true, using: :btree
end
create_table "students", force: :cascade do |t|
t.string "name"
t.string "teacher"
t.date "birthdate"
t.string "gender"
t.string "age"
t.string "ethnicity"
t.integer "recipient_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "user_schools", force: :cascade do |t|
t.integer "user_id"
t.integer "school_id"

@ -192,6 +192,60 @@ describe "survey:attempt_questions" do
end
end
describe 'Multiple Students In A Family' do
before :each do
3.times do |i|
recipients[1].students.create(name: "Student#{i}")
end
end
describe 'With A FOR_CHILD Question Is Asked' do
before :each do
questions.first.update_attributes(for_recipient_students: true)
date = ActiveSupport::TimeZone["UTC"].parse(now.strftime("%Y-%m-%dT20:00:00%z"))
Timecop.freeze(date) { subject.invoke }
end
it 'should create one attempt per recipient regardless of students' do
expect(FakeSMS.messages.length).to eq(3)
recipients.each do |recipient|
expect(recipient.attempts.count).to eq(1)
end
end
it 'should store queued questions when an attempt is made on first student' do
recipients.each do |recipient|
recipient_schedule = recipient.recipient_schedules.for_schedule(schedule).first
expect(recipient_schedule.queued_question_ids).to be_present
queued_question_ids = recipient_schedule.queued_question_ids.split(/,/)
expect(queued_question_ids.length).to eq(2)
expect(queued_question_ids.first).to eq("#{questions[0].id}:#{students[1].id}")
expect(queued_question_ids.last).to eq("#{questions[0].id}:#{students[2].id}")
end
end
it 'should set the next_attempt_at to now when attempt is made on first student'
it 'should set the next_attempt_at to now when attempt is made on second student'
it 'should set the next_attempt_at in the future when an attempt is made on last student'
it 'should mention the students name in the text'
end
describe 'With A General Question Is Asked' do
before :each do
subject.invoke
end
it 'should not queue up an questions regardless of how many students there are'
it 'should not mention the students name in the text'
end
end
describe 'Opted Out Recipient' do
before :each do

@ -0,0 +1,5 @@
require 'rails_helper'
RSpec.describe Student, type: :model do
pending "add some examples to (or delete) #{__FILE__}"
end
Loading…
Cancel
Save