Sha256: b60b81f453203ed67c32bd1b4496ec703365d36b649b9b91ef05c717c1cd69b7

Contents?: true

Size: 925 Bytes

Versions: 7

Compression:

Stored size: 925 Bytes

Contents

# frozen_string_literal: true

require 'json'
require 'fileutils'

module Spout
  module Models
    # Base class for spout variables, forms, and domains that are read from JSON
    # files
    class Record
      class << self
        # Only returns records with zero json errors, nil otherwise
        def find_by_id(id)
          file_name = Dir.glob(expected_path(id), File::FNM_CASEFOLD).first
          variable = new(file_name, dictionary_root)
          (variable.errors.size > 0 ? nil : variable)
        end

        private

        def record_folder
          "#{name.split('::').last.to_s.downcase}s"
        end

        def expected_filename(id)
          "#{id.to_s.downcase}.json"
        end

        def expected_path(id)
          File.join(dictionary_root, record_folder, '**', expected_filename(id))
        end

        def dictionary_root
          FileUtils.pwd
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
spout-0.12.1 lib/spout/models/record.rb
spout-0.12.0 lib/spout/models/record.rb
spout-0.12.0.rc2 lib/spout/models/record.rb
spout-0.12.0.rc lib/spout/models/record.rb
spout-0.12.0.beta2 lib/spout/models/record.rb
spout-0.12.0.beta1 lib/spout/models/record.rb
spout-0.11.1 lib/spout/models/record.rb