Skip to content

Commit f6db005

Browse files
committed
Cat command implementation
1 parent ee6418c commit f6db005

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
* Copyright (c) 2019 Geektimus
3+
*
4+
* Permission is hereby granted, free of charge, to any person obtaining a copy of
5+
* this software and associated documentation files (the "Software"), to deal in
6+
* the Software without restriction, including without limitation the rights to
7+
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
8+
* the Software, and to permit persons to whom the Software is furnished to do so,
9+
* subject to the following conditions:
10+
*
11+
* The above copyright notice and this permission notice shall be included in all
12+
* copies or substantial portions of the Software.
13+
*
14+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
16+
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
17+
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
18+
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20+
*/
21+
22+
package com.codingmaniacs.scala.exercises.fs.commands
23+
24+
import com.codingmaniacs.scala.exercises.fs.State
25+
26+
class Cat(filename: String) extends Command {
27+
override def apply(state: State): State = {
28+
val wd = state.workingDir
29+
val dirEntry = wd.findEntry(filename)
30+
if (dirEntry == null || !dirEntry.isFile) {
31+
state.setMessage(s"$filename: No such file")
32+
} else {
33+
state.setMessage(dirEntry.asFile.contents)
34+
}
35+
}
36+
}

filesystem/src/main/scala/com/codingmaniacs/scala/exercises/fs/commands/Command.scala

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ object Command {
3636
val CD = "cd"
3737
val RM = "rm"
3838
val ECHO = "echo"
39+
val CAT = "cat"
3940

4041
def emptyCommand: Command = new Command {
4142
override def apply(state: State): State = state
@@ -84,6 +85,12 @@ object Command {
8485
} else {
8586
new Echo(tokens.tail)
8687
}
88+
} else if (CAT.equals(tokens(0))) {
89+
if (tokens.length < 2) {
90+
incompleteCommand(CAT)
91+
} else {
92+
new Cat(tokens(1))
93+
}
8794
} else {
8895
new UnknownCommand
8996
}

0 commit comments

Comments
 (0)