Skip to content

Commit 06d1239

Browse files
committed
Move logic into Trial
1 parent a0f0040 commit 06d1239

4 files changed

Lines changed: 37 additions & 29 deletions

File tree

pedometer/chapter.pdf

-111 KB
Binary file not shown.

pedometer/models/trial.rb

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ class Trial
1111
attr_reader :file_name, :parser, :user, :device, :analyzer
1212
attr_reader :user_params, :device_params
1313

14-
# TODO: Set user, device, parser, analyzer here?
1514
def initialize(file_name = nil, input_data = nil, user_params = nil, device_params = nil)
1615
if file_name
1716
@file_name = file_name
@@ -28,8 +27,7 @@ def initialize(file_name = nil, input_data = nil, user_params = nil, device_para
2827
"#{device.trial.to_s.gsub(/\s+/, '')}-" +
2928
"#{device.method}-#{parser.format[0]}.txt"
3029
else
31-
# TODO: Blow up and test
32-
raise 'TODO: Blow up and tesr'
30+
raise 'File name or input data must be passed in.'
3331
end
3432
end
3533

@@ -50,14 +48,25 @@ def self.create(input_data, user_params, device_params)
5048
trial
5149
end
5250

53-
# -- Instance Methods -----------------------------------------------------
51+
# TODO: Make sure to explain this part
52+
def self.find_matching_filtered_data(trial)
53+
files = Dir.glob(File.join('public/uploads', "*"))
54+
files.delete(trial.file_name)
55+
56+
match = files.select { |f| trial.file_name == f.gsub('-s.', '-c.') }.first
57+
match ||= files.select { |f| trial.file_name == f.gsub('-c.', '-s.') }.first
5458

55-
def data
56-
@data ||= File.read(file_name)
59+
match_filtered_data = if match
60+
parser = Parser.new(File.read(match))
61+
parser.filtered_data
62+
end
63+
match_filtered_data
5764
end
5865

66+
# -- Instance Methods -----------------------------------------------------
67+
5968
def parser
60-
@parser ||= Parser.new(data)
69+
@parser ||= Parser.new(File.read(file_name))
6170
end
6271

6372
def user

pedometer/pedometer.rb

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@
1919

2020
get '/trial/*' do
2121
@trial = Trial.find(params[:splat].first)
22-
23-
set_match_filtered_data
22+
@match_filtered_data = Trial.find_matching_filtered_data(@trial)
2423

2524
erb :trial
2625
end
@@ -34,29 +33,10 @@
3433
params[:user].values,
3534
params[:device].values
3635
)
37-
38-
set_match_filtered_data
36+
@match_filtered_data = Trial.find_matching_filtered_data(@trial)
3937

4038
erb :trial
4139
rescue Exception => e
4240
redirect '/trials?error=creation'
4341
end
4442
end
45-
46-
# # TODO: MOVE THIS TO TRIAL
47-
# # - Can you add a comment here to explain what's going on? We spent a few minutes looking at it and couldn't figure it out.
48-
def set_match_filtered_data
49-
files = Dir.glob(File.join('public/uploads', "*"))
50-
files.delete(@trial.file_name)
51-
52-
match = if @trial.parser.is_data_combined?
53-
files.select { |f| @trial.file_name == f.gsub('-s.', '-c.') }.first
54-
else
55-
files.select { |f| @trial.file_name == f.gsub('-c.', '-s.') }.first
56-
end
57-
58-
@match_filtered_data = if match
59-
parser = Parser.new(File.read(match))
60-
parser.filtered_data
61-
end
62-
end

pedometer/test/unit/trial_test.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33

44
class TrialTest < Test::Unit::TestCase
55

6+
def test_new_no_params
7+
assert_raise_with_message(RuntimeError, 'File name or input data must be passed in.') do
8+
Trial.new
9+
end
10+
end
11+
612
def test_all
713
trials = Trial.all
814
assert (trials.count > 0)
@@ -47,4 +53,17 @@ def test_create
4753
assert_equal 9, trial.analyzer.steps
4854
end
4955

56+
def test_find_matching_filtered_data
57+
trial = Trial.find('public/uploads/female-168.0-70.0_100-100-2-walk-c.txt')
58+
matching_trial = Trial.find('public/uploads/female-168.0-70.0_100-100-2-walk-s.txt')
59+
assert_equal matching_trial.parser.filtered_data, Trial.find_matching_filtered_data(trial)
60+
61+
trial = Trial.find('public/uploads/female-168.0-70.0_100-100-2-walk-s.txt')
62+
matching_trial = Trial.find('public/uploads/female-168.0-70.0_100-100-2-walk-c.txt')
63+
assert_equal matching_trial.parser.filtered_data, Trial.find_matching_filtered_data(trial)
64+
65+
trial = Trial.find('test/data/female-167-70_100-10-1-bagwalk-g.txt')
66+
assert_nil Trial.find_matching_filtered_data(trial)
67+
end
68+
5069
end

0 commit comments

Comments
 (0)