| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- class Character < ActiveRecord::Base
- validates :user_id, presence: true
- validates :name, presence: true
- validates :species, presence: true
- validates :types, presence: true
- def self.restricted_find(search, author, flags=[])
- # Append Deleted to flags
- flags.push('Deleted')
- # Find Character
- case search.to_i
- when 0
- where(user_id: author.id).
- where.not(active: flags).
- find_by!('name ilike ?', search)
- else
- find(search) if Util::Roles.admin?(author)
- end
- end
- def type_color
- Type.find_by(name: types.split('/').first || 'Unknown').color
- end
- def fetch_inventory
- # Fetch item names and amounts in character's inventory
- Inventory.where(char_id: id).
- joins('join items on items.id = inventories.item_id').
- pluck('amount, items.name')
- end
- def self.from_form(app)
- key_mapping = {
- 'Characters Name' => 'name',
- 'Species' => 'species',
- 'Shiny' => 'shiny',
- 'Type' => 'types',
- 'Age' => 'age',
- 'Weight' => 'weight',
- 'Height' => 'height',
- 'Gender' => 'gender',
- 'Sexual Orientation' => 'orientation',
- 'Relationship Status' => 'relationship',
- 'Attacks' => 'attacks',
- 'Likes' => 'likes',
- 'Dislikes' => 'dislikes',
- 'Personality' => 'personality',
- 'Hometown' => 'hometown',
- 'Warnings' => 'warnings',
- 'Rumors' => 'rumors',
- 'Backstory' => 'backstory',
- 'Recent Events' => 'recent_events',
- 'Other' => 'other',
- 'Rating' => 'rating',
- 'Current Location' => 'location',
- 'DM Notes' => 'dm_notes',
- 'Edit Key (ignore)' => 'edit_url'
- }
- hash = {
- 'user_id' => nil,
- 'name' => nil,
- 'species' => nil,
- 'shiny' => nil,
- 'types' => nil,
- 'age' => nil,
- 'weight' => nil,
- 'height' => nil,
- 'gender' => nil,
- 'orientation' => nil,
- 'relationship' => nil,
- 'attacks' => nil,
- 'likes' => nil,
- 'dislikes' => nil,
- 'personality' => nil,
- 'backstory' => nil,
- 'recent_events' => nil,
- 'other' => nil,
- 'edit_url' => nil,
- 'active' => nil,
- 'dm_notes' => nil,
- 'location' => nil,
- 'rumors' => nil,
- 'hometown' => nil,
- 'warnings' => nil,
- 'rating' => nil
- }
- user_id = UID.match(app.description)
- active = case app.title
- when /Personal Character/
- 'Active'
- when /NPC/
- 'NPC'
- when /Archived Character/
- 'Archived'
- end
- hash['user_id'] = case app.description
- when /public/i
- 'Public'
- when /server/i
- 'Server'
- else
- user_id[1]
- end
- hash['active'] = active
- hash['edit_url'] = app.footer.text
- app.fields.each do |field|
- next if field.nil?
- db_column = key_mapping[field.name]
- hash[db_column] = if db_column == 'shiny'
- field.value.match(/yes/i) ? true : false
- else
- field.value
- end
- end
- hash = hash.reject { |k, _v| k.nil? }
- hash
- end
- end
|