Sha256: 70a5fa61f91be1d1fed6ad617456f69429a262c8fa9d196bdfcf25fc41c50765

Contents?: true

Size: 1.74 KB

Versions: 1

Compression:

Stored size: 1.74 KB

Contents

require_relative 'readonce/version'

require 'httparty'

class ReadOnce
  include HTTParty
  BASE_URI = 'https://readonce-production.herokuapp.com'
  USER_AGENT_HEADER = {'User-Agent' => "ReadOnce Gem/#{Readonce::VERSION}"}
  base_uri BASE_URI

  def self.exit_if_gem_outdated!
    response = get '/minimum-ruby-client-version', headers: USER_AGENT_HEADER
    major, minor, patch = response.body.split('.').map{|m| m.to_i}

    if Readonce::MAJOR_VERSION < major || Readonce::MINOR_VERSION < minor || Readonce::PATCH_VERSION < patch
      required_version = "#{major}.#{minor}.#{patch}"
      puts "ERROR: Gem version is #{Readonce::VERSION}, but #{required_version} or later is now required."
      puts 'Please run: gem install readonce'
      exit
    end
  end

  def self.from_key(key)
    r = ReadOnce.new
    r.instance_variable_set(:@key, key)
    r
  end

  def self.from_data(data)
    self.class.exit_if_gem_outdated!
    response = post '/create', body: data, headers: {'Content-type' => 'text/plain'}.merge(USER_AGENT_HEADER)
    r = ReadOnce.new
    r.instance_variable_set(:@key, response.body)
    r
  end

  def read_url
    "#{BASE_URI}/#{key}"
  end

  def read?
    self.class.exit_if_gem_outdated!
    response = self.class.get "/status/#{key}", headers: USER_AGENT_HEADER
    !JSON.parse(response.body)['accessed_at'].nil?
  end

  def exists?
    self.class.exit_if_gem_outdated!
    response = self.class.get "/status/#{key}", headers: USER_AGENT_HEADER
    response.code == 200
  end

  def status
    self.class.exit_if_gem_outdated!
    response = self.class.get "/status/#{key}", headers: USER_AGENT_HEADER
    JSON.parse(response.body)
  end

  def block_until_read
    until read? do
      sleep 1
    end
  end

  private
  attr_accessor :key
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
readonce-1.0.11 lib/readonce.rb