Module: Sip2

Defined in:
lib/sip2.rb,
lib/sip2/types.rb,
lib/sip2/fields.rb,
lib/sip2/parser.rb,
lib/sip2/message.rb,
lib/sip2/version.rb,
lib/sip2/messages.rb,
lib/sip2/transformer.rb,
lib/sip2/parser_atoms.rb,
lib/sip2/checksum_encoder.rb,
lib/sip2/field_parser_rules.rb,
lib/sip2/message/base_message.rb,
lib/sip2/message_parser_rules.rb,
lib/sip2/message/unknown_message.rb

Defined Under Namespace

Modules: ChecksumEncoder, FieldParserRules, Message, MessageParserRules, ParserAtoms, Types Classes: Parser, Transformer

Constant Summary collapse

PARSER =
Sip2::Parser.new
TRANSFORMER =
Sip2::Transformer.new
FIELDS =
{
  acs_renewal_policy: {
    type: Types::Bool,
    format: format_bool,
  },

  alert: {
    type: Types::Bool,
    format: format_bool,
  },

  available: {
    type: Types::Bool,
    format: format_bool,
  },

  blocked_card_msg: {
    code: "AL",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  cancel: {
    code: "BI",
    type: Types::Bool,
    format: format_bool,
  },

  card_retained: {
    type: Types::Bool,
    format: format_bool,
  },

  charged_items: {
    code: "AU",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  charged_items_count: {
    type: Types::Integer.constrained(included_in: 0..9999).optional,
    format: format_int_4_or_blank,
  },

  charged_items_limit: {
    code: "CB",
    type: Types::Integer.constrained(included_in: 0..9999),
    format: format_int_4,
  },

  checkin_ok: {
    type: Types::Bool,
    format: format_bool,
  },

  checkout_ok: {
    type: Types::Bool,
    format: format_bool,
  },

  checksum: {
    code: "AZ",
    type: Types::String.constrained(format: /^[0-9A-Fa-f]{4,4}$/),
    format: format_string,
  },

  circulation_status: {
    type: Types::Integer.constrained(included_in: 0..99),
    format: format_int_2,
  },

  currency_type: {
    code: "BH",
    type: Types::String.constrained(size: 3),
    format: format_string,
  },

  currency_type_ordered: {
    name: :currency_type,
    type: Types::String.constrained(size: 3),
    format: format_string,
  },

  current_location: {
    code: "AP",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  date_time_sync: {
    type: Types::JSON::Time,
    format: format_timestamp,
  },

  desensitize: {
    type: Types::Bool.optional,
    format: format_bool_nillable,
  },

  due_date: {
    code: "AH",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  email_address: {
    code: "BE",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  end_item: {
    code: "BQ",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  end_session: {
    type: Types::Bool,
    format: format_bool,
  },

  expiration_date: {
    code: "BW",
    type: Types::JSON::Time,
    format: format_timestamp,
  },

  fee_acknowledged: {
    code: "BO",
    type: Types::Bool,
    format: format_bool,
  },

  fee_amount: {
    code: "BV",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  fee_identifier: {
    code: "CG",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  fee_limit: {
    code: "CC",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  fee_type: {
    code: "BT",
    type: Types::Integer.constrained(included_in: 1..99),
    format: format_int_2,
  },

  fee_type_ordered: {
    name: :fee_type,
    type: Types::Integer.constrained(included_in: 1..99),
    format: format_int_2,
  },

  fine_items: {
    code: "AV",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  fine_items_count: {
    type: Types::Integer.constrained(included_in: 0..9999).optional,
    format: format_int_4_or_blank,
  },

  hold_items: {
    code: "AS",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  hold_items_count: {
    type: Types::Integer.constrained(included_in: 0..9999).optional,
    format: format_int_4_or_blank,
  },

  hold_items_limit: {
    code: "BZ",
    type: Types::Integer.constrained(included_in: 0..9999),
    format: format_int_4,
  },

  hold_mode: {
    type: Types::String.constrained(size: 1),
    format: format_string,
  },

  hold_pickup_date: {
    code: "CM",
    type: Types::JSON::Time,
    format: format_timestamp,
  },

  hold_queue_length: {
    code: "CF",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  hold_type: {
    code: "BY",
    type: Types::Integer.constrained(included_in: 1..9),
    format: format_string,
  },

  home_address: {
    code: "BD",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  home_phone_number: {
    code: "BF",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  institution_id: {
    code: "AO",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  item_identifier: {
    code: "AB",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  item_properties: {
    code: "CH",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  item_properties_ok: {
    type: Types::String.constrained(size: 1),
    format: format_string,
  },

  # The :items key is defined *after* later as it refers to other keys.
  # the hash.
  #
  #items: {}

  language: {
    type: Types::Integer.constrained(included_in: (0..999)),
    format: format_int_3,
  },

  library_name: {
    code: "AM",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  location_code: {
    code: "CP",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  login_password: {
    code: "CO",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  login_user_id: {
    code: "CN",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  magnetic_media: {
    type: Types::Bool.optional,
    format: format_bool_nillable,
  },

  max_print_width: {
    type: Types::Integer.constrained(included_in: 0..999),
    format: format_int_3,
  },

  media_type: {
    code: "CK",
    type: Types::Integer.constrained(included_in: 0..999),
    format: format_int_3,
  },

  nb_due_date: {
    type: Types::JSON::Time.optional,
    format: format_timestamp_or_blanks,
  },

  no_block: {
    type: Types::Bool,
    format: format_bool,
  },

  offline_ok: {
    type: Types::Bool,
    format: format_bool,
  },

  ok: {
    type: Types::Bool,
    format: ->(v) { v ? "1" : "0" },
  },

  online_status: {
    type: Types::Bool,
    format: format_bool,
  },

  overdue_items: {
    code: "AT",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  overdue_items_count: {
    type: Types::Integer.constrained(included_in: 0..9999).optional,
    format: format_int_4_or_blank,
  },

  overdue_items_limit: {
    code: "CA",
    type: Types::Integer.constrained(included_in: 0..9999),
    format: format_int_4,
  },

  owner: {
    code: "BG",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  patron_identifier: {
    code: "AA",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  patron_password: {
    code: "AD",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  patron_status: {
    type: {
      charge_privileges_denied: Types::Bool,
      renewal_privileges_denied: Types::Bool,
      recall_privileges_denied: Types::Bool,
      hold_privileges_denied: Types::Bool,
      card_reported_lost: Types::Bool,
      too_many_items_charged: Types::Bool,
      too_many_items_overdue: Types::Bool,
      too_many_renewals: Types::Bool,
      too_many_claims_of_items_returned: Types::Bool,
      too_many_items_lost: Types::Bool,
      excessive_outstanding_fines: Types::Bool,
      excessive_outstanding_fees: Types::Bool,
      recall_overdue: Types::Bool,
      too_many_items_billed: Types::Bool,
    },
    format: ->(v) {
      v.attributes.map { |_,b| format_bool_with_space.call(b) }
    },
  },

  payment_accepted: {
    type: Types::Bool,
    format: format_bool,
  },

  payment_type: {
    type: Types::Integer.constrained(included_in: 0..99),
    format: format_int_2,
  },

  permanent_location: {
    code: "AQ",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  personal_name: {
    code: "AE",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  pickup_location: {
    code: "BS",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  print_line: {
    code: "AG",
    type: Types::Array.of(Types::String.constrained(max_size: 255)),
    format: format_string,
  },

  protocol_version: {
    type: Types::String.constrained(format: /^\d\.\d\d$/),
    format: format_string,
  },

  pwd_algorithm: {
    type: Types::String.constrained(size: 1),
    format: format_string,
  },

  queue_position: {
    code: "BR",
    type: Types::Integer.constrained(gteq: 0).optional,
    format: format_string,
  },

  recall_date: {
    code: "CJ",
    type: Types::JSON::Time,
    format: format_timestamp,
  },

  recall_items: {
    code: "BU",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  recall_items_count: {
    type: Types::Integer.constrained(included_in: 0..9999).optional,
    format: format_int_4_or_blank,
  },

  renewal_ok: {
    type: Types::Bool,
    format: format_bool,
  },

  renewed_count: {
    type: Types::Integer.constrained(included_in: 0..9999),
    format: format_int_4_or_blank,
  },

  renewed_items: {
    code: "BM",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  resensitize: {
    type: Types::Bool,
    format: format_bool,
  },

  retries_allowed: {
    type: Types::Integer.constrained(included_in: 0..999),
    format: format_int_3,
  },

  return_date: {
    type: Types::JSON::Time,
    format: format_timestamp,
  },

  sc_renewal_policy: {
    type: Types::Bool,
    format: format_bool,
  },

  screen_message: {
    code: "AF",
    type: Types::Array.of(Types::String.constrained(max_size: 255)),
    format: format_string,
  },

  security_inhibit: {
    code: "CI",
    type: Types::Bool,
    format: format_bool,
  },

  security_marker: {
    type: Types::Integer.constrained(included_in: 0..99),
    format: format_int_2,
  },

  sequence_number: {
    code: "AY",
    type: Types::Integer.constrained(included_in: 0..9),
    format: format_string,
  },

  sort_bin: {
    code: "CL",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  start_item: {
    code: "BP",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  status_code: {
    type: Types::Integer.constrained(included_in: 0..2),
    format: format_string,
  },

  status_update_ok: {
    type: Types::Bool,
    format: format_bool,
  },

  summary: {
    type: {
      hold_items: Types::Bool,
      overdue_items: Types::Bool,
      charged_items: Types::Bool,
      fine_items: Types::Bool,
      recall_items: Types::Bool,
      unavailable_holds: Types::Bool,
    },
    format: ->(v) {
      v.attributes.map { |_,b| format_bool_with_space.call(b) }.join + " "*4
    },
  },

  supported_messages: {
    code: "BX",
    type: {
      patron_status_request: Types::Bool,
      checkout: Types::Bool,
      checkin: Types::Bool,
      block_patron: Types::Bool,
      sc_acs_status: Types::Bool,
      request_sc_asc_resend: Types::Bool,
      login: Types::Bool,
      patron_information: Types::Bool,
      end_patron_session: Types::Bool,
      fee_paid: Types::Bool,
      item_information: Types::Bool,
      item_status_update: Types::Bool,
      patron_enable: Types::Bool,
      hold: Types::Bool,
      renew: Types::Bool,
      renew_all: Types::Bool,
    },
    format: ->(v) {
      v.attributes.map { |_,b| format_bool.call(b) }.join
    },
  },

  terminal_location: {
    code: "AN",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  terminal_password: {
    code: "AC",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  third_party_allowed: {
    type: Types::Bool,
    format: format_bool,
  },

  timeout_period: {
    type: Types::Integer.constrained(included_in: 0..999),
    format: format_int_3,
  },

  title_identifier: {
    code: "AJ",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  transaction_date: {
    type: Types::JSON::Time,
    format: format_timestamp,
  },

  transaction_id: {
    code: "BK",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  uid_algorithm: {
    type: Types::String.constrained(size: 1),
    format: format_string,
  },

  unavailable_holds_count: {
    type: Types::Integer.constrained(included_in: 0..9999).optional,
    format: format_int_4_or_blank,
  },

  unavailable_hold_items: {
    code: "CD",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  unrenewed_count: {
    type: Types::Integer.constrained(included_in: 0..9999),
    format: format_int_4,
  },

  unrenewed_items: {
    code: "BN",
    type: Types::String.constrained(max_size: 255),
    format: format_string,
  },

  valid_patron: {
    code: "BL",
    type: Types::Bool,
    format: format_bool,
  },

  valid_patron_password: {
    code: "CQ",
    type: Types::Bool,
    format: format_bool,
  },

}
VERSION =
"0.1.2"
MESSAGES =
{
    code: "01",
    name: "Block Patron",
    symbol: :block_patron,
    ordered_fields: %i[
      card_retained
      transaction_date
    ],
    required_delimited_fields: %i[
      institution_id
      blocked_card_msg
      patron_identifier
      terminal_password
    ],
    optional_delimited_fields: [],
  },
  {
    code: "09",
    name: "Checkin",
    symbol: :checkin,
    ordered_fields: %i[
      no_block
      transaction_date
      return_date
    ],
    required_delimited_fields: %i[
      current_location
      institution_id
      item_identifier
      terminal_password
    ],
    optional_delimited_fields: %i[
      item_properties
      cancel
    ],
  },
  {
    code: "10",
    name: "Checkin Response",
    symbol: :checkin_response,
    ordered_fields: %i[
      ok
      resensitize
      magnetic_media
      alert
      transaction_date
    ],
    required_delimited_fields: %i[
      institution_id
      item_identifier
      permanent_location
    ],
    optional_delimited_fields: %i[
      title_identifier
      sort_bin
      patron_identifier
      media_type
      item_properties
      screen_message
      print_line
    ],
  },
  {
    code: "11",
    name: "Checkout",
    symbol: :checkout,
    ordered_fields: %i[
      sc_renewal_policy
      no_block
      transaction_date
      nb_due_date
    ],
    required_delimited_fields: %i[
      institution_id
      patron_identifier
      item_identifier
      terminal_password
    ],
    optional_delimited_fields: %i[
      patron_password
      item_properties
      fee_acknowledged
      cancel
    ],
  },
  {
    code: "12",
    name: "Checkout Response",
    symbol: :checkout_response,
    ordered_fields: %i[
      ok
      renewal_ok
      magnetic_media
      desensitize
      transaction_date
    ],
    required_delimited_fields: %i[
      institution_id
      patron_identifier
      item_identifier
      title_identifier
      due_date
    ],
    optional_delimited_fields: %i[
      fee_type
      security_inhibit
      currency_type
      fee_amount
      media_type
      item_properties
      transaction_id
      screen_message
      print_line
    ]
  },
  {
    code: "15",
    name: "Hold",
    symbol: :hold,
    ordered_fields: %i[
      hold_mode
      transaction_date
    ],
    required_delimited_fields: %i[
      institution_id
      patron_identifier
    ],
    optional_delimited_fields: %i[
      expiration_date
      pickup_location
      hold_type
      patron_password
      item_identifier
      title_identifier
      terminal_password
      fee_acknowledged
    ],
  },
  {
    code: "16",
    name: "Hold Response",
    symbol: :hold_response,
    ordered_fields: %i[
      ok
      available
      transaction_date
    ],
    required_delimited_fields: %i[
      institution_id
      patron_identifier
    ],
    optional_delimited_fields: %i[
      expiration_date
      queue_position
      pickup_location
      item_identifier
      title_identifier
      screen_message
      print_line
    ],
  },
  {
    code: "17",
    name: "Item Information",
    symbol: :item_information,
    ordered_fields: %i[
      transaction_date
    ],
    required_delimited_fields: %i[
      institution_id
      item_identifier
    ],
    optional_delimited_fields: %i[
      terminal_password
    ],
  },
  {
    code: "18",
    name: "Item Information Response",
    symbol: :item_information_response,
    ordered_fields: %i[
      circulation_status
      security_marker
      fee_type_ordered
      transaction_date
    ],
    required_delimited_fields: %i[
      item_identifier
      title_identifier
    ],
    optional_delimited_fields: %i[
      hold_queue_length
      due_date
      recall_date
      hold_pickup_date
      owner
      currency_type
      fee_amount
      media_type
      permanent_location
      current_location
      item_properties
      screen_message
      print_line
    ],
  },
  {
    code: "19",
    name: "Item Status Update",
    symbol: :item_status_update,
    ordered_fields: %i[
      transaction_date
    ],
    required_delimited_fields: %i[
      institution_id
      item_identifier
      item_properties
    ],
    optional_delimited_fields: %i[
      terminal_password
    ],
  },
  {
    code: "20",
    name: "Item Status Update Response",
    symbol: :item_status_update_response,
    ordered_fields: %i[
      item_properties_ok
      transaction_date
    ],
    required_delimited_fields: %i[
      item_identifier
    ],
    optional_delimited_fields: %i[
      title_identifier
      item_properties
      screen_message
      print_line
    ],
  },
  {
    code: "23",
    name: "Patron Status Request",
    symbol: :patron_status_request,
    ordered_fields: %i[
      language
      transaction_date
    ],
    required_delimited_fields: %i[
      institution_id
      patron_identifier
      terminal_password
      patron_password
    ],
    optional_delimited_fields: [],
  },
  {
    code: "24",
    name: "Patron Status Response",
    symbol: :patron_status_response,
    ordered_fields: %i[
      patron_status
      language
      transaction_date
    ],
    required_delimited_fields: %i[
      institution_id
      patron_identifier
      personal_name
    ],
    optional_delimited_fields: %i[
      valid_patron
      valid_patron_password
      currency_type
      fee_amount
      screen_message
      print_line
    ],
  },
  {
    code: "25",
    name: "Patron Enable",
    symbol: :patron_enable,
    ordered_fields: %i[
      transaction_date
    ],
    required_delimited_fields: %i[
      institution_id
      patron_identifier
    ],
    optional_delimited_fields: %i[
      terminal_password
      patron_password
    ],
  },
  {
    code: "26",
    name: "Patron Enable Response",
    symbol: :patron_enable_response,
    ordered_fields: %i[
      patron_status
      language
      transaction_date
    ],
    required_delimited_fields: %i[
      institution_id
      patron_identifier
      personal_name
    ],
    optional_delimited_fields: %i[
      valid_patron
      valid_patron_password
      screen_message
      print_line
    ],
  },
  {
    code: "29",
    name: "Renew",
    symbol: :renew,
    ordered_fields: %i[
      third_party_allowed
      no_block
      transaction_date
      nb_due_date
    ],
    required_delimited_fields: %i[
      institution_id
      patron_identifier
    ],
    optional_delimited_fields: %i[
      patron_password
      item_identifier
      title_identifier
      terminal_password
      item_properties
      fee_acknowledged
    ],
  },
  {
    code: "30",
    name: "Renew Response",
    symbol: :renew_response,
    ordered_fields: %i[
      ok
      renewal_ok
      magnetic_media
      desensitize
      transaction_date
    ],
    required_delimited_fields: %i[
      institution_id
      patron_identifier
      item_identifier
      title_identifier
      due_date
    ],
    optional_delimited_fields: %i[
      fee_type
      security_inhibit
      currency_type
      fee_amount
      media_type
      item_properties
      transaction_id
      screen_message
      print_line
    ],
  },
  {
    code: "35",
    name: "End Patron Session",
    symbol: :end_patron_session,
    ordered_fields: %i[
      transaction_date
    ],
    required_delimited_fields: %i[
      institution_id
      patron_identifier
    ],
    optional_delimited_fields: %i[
      terminal_password
      patron_password
    ],
  },
  {
    code: "36",
    name: "End Session Response",
    symbol: :end_session_response,
    ordered_fields: %i[
      end_session
      transaction_date
    ],
    required_delimited_fields: %i[
      institution_id
      patron_identifier
    ],
    optional_delimited_fields: %i[
      screen_message
      print_line
    ],
  },
  {
    code: "37",
    name: "Fee Paid",
    symbol: :fee_paid,
    ordered_fields: %i[
      transaction_date
      fee_type_ordered
      payment_type
      currency_type_ordered
    ],
    required_delimited_fields: %i[
      fee_amount
      institution_id
      patron_identifier
    ],
    optional_delimited_fields: %i[
      terminal_password
      patron_password
      fee_identifier
      transaction_id
    ],
  },
  {
    code: "38",
    name: "Fee Paid Response",
    symbol: :fee_paid_response,
    ordered_fields: %i[
      payment_accepted
      transaction_date
    ],
    required_delimited_fields: %i[
      institution_id
      patron_identifier
    ],
    optional_delimited_fields: %i[
      transaction_id
      screen_message
      print_line
    ],
  },
  {
    code: "63",
    name: "Patron Information",
    symbol: :patron_information,
    ordered_fields: %i[
      language
      transaction_date
      summary
    ],
    required_delimited_fields: %i[
      institution_id
      patron_identifier
    ],
    optional_delimited_fields: %i[
      terminal_password
      patron_password
      start_item
      end_item
    ]
  },
  {
    code: "64",
    name: "Patron Information Response",
    symbol: :patron_information_response,
    ordered_fields: %i[
      patron_status
      language
      transaction_date
      hold_items_count
      overdue_items_count
      charged_items_count
      fine_items_count
      recall_items_count
      unavailable_holds_count
    ],
    required_delimited_fields: %i[
      institution_id
      patron_identifier
      personal_name
    ],
    optional_delimited_fields: %i[
      hold_items_limit
      overdue_items_limit
      charged_items_limit
      valid_patron
      valid_patron_password
      currency_type
      fee_amount
      fee_limit
      items
      home_address
      email_address
      home_phone_number
      screen_message
      print_line
    ]
  },
  {
    code: "65",
    name: "Renew All",
    symbol: :renew_all,
    ordered_fields: %i[
      transaction_date
    ],
    required_delimited_fields: %i[
      institution_id
      patron_identifier
    ],
    optional_delimited_fields: %i[
      patron_password
      terminal_password
      fee_acknowledged
    ],
  },
  {
    code: "66",
    name: "Renew All Response",
    symbol: :renew_all_response,
    ordered_fields: %i[
      ok
      renewed_count
      unrenewed_count
      transaction_date
    ],
    required_delimited_fields: %i[
      institution_id
    ],
    optional_delimited_fields: %i[
      renewed_items
      unrenewed_items
      screen_message
      print_line
    ],
  },
  {
    code: "93",
    name: "Login",
    symbol: :login,
    ordered_fields: %i[
      uid_algorithm
      pwd_algorithm
    ],
    required_delimited_fields: %i[
      login_user_id
      login_password
    ],
    optional_delimited_fields: %i[
      location_code
    ],
  },
  {
    code: "94",
    name: "Login Response",
    symbol: :login_response,
    ordered_fields: %i[
      ok
    ],
    required_delimited_fields: [],
    optional_delimited_fields: [],
  },
  {
    code: "96",
    name: "Request SC Resend",
    symbol: :request_sc_resend,
    ordered_fields: [],
    required_delimited_fields: [],
    optional_delimited_fields: [],
  },
  {
    code: "97",
    name: "Request ACS Resend",
    symbol: :request_acs_resend,
    ordered_fields: [],
    required_delimited_fields: [],
    optional_delimited_fields: [],
  },
  {
    code: "98",
    name: "ACS Status",
    symbol: :acs_status,
    ordered_fields: %i[
      online_status
      checkin_ok
      checkout_ok
      acs_renewal_policy
      status_update_ok
      offline_ok
      timeout_period
      retries_allowed
      date_time_sync
      protocol_version
    ],
    required_delimited_fields: %i[
      institution_id
      supported_messages
    ],
    optional_delimited_fields: %i[
      library_name
      terminal_location
      screen_message
      print_line
    ],
  },
  {
    code: "99",
    name: "SC Status",
    symbol: :sc_status,
    ordered_fields: %i[
      status_code
      max_print_width
      protocol_version
    ],
    required_delimited_fields: [],
    optional_delimited_fields: [],
  },
].map { |msg|
  msg[:symbol] = msg[:name].downcase.gsub(" ", "_").to_sym
  msg
}
MESSAGES_BY_CODE =
MESSAGES
.group_by { |m| m[:code] }
.map { |k,v| [k,v.first] }
.to_h

Class Method Summary collapse

Class Method Details

.encode(hsh, **encoding_options) ⇒ Object



14
15
16
# File 'lib/sip2.rb', line 14

def self.encode(hsh, **encoding_options)
  Sip2::Message.from_hash(hsh).encode(**encoding_options)
end

.parse(data) ⇒ Object



10
11
12
# File 'lib/sip2.rb', line 10

def self.parse(data)
  TRANSFORMER.apply(PARSER.parse(data))
end