Module: Grape::Roar::Extensions::Relations::DSLMethods
- Defined in:
- lib/grape/roar/extensions/relations/dsl_methods.rb
Instance Method Summary collapse
- #link_relation(relation, is_collection = false, dsl = self) ⇒ Object
- #link_self ⇒ Object
- #map_base_url(&block) ⇒ Object
- #map_resource_path(&block) ⇒ Object
- #map_self_url(dsl = self) ⇒ Object
- #name_for_represented(represented) ⇒ Object
- #relation(relation_kind, rname, opts = {}) ⇒ Object
- #represent(object, _options) ⇒ Object
Instance Method Details
#link_relation(relation, is_collection = false, dsl = self) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/grape/roar/extensions/relations/dsl_methods.rb', line 8 def link_relation(relation, is_collection = false, dsl = self) send(is_collection ? :links : :link, relation) do |opts| data = represented.send(relation) mapped = Array.wrap(data).map do |object| href = [dsl.map_base_url.call(opts), dsl.map_resource_path.call(opts, object, relation)].join('/') is_collection ? { href: href } : href end is_collection ? mapped : mapped.first end end |
#link_self ⇒ Object
23 24 25 |
# File 'lib/grape/roar/extensions/relations/dsl_methods.rb', line 23 def link_self relational_mapper[:self] = { relation_kind: :self } end |
#map_base_url(&block) ⇒ Object
27 28 29 30 31 32 33 34 35 36 |
# File 'lib/grape/roar/extensions/relations/dsl_methods.rb', line 27 def map_base_url(&block) @map_base_url ||= if block.nil? proc do |opts| request = Grape::Request.new(opts[:env]) "#{request.base_url}#{request.script_name}" end else block end end |
#map_resource_path(&block) ⇒ Object
46 47 48 49 50 51 52 53 54 |
# File 'lib/grape/roar/extensions/relations/dsl_methods.rb', line 46 def map_resource_path(&block) @map_resource_path ||= if block.nil? proc do |_opts, object, relation_name| "#{relation_name}/#{object.id}" end else block end end |
#map_self_url(dsl = self) ⇒ Object
38 39 40 41 42 43 44 |
# File 'lib/grape/roar/extensions/relations/dsl_methods.rb', line 38 def map_self_url(dsl = self) link :self do |opts| resource_path = dsl.name_for_represented(represented) [dsl.map_base_url.call(opts), "#{resource_path}/#{represented.try(:id)}"].join('/') end end |
#name_for_represented(represented) ⇒ Object
56 57 58 |
# File 'lib/grape/roar/extensions/relations/dsl_methods.rb', line 56 def name_for_represented(represented) relational_mapper.adapter.name_for_represented(represented) end |
#relation(relation_kind, rname, opts = {}) ⇒ Object
60 61 62 |
# File 'lib/grape/roar/extensions/relations/dsl_methods.rb', line 60 def relation(relation_kind, rname, opts = {}) relational_mapper[rname] = opts.merge(relation_kind: relation_kind) end |
#represent(object, _options) ⇒ Object
64 65 66 67 68 |
# File 'lib/grape/roar/extensions/relations/dsl_methods.rb', line 64 def represent(object, ) object.extend(self) unless is_a?(Class) map_relations(object) unless relations_mapped is_a?(Class) ? super : object end |