module BlackStack::Strings::Spinning


Spinning


Public Class Methods

random_spinning_variation(text) click to toggle source

Esta funcion retorna una variacion al azar del texto que se pasa. Esta funcion se ocupa de dividir el texto en partes, para eviar el error “too big to product” que arroja la libraría.

# File lib/functions.rb, line 343
def self.random_spinning_variation(text)
  ret = text
  
  text.scan(MATCH_CONTENT_SPINNING).each { |s|
    a = ContentSpinning.new(s).spin
    rep = a[rand(a.size)]
    ret = ret.gsub(s, rep)
    a = nil
  }

  return ret
end
spintax?(s) click to toggle source

returns true if the text is spinned. otherwise, returns false.

# File lib/functions.rb, line 386
def self.spintax?(s)
  s.scan(MATCH_CONTENT_SPINNING).size > 0
end
valid_spinning_syntax?(s) click to toggle source

retorna true si la sintaxis del texto spineado es correcta caso contrario retorna false no soporta spinnings anidados. ejemplo: {my|our|{a car of mine}}

# File lib/functions.rb, line 359
def self.valid_spinning_syntax?(s)
  # valido que exste
  n = 0
  s.split('').each { |c|
    n+=1 if c=='{'  
    n-=1 if c=='}'
    if n!=0 && n!=1
      #raise "Closing spining char '}' with not previous opening spining char '{'." if n<0
      #raise "Opening spining char '{' inside another spining block." if n>1
      return false if n<0 # Closing spining char '}' with not previous opening spining char '{'.
      return false if n>1 # Opening spining char '{' inside another spining block.
    end  
  }
        
  return false if n!=0
  
  # obtengo cada uno de los spinnings
  s.scan(MATCH_CONTENT_SPINNING).each { |x|
    a = x.split('|')
    raise "No variations delimited by '|' inside spinning block." if a.size <= 1
  }
        
  true
end