| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- 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",
- "Aliases" => "aliases",
- "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",
- "Base Form ID" => "alt_form",
- "Edit Key (ignore)" => "edit_url",
- }
- hash = {
- "user_id" => nil,
- "name" => nil,
- "aliases" => 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,
- "alt_form" => nil,
- }
- user_id = UID.match(app.description)
- active = case app.title
- when /Personal Character/
- 'Active'
- when /Alternate Form/
- 'Alternate Form'
- 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]
- if db_column == 'shiny'
- hash[db_column] = field.value.match(/yes/i) ? true : false
- elsif db_column == 'aliases'
- hash[db_column] = field.value.split(/\s?(\||,)\s?/)
- else
- hash[db_column] = field.value
- end
- end
- hash = hash.reject { |k,v| k == nil }
- hash
- end
- end
|