Sha256: e52b12bc0ff88c6678133bde7106b66db0beaa3896a91b75a779dcc1640ea10a

Contents?: true

Size: 1.19 KB

Versions: 1

Compression:

Stored size: 1.19 KB

Contents

class ResourceTokenizer
  def self.split(resource)
    tokenize(resource).map(&:last)
  end

  def self.tokenize(resource)
    result = []
    n = 0
    pn = 0
    state = :rt
    until n >= resource.length
      case state
      when :rt
        # looking for .
        if resource[n] == "."
          # reached the dot ..
          result << [:rt, resource[pn...n]]
          pn = n + 1
          state = :rn
        end
      when :rn
        # looking for [ or .
        if resource[n] == "."
          # reached the dot ..
          result << [:rn, resource[pn...n]]
          pn = n + 1
          state = :rt
        end
        if resource[n] == "["
          # reached the open bracket
          result << [:rn, resource[pn...n]]
          pn = n
          state = :ri
        end
      when :ri
        # looking for ]
        if resource[n] == "]"
          # reached the close bracket
          result << [:ri, resource[pn..n]]
          pn = n + 1
          state = :rt
          if resource[n + 1] == "."
            pn = n + 2
            n += 1
          end
        end
      else
        warn "unhandled state: #{state.inspect}"
      end
      # p resource[n]
      n += 1
    end
    result
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mux_tf-0.5.0 lib/mux_tf/resource_tokenizer.rb