Sha256: 10ba14acc7012e77f2b4e807e66e7835d2d028fd5644475ea1a606b866a24523

Contents?: true

Size: 1.26 KB

Versions: 36

Compression:

Stored size: 1.26 KB

Contents

# frozen_string_literal: true

module IronBank
  module Describe
    # Describe a field in Zuora: name, label, type, etc.
    #
    class Field
      private_class_method :new

      TEXT_VALUES = %i[
        name
        label
        type
      ].freeze

      PLURAL_VALUES = %i[
        options
        contexts
      ].freeze

      BOOLEAN_VALUES = %i[
        selectable
        createable
        updateable
        filterable
        custom
        required
      ].freeze

      def self.from_xml(doc)
        new(doc)
      end

      # Defined separately because the node name is not ruby-friendly
      def max_length
        doc.at_xpath(".//maxlength").text.to_i
      end

      TEXT_VALUES.each do |val|
        define_method(val) { doc.at_xpath(".//#{val}").text }
      end

      PLURAL_VALUES.each do |val|
        singular = val.to_s.chop
        define_method(val) { doc.xpath(".//#{val}/#{singular}").map(&:text) }
      end

      BOOLEAN_VALUES.each do |val|
        define_method(:"#{val}?") { doc.at_xpath(".//#{val}").text == "true" }
      end

      def inspect
        "#<#{self.class}:0x#{(object_id << 1).to_s(16)} #{name} (#{type})>"
      end

      private

      attr_reader :doc

      def initialize(doc)
        @doc = doc
      end
    end
  end
end

Version data entries

36 entries across 36 versions & 1 rubygems

Version Path
iron_bank-5.4.1 lib/iron_bank/describe/field.rb
iron_bank-5.4.0 lib/iron_bank/describe/field.rb
iron_bank-5.3.2 lib/iron_bank/describe/field.rb
iron_bank-5.3.0 lib/iron_bank/describe/field.rb
iron_bank-5.2.6 lib/iron_bank/describe/field.rb
iron_bank-5.2.4 lib/iron_bank/describe/field.rb
iron_bank-5.2.3 lib/iron_bank/describe/field.rb
iron_bank-5.2.0 lib/iron_bank/describe/field.rb
iron_bank-5.1.1 lib/iron_bank/describe/field.rb
iron_bank-5.1.0 lib/iron_bank/describe/field.rb
iron_bank-4.4.3 lib/iron_bank/describe/field.rb
iron_bank-5.0.1 lib/iron_bank/describe/field.rb
iron_bank-5.0.0 lib/iron_bank/describe/field.rb
iron_bank-4.4.1 lib/iron_bank/describe/field.rb
iron_bank-4.4.0 lib/iron_bank/describe/field.rb
iron_bank-4.3.1 lib/iron_bank/describe/field.rb
iron_bank-4.3.0 lib/iron_bank/describe/field.rb
iron_bank-4.2.0 lib/iron_bank/describe/field.rb
iron_bank-4.1.1 lib/iron_bank/describe/field.rb
iron_bank-4.1.0 lib/iron_bank/describe/field.rb