Class: Variable

Inherits:
ActiveRecord::Base
  • Object
show all
Includes:
MarkupTransform
Defined in:
app/models/variable.rb

Instance Method Summary collapse

Methods included from MarkupTransform

#block_element?, #default_text_handler, #ensure_p_closed, #format_in_paragraph, #format_not_in_paragraph, #inside_ul?, #link_target, #load_file, #load_html_fragment, #load_image, #load_link, #more, #open_p, #parse_list, #parse_list_text, #parse_node, #parse_non_text_node, #parse_text, #transform_markup

Instance Method Details

#availability_by_countryObject



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'app/models/variable.rb', line 83

def availability_by_country
  cache = variable_availability_caches.first
  if cache.nil?
    store = {}
    _availability_by_country = {}
    samples.select("samples.*, countries.full_name AS country_full_name").joins("INNER JOIN terrapop_samples ON terrapop_samples.sample_id = samples.id LEFT OUTER JOIN countries ON countries.id = samples.country_id").each do |sample|
      country_code = sample.country_full_name
      store[country_code] ||= []
      store[country_code]<< sample.year
    end
    store.each { |key, val| _availability_by_country[key] = val.sort }
    obj = VariableAvailabilityCach.create(variable_id: id, json: _availability_by_country.to_json)
    JSON.parse(obj.json)
  else
    JSON.parse(cache.json)
  end
end

#availability_by_sampleObject

returns array of Samples



78
79
80
# File 'app/models/variable.rb', line 78

def availability_by_sample
  samples.select("samples.*, countries.full_name AS country_full_name, UPPER(countries.short_name) AS short_country_name, UPPER(countries.short_name) || lpad((year % 100)::text, 2, '0') AS short_country_name_year").joins("INNER JOIN countries ON samples.country_id = countries.id")
end

#country_comparability_for_samples(them_samples) ⇒ Object



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

def country_comparability_for_samples(them_samples)
  country_comparabilities.where("country_id in (?)", (samples & them_samples).map { |s| s.country }.uniq)
end

#country_comparability_html(visible_samples) ⇒ Object



112
113
114
# File 'app/models/variable.rb', line 112

def country_comparability_html(visible_samples)
  country_comparability_for_samples(visible_samples).to_a
end

#data_table_keyObject



72
73
74
# File 'app/models/variable.rb', line 72

def data_table_key
  record_type_name.to_s.pluralize.to_sym
end

#description_htmlObject



107
108
109
# File 'app/models/variable.rb', line 107

def description_html
  transform_markup(description)
end

#general_comparability_htmlObject



117
118
119
# File 'app/models/variable.rb', line 117

def general_comparability_html
  transform_markup(general_comparability)
end

#household_variable?Boolean

Returns:

  • (Boolean)


62
63
64
# File 'app/models/variable.rb', line 62

def household_variable?
  record_type == 'H'
end

#included_in?(sample) ⇒ Boolean

Returns:

  • (Boolean)


30
31
32
# File 'app/models/variable.rb', line 30

def included_in?(sample)
  samples.include? sample
end

#person_variable?Boolean

Returns:

  • (Boolean)


57
58
59
# File 'app/models/variable.rb', line 57

def person_variable?
  record_type == 'P'
end

#record_type_nameObject



67
68
69
# File 'app/models/variable.rb', line 67

def record_type_name
  household_variable? ? :household : :person
end

#samples_universesObject



35
36
37
38
39
40
41
# File 'app/models/variable.rb', line 35

def samples_universes
  tuples = {}
  sample_variables.joins(sample: :terrapop_samples).includes(:sample, :universe).find_each{ |sample_variable|
    tuples[sample_variable.sample.name] = {description: sample_variable.sample.long_description, universe_statement: sample_variable.universe.nil? ? "" : sample_variable.universe.universe_statement}
  }
  tuples
end

#startObject



44
45
46
47
48
49
50
51
52
53
54
# File 'app/models/variable.rb', line 44

def start
  if is_svar
    # belongs to only one sample
    # Could use the "sample_id" on the variables table but I don't know if the ID in the Samples table is preserved in Terrapop.
    s = samples.first
    offset = household_variable? ?  s.offset_for_person : s.offset_for_household
    column_start + offset
  else
    column_start
  end
end

#variable_path(str) ⇒ Object



122
123
124
# File 'app/models/variable.rb', line 122

def variable_path(str)
  "<a href='#' class='cross_reference_variables' id='cross_reference_variable_#{str}' data-mnemonic='#{str}'>#{str}</a>"
end