Add file storage
This commit is contained in:
@ -2,30 +2,57 @@ require "json"
|
||||
|
||||
module Dayoff
|
||||
abstract class Storage
|
||||
abstract def get_planned_dates : Array(PlannedDate)
|
||||
abstract def set_planned_dates(items : Array(PlannedDate))
|
||||
abstract def get_work_records : Array(WorkRecord)
|
||||
abstract def set_work_records(items : Array(WorkRecord))
|
||||
macro st_abstract_def(name, dtype)
|
||||
abstract def get_{{name}} : Array({{dtype}})
|
||||
abstract def set_{{name}}(items : Array({{dtype}}))
|
||||
end
|
||||
|
||||
st_abstract_def(planned_dates, PlannedDate)
|
||||
st_abstract_def(work_records, WorkRecord)
|
||||
end
|
||||
|
||||
class MemoryStorage < Storage
|
||||
@planned_dates = [] of PlannedDate
|
||||
@work_records = [] of WorkRecord
|
||||
macro st_memory_def(name, dtype)
|
||||
@{{name}} = [] of {{dtype}}
|
||||
|
||||
def get_planned_dates : Array(PlannedDate)
|
||||
@planned_dates
|
||||
def get_{{name}} : Array({{dtype}})
|
||||
@{{name}}
|
||||
end
|
||||
|
||||
def set_{{name}}(items : Array({{dtype}}))
|
||||
@{{name}} = items
|
||||
end
|
||||
end
|
||||
|
||||
def set_planned_dates(items : Array(PlannedDate))
|
||||
@planned_dates = items
|
||||
st_memory_def(planned_dates, PlannedDate)
|
||||
st_memory_def(work_records, WorkRecord)
|
||||
end
|
||||
|
||||
class FileStorage < Storage
|
||||
def initialize(@path : String)
|
||||
end
|
||||
|
||||
def get_work_records : Array(WorkRecord)
|
||||
@work_records
|
||||
macro st_file_def(name, dtype, file)
|
||||
@{{name}} = [] of {{dtype}}
|
||||
|
||||
def get_{{name}} : Array({{dtype}})
|
||||
fname = File.join(@path, {{file}})
|
||||
if File.exists? fname
|
||||
content = File.read(fname)
|
||||
Array({{dtype}}).from_json content
|
||||
else
|
||||
[] of {{dtype}}
|
||||
end
|
||||
end
|
||||
|
||||
def set_{{name}}(items : Array({{dtype}}))
|
||||
fname = File.join(@path, {{file}})
|
||||
content = items.to_pretty_json
|
||||
File.write fname, content
|
||||
end
|
||||
end
|
||||
|
||||
def set_work_records(items : Array(WorkRecord))
|
||||
@work_records = items
|
||||
end
|
||||
st_file_def(planned_dates, PlannedDate, "planed-dates.json")
|
||||
st_file_def(work_records, WorkRecord, "work_records.json")
|
||||
end
|
||||
end
|
||||
|
Reference in New Issue
Block a user