Статьи

Некоторые способы ActiveSupport помогает разработчикам Ruby

Ruby — это объектно-ориентированный, интерпретируемый язык, изобретенный Юкихиро Мацумото в 1993 году, который вдохновлен Perl и Lisp. С самого начала Ruby был разработан для того, чтобы быть «радостью использования», что означает сильный акцент на удобочитаемости и элегантности.

Ruby on Rails, часто просто Rails, представляет собой среду веб-приложений с открытым исходным кодом, которая работает на языке программирования Ruby. Ruby on Rails призван подчеркнуть конвенциональную конфигурацию (CoC) и принцип быстрой разработки «Не повторяйся» (DRY). Rails — это мощная платформа, которая поможет вам стать более продуктивным и уверенным в себе.

Rails использует различные гемы, многие из которых сами по себе являются фреймворками, чтобы дать вам абстракции, которые помогают писать чистый и СУХОЙ код. Одним из этих драгоценных камней является ActiveSupport, который определяет себя на Rubygems.org как:

Инструментарий вспомогательных библиотек и расширений ядра Ruby, извлеченный из инфраструктуры Rails. Широкая поддержка многобайтовых строк, интернационализация, часовые пояса и тестирование.

По сути, ActiveSupport расширяет многие базовые классы Ruby для предоставления синтаксического сахара, используемого Rails. Давайте посмотрим на некоторые из этих абстракций и посмотрим, как они помогают (и вредят) вам как разработчику.

Хэш в рубине

Хэш — это словарь-коллекция уникальных ключей и их значений. Также называемые ассоциативными массивами, они похожи на массивы, но там, где массив использует в качестве индекса целые числа, хэш позволяет использовать любой тип объекта.

Пример хэша:

#initialize an empty hash colors colors = { } #add a color with key as red colors[:red] = "Red Color" #add a color with key as blue colors[:blue] = "Blue Color" #display the hash colors #=> {:red=>"Red Color", :blue=>"Blue Color"} 

Значение конкретного ключа может быть получено из хеша:

 Hash[key] or Hash.fetch(:key) 

Если мы хотим получить значение для ключа :red , то

 colors[:red] #=> "Red Color" 

Но если мы попробуем colors['red'] мы получим значение как nil .

 colors['red'] #=> nil 

Это потому, что Hash по-разному обрабатывает символы и строки в ключах. Это можно объяснить далее, если мы добавим еще одно значение ключа в наш хэш.

 colors['red'] = "Red color, here key is not a symbol" 

Теперь, если мы попытаемся извлечь значение для ключа, он вернет наше новое значение.

 colors['red'] #=> "Red color, but key is not a symbol" colors[:red] #=> "Red Color" 

Рассмотрим пример, в котором у нас есть два хэша: a = {"red": "Red color"} и b = {:red => "Red color"} .

Если мы объединим эти два хэша, вот так

 a.merge! b #=> {"red" => "Red color, :red => "RED COLOR"} 

и попробуйте получить значения из хэша

 a['red'] #=> "Red color" a[:red] #=> "RED COLOR" 

результат не идеален, если не сказать больше.

Иногда это может немного сбивать с толку, особенно если вы работали с Rails. Rails позволяет вам получить доступ, например, к params[:name] или params['name'] в действии контроллера получить одно и то же значение. Это связано с использованием Rails ActiveSupport::HashWithIndifferentAccess вместо обычного Hash .

HashWithIndifferentAccess

HashWithIndifferentAccess — это класс, определенный в ActiveSupport который помогает нам преодолеть вышеупомянутую проблему. Здесь символы в ключах будут преобразованы в строки, поэтому мы можем извлечь значения из хэша, используя как символы, так и строки.

Пример:

(Если вы не используете Rails, не забудьте потребовать active_support)

 require 'active_support/core_ext/hash/indifferent_access' colors = HashWithIndifferentAccess.new colors[:red] = "Red color" #Fetch the value using symbol colors[:red] #=> "Red color" #Fetch the value using string colors["red"] #=> "Red color" 

Если мы хотим преобразовать существующий Hash в HashWithIndifferentAccess

 colors = { blue: 'Blue color', white: 'Red Color' }.with_indifferent_access 

HashWithIndifferentAccess используется всеми разработчиками Rails, иногда неосознанно.

ActiveSupport :: Инфлекторы

Inflectors — это модуль, который поставляется вместе с ActiveSupport и включен в ваше приложение Rails. Inflectors предлагает много методов, которые полезны для разработчиков. Если мы хотим использовать модуль независимо в наших скриптах ruby, нам нужно включить модуль в наш код ruby ​​следующим образом:

 require 'active_support/inflector' 

Некоторые из наиболее часто используемых и полезных инфлекторов объясняются здесь.

Camelize

Он преобразует строки в строки CamelCase. Это особенно полезно при работе с константами Ruby.

Пример:

 'manu'.camlize #=> 'Manu' 

Humanize

Этот метод использует регулярные выражения для преобразования строк в более удобочитаемые строки. Они могут быть использованы в URL, среди прочего.

Пример:

 'author_id'.humanize #=> 'Author' 

Titelize

Это создаст красивый и чистый, похожий на заголовок вывод после удаления специальных символов из строки

Пример:

 'x-men: the last stand'.titleize #=> "X Men: The Last Stand" 

Дополнительные методы можно найти в руководстве по Rails API, а подробности о коде можно найти на github.

Расширения ActiveSupport

ActiveSupport::Extensions предлагают утилиты для расширения Ruby.
Эти расширения являются частью ядра ActiveSupport и могут быть загружены в приложение Rails, включая active_support . Если вам нужен только конкретный метод, включите его, выбрав его «черри», вот так:

 require 'active_support/core_ext/object/try.rb' 

Некоторые полезные методы, которые являются частью ActiveSupport::Extensions , описаны ниже:

попробуйте метод

Метод try является одним из наиболее полезных методов, включенных в ActiveSupport . Вы можете использовать этот метод вместо блока, который проверяет, равен ли объект нулю, прежде чем вызывать метод для этого объекта.

Пример:

 # without try if @user.first_name puts @user.first_name end # with try @user.try(:first_name) 

Таким образом try поможет нам избежать ненужных условных выражений.

Расширения для числовых

Форматирование

Используя этот метод, числа могут быть отформатированы различными способами.

Телефонные номера:

Пример:

 5551234.to_s(:phone) # => 555-1234 1235551234.to_s(:phone) # => 123-555-1234 1235551234.to_s(:phone, area_code: true) # => (123) 555-1234 1235551234.to_s(:phone, delimiter: " ") # => 123 555 1234 1235551234.to_s(:phone, area_code: true, extension: 555) # => (123) 555-1234 x 555 1235551234.to_s(:phone, country_code: 1) # => +1-123-555-1234 

валюта

Пример:

 1234567890.50.to_s(:currency) # => $1,234,567,890.50 1234567890.506.to_s(:currency) # => $1,234,567,890.51 1234567890.506.to_s(:currency, precision: 3) # => $1,234,567,890.506 

процент

Пример:

 100.to_s(:percentage) # => 100.000% 100.to_s(:percentage, precision: 0) # => 100% 1000.to_s(:percentage, delimiter: '.', separator: ',') # => 1.000,000% 302.24398923423.to_s(:percentage, precision: 5) # => 302.24399% 

Человеческие ценности

Пример:

 123.to_s(:human) # => "123" 1234.to_s(:human) # => "1.23 Thousand" 12345.to_s(:human) # => "12.3 Thousand" 1234567.to_s(:human) # => "1.23 Million" 1234567890.to_s(:human) # => "1.23 Billion" 1234567890123.to_s(:human) # => "1.23 Trillion" 1234567890123456.to_s(:human) # => "1.23 Quadrillion" 

Конверсии

приговорить

Этот метод преобразует массив слов в предложение.

Пример:

 %w().to_sentence # => "" %w(Earth).to_sentence # => "Earth" %w(Earth Wind).to_sentence # => "Earth and Wind" %w(Earth Wind Fire).to_sentence # => "Earth, Wind, and Fire" 

Дополнительные методы и подробное объяснение можно найти, просмотрев исходный код самой ActiveSupport .

Вывод

Многие из методов, которые являются частью Rails или включенных в него модулей, используются недостаточно. Один из лучших ресурсов для изучения этого — просмотр самого исходного кода.

Ману С Аджит

@manusajith