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.



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
51
# File 'lib/apipie/method_description.rb', line 21

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 |mthd, path, desc, opts|
    MethodDescription::Api.new(mthd, concern_subst(path), concern_subst(desc), opts)
  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.



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

def apis
  @apis
end

#examplesObject (readonly)

Returns the value of attribute examples.



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

def examples
  @examples
end

#formatsObject (readonly)

Returns the value of attribute formats.



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

def formats
  @formats
end

#full_descriptionObject (readonly)

Returns the value of attribute full_description.



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

def full_description
  @full_description
end

#metadataObject (readonly)

Returns the value of attribute metadata.



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

def 
  @metadata
end

#methodObject (readonly)

Returns the value of attribute method.



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

def method
  @method
end

#resourceObject (readonly)

Returns the value of attribute resource.



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

def resource
  @resource
end

#seeObject (readonly)

Returns the value of attribute see.



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

def see
  @see
end

Instance Method Details

#create_api_url(api) ⇒ Object



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

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



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

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



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

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)


147
148
149
# File 'lib/apipie/method_description.rb', line 147

def from_concern?
  @from_concern
end

#idObject



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

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

#method_apis_to_json(lang = nil) ⇒ Object



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

def method_apis_to_json(lang = nil)
  @apis.each.collect do |api|
    {
      :api_url => create_api_url(api),
      :http_method => api.http_method.to_s,
      :short_description => Apipie.app.translate(api.short_description, lang),
      :deprecated => api.options[:deprecated]
    }
  end
end

#paramsObject



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

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

#params_orderedObject



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

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_json(lang = nil) ⇒ Object



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

def to_json(lang=nil)
  {
    :doc_url => doc_url,
    :name => @method,
    :apis => method_apis_to_json(lang),
    :formats => formats,
    :full_description => Apipie.app.translate(@full_description, lang),
    :errors => errors.map(&:to_json),
    :params => params_ordered.map{ |param| param.to_json(lang) }.flatten,
    :examples => @examples,
    :metadata => @metadata,
    :see => see.map(&:to_json)
  }
end

#versionObject



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

def version
  resource._version
end