Class: Aspect::MessageTransform

Inherits:
Object
  • Object
show all
Defined in:
lib/aspect/message_transform.rb

Overview

Transforms a ‘Hash` into human language.

Examples:

Getting using ‘Symbol`.

require "aspect/message_transform"

message = Aspect::MessageTransform.new(login: "Click to login", body: "Lorem ipsum")

p message.to_a(:login, :body) # => ["Click to login", "Lorem ipsum"]
p message.to_h(:login, :body) # => { login: "Click to login", body: "Lorem ipsum" }
p message.to_s(:login, :body) # => "Click to login, Lorem ipsum"

p message.to_a(:body) # => ["Lorem ipsum"]
p message.to_h(:body) # => { body: "Lorem ipsum" }
p message.to_s(:body) # => "Lorem ipsum"

Getting using ‘Hash`.

require "aspect/message_transform"

message = Aspect::MessageTransform.new(login: "Click to login", body: "Lorem ipsum")

p message.to_a(login: true, body: true) # => ["Click to login", "Lorem ipsum"]
p message.to_h(login: true, body: true) # => { login: "Click to login", body: "Lorem ipsum" }
p message.to_s(login: true, body: true) # => "Click to login, Lorem ipsum"

p message.to_a(login: false, body: true) # => ["Lorem ipsum"]
p message.to_h(login: false, body: true) # => { body: "Lorem ipsum" }
p message.to_s(login: false, body: true) # => "Lorem ipsum"

p message.to_a(body: true) # => ["Lorem ipsum"]
p message.to_h(body: true) # => { body: "Lorem ipsum" }
p message.to_s(body: true) # => "Lorem ipsum"

Output formatting and separator.

require "aspect/message_transform"

message = Aspect::MessageTransform.new(login: "Click to login", body: "Lorem ipsum")

message.separator = " - "
message.formatter { |value| "<div>#{value}</div>" }
# Or (can be anything responding to #call(value)):
# message.formatter = -> { |value| "<div>#{value}</div>" }

p message.to_a(:login, :body) # => ["<div>Click to login</div>", "<div>Lorem ipsum</div>"]
p message.to_h(:login, :body) # => { login: "<div>Click to login</div>", body: "<div>Lorem ipsum</div>" }
p message.to_s(:login, :body) # => "<div>Click to login</div> - <div>Lorem ipsum</div>"

Message interpolation.

require "aspect/message_transform"

message = Aspect::MessageTransform.new(hello: "Hello %{hello}!")

p message.to_s(hello: "world") # => "Hello world!"

Getting with a multi-level ‘Hash`.

require "aspect/message_transform"

message = Aspect::MessageTransform.new(header: "My App", body: { title: "Some Page", hello: "Hello %{hello}!" })

p message.to_s(header: true)             # => "My App"
p message.to_s(body: { title: true })    # => "Some Page"
p message.to_s(body: { hello: "world" }) # => "Hello world!"

Getting with ‘String` notation.

require "aspect/message_transform"

message = Aspect::MessageTransform.new(header: "My App", body: { title: "Some Page", hello: "Hello %{hello}!" })

p message.to_s("header")                              # => "My App"
p message.to_s("body.title")                          # => "Some Page"
p message.to_s("body.hello" => "world")               # => "Hello world!"
p message.to_a("body.title", "body.hello" => "world") # => ["Some Page", "Hello world!"]

Internationalization (I18N) using multi-level ‘Hash`, compatible with Verifier output.

require "aspect/message_transform"

dictionary = {
  en: {
    presence: "%{attribute} must not be blank",
    greater_than_or_equal_to: "%{attribute} must be greater than or equal to %{greater_than_or_equal_to}"
  },
  es: {
    presence: "%{attribute} no debe estar en blanco",
    greater_than_or_equal_to: "%{attribute} debe ser mayor que o igual a %{greater_than_or_equal_to}"
  }
}

error_message = Aspect::MessageTransform.new(dictionary)

error_message.to_s(en: { attribute: "age", presence: true, greater_than_or_equal_to: 18 }) # => "age must not be blank, age must be greater than or equal to 18"
error_message.to_s(es: { attribute: "edad", presence: true, greater_than_or_equal_to: 18 }) # => "edad no debe estar en blanco, edad debe ser mayor que o igual a 18"

Instance Method Summary collapse

Constructor Details

#initialize(expectations = {}) ⇒ MessageTransform

Returns a new instance of MessageTransform.



87
88
89
# File 'lib/aspect/message_transform.rb', line 87

def initialize(expectations={})
  @expectations = expectations.to_h
end

Instance Method Details

#inspectObject



91
92
93
94
95
# File 'lib/aspect/message_transform.rb', line 91

def inspect
  memory_location = (object_id << 1).to_s(16)

  "#<#{self.class}>:0x#{memory_location} #{@expectations.inspect}>"
end