Class: SearchValidator

Inherits:
Object
  • Object
show all
Defined in:
lib/search_validator.rb

Overview

Abstract class to validate searches A search is valid if all records have enough information: title, year, authors and abstract

Direct Known Subclasses

SearchValidatorReview, SearchValidatorUser

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeSearchValidator

Returns a new instance of SearchValidator.



38
39
40
41
42
43
# File 'lib/search_validator.rb', line 38

def initialize
  @valid_records_id=[]
  @invalid_records_id=[]
  @searches_data={}

end

Instance Attribute Details

#invalid_records_idObject (readonly)

Returns the value of attribute invalid_records_id.



35
36
37
# File 'lib/search_validator.rb', line 35

def invalid_records_id
  @invalid_records_id
end

#searches_dataObject (readonly)

Returns the value of attribute searches_data.



36
37
38
# File 'lib/search_validator.rb', line 36

def searches_data
  @searches_data
end

#valid_records_idObject (readonly)

Returns the value of attribute valid_records_id.



34
35
36
# File 'lib/search_validator.rb', line 34

def valid_records_id
  @valid_records_id
end

Instance Method Details

#can_docs_queryObject



64
65
66
# File 'lib/search_validator.rb', line 64

def can_docs_query
  raise "Should be implemented"
end

#invalid_recordsObject



53
54
55
# File 'lib/search_validator.rb', line 53

def invalid_records
  Record.where(:id=>@invalid_records_id)
end

#invalid_records_nObject



47
48
49
# File 'lib/search_validator.rb', line 47

def invalid_records_n
  @invalid_records_id.length
end

#searchesObject



60
61
62
# File 'lib/search_validator.rb', line 60

def searches
  Search.where(:id=>@searches_data.keys)
end

#searches_nObject



57
58
59
# File 'lib/search_validator.rb', line 57

def searches_n
  Search.where(:systematic_review_id=>@sr.id, :user_id=>@user.id).count
end

#update_search(can_docs) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/search_validator.rb', line 79

def update_search(can_docs)
  if can_docs.empty?
    # Don't
    #Search.where(:systematic_review_id=>@sr.id, :user_id=>@user.id).update(:valid=>false)
  else
    can_docs.to_hash_groups(:s_id).each do |key,recs|
      rec_id=recs.map {|v| v[:r_id]}
      valids=@valid_records_id & rec_id
      invalids=@invalid_records_id & rec_id
      @searches_data[key]={
        :n_valid_records=>valids.length,
        :n_invalid_records=>invalids.length,
        :valid=>(valids.length>0 and invalids.length==0)}
      Search[key].update(:valid=> true) if (valids.length>0 and invalids.length==0)
    end
  end
end

#validObject



75
76
77
# File 'lib/search_validator.rb', line 75

def valid
  searches_n==0 or (valid_records_n>0 and invalid_records_n==0)
end

#valid_recordsObject



50
51
52
# File 'lib/search_validator.rb', line 50

def valid_records
  Record.where(:id=>@valid_records_id)
end

#valid_records_nObject



44
45
46
# File 'lib/search_validator.rb', line 44

def valid_records_n
  @valid_records_id.length
end

#validateObject



67
68
69
70
71
72
73
# File 'lib/search_validator.rb', line 67

def validate
  can_docs=can_docs_query
  #$log.info(can_docs.all)
  @valid_records_id=can_docs.find_all {|v| v[:author].to_s!="" and v[:title].to_s!="" and v[:abstract].to_s!="" and v[:year]!=0}.map {|v| v[:r_id]}
  @invalid_records_id=can_docs.map {|v| v[:r_id]} - @valid_records_id
  update_search(can_docs)
end