Class: ApipieDSL::ClassDescription

Inherits:
Object
  • Object
show all
Defined in:
lib/apipie_dsl/class_description.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(klass, class_name, dsl_data = nil, version = nil) ⇒ ClassDescription

Returns a new instance of ClassDescription.



8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/apipie_dsl/class_description.rb', line 8

def initialize(klass, class_name, dsl_data = nil, version = nil)
  @klass = klass
  @name = class_name
  @methods = {}
  @properties = []
  @version = version || ApipieDSL.configuration.default_version
  @parent = ApipieDSL.get_class_description(ApipieDSL.superclass_for(klass), version)
  @refs = [@name]
  @sections = []
  @show = true
  update_from_dsl_data(dsl_data) if dsl_data
end

Instance Attribute Details

#deprecatedObject (readonly)

Returns the value of attribute deprecated.



5
6
7
# File 'lib/apipie_dsl/class_description.rb', line 5

def deprecated
  @deprecated
end

#full_descriptionObject (readonly)

Returns the value of attribute full_description.



5
6
7
# File 'lib/apipie_dsl/class_description.rb', line 5

def full_description
  @full_description
end

#klassObject (readonly)

Returns the value of attribute klass.



5
6
7
# File 'lib/apipie_dsl/class_description.rb', line 5

def klass
  @klass
end

#methodsObject (readonly)

Returns the value of attribute methods.



5
6
7
# File 'lib/apipie_dsl/class_description.rb', line 5

def methods
  @methods
end

#refsObject (readonly)

Returns the value of attribute refs.



5
6
7
# File 'lib/apipie_dsl/class_description.rb', line 5

def refs
  @refs
end

#sectionsObject (readonly)

Returns the value of attribute sections.



5
6
7
# File 'lib/apipie_dsl/class_description.rb', line 5

def sections
  @sections
end

#short_descriptionObject (readonly)

Returns the value of attribute short_description.



5
6
7
# File 'lib/apipie_dsl/class_description.rb', line 5

def short_description
  @short_description
end

#showObject (readonly)

Returns the value of attribute show.



5
6
7
# File 'lib/apipie_dsl/class_description.rb', line 5

def show
  @show
end

Instance Method Details

#add_method_description(method_description) ⇒ Object



54
55
56
57
# File 'lib/apipie_dsl/class_description.rb', line 54

def add_method_description(method_description)
  ApipieDSL.debug "@resource_descriptions[#{version}][#{@name}].methods[#{method_description.name}] = #{method_description}"
  @methods[method_description.name.to_sym] = method_description
end

#doc_url(section = nil) ⇒ Object



73
74
75
76
77
78
79
# File 'lib/apipie_dsl/class_description.rb', line 73

def doc_url(section = nil)
  crumbs = []
  crumbs << version if ApipieDSL.configuration.version_in_url
  crumbs << section if section
  crumbs << id
  ApipieDSL.full_url(crumbs.join('/'))
end

#docs(section = nil, method_name = nil, lang = nil) ⇒ Object



85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/apipie_dsl/class_description.rb', line 85

def docs(section = nil, method_name = nil, lang = nil)
  raise "Method #{method_name} not found for class #{id}" if method_name && !valid_method_name?(method_name)

  methods = if method_name.nil?
              @methods.map { |_key, method_desc| method_desc.docs(section, lang) }
            else
              [@methods[method_name.to_sym].docs(section, lang)]
            end
  short_desc = @short_description || ApipieDSL.configuration.default_class_description&.call(@klass)
  {
    id: id,
    name: @name,
    doc_url: doc_url(section),
    short_description: ApipieDSL.translate(short_desc, lang),
    full_description: ApipieDSL.translate(@full_description, lang),
    version: version,
    metadata: @metadata,
    properties: @properties.map { |prop_desc| prop_desc.docs(section, lang) }.sort_by { |p| p[:name] },
    methods: methods.sort_by { |m| m[:name] },
    deprecated: @deprecated,
    show: @show
  }
end

#idObject



44
45
46
47
48
# File 'lib/apipie_dsl/class_description.rb', line 44

def id
  return @klass.name if ApipieDSL.configuration.class_full_names?

  @name
end

#method_description(method_name) ⇒ Object



59
60
61
# File 'lib/apipie_dsl/class_description.rb', line 59

def method_description(method_name)
  @methods[method_name.to_sym]
end

#method_descriptionsObject



69
70
71
# File 'lib/apipie_dsl/class_description.rb', line 69

def method_descriptions
  @methods.values
end

#remove_method_description(method_name) ⇒ Object



63
64
65
66
67
# File 'lib/apipie_dsl/class_description.rb', line 63

def remove_method_description(method_name)
  return unless @methods.key?(method_name)

  @methods.delete(method_name)
end

#update_from_dsl_data(dsl_data) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/apipie_dsl/class_description.rb', line 21

def update_from_dsl_data(dsl_data)
  @name = dsl_data[:class_name] if dsl_data[:class_name]
  @full_description = ApipieDSL.markup_to_html(dsl_data[:description]) if dsl_data[:description]
  @short_description = dsl_data[:short_description] || @short_description
  @tag_list = dsl_data[:tag_list]
  if dsl_data[:meta].is_a?(Hash)
    @metadata&.merge!(dsl_data[:meta])
  elsif dsl_data[:meta]
    @metadata = dsl_data[:meta]
  end
  @deprecated = dsl_data[:deprecated] || false
  @show = dsl_data[:show] || @show
  prop_names = @properties.map(&:name)
  (dsl_data[:properties] || []).each do |args|
    @properties << ApipieDSL::MethodDescription.from_dsl_data(self, args) unless prop_names.include?(args.first.to_s)
  end
  @refs = (@refs + dsl_data[:refs]).uniq if dsl_data[:refs]
  @sections = (@sections + dsl_data[:sections]).uniq if dsl_data[:sections]
  return unless dsl_data[:app_info]

  ApipieDSL.configuration.app_info[version] = dsl_data[:app_info]
end

#valid_method_name?(method_name) ⇒ Boolean

Returns:

  • (Boolean)


81
82
83
# File 'lib/apipie_dsl/class_description.rb', line 81

def valid_method_name?(method_name)
  @methods.keys.map(&:to_s).include?(method_name.to_s)
end

#versionObject



50
51
52
# File 'lib/apipie_dsl/class_description.rb', line 50

def version
  @version || @parent.try(:version) || ApipieDSL.configuration.default_version
end