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
49
50
# 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.from_dsl_data(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

  @metadata = dsl_data[:meta]

  @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

#metadataObject (readonly)

Returns the value of attribute metadata.



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

def 
  @metadata
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



105
106
107
108
109
# File 'lib/apipie/method_description.rb', line 105

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

#doc_urlObject



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

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



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

def errors
  return @merged_errors if @merged_errors
  @merged_errors = []
  if @resource
    resource_errors = @resource._errors_args.map do |args|
      Apipie::ErrorDescription.from_dsl_data(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)


145
146
147
# File 'lib/apipie/method_description.rb', line 145

def from_concern?
  @from_concern
end

#idObject



52
53
54
# File 'lib/apipie/method_description.rb', line 52

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

#method_apis_to_jsonObject



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

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



56
57
58
# File 'lib/apipie/method_description.rb', line 56

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

#params_orderedObject



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

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



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

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,
    :metadata => @metadata,
    :see => see.map(&:to_json)
  }
end

#versionObject



93
94
95
# File 'lib/apipie/method_description.rb', line 93

def version
  resource._version
end