Module: RailsStuff::ResourcesController::BelongsTo

Defined in:
lib/rails_stuff/resources_controller/belongs_to.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.index_url(subject, field: nil, param: nil) ⇒ Object

Builds lambda to use as ‘#index_url`



18
19
20
21
22
# File 'lib/rails_stuff/resources_controller/belongs_to.rb', line 18

def index_url(subject, *, field: nil, param: nil)
  field ||= :"#{subject}_id"
  param ||= field
  -> { url_for action: :index, param => resource.public_send(field) }
end

.source_relation(subject, collection, optional: false) ⇒ Object

Builds lambda to use as ‘#source_relation`.



6
7
8
9
10
11
12
13
14
15
# File 'lib/rails_stuff/resources_controller/belongs_to.rb', line 6

def source_relation(subject, collection, optional: false, **)
  check_subject = :"#{subject}?"
  lambda do
    if optional && !send(check_subject)
      super()
    else
      send(subject).public_send(collection)
    end
  end
end

Instance Method Details

#resource_belongs_to(subject, resource_helper: true, urls: true, **options) ⇒ Object

Defines resource helper and source relation



26
27
28
29
30
31
32
# File 'lib/rails_stuff/resources_controller/belongs_to.rb', line 26

def resource_belongs_to(subject, resource_helper: true, urls: true, **options)
  resource_helper(subject) if resource_helper
  collection = options[:collection] || resource_class.model_name.plural
  source_relation_proc = BelongsTo.source_relation(subject, collection, options)
  protected define_method(:source_relation, &source_relation_proc)
  protected define_method(:index_url, &BelongsTo.index_url(subject, urls)) if urls
end