Sha256: 6f908d277449124da53eb6c1badbf39c778bf281d738e62c350e195abcf2c137

Contents?: true

Size: 1.01 KB

Versions: 2

Compression:

Stored size: 1.01 KB

Contents

module PandaPal
  class Session < PandaPalRecord
    belongs_to :panda_pal_organization, class_name: 'PandaPal::Organization', optional: true

    after_initialize do
      self.session_key ||= SecureRandom.urlsafe_base64(60)
    end

    def lti_platform
      return nil unless data[:lti_platform].present?

      @lti_platform ||= Platform.deserialize(data[:lti_platform])
    end

    class DataSerializer
      def self.load(str)
        return {} unless str.present?
        begin
          parsed = JSON.parse(str)
        rescue JSON::ParserError
          parsed = yaml_load(str)
        end
        parsed.is_a?(Hash) ? HashWithIndifferentAccess.new(parsed) : parsed
      end

      def self.dump(obj)
        JSON.dump(obj)
      end

      private

      if YAML.respond_to?(:unsafe_load)
        def self.yaml_load(payload)
          YAML.unsafe_load(payload)
        end
      else
        def self.yaml_load(payload)
          YAML.load(payload)
        end
      end
    end

    serialize :data, DataSerializer
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
panda_pal-5.7.0.beta2 app/models/panda_pal/session.rb
panda_pal-5.7.0.beta1 app/models/panda_pal/session.rb