Class: Bluepine::Endpoints::Method

Inherits:
Object
  • Object
show all
Defined in:
lib/bluepine/endpoints/method.rb

Overview

Represents HTTP method

Examples:

Create new POST Method

Method.new(:post, action: create, path: "/", schema: :user, as: :list)
Method.new(:post, {
  action: :create,
  path: "/",
  validators: [CustomValidator]
})

Constant Summary collapse

DEFAULT_OPTIONS =
{
  as:          nil,
  params:      [],
  exclude:     false,
  schema:      nil,
  status:      200,
  title:       nil,
  description: nil,
  validators:  [],
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(verb, action:, path: "/", **options) ⇒ Method

Returns a new instance of Method.



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/bluepine/endpoints/method.rb', line 29

def initialize(verb, action:, path: "/", **options)
  @options = DEFAULT_OPTIONS.merge(options)
  @verb    = verb
  @path    = path
  @action  = action

  # Create ParamsAttribute instance
  @params  = create_params(action, options.slice(:params, :schema, :exclude))
  @schema  = @options[:schema]
  @as      = @options[:as]
  @status  = @options[:status]
  @title   = @options[:title]
  @description = @options[:description]
  @validator   = nil
  @validators  = @options[:validators]
  @resolver    = nil
  @result      = nil
end

Instance Attribute Details

#actionObject (readonly)

Returns the value of attribute action.



26
27
28
# File 'lib/bluepine/endpoints/method.rb', line 26

def action
  @action
end

#asObject (readonly)

Returns the value of attribute as.



26
27
28
# File 'lib/bluepine/endpoints/method.rb', line 26

def as
  @as
end

#descriptionObject

Returns the value of attribute description.



27
28
29
# File 'lib/bluepine/endpoints/method.rb', line 27

def description
  @description
end

#paramsObject (readonly)

Returns the value of attribute params.



26
27
28
# File 'lib/bluepine/endpoints/method.rb', line 26

def params
  @params
end

#pathObject (readonly)

Returns the value of attribute path.



26
27
28
# File 'lib/bluepine/endpoints/method.rb', line 26

def path
  @path
end

#schemaObject (readonly)

Returns the value of attribute schema.



26
27
28
# File 'lib/bluepine/endpoints/method.rb', line 26

def schema
  @schema
end

#statusObject (readonly)

Returns the value of attribute status.



26
27
28
# File 'lib/bluepine/endpoints/method.rb', line 26

def status
  @status
end

#titleObject

Returns the value of attribute title.



27
28
29
# File 'lib/bluepine/endpoints/method.rb', line 27

def title
  @title
end

#verbObject (readonly)

Returns the value of attribute verb.



26
27
28
# File 'lib/bluepine/endpoints/method.rb', line 26

def verb
  @verb
end

Instance Method Details

#body?Boolean

Does it have request body? (only non GET verb can have request body)

Returns:

  • (Boolean)


64
65
66
# File 'lib/bluepine/endpoints/method.rb', line 64

def body?
  Bluepine::Endpoint::HTTP_METHODS_WITH_BODY.include?(@verb) && @params.keys.any?
end

#build_params(default = {}, resolver = nil) ⇒ Object



68
69
70
71
# File 'lib/bluepine/endpoints/method.rb', line 68

def build_params(default = {}, resolver = nil)
  @resolver = resolver if resolver
  @params   = @params.build(default, resolver)
end

#errorsObject



59
60
61
# File 'lib/bluepine/endpoints/method.rb', line 59

def errors
  @result&.errors
end

#permit_params(params = {}, target = nil) ⇒ Object



73
74
75
76
77
# File 'lib/bluepine/endpoints/method.rb', line 73

def permit_params(params = {}, target = nil)
  return params unless params.respond_to?(:permit)

  params.permit(*@params.permit(params))
end

#valid?(*args) ⇒ Boolean

Returns:

  • (Boolean)


53
54
55
56
57
# File 'lib/bluepine/endpoints/method.rb', line 53

def valid?(*args)
  validate(*args)

  @result&.errors&.empty?
end

#validate(params = {}, resolver = nil) ⇒ Object



48
49
50
51
# File 'lib/bluepine/endpoints/method.rb', line 48

def validate(params = {}, resolver = nil)
  @validator = create_validator(@resolver || resolver)
  @result    = @validator.validate(@params, params, validators: @validators)
end