Class: PLA

Inherits:
Object
  • Object
show all
Defined in:
lib/pla.rb,
lib/pla/vessel.rb,
lib/pla/in_port.rb,
lib/pla/arrivals.rb,
lib/pla/movement.rb,
lib/pla/movements.rb,
lib/pla/departures.rb

Defined Under Namespace

Classes: Arrivals, Departures, InPort, Movement, Movements, Vessel

Class Method Summary collapse

Class Method Details

.allObject



18
19
20
21
22
23
24
# File 'lib/pla.rb', line 18

def self.all
  [
    self.arrivals,
    self.departures,
    self.in_port
  ].flatten.uniq
end

.arrivalsObject



6
7
8
# File 'lib/pla.rb', line 6

def self.arrivals
  PLA::Arrivals.new.records
end

.departuresObject



10
11
12
# File 'lib/pla.rb', line 10

def self.departures
  PLA::Departures.new.records
end

.find(movement_type, field, key) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/pla.rb', line 26

def self.find movement_type, field, key
  if self.methods.include? movement_type
    movements = self.send(movement_type)

    if field == :location
      return [
        self.munge_by_field(movements, :select, :to, key),
        self.munge_by_field(movements, :select, :from, key)
      ].flatten.uniq
    else
      return self.munge_by_field movements, :select, field, key
    end
  end
  []
end

.in_portObject



14
15
16
# File 'lib/pla.rb', line 14

def self.in_port
  PLA::InPort.new.records
end

.method_missing(m, *args, &block) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/pla.rb', line 66

def self.method_missing(m, *args, &block)
  if m.to_s =~ /^(find|sort)_(.*)_by_(.*)$/
    querier = $1
    type = $2.to_sym
    field = $3.to_sym

    if querier == 'find'
      return self.find(type, field, args.first)
    elsif querier == 'sort'
      return self.sort(type, field)
    end
  end
  super
end

.munge_by_field(movements, method, field, search_value = nil) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/pla.rb', line 50

def self.munge_by_field movements, method, field, search_value=nil
  if field =~ /^(.*)_(.*)$/
    field = $1
    field_key = $2

    search_value.nil? ?
      movements.send(method){|m| m[field.to_sym][field_key.to_sym]} :
      movements.send(method){|m| m[field.to_sym][field_key.to_sym] == search_value}

  else
    search_value.nil? ?
      movements.send(method){|m| m[field.to_sym]} :
      movements.send(method){|m| m[field.to_sym] == search_value}
  end
end

.respond_to?(method_sym, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


81
82
83
84
85
86
87
88
# File 'lib/pla.rb', line 81

def self.respond_to?(method_sym, include_private = false)
  if method_sym.to_s =~ /^(find|sort)_(.*)_by_(.*)$/ and
    self.methods.include? $2.to_sym
    true
  else
    super
  end
end

.sort(movement_type, field) ⇒ Object



42
43
44
45
46
47
48
# File 'lib/pla.rb', line 42

def self.sort movement_type, field
  if self.methods.include? movement_type
    movements = self.send(movement_type)
    return self.munge_by_field movements, :sort_by, field
  end
  []
end