Top Level Namespace

Defined Under Namespace

Modules: Redmineup Classes: ApplicationRecord, RedmineupController

Instance Method Summary collapse

Instance Method Details

#check_version_format(version) ⇒ Object



94
95
96
# File 'lib/redmineup.rb', line 94

def check_version_format(version)
  version =~ /^\d+.?\d*.?\d*$/m
end

#compare_versions(requirement, current) ⇒ Object

Raises:

  • (ArgumentError)


87
88
89
90
91
92
# File 'lib/redmineup.rb', line 87

def compare_versions(requirement, current)
  raise ArgumentError.new('wrong version format') unless check_version_format(requirement)

  requirement = requirement.split('.').collect(&:to_i)
  requirement <=> current.slice(0, requirement.size)
end

#requires_redmineup(arg) ⇒ Object



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/redmineup.rb', line 86

def requires_redmineup(arg)
  def compare_versions(requirement, current)
    raise ArgumentError.new('wrong version format') unless check_version_format(requirement)

    requirement = requirement.split('.').collect(&:to_i)
    requirement <=> current.slice(0, requirement.size)
  end

  def check_version_format(version)
    version =~ /^\d+.?\d*.?\d*$/m
  end

  arg = { version_or_higher: arg } unless arg.is_a?(Hash)
  arg.assert_valid_keys(:version, :version_or_higher)

  current = Redmineup::VERSION.split('.').map { |x| x.to_i }
  arg.each do |k, req|
    case k
    when :version_or_higher
      raise ArgumentError.new(':version_or_higher accepts a version string only') unless req.is_a?(String)

      unless compare_versions(req, current) <= 0
        Rails.logger.error "\033[31m[ERROR]\033[0m Redmine requires redmineup gem version #{req} or higher (you're using #{Redmineup::VERSION}).\n\033[31m[ERROR]\033[0m Please update with 'bundle update redmineup'." if Rails.logger
        abort "\033[31mRedmine requires redmineup gem version #{req} or higher (you're using #{Redmineup::VERSION}).\nPlease update with 'bundle update redmineup'.\033[0m"
      end
    when :version
      req = [req] if req.is_a?(String)
      if req.is_a?(Array)
        unless req.detect { |ver| compare_versions(ver, current) == 0 }
          abort "\033[31mRedmine requires redmineup gem version #{req} (you're using #{Redmineup::VERSION}).\nPlease update with 'bundle update redmineup'.\033[0m"
        end
      elsif req.is_a?(Range)
        unless compare_versions(req.first, current) <= 0 && compare_versions(req.last, current) >= 0
          abort "\033[31mRedmine requires redmineup gem version between #{req.first} and #{req.last} (you're using #{Redmineup::VERSION}).\nPlease update with 'bundle update redmineup'.\033[0m"
        end
      else
        raise ArgumentError.new(':version option accepts a version string, an array or a range of versions')
      end
    end
  end
  true
end