Module: ActivemodelFlags::HasFlags::LocalInstanceMethods

Defined in:
lib/activemodel_flags/has_flags.rb

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method) ⇒ Object



132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# File 'lib/activemodel_flags/has_flags.rb', line 132

def method_missing(method)
  if method.to_s =~ /^has_[a-zA-Z0-9_]+\?$/
    key = method.to_s.chomp("?").reverse.chomp("_sah").reverse
    has?(key.to_sym)
  elsif method.to_s =~ /^hasnt_[a-zA-Z0-9_]+\?$/
    key = method.to_s.chomp("?").reverse.chomp("_tnsah").reverse
    hasnt?(key.to_sym)
  elsif method.to_s =~ /^has_[a-zA-Z0-9_]+!$/
    key = method.to_s.chomp("!").reverse.chomp("_sah").reverse
    has!(key.to_sym)
  elsif method.to_s =~ /^hasnt_[a-zA-Z0-9_]+!$/
    key = method.to_s.chomp("!").reverse.chomp("_tnsah").reverse
    hasnt!(key.to_sym)
  else
    super
  end
end

Instance Method Details

#has(flag) ⇒ Object

setters



89
90
91
92
93
94
95
96
97
# File 'lib/activemodel_flags/has_flags.rb', line 89

def has(flag)
  ensure_serialized

  old_flags = self.flags

  self.flags[flag.to_s] = true

  on_flag_change(old_flags[flag.to_s], self.flags[flag.to_s]) unless old_flags == self.flags
end

#has!(flag) ⇒ Object



99
100
101
102
103
# File 'lib/activemodel_flags/has_flags.rb', line 99

def has!(flag)
  has(flag)

  self.save!
end

#has?(flag) ⇒ Boolean

Returns:

  • (Boolean)


77
78
79
# File 'lib/activemodel_flags/has_flags.rb', line 77

def has?(flag)
  self.flags[flag.to_s]
end

#has_flag?(flag) ⇒ Boolean

getters

Returns:

  • (Boolean)


73
74
75
76
# File 'lib/activemodel_flags/has_flags.rb', line 73

def has_flag?(flag)
  return false if self.flags.blank?
  self.flags[flag.to_s] != nil
end

#hasnt(flag) ⇒ Object Also known as: has_not



105
106
107
108
109
110
111
112
113
# File 'lib/activemodel_flags/has_flags.rb', line 105

def hasnt(flag)
  ensure_serialized

  old_flags = self.flags

  self.flags[flag.to_s] = false

  on_flag_change(old_flags[flag.to_s], self.flags[flag.to_s]) unless old_flags == self.flags
end

#hasnt!(flag) ⇒ Object Also known as: has_not!



116
117
118
119
# File 'lib/activemodel_flags/has_flags.rb', line 116

def hasnt!(flag)
  hasnt(flag)
  self.save!
end

#hasnt?(flag) ⇒ Boolean Also known as: has_not?

Returns:

  • (Boolean)


81
82
83
# File 'lib/activemodel_flags/has_flags.rb', line 81

def hasnt?(flag)
  !has?(flag)
end

#respond_to?(method, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


150
151
152
# File 'lib/activemodel_flags/has_flags.rb', line 150

def respond_to?(method, include_private = false)
  has_flag?(method.to_s) || super(method, include_private)
end

#unset_flag!(flag) ⇒ Object



122
123
124
125
126
127
128
129
# File 'lib/activemodel_flags/has_flags.rb', line 122

def unset_flag!(flag)
  old_flags = self.flags

  self.flags.delete(flag.to_s)

  on_flag_change(old_flags[flag.to_s], self.flags[flag.to_s]) unless old_flags == self.flags
  self.save!
end