Module: RailsStuff::Statusable::MethodsGenerator
- Defined in:
- lib/rails_stuff/statusable.rb
Overview
Generates methods.
Instance Method Summary collapse
- #field_accessor(field) ⇒ Object
- #generate_class_method(method, &block) ⇒ Object
-
#generate_field_methods(field, statuses) ⇒ Object
Generates all methods for the ‘field`.
- #select_options_helper(field, statuses) ⇒ Object
-
#status_accessor(field, status_name, prefix = nil) ⇒ Object
Generates methods for specific value.
- #translation_helpers(field) ⇒ Object
Instance Method Details
#field_accessor(field) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/rails_stuff/statusable.rb', line 89 def field_accessor(field) # Make field accept sympbols. define_method "#{field}=" do |val| val = val.to_s if val.is_a?(Symbol) super(val) end # Status as symbol. define_method "#{field}_sym" do val = self[field] val && val.to_sym end end |
#generate_class_method(method, &block) ⇒ Object
125 126 127 |
# File 'lib/rails_stuff/statusable.rb', line 125 def generate_class_method(method, &block) const_get(:ClassMethods).send(:define_method, method, &block) end |
#generate_field_methods(field, statuses) ⇒ Object
Generates all methods for the ‘field`.
70 71 72 73 74 |
# File 'lib/rails_stuff/statusable.rb', line 70 def generate_field_methods(field, statuses) field_accessor field translation_helpers field field, statuses end |
#select_options_helper(field, statuses) ⇒ Object
116 117 118 119 120 121 122 123 |
# File 'lib/rails_stuff/statusable.rb', line 116 def (field, statuses) translation_method = :"#{field}_name" # Returns array compatible with select_options helper. generate_class_method "#{field}_select_options" do |args = {}| filtered_statuses = statuses - Array.wrap(args[:except]) filtered_statuses.map { |x| [send(translation_method, x), x] } end end |
#status_accessor(field, status_name, prefix = nil) ⇒ Object
Generates methods for specific value.
77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/rails_stuff/statusable.rb', line 77 def status_accessor(field, status_name, prefix = nil) # Shortcut to check status. define_method "#{prefix}#{status_name}?" do self[field] == status_name end # Shortcut to update status. define_method "#{prefix}#{status_name}!" do update_attributes!(field => status_name) end end |
#translation_helpers(field) ⇒ Object
103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/rails_stuff/statusable.rb', line 103 def translation_helpers(field) # Class-level translation helper. generate_class_method "#{field}_name" do |status| t(".#{field}_name.#{status}") if status end # Translation helper. define_method "#{field}_name" do val = send field self.class.t(".#{field}_name.#{val}") if val end end |