lib/rails/crud/tools/crud_data.rb in rails-crud-tools-0.4.1 vs lib/rails/crud/tools/crud_data.rb in rails-crud-tools-0.4.2

- old
+ new

@@ -1,18 +1,20 @@ +require "zip" require_relative "crud_logger" require_relative "constants" module Rails module Crud module Tools # このクラスは、CRUDファイルからデータを読み込むためのクラスです。 class CrudData include Singleton - attr_accessor :crud_rows, :crud_cols, :workbook, :last_loaded_time + attr_accessor :process_id, :crud_rows, :crud_cols, :workbook, :last_loaded_time def initialize + @process_id = nil @crud_rows = {} @crud_cols = {} @last_loaded_time = nil end @@ -59,12 +61,33 @@ def reload_if_needed config = CrudConfig.instance return unless config.enabled return unless @last_loaded_time.nil? || File.mtime(config.crud_file_path) > @last_loaded_time + + last_modified_by = get_last_modified_by(config.crud_file_path) + CrudLogger.logger.debug "last modified by: #{last_modified_by}. process_id: #{process_id}" + return if process_id == last_modified_by + CrudLogger.logger.info "Reloading CRUD data due to file modification. last_loaded_time = #{@last_loaded_time}" load_crud_data + end + # xlsxファイルの最終更新者を取得する + def get_last_modified_by(file_path) + last_modified_by = nil + + Zip::File.open(file_path) do |zipfile| + doc_props = zipfile.find_entry("docProps/core.xml") + if doc_props + content = doc_props.get_input_stream.read + last_modified_by = content[/\<cp:lastModifiedBy\>(.*?)\<\/cp:lastModifiedBy\>/, 1] + else + CrudLogger.logger.warn "docProps/core.xml が見つかりませんでした。" + end + end + + last_modified_by end # CRUDシートを取得する def get_crud_sheet sheet_name = CrudConfig.instance.sheet_name \ No newline at end of file