Sha256: f4f0e63c96ae7041b16698ae6b5444ba2600975af3f0a1fa495409b33763cece

Contents?: true

Size: 1.96 KB

Versions: 217

Compression:

Stored size: 1.96 KB

Contents

require 'digest'
require 'precheck/rule'

module Precheck
  class CurseWordsRule < TextRule
    def self.key
      :curse_words
    end

    def self.env_name
      "RULE_CURSE_WORDS"
    end

    def self.friendly_name
      "No curse words"
    end

    def self.description
      "including words that might be considered objectionable"
    end

    def rule_block
      return lambda { |text|
        return RuleReturn.new(validation_state: Precheck::VALIDATION_STATES[:passed]) if text.to_s.strip.empty?
        text = text.downcase
        split_words = text.split
        split_words_without_punctuation = text.gsub(/\W/, ' ').split

        # remove punctuation and add only unique words
        all_metadata_words_list = (split_words + split_words_without_punctuation).uniq
        metadata_word_hashes = all_metadata_words_list.map { |word| Digest::SHA256.hexdigest(word) }
        curse_hashes_set = hashed_curse_word_set

        found_words = []
        metadata_word_hashes.each_with_index do |word, index|
          if curse_hashes_set.include?(word)
            found_words << all_metadata_words_list[index]
          end
        end

        if found_words.length > 0
          friendly_found_words = found_words.join(', ')
          UI.verbose "#{self.class.name.split('::').last ||= self.class.name} found potential curse words 😬"
          UI.verbose "Keep in mind, these words might be ok given the context they are used in"
          UI.verbose "Matched: \"#{friendly_found_words}\""
          return RuleReturn.new(validation_state: VALIDATION_STATES[:failed], failure_data: "found: #{friendly_found_words}")
        else
          return RuleReturn.new(validation_state: VALIDATION_STATES[:passed])
        end
      }
    end

    def hashed_curse_word_set
      curse_hashes = []
      File.open(File.dirname(__FILE__) + '/rules_data/curse_word_hashes/en_us.txt').each do |line|
        curse_hashes << line.to_s.strip
      end
      return curse_hashes.to_set
    end
  end
end

Version data entries

217 entries across 217 versions & 1 rubygems

Version Path
fastlane-2.74.0.beta.20180106010004 precheck/lib/precheck/rules/curse_words_rule.rb
fastlane-2.73.0 precheck/lib/precheck/rules/curse_words_rule.rb
fastlane-2.73.0.beta.20180105010003 precheck/lib/precheck/rules/curse_words_rule.rb
fastlane-2.73.0.beta.20180104010004 precheck/lib/precheck/rules/curse_words_rule.rb
fastlane-2.73.0.beta.20180103010003 precheck/lib/precheck/rules/curse_words_rule.rb
fastlane-2.72.0 precheck/lib/precheck/rules/curse_words_rule.rb
fastlane-2.72.0.beta.20180102010003 precheck/lib/precheck/rules/curse_words_rule.rb
fastlane-2.72.0.beta.20180101010003 precheck/lib/precheck/rules/curse_words_rule.rb
fastlane-2.72.0.beta.20171231010003 precheck/lib/precheck/rules/curse_words_rule.rb
fastlane-2.71.1 precheck/lib/precheck/rules/curse_words_rule.rb
fastlane-2.72.0.beta.20171230010003 precheck/lib/precheck/rules/curse_words_rule.rb
fastlane-2.72.0.beta.20171229010003 precheck/lib/precheck/rules/curse_words_rule.rb
fastlane-2.72.0.beta.20171228010004 precheck/lib/precheck/rules/curse_words_rule.rb
fastlane-2.71.0 precheck/lib/precheck/rules/curse_words_rule.rb
fastlane-2.71.0.beta.20171227010004 precheck/lib/precheck/rules/curse_words_rule.rb
fastlane-2.71.0.beta.20171226010004 precheck/lib/precheck/rules/curse_words_rule.rb
fastlane-2.71.0.beta.20171225010003 precheck/lib/precheck/rules/curse_words_rule.rb
fastlane-2.71.0.beta.20171224010003 precheck/lib/precheck/rules/curse_words_rule.rb
fastlane-2.71.0.beta.20171223010003 precheck/lib/precheck/rules/curse_words_rule.rb
fastlane-2.71.0.beta.20171222010003 precheck/lib/precheck/rules/curse_words_rule.rb