module ReservedFor::ModuleMethods

Public Instance Methods

any(whitelist: true) click to toggle source
# File lib/reserved_for.rb, line 42
def any(whitelist: true)
  set = @reserved_list_map.map{ |k, v|
    next v if options[:check_plural]
    next nil if k =~ /^_plurals_/
    v
  }.compact.inject(:+)
  set -= @reserved_list_map[:whitelist] if whitelist
  set
end
clear_all!() click to toggle source
# File lib/reserved_for.rb, line 9
def clear_all!
  @reserved_list_map = { whitelist: Set.new }
  self
end
configure(options = {}, &block) click to toggle source
# File lib/reserved_for.rb, line 25
def configure(options = {}, &block)
  config = OpenStruct.new
  block.call(config)
  @options = _default_config
    .merge(options)
    .merge(Hash[config.each_pair.map{ |k,v| [k, v] }])

  invalid_options = @options.keys - _default_config.keys
  raise ReservedFor::InvalidOptionError, "invalid options: #{invalid_options}" if invalid_options.size > 0
  reset!(reset_option: false)
  self
end
method_missing(name, *args) click to toggle source
# File lib/reserved_for.rb, line 52
def method_missing(name, *args)
  case name.to_s
  when /(.*)=$/
    args    = args.flatten
    plurals = args.map{ |arg| ActiveSupport::Inflector.pluralize(arg) }
    @reserved_list_map[$1.to_sym]               = Set.new(args)
    @reserved_list_map["_plurals_#{$1}".to_sym] = Set.new(plurals)
  else
    set =  @reserved_list_map[name.to_sym]
    return nil unless set
    set += @reserved_list_map["_plurals_#{name.to_s}".to_sym] if options[:check_plural]
    set
  end
end
options() click to toggle source
# File lib/reserved_for.rb, line 38
def options
  @options ||= _default_config
end
reset!(reset_option: true) click to toggle source
# File lib/reserved_for.rb, line 14
def reset!(reset_option: true)
  clear_all!
  @options = nil if reset_option
  if options[:use_default_reserved_list]
    plurals = _default_usernames.map{ |word| ActiveSupport::Inflector.pluralize(word) }
    @reserved_list_map[:usernames] = _default_usernames
    @reserved_list_map[:_plurals_usernames] = Set.new(plurals)
  end
  self
end

Private Instance Methods

_default_config() click to toggle source
# File lib/reserved_for.rb, line 73
def _default_config
  {
    use_default_reserved_list: true,
    check_plural:              false,
  }
end
_default_usernames() click to toggle source
# File lib/reserved_for.rb, line 69
def _default_usernames
  File.open("#{__dir__}/../config/USERNAMES").read.split("\n")
end