Class: Sufia::PermissionTemplate

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/sufia/permission_template.rb

Constant Summary collapse

RELEASE_TEXT_VALUE_FIXED =

Valid Release Period values

'fixed'.freeze
RELEASE_TEXT_VALUE_NO_DELAY =
'now'.freeze
RELEASE_TEXT_VALUE_BEFORE_DATE =

Valid Release Varies sub-options

'before'.freeze
RELEASE_TEXT_VALUE_EMBARGO =
'embargo'.freeze
RELEASE_TEXT_VALUE_6_MONTHS =
'6mos'.freeze
RELEASE_TEXT_VALUE_1_YEAR =
'1yr'.freeze
RELEASE_TEXT_VALUE_2_YEARS =
'2yrs'.freeze
RELEASE_TEXT_VALUE_3_YEARS =
'3yrs'.freeze
RELEASE_EMBARGO_PERIODS =

Key/value pair of valid embargo periods. Values are number of months embargoed.

{
  RELEASE_TEXT_VALUE_6_MONTHS => 6,
  RELEASE_TEXT_VALUE_1_YEAR => 12,
  RELEASE_TEXT_VALUE_2_YEARS => 24,
  RELEASE_TEXT_VALUE_3_YEARS => 36
}.freeze

Instance Method Summary collapse

Instance Method Details

#release_before_date?Boolean

Does this permission template require a date (or embargo) that all works are released before NOTE: date will be in release_date

Returns:

  • (Boolean)


39
40
41
42
# File 'app/models/sufia/permission_template.rb', line 39

def release_before_date?
  # All PermissionTemplate embargoes are dynamically determined release before dates
  release_period == RELEASE_TEXT_VALUE_BEFORE_DATE || release_max_embargo?
end

#release_dateObject

Override release_date getter to return a dynamically calculated date of release based one release requirements. Returns embargo date when release_max_embargo?==true. Returns today’s date when release_no_delay?==true.



54
55
56
57
58
59
60
61
62
63
# File 'app/models/sufia/permission_template.rb', line 54

def release_date
  # If no release delays allowed, return today's date as release date
  return Time.zone.today if release_no_delay?

  # If this isn't an embargo, just return release_date from database
  return self[:release_date] unless release_max_embargo?

  # Otherwise (if an embargo), return latest embargo date by adding specified months to today's date
  Time.zone.today + RELEASE_EMBARGO_PERIODS.fetch(release_period).months
end

#release_fixed_date?Boolean

Does this permission template require a specific date of release for all works NOTE: date will be in release_date

Returns:

  • (Boolean)


28
29
30
# File 'app/models/sufia/permission_template.rb', line 28

def release_fixed_date?
  release_period == RELEASE_TEXT_VALUE_FIXED
end

#release_max_embargo?Boolean

Is there a maximum embargo period specified by this permission template NOTE: latest embargo date returned by release_date, maximum embargo period will be in release_period

Returns:

  • (Boolean)


46
47
48
49
# File 'app/models/sufia/permission_template.rb', line 46

def release_max_embargo?
  # Is it a release period in one of our valid embargo periods?
  RELEASE_EMBARGO_PERIODS.key?(release_period)
end

#release_no_delay?Boolean

Does this permission template require no release delays (i.e. no embargoes allowed)

Returns:

  • (Boolean)


33
34
35
# File 'app/models/sufia/permission_template.rb', line 33

def release_no_delay?
  release_period == RELEASE_TEXT_VALUE_NO_DELAY
end

#valid_release_date?(date) ⇒ Boolean

Determines whether a given release date is valid based on this template’s requirements

Parameters:

  • date (Date)

    to validate

Returns:

  • (Boolean)


67
68
69
70
# File 'app/models/sufia/permission_template.rb', line 67

def valid_release_date?(date)
  # Validate date against all release date requirements
  check_no_delay_requirements(date) && check_before_date_requirements(date) && check_fixed_date_requirements(date)
end

#valid_visibility?(value) ⇒ Boolean

Determines whether a given visibility setting is valid based on this template’s requirements

Parameters:

  • visibility (String)

    value to validate

Returns:

  • (Boolean)


74
75
76
77
78
79
80
# File 'app/models/sufia/permission_template.rb', line 74

def valid_visibility?(value)
  # If template doesn't specify a visiblity (i.e. is "varies"), then any visibility is valid
  return true unless visibility.present?

  # Validate that passed in value matches visibility requirement exactly
  visibility == value
end