Module: Cardname::Manipulate
- Included in:
- Cardname
- Defined in:
- cardname/lib/cardname/manipulate.rb
Instance Method Summary collapse
-
#[](*args) ⇒ Object
-
#num_parts ⇒ Object
-
#prepend_joint ⇒ Object
(also: #to_field)
-
#sub_in(str, with:) ⇒ Object
-
#swap(old, new) ⇒ Object
swap a subname keys are used for comparison.
-
#swap_part(oldpart, newpart) ⇒ Object
-
#swap_piece(oldpiece, newpiece) ⇒ Object
Instance Method Details
#[](*args) ⇒ Object
41 42 43 |
# File 'cardname/lib/cardname/manipulate.rb', line 41 def [] *args self.class.new part_names[*args] end |
#num_parts ⇒ Object
37 38 39 |
# File 'cardname/lib/cardname/manipulate.rb', line 37 def num_parts parts.length end |
#prepend_joint ⇒ Object Also known as: to_field
45 46 47 48 |
# File 'cardname/lib/cardname/manipulate.rb', line 45 def prepend_joint joint = self.class.joint self =~ /^#{Regexp.escape joint}/ ? self : (joint + self) end |
#sub_in(str, with:) ⇒ Object
50 51 52 53 54 55 |
# File 'cardname/lib/cardname/manipulate.rb', line 50 def sub_in str, with: %i[capitalize downcase].product(%i[pluralize singularize]) .inject(str) do |s, (m1, m2)| s.gsub(/\b#{send(m1).send(m2)}\b/, with.send(m1).send(m2)) end end |
#swap(old, new) ⇒ Object
swap a subname keys are used for comparison
5 6 7 8 9 10 11 12 13 |
# File 'cardname/lib/cardname/manipulate.rb', line 5 def swap old, new old_name = old.to_name new_name = new.to_name return self if old_name.num_parts > num_parts return swap_part(old_name, new_name) if old_name.simple? return self unless include? old_name swap_all_subsequences(old_name, new_name).to_name end |
#swap_part(oldpart, newpart) ⇒ Object
15 16 17 18 19 20 21 22 23 24 |
# File 'cardname/lib/cardname/manipulate.rb', line 15 def swap_part oldpart, newpart ensure_simpleness oldpart, "Use 'swap' to swap junctions" oldpart = oldpart.to_name newpart = newpart.to_name parts.map do |p| oldpart == p ? newpart : p end.to_name end |
#swap_piece(oldpiece, newpiece) ⇒ Object
26 27 28 29 30 31 32 33 34 35 |
# File 'cardname/lib/cardname/manipulate.rb', line 26 def swap_piece oldpiece, newpiece oldpiece = oldpiece.to_name newpiece = newpiece.to_name return swap_part oldpiece, newpiece if oldpiece.simple? return self unless starts_with_parts?(oldpiece) return newpiece if oldpiece.num_parts == num_parts self.class.new [newpiece, self[oldpiece.num_parts..-1]].flatten end |