Class: Carnival::KlassService

Inherits:
Object
  • Object
show all
Defined in:
app/services/carnival/klass_service.rb

Instance Method Summary collapse

Constructor Details

#initialize(klass) ⇒ KlassService

Returns a new instance of KlassService.



4
5
6
# File 'app/services/carnival/klass_service.rb', line 4

def initialize(klass)
  @klass = klass
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args) ⇒ Object



20
21
22
23
24
25
26
# File 'app/services/carnival/klass_service.rb', line 20

def method_missing(method, *args)
  if method.to_s.index(/^is_a_(.*)_relation\?$/)
    result =  method.to_s.match(/^is_a_(.*)_relation\?$/)
    relation = result[1]
    return relation_type(args[0]) == relation.to_sym
  end
end

Instance Method Details

#extract_namespaceObject



38
39
40
41
42
43
# File 'app/services/carnival/klass_service.rb', line 38

def extract_namespace
  namespace = ""
  arr = @klass.to_s.split("::")
  namespace = arr[0] if arr.size > 1
  namespace
end

#get_association(association) ⇒ Object



58
59
60
# File 'app/services/carnival/klass_service.rb', line 58

def get_association association
  @klass.reflect_on_association(association.to_sym)
end

#get_foreign_key(sym) ⇒ Object



68
69
70
71
72
# File 'app/services/carnival/klass_service.rb', line 68

def get_foreign_key sym
  association = get_association(sym)
  return nil if association.nil?
  association.foreign_key
end


62
63
64
65
66
# File 'app/services/carnival/klass_service.rb', line 62

def get_related_class sym
  association = get_association(sym)
  return nil if association.nil?
  association.klass
end

#is_namespaced?Boolean

Returns:

  • (Boolean)


45
46
47
# File 'app/services/carnival/klass_service.rb', line 45

def is_namespaced?
  @klass.to_s.split("::").size > 1
end

#klassObject



53
54
55
# File 'app/services/carnival/klass_service.rb', line 53

def klass
  @klass
end


33
34
35
36
# File 'app/services/carnival/klass_service.rb', line 33

def related_class sym
  return nil if !relation?(sym)
  get_related_class(sym).classify
end


28
29
30
31
# File 'app/services/carnival/klass_service.rb', line 28

def related_class_file_name sym
  return nil if !relation?(sym)
  get_related_class(sym).name.pluralize.underscore
end

#relation?(sym) ⇒ Boolean

Returns:

  • (Boolean)


8
9
10
# File 'app/services/carnival/klass_service.rb', line 8

def relation? sym
  !get_association(sym).nil?
end

#relation_type(sym) ⇒ Object



12
13
14
15
16
17
18
# File 'app/services/carnival/klass_service.rb', line 12

def relation_type sym
  return nil if !relation?(sym)
  association = get_association(sym)
  return association.macro if association.macro != :has_many
  return :many_to_many if many_to_many_relation? association
  return :has_many
end

#table_nameObject



49
50
51
# File 'app/services/carnival/klass_service.rb', line 49

def table_name
  @klass.table_name
end