Module: JsonapiSwaggerHelpers::Writeable

Included in:
CreateAction, DestroyAction, UpdateAction
Defined in:
lib/jsonapi_swagger_helpers/writeable.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(klass) ⇒ Object



5
6
7
8
9
10
11
12
13
# File 'lib/jsonapi_swagger_helpers/writeable.rb', line 5

def self.included(klass)
  klass.class_eval do
    attr_reader :node,
                :controller,
                :description,
                :tags,
                :singular
  end
end

Instance Method Details

#action_nameObject



36
37
38
# File 'lib/jsonapi_swagger_helpers/writeable.rb', line 36

def action_name
  raise 'override me'
end

#all_tagsObject



48
49
50
# File 'lib/jsonapi_swagger_helpers/writeable.rb', line 48

def all_tags
  tags + payload_tags
end

#contextObject



62
63
64
# File 'lib/jsonapi_swagger_helpers/writeable.rb', line 62

def context
  JsonapiSwaggerHelpers.docs_controller
end

#default_descriptionObject



40
41
42
# File 'lib/jsonapi_swagger_helpers/writeable.rb', line 40

def default_description
  "#{action_name.to_s.capitalize} Action"
end

#define_schemaObject



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/jsonapi_swagger_helpers/writeable.rb', line 100

def define_schema
  generate_request_schema!

  _self = self
  context.send(:swagger_schema, :"#{strong_resource.name}_#{action_name}") do
    _self.strong_resource.attributes.each_pair do |attribute, config|
      property attribute do
        key :type, config[:type]
      end
    end
  end

  _self.each_strong_relation(_self.strong_resource) do |relation_name, relation_config|
    context.send(:swagger_schema, :"#{strong_resource.name}_#{relation_name}_#{action_name}") do
      relation_config[:resource].attributes.each_pair do |attribute, config|
        property attribute do
          key :type, config[:type]
        end
      end
    end
  end
end

#each_strong_relation(strong_resource) ⇒ Object



90
91
92
93
94
95
96
97
98
# File 'lib/jsonapi_swagger_helpers/writeable.rb', line 90

def each_strong_relation(strong_resource)
  strong_resource.relations.each_pair do |relation_name, relation_config|
    yield relation_name, relation_config

    each_strong_relation(relation_config[:resource]) do |sub_relation_name, sub_relation_config|
      yield sub_relation_name, sub_relation_config
    end
  end
end

#generateObject



123
124
125
# File 'lib/jsonapi_swagger_helpers/writeable.rb', line 123

def generate
  raise 'override me'
end

#generate_request_schema!Object



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

def generate_request_schema!
  _self = self

  JsonapiSwaggerHelpers.docs_controller.send(:swagger_schema, request_schema_id) do
    property _self.strong_resource.name do
      key :'$ref', :"#{_self.strong_resource.name}_#{_self.action_name}"
    end

    _self.each_strong_relation(_self.strong_resource) do |relation_name, _relation_config|
      property relation_name do
        key :'$ref', :"#{_self.strong_resource.name}_#{relation_name}_#{_self.action_name}"
      end
    end
  end
end

#initialize(node, controller, description: nil, tags: [], singular: false) ⇒ Object



15
16
17
18
19
20
21
22
# File 'lib/jsonapi_swagger_helpers/writeable.rb', line 15

def initialize(node, controller, description: nil, tags: [], singular: false)
  @node = node
  @controller = controller
  @resource = controller._jsonapi_compliable
  @description = description || default_description
  @tags = tags
  @singular = singular
end

#operation_idObject



44
45
46
# File 'lib/jsonapi_swagger_helpers/writeable.rb', line 44

def operation_id
  "#{controller.name.gsub('::', '-')}-#{action_name}"
end

#payload_tagsObject



52
53
54
55
56
57
58
59
60
# File 'lib/jsonapi_swagger_helpers/writeable.rb', line 52

def payload_tags
  tags = [:"payload-#{strong_resource.name}_#{action_name}"]

  strong_resource.relations.each_pair do |relation_name, _relation_config|
    tags << :"payload-#{strong_resource.name}_#{relation_name}_#{action_name}"
  end

  tags
end

#request_schema_idObject



70
71
72
# File 'lib/jsonapi_swagger_helpers/writeable.rb', line 70

def request_schema_id
  "#{operation_id}_#{action_name}_request"
end

#resourceObject



24
25
26
27
28
29
30
# File 'lib/jsonapi_swagger_helpers/writeable.rb', line 24

def resource
  @resource = controller._jsonapi_compliable
  if @resource.is_a?(Hash)
    @resource = @resource[action_name]
  end
  @resource
end

#strong_resourceObject



66
67
68
# File 'lib/jsonapi_swagger_helpers/writeable.rb', line 66

def strong_resource
  controller._strong_resources[action_name]
end

#utilObject



32
33
34
# File 'lib/jsonapi_swagger_helpers/writeable.rb', line 32

def util
  JsonapiSwaggerHelpers::Util
end