Class: Binda::Structure
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- Binda::Structure
- Extended by:
- FriendlyId
- Defined in:
- app/models/binda/structure.rb
Instance Method Summary collapse
-
#add_default_board ⇒ Object
Add default board to a structure if needed.
-
#add_default_field_group ⇒ redirect
Add a field group as a default.
-
#add_instance_details ⇒ Object
Add details based on instance type.
-
#default_slug ⇒ Object
Set slug name.
-
#is_rejected(attributes) ⇒ Object
Sets the validation rules to accept and save an attribute.
-
#set_default_position ⇒ object
Set default position after create.
-
#should_generate_new_friendly_id? ⇒ Boolean
Friendly id preference on slug generation.
Instance Method Details
#add_default_board ⇒ Object
Add default board to a structure if needed
81 82 83 84 85 86 87 88 |
# File 'app/models/binda/structure.rb', line 81 def add_default_board if Board.where(structure_id: self.id).empty? board = self.build_board( name: self.name ) unless board.save return redirect_to structure_path(self.slug), flash: { error: I18n.t('binda.default_field_group.error_on_create') } end end end |
#add_default_field_group ⇒ redirect
Add a field group as a default
In order to speed up the setup process Binda will automatically provide a
field group called 'General Details' after the structure is created.
59 60 61 62 63 64 65 66 |
# File 'app/models/binda/structure.rb', line 59 def add_default_field_group # Creates a default empty field group field_group = self.field_groups.build(name: I18n.t('binda.default_field_group.name'), position: 1) # Unless there is a problem... unless field_group.save return redirect_to structure_path(self.slug), flash: { error: I18n.t('binda.default_field_group.error_on_create') } end end |
#add_instance_details ⇒ Object
Add details based on instance type
If instance_type is set to ‘setting’ it generates a default Binda::Setting instance after creation.
The generated instance will be associated to the structure and named after it.
It also disable categories (this could be a different method, or method could be more explicit)
73 74 75 76 77 78 |
# File 'app/models/binda/structure.rb', line 73 def add_instance_details if self.instance_type == 'board' self.update_attribute('has_categories', false) add_default_board end end |
#default_slug ⇒ Object
Set slug name
It generates 4 possible slugs before falling back to FriendlyId default behaviour
47 48 49 50 51 52 |
# File 'app/models/binda/structure.rb', line 47 def default_slug [ "#{ self.name.parameterize }", "#{ self.name.parameterize }-1", "#{ self.name.parameterize }-2", "#{ self.name.parameterize }-3" ] end |
#is_rejected(attributes) ⇒ Object
Sets the validation rules to accept and save an attribute
40 41 42 |
# File 'app/models/binda/structure.rb', line 40 def is_rejected(attributes) attributes['name'].blank? end |
#set_default_position ⇒ object
Set default position after create
This methods ensure that every repeater instance has an explicit position.
The latest repeater created gets the highest position number.
96 97 98 99 |
# File 'app/models/binda/structure.rb', line 96 def set_default_position position = Structure.all.length self.update_attribute('position', position) end |
#should_generate_new_friendly_id? ⇒ Boolean
Friendly id preference on slug generation
Method inherited from friendly id
34 35 36 |
# File 'app/models/binda/structure.rb', line 34 def should_generate_new_friendly_id? slug.blank? end |