Class: Sound

Overview

A Sound is digital representation of some noise. They are linked ivia Conveyances as Images aer linked via Depictions.

Constant Summary collapse

ALLOWED_CONTENT_TYPES =

See canonical list at

%w{
  audio/wma 
  audio/flac
  audio/mp3
  audio/ogg
  audio/wav
  audio/x-wav
  audio/x-ms-wma
  audio/m4a
  audio/mpeg
}

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Shared::IsData

#errors_excepting, #full_error_messages_excepting, #identical, #is_community?, #is_destroyable?, #is_editable?, #is_in_use?, #is_in_users_projects?, #metamorphosize, #similar

Methods included from Shared::Tags

#reject_tags, #tag_with, #tagged?, #tagged_with?

Methods included from Shared::Notes

#concatenated_notes_string, #reject_notes

Methods included from Shared::Identifiers

#dwc_occurrence_id, #identified?, #next_by_identifier, #previous_by_identifier, #reject_identifiers, #uri, #uuid

Methods included from Shared::DataAttributes

#import_attributes, #internal_attributes, #keyword_value_hash, #reject_data_attributes

Methods included from Shared::Attributions

#attributed?, #reject_attribution

Methods included from Shared::Citations

#cited?, #mark_citations_for_destruction, #nomenclature_date, #origin_citation_source_id, #reject_citations, #requires_citation?, #sources_by_topic_id

Methods included from Shared::ProtocolRelationships

#machine_output?, #protocolled?, #reject_protocols

Methods included from Shared::Confidences

#reject_confidences

Methods included from Shared::OriginRelationship

#new_objects, #old_objects, #reject_origin_relationships, #set_origin

Methods included from Shared::MatrixHooks::Member

#member_add_matrix_columns, #member_add_matrix_rows, #member_add_to_matrix_items, #member_of_new_matrix_column_items, #member_of_new_matrix_row_items, #member_of_old_matrix_column_items, #member_of_old_matrix_row_items, #member_remove_from_matrix_items, #member_remove_matrix_columns, #member_remove_matrix_rows, #member_synchronize_matrices, #member_update_matrix_items?

Methods included from Housekeeping

#has_polymorphic_relationship?

Methods inherited from ApplicationRecord

transaction_with_retry

Class Method Details

.select_optimized(user_id, project_id, target = nil) ⇒ Hash (private)

Returns sounds optimized for user selection.

Returns:

  • (Hash)

    sounds optimized for user selection



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'app/models/sound.rb', line 78

def self.select_optimized(user_id, project_id, target = nil)
  r = used_recently(user_id, project_id, target)
  h = {
    quick: [],
    pinboard: Sound.pinned_by(user_id).where(project_id:).to_a,
    recent: []
  }

  if target && !r.empty?
    h[:recent] = (
      Sound.where('"sounds"."id" IN (?)', r.first(5) ).to_a +
      Sound.where(project_id:, created_by_id: user_id, created_at: 3.hours.ago..Time.now)
      .order('updated_at DESC')
      .limit(3).to_a
    ).uniq.sort{|a,b| a.updated_at <=> b.updated_at}

    h[:quick] = (
      Sound.pinned_by(user_id).pinboard_inserted.where(project_id:).to_a +
      Sound.where('"sounds"."id" IN (?)', r.first(4) ).to_a)
      .uniq.sort{|a,b| a.updated_at <=> b.updated_at}
  else
    h[:recent] = Sound.where(project_id:).order('updated_at DESC').limit(10).to_a
    h[:quick] = Sound.pinned_by(user_id).pinboard_inserted.where(pinboard_items: {project_id:}).order('updated_at DESC')
  end

  h
end

.used_recently(user_id, project_id, used_on = '') ⇒ Object (private)



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'app/models/sound.rb', line 56

def self.used_recently(user_id, project_id, used_on = '')
  i = arel_table
  d = Conveyance.arel_table

  # i is a select manager
  j = d.project(d['sound_id'], d['updated_at'], d['conveyance_object_type']).from(d)
    .where(d['updated_at'].gt( 1.week.ago ))
    .where(d['updated_by_id'].eq(user_id))
    .where(d['project_id'].eq(project_id))
    .order(d['updated_at'].desc)

  z = j.as('recent_i')

  k = Arel::Nodes::InnerJoin.new(z, Arel::Nodes::On.new(
    z['sound_id'].eq(i['id']).and(z['conveyance_object_type'].eq(used_on))
  ))

  joins(k).distinct.pluck(:id)
end

Instance Method Details

#file_typeObject (private)



46
47
48
49
50
# File 'app/models/sound.rb', line 46

def file_type
  if !ALLOWED_CONTENT_TYPES.include?(sound_file.content_type)
    errors.add(:sound_file, "#{sound_file.content_type} is not allowed") 
  end
end

#purge_sound_fileObject (private)



52
53
54
# File 'app/models/sound.rb', line 52

def purge_sound_file
  sound_file.attachment.purge
end