5
5
require 'ostruct'
6
6
7
7
class Generator
8
+ METADATA_REPOSITORY = 'x-common' . freeze
9
+
8
10
attr_reader :name , :cases
9
11
def initialize ( name , cases )
10
12
@name = name
11
13
@cases = cases
12
14
end
13
15
14
16
def metadata_dir
15
- File . expand_path ( File . join ( '..' , '..' , '..' , 'x-common' ) , __FILE__ )
17
+ File . expand_path ( File . join ( '..' , '..' , '..' , METADATA_REPOSITORY ) , __FILE__ )
16
18
end
17
19
18
20
def data
@@ -35,13 +37,43 @@ def test_cases
35
37
cases . call ( data )
36
38
end
37
39
40
+ def metadata_repository_missing_message
41
+ <<-EOM . gsub ( /^ {6}/ , '' )
42
+
43
+ '#{ METADATA_REPOSITORY } ' repository not found.
44
+ Try running the command:
45
+ git clone https://github.com/exercism/#{ METADATA_REPOSITORY } .git "#{ metadata_dir } "
46
+
47
+ EOM
48
+ end
49
+
38
50
def generate
51
+ check_metadata_repository_exists
52
+ generate_test_file
53
+ increment_version
54
+ increment_version_in_example
55
+ end
56
+
57
+ def check_metadata_repository_exists
58
+ unless File . directory? ( metadata_dir )
59
+ STDERR . puts metadata_repository_missing_message
60
+ fail Errno ::ENOENT . new ( metadata_dir )
61
+ end
62
+ end
63
+
64
+ def generate_test_file
39
65
File . open ( path_to ( "#{ name . gsub ( /[ -]/ , '_' ) } _test.rb" ) , 'w' ) do |f |
40
66
f . write ERB . new ( File . read ( path_to ( 'example.tt' ) ) ) . result binding
41
67
end
68
+ end
69
+
70
+ def increment_version
42
71
File . open ( path_to ( '.version' ) , 'w' ) do |f |
43
72
f . write version + 1
44
73
end
74
+ end
75
+
76
+ def increment_version_in_example
45
77
contents = File . read ( path_to ( 'example.rb' ) )
46
78
File . open ( path_to ( 'example.rb' ) , 'w' ) do |f |
47
79
f . write contents . gsub ( "VERSION = #{ version } " , "VERSION = #{ version + 1 } " )
0 commit comments