Module: Trailblazer::Finder::Dsl

Defined in:
lib/trailblazer/finder/dsl.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#configObject



84
85
86
# File 'lib/trailblazer/finder/dsl.rb', line 84

def config
  @config ||= Configuration.new
end

Instance Method Details

#adapter(adapter_name) ⇒ Object



117
118
119
# File 'lib/trailblazer/finder/dsl.rb', line 117

def adapter(adapter_name)
  config.adapter = adapter_name.to_s
end

#current_adapterObject



125
126
127
# File 'lib/trailblazer/finder/dsl.rb', line 125

def current_adapter
  config.adapter
end

#current_paginatorObject



129
130
131
# File 'lib/trailblazer/finder/dsl.rb', line 129

def current_paginator
  config.paginator
end

#entity(&block) ⇒ Object



95
96
97
# File 'lib/trailblazer/finder/dsl.rb', line 95

def entity(&block)
  config.entity = block
end

#filter_by(name, options = {}, &block) ⇒ Object



110
111
112
113
114
115
# File 'lib/trailblazer/finder/dsl.rb', line 110

def filter_by(name, options = {}, &block)
  filter_name = name.to_sym
  config.state.update!(:filters) do |filters|
    filters.merge(filter_name => { name: name, with: options[:with], block: block }.compact)
  end
end

#filters_countObject



133
134
135
# File 'lib/trailblazer/finder/dsl.rb', line 133

def filters_count
  config.filters.count
end

#inherited(base) ⇒ Object



88
89
90
91
92
93
# File 'lib/trailblazer/finder/dsl.rb', line 88

def inherited(base)
  # Skip inheritance for the base Trailblazer::Finder class
  return if name == 'Trailblazer::Finder'

  base.config = config.clone
end

#paginator(paginator_name) ⇒ Object



121
122
123
# File 'lib/trailblazer/finder/dsl.rb', line 121

def paginator(paginator_name)
  config.paginator = paginator_name.to_s
end

#paging(per_page: 25, min_per_page: 10, max_per_page: 100) ⇒ Object



99
100
101
102
103
# File 'lib/trailblazer/finder/dsl.rb', line 99

def paging(per_page: 25, min_per_page: 10, max_per_page: 100)
  config.state.update!(:paging) do |paging|
    paging.merge(per_page: per_page, min_per_page: min_per_page, max_per_page: max_per_page)
  end
end

#properties_countObject



137
138
139
# File 'lib/trailblazer/finder/dsl.rb', line 137

def properties_count
  config.properties.count
end

#property(name, options = {}) ⇒ Object



105
106
107
108
# File 'lib/trailblazer/finder/dsl.rb', line 105

def property(name, options = {})
  config.state.update!(:properties) { |props| props.merge(name => options.merge(type: options[:type] || Types::String)) }
  config.state.update!(:sorting) { |sort| sort.merge(name => (options[:sort_direction] || :desc)) } if options[:sortable]
end