Module: JSONAPIonify::Api::Resource::Documentation
- Included in:
- JSONAPIonify::Api::Resource
- Defined in:
- lib/jsonapionify/api/resource/documentation.rb
Class Method Summary collapse
Instance Method Summary collapse
- #documentation_object(base_url) ⇒ Object
- #documented_actions_in_order ⇒ Object
- #example_id_generator(&block) ⇒ Object
- #example_instance_for_action(action, context, write = false) ⇒ Object
Class Method Details
.extended(mod) ⇒ Object
4 5 6 |
# File 'lib/jsonapionify/api/resource/documentation.rb', line 4 def self.extended(mod) mod.example_id_generator { |val| val } end |
Instance Method Details
#documentation_object(base_url) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/jsonapionify/api/resource/documentation.rb', line 17 def documentation_object(base_url) OpenStruct.new( name: type, description: JSONAPIonify::Documentation.render_markdown(@description || ''), relationships: relationships.map { |r| r.documentation_object }, request_headers: request_header_definitions.values.map { |h| OpenStruct.new name: h.name, required: h.required, actions: h.actions }, params: param_definitions.values.map { |p| OpenStruct.new name: p.string, required: p.required, default: p.default_value }.reject { |p| p.name.start_with? 'fields[' }, attributes: attributes.sort_by(&:name).map(&:documentation_object), actions: documented_actions_in_order.map do |action, base, args| action.documentation_object File.join(base_url, base), *args end ) end |
#documented_actions_in_order ⇒ Object
8 9 10 11 12 13 14 15 |
# File 'lib/jsonapionify/api/resource/documentation.rb', line 8 def documented_actions_in_order indexes = %i{list create read update delete add replace remove} documented_actions.reject do |a, *| ['HEAD', 'OPTIONS'].include? a.request_method end.sort_by do |action, *| indexes.index(action.name) || indexes.length end end |
#example_id_generator(&block) ⇒ Object
31 32 33 34 35 36 37 38 39 |
# File 'lib/jsonapionify/api/resource/documentation.rb', line 31 def example_id_generator(&block) index = 0 define_singleton_method(:generate_id) do instance_exec index += 1, &block end context :example_id do self.class.generate_id end end |
#example_instance_for_action(action, context, write = false) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/jsonapionify/api/resource/documentation.rb', line 41 def example_instance_for_action(action, context, write = false) id = generate_id OpenStruct.new.tap do |instance| instance.send "#{id_attribute}=", id.to_s actionable_attributes = attributes.select do |attr| if write attr.supports_write_for_action?(action, context) else attr.supports_read_for_action?(action, context) end end actionable_attributes.each do |attribute| instance.send "#{attribute.name}=", attribute.example(id) end instance.define_singleton_method :method_missing do |*args| self end end end |