Sha256: 789f1bf00e70f41a497d51500acede1427155a8a4a2de9810026b6830f4b5329

Contents?: true

Size: 1.85 KB

Versions: 1

Compression:

Stored size: 1.85 KB

Contents

class Lux::Api

  # name   'Show user data'
  # param  :email, type: :email, req: false
  # param  :pass
  # def show
  #   @user = User.where(email:@_email).first
  #   @user.slice(:id, :name, :avatar, :email)
  # end

  class << self
    @@actions ||= {}

    def method_added(m)
      ClassMethodParams.add_method self, m
    end

    # helper for standard definition of parametars
    # param :o_id
    # param :o_id, Integer
    # param :o_id, Integer, req: false
    # param :o_id, req: false
    def param(field, type=String, opts={})
      opts = type.is_a?(Hash) ? type : opts.merge(type: type)
      opts[:name] = field
      opts[:req]  = opts[:req].class.name == 'FalseClass' ? false : true
      opts[:type] ||= String

      ClassMethodParams.add_param self, :param, opts
    end

    # helper for standard definition of name
    def name(name)
      ClassMethodParams.add_param self, :name, name
    end

    # helper for standard definition of description
    def description(data)
      ClassMethodParams.add_param self, :description, name
    end
  end

  ###

  def check_params_and_mock_instance_variables action
    opts = ClassMethodParams.params self.class, action

    if opts && opts[:param]
      local = opts[:param].inject({}) { |h, el| o=el.dup; h[o.delete(:name)] = o; h }

      rules = Typero.new local
      errors = rules.validate(@params)

      if errors.keys.length > 0
        raise ArgumentError.new(errors.values.to_sentence) unless Lux.page

        Lux.page.status(400)
        @response[:error] = errors.values.to_sentence
        @response[:errors] = errors
        return false
      end

      # define local prefixed @_ variables
      for key in local.keys.map(&:to_s)
        value = params[key]
        eval "@_#{key.downcase.gsub(/[^\w]/,'_')} = value" if key.length < 15 && value.present? && key =~ /^[\w]+$/
      end
    end

    true
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
lux-fw-0.1.17 ./lib/lux/api/lib/dsl.rb