Class: CanvasERD::DiagramStore
- Inherits:
-
Object
- Object
- CanvasERD::DiagramStore
- Defined in:
- lib/canvas_erd/diagram_store.rb
Defined Under Namespace
Constant Summary collapse
- DEFAULT_DIRECTORY =
"docs/erd"- FILENAME_PATTERN =
/\A[^\x00\/\\]+\.erd\.png\z/i
Instance Attribute Summary collapse
-
#directory ⇒ Object
readonly
Returns the value of attribute directory.
Instance Method Summary collapse
-
#initialize(root:, directory: DEFAULT_DIRECTORY) ⇒ DiagramStore
constructor
A new instance of DiagramStore.
- #names ⇒ Object
- #read(name) ⇒ Object
- #relative_directory ⇒ Object
- #write(name, bytes) ⇒ Object
Constructor Details
#initialize(root:, directory: DEFAULT_DIRECTORY) ⇒ DiagramStore
Returns a new instance of DiagramStore.
16 17 18 19 20 21 22 |
# File 'lib/canvas_erd/diagram_store.rb', line 16 def initialize(root:, directory: DEFAULT_DIRECTORY) @root = File.(root) @directory = File.(directory, @root) return if @directory.start_with?("#{@root}#{File::SEPARATOR}") raise Error, "Diagram directory must be inside the Rails application" end |
Instance Attribute Details
#directory ⇒ Object (readonly)
Returns the value of attribute directory.
14 15 16 |
# File 'lib/canvas_erd/diagram_store.rb', line 14 def directory @directory end |
Instance Method Details
#names ⇒ Object
28 29 30 31 32 |
# File 'lib/canvas_erd/diagram_store.rb', line 28 def names return [] unless Dir.exist?(directory) Dir.children(directory).select { |name| valid_filename?(name) && File.file?(path_for(name)) }.sort end |
#read(name) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/canvas_erd/diagram_store.rb', line 34 def read(name) bytes = File.binread(path_for(name)) PngDocument.read(StringIO.new(bytes)) bytes rescue Errno::ENOENT raise NotFound, "Diagram not found: #{name}" rescue SystemCallError => error raise Error, "Could not read diagram #{name}: #{error.}" rescue PngDocument::Error => error raise Error, error. end |
#relative_directory ⇒ Object
24 25 26 |
# File 'lib/canvas_erd/diagram_store.rb', line 24 def relative_directory directory.delete_prefix("#{@root}#{File::SEPARATOR}") end |
#write(name, bytes) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/canvas_erd/diagram_store.rb', line 46 def write(name, bytes) path = path_for(name) PngDocument.read(StringIO.new(bytes)) FileUtils.mkdir_p(directory) File.binwrite(path, bytes) name rescue SystemCallError => error raise Error, "Could not save diagram #{name}: #{error.}" rescue PngDocument::Error => error raise Error, error. end |