Class: DigitalAsset

Inherits:
Object
  • Object
show all
Includes:
Mongoid::Document, Mongoid::Timestamps
Defined in:
app/models/digital_asset.rb

Defined Under Namespace

Classes: Audience, ContentType, Document

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.bulk_processed?Boolean



98
99
100
# File 'app/models/digital_asset.rb', line 98

def self.bulk_processed?
  (stale.count.to_f / self.count) <= 0.05
end

.purge!Object



80
81
82
83
# File 'app/models/digital_asset.rb', line 80

def self.purge!
  # last_update = DigitalAsset.desc(:updated_at).try(:first).try :updated_at

  DigitalAsset.stale.destroy_all if bulk_processed?
end

Instance Method Details

#as_json(opts = {}) ⇒ Object

validates_uniqueness_of :guid



76
77
78
# File 'app/models/digital_asset.rb', line 76

def as_json(opts = {})
  super(opts).merge({:comp_fundcode => fund_code, :content_type_id => content_type_id, :latest_doc_changed_at => latest_doc_changed_at})
end

#audienceObject



170
171
172
# File 'app/models/digital_asset.rb', line 170

def audience
  TaxonomyTerm.label_for_term(audiences[0])
end

#content_orgObject



152
153
154
# File 'app/models/digital_asset.rb', line 152

def content_org
  TaxonomyTerm.label_for_term(content_organization_ids[0])
end

#content_typeObject



161
162
163
# File 'app/models/digital_asset.rb', line 161

def content_type
  TaxonomyTerm.label_for_term(content_type_id)
end

#content_type_idObject



164
165
166
# File 'app/models/digital_asset.rb', line 164

def content_type_id
 first_non_finra.try(:content_type)
end

#content_type_idsObject Also known as: doctype_ids



114
115
116
117
118
119
120
# File 'app/models/digital_asset.rb', line 114

def content_type_ids
  ids = []
  documents.try(:each) do |d|
    ids << d.content_type
  end
  ids
end

#doc_changed_at(path) ⇒ Object



106
107
108
# File 'app/models/digital_asset.rb', line 106

def doc_changed_at(path)
  path_is(path).try(:doc_changed_at)
end

#doc_sizeObject



110
111
112
# File 'app/models/digital_asset.rb', line 110

def doc_size
  first_non_finra.try(:size)
end

#expired?Boolean



127
128
129
# File 'app/models/digital_asset.rb', line 127

def expired?
  expires_at < Time.now
end

#finra_documentObject



131
132
133
134
# File 'app/models/digital_asset.rb', line 131

def finra_document
  finra_idx = documents.index {|d| d.content_type == ContentType::FINRA}
  documents[finra_idx] if finra_idx
end

#fund_codeObject



156
157
158
159
# File 'app/models/digital_asset.rb', line 156

def fund_code
  pid = product_ids.find {|pid| TaxonomyTerm.term_id_is(pid)[0].try(:fund_code)}
  pid and TaxonomyTerm.term_id_is(pid)[0].try(:fund_code).try(:rjust, 5, '0')
end

#has_finra?Boolean



123
124
125
# File 'app/models/digital_asset.rb', line 123

def has_finra?
  finra_document != nil
end

#is_institutional_use?Boolean Also known as: institutional_use?



141
142
143
# File 'app/models/digital_asset.rb', line 141

def is_institutional_use?
  audiences.index(DigitalAsset::Audience::INSTITUTIONAL_USE)
end

#is_investor_approved?Boolean Also known as: investor_approved?



136
137
138
# File 'app/models/digital_asset.rb', line 136

def is_investor_approved?
  audiences.index(DigitalAsset::Audience::INVESTOR_APPROVED)
end

#latest_doc_changed_atObject



85
86
87
88
89
90
91
92
# File 'app/models/digital_asset.rb', line 85

def latest_doc_changed_at
  documents.reduce(nil) do |latest_date, d|
    unless d.content_type == '549'
      latest_date = d.doc_changed_at if (latest_date == nil || latest_date < d.doc_changed_at)
    end
    latest_date
  end
end

#pagesObject



168
# File 'app/models/digital_asset.rb', line 168

def pages; first_non_finra.pages end

#path_is(path) ⇒ Object



102
103
104
# File 'app/models/digital_asset.rb', line 102

def path_is(path)
  documents.where(path: path).first unless documents.blank?
end

#primary_extensionObject



178
179
180
# File 'app/models/digital_asset.rb', line 178

def primary_extension
  first_non_finra.try(:path).try(:split,'.').try(:last).try(:upcase)
end

#primary_pathObject



174
175
176
# File 'app/models/digital_asset.rb', line 174

def primary_path
  first_non_finra.try(:path)
end

#productObject



146
147
148
# File 'app/models/digital_asset.rb', line 146

def product
  TaxonomyTerm.label_for_term(product_ids[0])
end

#programObject



149
150
151
# File 'app/models/digital_asset.rb', line 149

def program
  TaxonomyTerm.label_for_term(program_ids[0])
end

#validate_future_expirationObject



94
95
96
# File 'app/models/digital_asset.rb', line 94

def validate_future_expiration
  errors.add(:expires_at, "Expiration date must be at least 1 minute from now") unless expires_at and expires_at > 1.minute.from_now
end