Class: Kagu::Finder
- Inherits:
-
Object
- Object
- Kagu::Finder
- Defined in:
- lib/kagu/finder.rb
Constant Summary collapse
- MANDATORY_ATTRIBUTES =
[].freeze
Class Method Summary collapse
Instance Method Summary collapse
- #find(attributes = {}) ⇒ Object
- #ignored ⇒ Object
- #ignored?(track) ⇒ Boolean
-
#initialize(options = {}) ⇒ Finder
constructor
A new instance of Finder.
- #reload(options = {}) ⇒ Object
- #reload!(options = {}) ⇒ Object
- #replacements ⇒ Object
Constructor Details
#initialize(options = {}) ⇒ Finder
Returns a new instance of Finder.
21 22 23 24 |
# File 'lib/kagu/finder.rb', line 21 def initialize( = {}) @semaphore = Mutex.new reload() end |
Class Method Details
.replace(value, replacements = {}) ⇒ Object
9 10 11 12 13 14 15 |
# File 'lib/kagu/finder.rb', line 9 def self.replace(value, replacements = {}) replaced = value.to_s.dup replacements.each do |pattern, replacement| replaced.gsub!(pattern, replacement) end replaced.presence end |
.transliterate(value) ⇒ Object
17 18 19 |
# File 'lib/kagu/finder.rb', line 17 def self.transliterate(value) ActiveSupport::Inflector.transliterate(value.to_s).squish.downcase.presence end |
Instance Method Details
#find(attributes = {}) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/kagu/finder.rb', line 26 def find(attributes = {}) attributes.stringify_keys! results = [].tap do |matches| tracks_digests.each_with_index do |hash, digests_index| digests(attributes).each_with_index do |digest, digest_index| tracks = hash[digest].presence || next tracks = tracks.reject { |track| matches.any? { |match| match.try(:include?, track) } } next if tracks.empty? index = [digests_index, digest_index].max matches[index] ||= [] matches[index].push(*tracks) end end end results.compact! replacements.any? ? results : results.flatten end |
#ignored ⇒ Object
44 45 46 |
# File 'lib/kagu/finder.rb', line 44 def ignored @ignored ||= [] end |
#ignored?(track) ⇒ Boolean
48 49 50 |
# File 'lib/kagu/finder.rb', line 48 def ignored?(track) track.present? && digests(track).any? { |digest| ignored.include?(digest) } end |
#reload(options = {}) ⇒ Object
52 53 54 55 56 57 58 59 60 |
# File 'lib/kagu/finder.rb', line 52 def reload( = {}) @ignored = nil @replacements = nil @tracks_digests = nil .each do |name, value| send("#{name}=", value) if respond_to?("#{name}=", true) end self end |
#reload!(options = {}) ⇒ Object
62 63 64 65 |
# File 'lib/kagu/finder.rb', line 62 def reload!( = {}) @tracks = nil reload() end |
#replacements ⇒ Object
67 68 69 |
# File 'lib/kagu/finder.rb', line 67 def replacements @replacements ||= [] end |