lib/vite_ruby/build.rb in vite_ruby-3.2.4 vs lib/vite_ruby/build.rb in vite_ruby-3.2.5
- old
+ new
@@ -2,28 +2,36 @@
require 'json'
require 'time'
# Internal: Value object with information about the last build.
-ViteRuby::Build = Struct.new(:success, :timestamp, :vite_ruby, :digest, :current_digest, :last_build_path) do
- # Internal: Combines information from a previous build with the current digest.
- def self.from_previous(last_build_path, current_digest)
- attrs = begin
- # Reads metadata recorded on the last build, if it exists.
- last_build_path.exist? ? JSON.parse(last_build_path.read.to_s) : {}
+ViteRuby::Build = Struct.new(:success, :timestamp, :vite_ruby, :digest, :current_digest, :last_build_path, :errors, keyword_init: true) do
+ class << self
+ # Internal: Combines information from a previous build with the current digest.
+ def from_previous(last_build_path, current_digest)
+ new(
+ **parse_metadata(last_build_path),
+ current_digest: current_digest,
+ last_build_path: last_build_path,
+ )
+ end
+
+ private
+
+ # Internal: Reads metadata recorded on the last build, if it exists.
+ def parse_metadata(pathname)
+ return default_metadata unless pathname.exist?
+
+ JSON.parse(pathname.read.to_s).transform_keys(&:to_sym).slice(*members)
rescue JSON::JSONError, Errno::ENOENT, Errno::ENOTDIR
- {}
+ default_metadata
end
- new(
- attrs['success'],
- attrs['timestamp'] || 'never',
- attrs['vite_ruby'] || 'unknown',
- attrs['digest'] || 'none',
- current_digest,
- last_build_path,
- )
+ # Internal: To make it evident that there's no last build in error messages.
+ def default_metadata
+ { timestamp: 'never', digest: 'none' }
+ end
end
# Internal: A build is considered stale when watched files have changed since
# the last build, or when a certain time has ellapsed in case of failure.
def stale?
@@ -43,18 +51,18 @@
rescue ArgumentError
true
end
# Internal: Returns a new build with the specified result.
- def with_result(success)
+ def with_result(**attrs)
self.class.new(
- success,
- Time.now.strftime('%F %T'),
- ViteRuby::VERSION,
- current_digest,
- current_digest,
- last_build_path,
+ **attrs,
+ timestamp: Time.now.strftime('%F %T'),
+ vite_ruby: ViteRuby::VERSION,
+ digest: current_digest,
+ current_digest: current_digest,
+ last_build_path: last_build_path,
)
end
# Internal: Writes the result of the new build to a local file.
def write_to_cache
@@ -63,9 +71,10 @@
# Internal: Returns a JSON string with the metadata of the build.
def to_json(*_args)
JSON.pretty_generate(
success: success,
+ errors: errors,
timestamp: timestamp,
vite_ruby: vite_ruby,
digest: digest,
)
end