解決したいこと
現在、Rubyを用いて小マンドラインツールを作成しています。内容としては、オプションを指定してタスクの作業時間を管理する CLI です。制限や仕様があり、以下のようになっています。
- 制限
- クラスを用いた設計をする
- 対話型ではなく、バッチ処理をすること
- 実行時のパラメータが適切でない場合、使い方を表示する
- Gem やoptparse は使用しなこととする。
- 仕様
実行時
ruby ファイル名.rb <option>
- -s <タスク名>:タスクの開始時間を記録する
- -f <タスク名>:タスクの終了時間を記録する
- -vt:今日のタスク一覧(タスク名、開始時間、終了時間、実績時間)と作業の合計時間を表示する。
- -vw:直近7日間の日別作業時間を表示する。
疑問
タスクをどのように管理するのか(配列か辞書か)、オプションによる処理をどこに記述すればよいのかがあやふやで悩んでおります。
開発環境
Ruby 2.6.6
考えたソースコード・設計
タスクとオプションをオブジェクトとして、TaskクラスとOptionクラスを抽出しました。
ruby
1class Task 2 attr_accessor :task_name, :start_time, :ending_time, :actual_time 3 4 def initialize(task_name, start_time, ending_time: "", actual_time: "") 5 @task_name = task_name 6 @start_time = start_time 7 end 8 end 9 10 class Option 11 def judge(option_kind) 12 case option_kind 13 when "-s", "--start" 14 record_start_time 15 when "-f", "--finish" 16 record_ending_time 17 when "-vt", "--view-total" 18 show_todays_task 19 when "-vw", "--view-week" 20 show_week_tasks 21 else 22 # オプションが適切でないので、使い方を説明する処理を記述 23 end 24 end 25 26 def record_start_time 27 # Taskクラスからインスタンスを作成して、配列に追加する処理を記述 28 end 29 30 def record_start_time 31 # Taskインスタンスの ending_time に終了時刻を記録させる処理を記述 32 # そのタスクの実績時間も計算して、actual_time に記録させる処理を記述 33 end 34 35 def show_todays_tasks 36 # タスクを格納している配列から、インスタンスを取り出し、本日のタスクを表示させる処理を記述 37 # 同時に、作業時間を合計する処理を記述し、ループ処理を抜けた後、表示させる処理を記述 38 end 39 40 def show_week_tasks 41 # 直近7日間の日別作業時間を表示させる処理を記述 42 # Time クラスで、直近7日間を取得 43 end 44 end 45 46 entered_option = Option.new 47 entered_option.judge(ARGV[0])
あなたの回答
tips
プレビュー