Module: Idy::Extension::ClassMethods

Defined in:
lib/idy/extension.rb

Instance Method Summary collapse

Instance Method Details

#findy(hash) ⇒ Object



24
25
26
# File 'lib/idy/extension.rb', line 24

def findy(hash)
  find_by id: idy_decode(hash)
end

#findy!(hash) ⇒ Object



28
29
30
31
32
33
34
# File 'lib/idy/extension.rb', line 28

def findy!(hash)
  record = find_by(id: idy_decode(hash))

  not_found!(hash) if record.nil?

  record
end

#idy(options = {}) ⇒ Object



36
37
38
39
40
# File 'lib/idy/extension.rb', line 36

def idy(options = {})
  @idy_options = options.reverse_merge(salt: idy_default_salt)

  define_singleton_method(:idy?) { true }
end

#idy_decode(hash, salt: self.salt) ⇒ Object



42
43
44
# File 'lib/idy/extension.rb', line 42

def idy_decode(hash, salt: self.salt)
  encoder(salt).decode(hash).first
end

#idy_default_saltObject



46
47
48
49
50
51
52
53
54
# File 'lib/idy/extension.rb', line 46

def idy_default_salt
  alphabet = Array('a'..'z')

  indexes = name.downcase.split('').map do |char|
    alphabet.index(char) + 1
  end

  indexes.shift(10).join
end

#idy_encode(id, salt: self.salt) ⇒ Object



56
57
58
59
60
# File 'lib/idy/extension.rb', line 56

def idy_encode(id, salt: self.salt)
  return unless id

  encoder(salt).encode id
end

#idy_optionsObject



62
63
64
# File 'lib/idy/extension.rb', line 62

def idy_options
  @idy_options || { salt: idy_default_salt }
end

#saltObject



66
67
68
# File 'lib/idy/extension.rb', line 66

def salt
  idy_options[:salt]
end