Sha256: 3316d672424be915553096d6530d92b85a95aea7f3c25c39dd8af47ba0676d0f

Contents?: true

Size: 1.37 KB

Versions: 31

Compression:

Stored size: 1.37 KB

Contents

require 'ripper'

module Hamlit
  module Concerns
    module Balanceable
      def fetch_balanced_braces(all_tokens)
        fetch_balanced_tokens(all_tokens, :on_lbrace, :on_rbrace)
      end

      def fetch_balanced_parentheses(all_tokens)
        fetch_balanced_tokens(all_tokens, :on_lparen, :on_rparen)
      end

      def balanced_braces_exist?(tokens)
        balanced_tokens_exist?(tokens, :on_lbrace, :on_rbrace)
      end

      def balanced_parens_exist?(tokens)
        balanced_tokens_exist?(tokens, :on_lparen, :on_rparen)
      end

      private

      def fetch_balanced_tokens(all_tokens, open_token, close_token)
        tokens     = []
        open_count = 0

        all_tokens.each_with_index do |token, index|
          (row, col), type, str = token
          case type
          when open_token  then open_count += 1
          when close_token then open_count -= 1
          end

          tokens << token
          break if open_count == 0
        end

        tokens
      end

      def balanced_tokens_exist?(tokens, open_token, close_token)
        open_count = 0

        tokens.each do |token|
          (row, col), type, str = token
          case type
          when open_token  then open_count += 1
          when close_token then open_count -= 1
          end

          break if open_count == 0
        end

        open_count == 0
      end
    end
  end
end

Version data entries

31 entries across 31 versions & 1 rubygems

Version Path
hamlit-1.4.3 lib/hamlit/concerns/balanceable.rb
hamlit-1.4.2 lib/hamlit/concerns/balanceable.rb
hamlit-1.4.1 lib/hamlit/concerns/balanceable.rb
hamlit-1.3.2 lib/hamlit/concerns/balanceable.rb
hamlit-1.3.1 lib/hamlit/concerns/balanceable.rb
hamlit-1.3.0 lib/hamlit/concerns/balanceable.rb
hamlit-1.2.1 lib/hamlit/concerns/balanceable.rb
hamlit-1.2.0 lib/hamlit/concerns/balanceable.rb
hamlit-1.1.1 lib/hamlit/concerns/balanceable.rb
hamlit-1.1.0 lib/hamlit/concerns/balanceable.rb
hamlit-1.0.0 lib/hamlit/concerns/balanceable.rb
hamlit-0.6.2 lib/hamlit/concerns/balanceable.rb
hamlit-0.6.1 lib/hamlit/concerns/balanceable.rb
hamlit-0.6.0 lib/hamlit/concerns/balanceable.rb
hamlit-0.5.3 lib/hamlit/concerns/balanceable.rb
hamlit-0.5.2 lib/hamlit/concerns/balanceable.rb
hamlit-0.5.1 lib/hamlit/concerns/balanceable.rb
hamlit-0.5.0 lib/hamlit/concerns/balanceable.rb
hamlit-0.4.3 lib/hamlit/concerns/balanceable.rb
hamlit-0.4.2 lib/hamlit/concerns/balanceable.rb