class Flagist::Definer

Public Class Methods

new(model,data) click to toggle source
# File lib/flagist.rb, line 147
def initialize(model,data)
  @config = ::Flagist.config
  @model = model
  @data = data
end

Public Instance Methods

method_missing(method,*args) click to toggle source
# File lib/flagist.rb, line 153
def method_missing(method,*args)
  if args.size > 1
    case args.first
    when ::Hash
      opts = args.shift
    end
  end
  case args.last
  when ::Hash
    hash = args.pop
  end

  info = @data[method] ||= {}
  if opts
    opts.each do |k,v|
      info[k] = v
    end
  end

  unless info[:type]
    info[:type] = (method.to_s.pluralize == method.to_s) ? :array : :scalar
  end

  flags = info[:flags] ||= {}

  args.each do |value|
    flag = flags[value] ||= {}
    flag[:value] = value
    flag[:name] = value
  end

  if hash
    hash.each do |value,name|
      flag = flags[value] ||= {}
      flag[:value] = value
      flag[:name] = name
    end
  end

  labels = ::I18n.translate("#{@config.i18n_namespace}.#{@model.model_name.singular}.#{method}", default: {})
  flags.each do |value,flag|
    name = flag[:name]
    if labels[name]
      flag[:label] = labels[name]
    end
  end

  info
end