Class: Apipie::MethodDescription

Inherits:
Object
  • Object
show all
Defined in:
lib/apipie/method_description.rb

Defined Under Namespace

Classes: Api

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(method, resource, dsl_data) ⇒ MethodDescription

Returns a new instance of MethodDescription.



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/apipie/method_description.rb', line 20

def initialize(method, resource, dsl_data)
  @method = method.to_s
  @resource = resource
  @from_concern = dsl_data[:from_concern]

  @apis = dsl_data[:api_args].map do |method, path, desc|
    MethodDescription::Api.new(method, concern_subst(path), concern_subst(desc))
  end

  desc = dsl_data[:description] || ''
  @full_description = Apipie.markup_to_html(desc)

  @errors = dsl_data[:errors].map do |args|
    Apipie::ErrorDescription.new(args)
  end

  @see = dsl_data[:see].map do |args|
    Apipie::SeeDescription.new(args)
  end

  @formats = dsl_data[:formats]
  @examples = dsl_data[:examples]
  @examples += load_recorded_examples

  @params_ordered = dsl_data[:params].map do |args|
    Apipie::ParamDescription.from_dsl_data(self, args)
  end
  @params_ordered = ParamDescription.unify(@params_ordered)
end

Instance Attribute Details

#apisObject (readonly)

Returns the value of attribute apis.



18
19
20
# File 'lib/apipie/method_description.rb', line 18

def apis
  @apis
end

#examplesObject (readonly)

Returns the value of attribute examples.



18
19
20
# File 'lib/apipie/method_description.rb', line 18

def examples
  @examples
end

#formatsObject (readonly)

Returns the value of attribute formats.



18
19
20
# File 'lib/apipie/method_description.rb', line 18

def formats
  @formats
end

#full_descriptionObject (readonly)

Returns the value of attribute full_description.



18
19
20
# File 'lib/apipie/method_description.rb', line 18

def full_description
  @full_description
end

#methodObject (readonly)

Returns the value of attribute method.



18
19
20
# File 'lib/apipie/method_description.rb', line 18

def method
  @method
end

#resourceObject (readonly)

Returns the value of attribute resource.



18
19
20
# File 'lib/apipie/method_description.rb', line 18

def resource
  @resource
end

#seeObject (readonly)

Returns the value of attribute see.



18
19
20
# File 'lib/apipie/method_description.rb', line 18

def see
  @see
end

Instance Method Details

#create_api_url(api) ⇒ Object



103
104
105
106
107
# File 'lib/apipie/method_description.rb', line 103

def create_api_url(api)
  path = "#{Apipie.api_base_url(@resource._version)}#{api.path}"
  path = path[0..-2] if path[-1..-1] == '/'
  return path
end

#doc_urlObject



95
96
97
98
99
100
101
# File 'lib/apipie/method_description.rb', line 95

def doc_url
  crumbs = []
  crumbs << @resource._version if Apipie.configuration.version_in_url
  crumbs << @resource._id
  crumbs << @method
  Apipie.full_url crumbs.join('/')
end

#errorsObject



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/apipie/method_description.rb', line 74

def errors
  return @merged_errors if @merged_errors
  @merged_errors = []
  if @resource
    resource_errors = @resource._errors_args.map do |args|
      Apipie::ErrorDescription.new(args)
    end

    # exclude overwritten parent errors
    @merged_errors = resource_errors.find_all do |err|
      !@errors.any? { |e| e.code == err.code }
    end
  end
  @merged_errors.concat(@errors)
  return @merged_errors
end

#from_concern?Boolean

was the description defines in a module instead of directly in controller?

Returns:

  • (Boolean)


142
143
144
# File 'lib/apipie/method_description.rb', line 142

def from_concern?
  @from_concern
end

#idObject



50
51
52
# File 'lib/apipie/method_description.rb', line 50

def id
  "#{resource._id}##{method}"
end

#method_apis_to_jsonObject



109
110
111
112
113
114
115
116
117
# File 'lib/apipie/method_description.rb', line 109

def method_apis_to_json
  @apis.each.collect do |api|
    {
      :api_url => create_api_url(api),
      :http_method => api.http_method.to_s,
      :short_description => api.short_description
    }
  end
end

#paramsObject



54
55
56
# File 'lib/apipie/method_description.rb', line 54

def params
  params_ordered.reduce(ActiveSupport::OrderedHash.new) { |h,p| h[p.name] = p; h }
end

#params_orderedObject



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/apipie/method_description.rb', line 58

def params_ordered
  all_params = []
  parent = Apipie.get_resource_description(@resource.controller.superclass)

  # get params from parent resource description
  [parent, @resource].compact.each do |resource|
    resource_params = resource._params_args.map do |args|
      Apipie::ParamDescription.from_dsl_data(self, args)
    end
    merge_params(all_params, resource_params)
  end

  merge_params(all_params, @params_ordered)
  all_params.find_all(&:validator)
end

#to_jsonObject



127
128
129
130
131
132
133
134
135
136
137
138
139
# File 'lib/apipie/method_description.rb', line 127

def to_json
  {
    :doc_url => doc_url,
    :name => @method,
    :apis => method_apis_to_json,
    :formats => formats,
    :full_description => @full_description,
    :errors => errors.map(&:to_json),
    :params => params_ordered.map(&:to_json).flatten,
    :examples => @examples,
    :see => see.map(&:to_json)
  }
end

#versionObject



91
92
93
# File 'lib/apipie/method_description.rb', line 91

def version
  resource._version
end