Class: DitzStr::FileStorage
Overview
stores ditz database on disk
Constant Summary collapse
- PROJECT_FN =
"project.yaml"
- ISSUE_FN_GLOB =
"issue-*.yaml"
Instance Method Summary collapse
- #filename_for_issue(i) ⇒ Object
- #filename_for_project ⇒ Object
-
#initialize(base_dir) ⇒ FileStorage
constructor
A new instance of FileStorage.
- #ISSUE_TO_FN(i) ⇒ Object
- #load ⇒ Object
- #save(project) ⇒ Object
Constructor Details
#initialize(base_dir) ⇒ FileStorage
Returns a new instance of FileStorage.
10 11 12 13 |
# File 'lib/ditzstr/file-storage.rb', line 10 def initialize base_dir @base_dir = base_dir @project_fn = File.join @base_dir, PROJECT_FN end |
Instance Method Details
#filename_for_issue(i) ⇒ Object
50 |
# File 'lib/ditzstr/file-storage.rb', line 50 def filename_for_issue i; File.join @base_dir, ISSUE_TO_FN(i) end |
#filename_for_project ⇒ Object
51 |
# File 'lib/ditzstr/file-storage.rb', line 51 def filename_for_project; @project_fn end |
#ISSUE_TO_FN(i) ⇒ Object
8 |
# File 'lib/ditzstr/file-storage.rb', line 8 def ISSUE_TO_FN i; "issue-#{i.id}.yaml" end |
#load ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/ditzstr/file-storage.rb', line 15 def load DitzStr::debug "loading project from #{@project_fn}" project = Project.from @project_fn fn = File.join @base_dir, ISSUE_FN_GLOB DitzStr::debug "loading issues from #{fn}" project.issues = Dir[fn].map { |fn| Issue.from fn } DitzStr::debug "found #{project.issues.size} issues" project.issues.each { |i| i.project = project } project end |
#save(project) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/ditzstr/file-storage.rb', line 28 def save project dirty = false dirty = project.each_modelobject { |o| break true if o.changed? } if dirty DitzStr::debug "project is dirty, saving #{@project_fn}" project.save! @project_fn end changed_issues = project.issues.select { |i| i.changed? } changed_issues.each do |i| fn = filename_for_issue i DitzStr::debug "issue #{i.name} is dirty, saving #{fn}" i.save! fn end project.deleted_issues.each do |i| fn = filename_for_issue i DitzStr::debug "issue #{i.name} has been deleted, deleting #{fn}" FileUtils.rm fn end end |