Лучший способ присвоить версию приложению для направляющих? [закрытый]

Позволяет использовать отрицательные индексы

Всегда полезно не всегда писать string[string.length - 1], чтобы получить последний символ при использовании расширения нижнего индекса. Это расширение ( Swift 3 ) допускает отрицательные индексы Range и CountableClosedRange.

extension String {
    var count: Int { return self.characters.count }

    subscript (i: Int) -> Character {
        // wraps out of bounds indices
        let j = i % self.count
        // wraps negative indices
        let x = j < 0 ? j + self.count : j

        // quick exit for first
        guard x != 0 else {
            return self.characters.first!
        }

        // quick exit for last
        guard x != count - 1 else {
            return self.characters.last!
        }

        return self[self.index(self.startIndex, offsetBy: x)]
    }

    subscript (r: Range<Int>) -> String {
        let lb = r.lowerBound
        let ub = r.upperBound

        // quick exit for one character
        guard lb != ub else { return String(self[lb]) }

        return self[self.index(self.startIndex, offsetBy: lb)..<self.index(self.startIndex, offsetBy: ub)]
    }

    subscript (r: CountableClosedRange<Int>) -> String {
        return self[r.lowerBound..<r.upperBound + 1]
    }
}

Как его использовать:

var text = "Hello World"

text[-1]    // d
text[2]     // l
text[12]    // e
text[0...4] // Hello
text[0..<4] // Hell

Для более тщательного программиста: включите guard против пустых строк в этом расширении

subscript (i: Int) -> Character {
    guard self.count != 0 else { return '' }
    ...
}

subscript (r: Range<Int>) -> String {
    guard self.count != 0 else { return "" }
    ...
}
18
задан AdamB 26 June 2009 в 18:07
поделиться

4 ответа

Вы можете используйте ключевые слова subversion:

По сути, у вас может быть вспомогательный метод ...

def app_version
    "$Id$"
end

$ Id $ - ключевое слово, которое svn будет расширять (ссылка выше содержит другие, которые вы можете использовать). Теперь мы устанавливаем свойство ключевых слов в этом файле, чтобы svn знал, что он должен заменить ключевые слова (предположим, application_helper.rb):

svn propset svn:keywords "Id" application_helper.rb
svn ci application_helper.rb

Теперь, если вы посмотрите на application_helper.rb, он прочитает (что-то вроде этого, с версия, дата, имя пользователя изменено)

def app_version
    "$Id: application_helper.rb 282 2009-06-26 10:34:17Z root $"
end

Очевидно, вы можете назначить это переменной и проанализировать ее до необходимого формата, включить ее в свои шаблоны просмотра и т. д. Или сделайте то же самое, но вместо application_helper.rb просто используйте файл с именем VERSION в корневом каталоге.

5
ответ дан 30 November 2019 в 07:50
поделиться

You could either version by labelling your git / svn branch ... or, best way, a constant in the environment file, just like Rails does:

MY_APP_VER = 0.1

Why would you use the application helper? You can always get at that variable from your application helper should you need to display it onscreen. But, that seems silly to have logic belonging to the configuration of your entire application inside a helper method.

2
ответ дан 30 November 2019 в 07:50
поделиться

Я думаю, это должна быть ответственность вашей системы управления версиями. Я бы использовал тег для каждой версии, тогда вы можете создать вспомогательный метод, который просто записывает тег в вашем приложении (скажем, в нижний колонтитул):

def put_version
  "<p id='version'>#{$$TAG_NAME}</p>"
end

Не могу вспомнить синтаксис для вставки имени тега.

0
ответ дан 30 November 2019 в 07:50
поделиться

Плагин версии приложения ( http://github.com/toland/app_version/tree/master ) позволяет указать различные компоненты версии приложения. Затем вы можете включить ревизию Subversion в качестве компонента сборки, не являясь доминирующей частью.

Вы также можете, как часть рабочего процесса сборки / тестирования, увеличить еще один компонент версии.

3
ответ дан 30 November 2019 в 07:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: