Edges can be extended similarly to the way we extend vertices.
Let's see a quick example...

Create an extension

module Flight

    module Edge

        def display_name
            "#{self[:airline]} flight from #{self.origin_city.first} to #{self.dest_city.first}."
        end

    end


    module Route

        def origin_city
            self.out_v[:city]
        end

        def dest_city
            self.in_v[:city]
        end

    end

end

Before we test this code in the IRB, there are a few points we should mention:

  • Methods that extend a single item are defined in the Edge sub-module.
  • A route of edges is extended by Route methods, and a single edge is extended by both, Route and Edge methods.
  • Inside an edge method (for example, display_name), we can use other edge and route methods. For example, origin_city and dest_city.
  • The origin_city and dest_city methods return a route of strings.
    Therefore, when we use them in display_name, we call first in order to get the actual string object from the route.
  • The display_name method works the same as for vertices - If it exists, it will be used for printing item to the console.

Use the extension

Just as before, we can extend routes and edges:

jruby-1.7.19 :227 > flights = g.e(Flight)
#<E[7]:Delta flight from Los Angeles to Toronto.>     
#<E[6]:Air Canada flight from Toronto to New York.>                
#<E[5]:Air Canada flight from New York to Toronto.>   
#<E[8]:WestJet flight from Los Angeles to San Francisco.>
#<E[4]:Delta flight from New York to Los Angeles.>    
#<E[9]:American Airlines flight from Los Angeles to San Francisco.>             
Total: 6

jruby-1.7.19 :228 > flight = flights.first
 => #<E[7]:Delta flight from Los Angeles to Toronto.> 

We can now use our extension methods

jruby-1.7.19 :229 > flights.origin_city.uniq
"Los Angeles" "Toronto"     "New York"   
Total: 3

jruby-1.7.19 :230 > flight.dest_city
"Toronto"
Total: 1