File tree Expand file tree Collapse file tree 4 files changed +97
-1
lines changed Expand file tree Collapse file tree 4 files changed +97
-1
lines changed Original file line number Diff line number Diff line change 1
1
EXERCISES = %w[
2
2
two_fer
3
3
acronym
4
+ leap
4
5
] . freeze
5
6
6
7
FILENAMES = {
7
8
"acronym" => "acronym.rb" ,
8
- "two-fer" => "two_fer.rb"
9
+ "two-fer" => "two_fer.rb" ,
10
+ "leap" => "leap.rb"
9
11
} . freeze
10
12
11
13
require 'mandate'
Original file line number Diff line number Diff line change
1
+ module Leap
2
+ class Analyze < ExerciseAnalyzer
3
+ include Mandate
4
+
5
+ def analyze!
6
+ if solution . uses_std_lib?
7
+ self . status = :disapprove
8
+ self . comments = [ "ruby.leap.std_lib" ]
9
+ else
10
+ self . status = :refer_to_mentor
11
+ end
12
+
13
+ raise FinishedFlowControlException
14
+ end
15
+ end
16
+ end
Original file line number Diff line number Diff line change
1
+ module Leap
2
+ class Representation < SolutionRepresentation
3
+ def uses_std_lib?
4
+ date_node = SA ::Helpers . extract_nodes ( :const , target_method ) . find { |node | node . const_name == 'Date' }
5
+ return false if date_node . nil?
6
+
7
+ date_node . parent . children . any? { |node | %i[ leap? gregorian_leap? julian_leap? ] . include? node }
8
+ end
9
+
10
+ private
11
+ def target_module
12
+ SA ::Helpers . extract_module_or_class ( root_node , "Year" )
13
+ end
14
+
15
+ def target_method
16
+ SA ::Helpers . extract_module_method ( target_module , "leap?" )
17
+ end
18
+ end
19
+ end
Original file line number Diff line number Diff line change
1
+ require "test_helper"
2
+
3
+ class LeapTest < Minitest ::Test
4
+ def test_date_leap_method_is_disapproved
5
+ source = <<~SOURCE
6
+ class Year
7
+ def self.leap?(year)
8
+ Date.leap?(year)
9
+ end
10
+ end
11
+ SOURCE
12
+
13
+ results = Leap ::Analyze . ( source )
14
+ assert_equal :disapprove , results [ :status ]
15
+ assert_equal [ "ruby.leap.std_lib" ] , results [ :comments ]
16
+ end
17
+
18
+ def test_date_julian_leap_method_is_disapproved
19
+ source = <<~SOURCE
20
+ class Year
21
+ def self.leap?(year)
22
+ Date.julian_leap?(year)
23
+ end
24
+ end
25
+ SOURCE
26
+
27
+ results = Leap ::Analyze . ( source )
28
+ assert_equal :disapprove , results [ :status ]
29
+ assert_equal [ "ruby.leap.std_lib" ] , results [ :comments ]
30
+ end
31
+
32
+ def test_date_gregorian_leap_method_is_disapproved
33
+ source = <<~SOURCE
34
+ class Year
35
+ def self.leap?(year)
36
+ Date.gregorian_leap?(year)
37
+ end
38
+ end
39
+ SOURCE
40
+
41
+ results = Leap ::Analyze . ( source )
42
+ assert_equal :disapprove , results [ :status ]
43
+ assert_equal [ "ruby.leap.std_lib" ] , results [ :comments ]
44
+ end
45
+
46
+ def test_custom_implementation_referred_to_mentor
47
+ source = <<~SOURCE
48
+ class Year
49
+ def self.leap?(year)
50
+ year % 4 == 0
51
+ end
52
+ end
53
+ SOURCE
54
+
55
+ results = Leap ::Analyze . ( source )
56
+ assert_equal :refer_to_mentor , results [ :status ]
57
+ assert_empty results [ :comments ]
58
+ end
59
+ end
You can’t perform that action at this time.
0 commit comments