Module: YFantasy::Subresourceable::ClassMethods

Defined in:
lib/y_fantasy/concerns/subresourceable.rb

Instance Method Summary collapse

Instance Method Details

#add_to_subresource_tree(subresource, klass) ⇒ Object



68
69
70
71
# File 'lib/y_fantasy/concerns/subresourceable.rb', line 68

def add_to_subresource_tree(subresource, klass)
  @subresource_tree ||= {}
  @subresource_tree[subresource] = klass.subresources
end

#check_inheritanceObject



77
78
79
80
81
# File 'lib/y_fantasy/concerns/subresourceable.rb', line 77

def check_inheritance
  return if superclass == YFantasy::BaseResource || superclass == YFantasy::BaseSubresource

  raise YFantasy::Subresourceable::Error.new("#{self} does not inherit from BaseResource")
end

#dependent_subresourcesObject



39
40
41
# File 'lib/y_fantasy/concerns/subresourceable.rb', line 39

def dependent_subresources
  @dependent_subresources ||= []
end

#fetch_subresource(key, subresource) ⇒ Object



63
64
65
66
# File 'lib/y_fantasy/concerns/subresourceable.rb', line 63

def fetch_subresource(key, subresource)
  resource = find(key, with: [subresource])
  resource.send(subresource)
end

#has_subresource(sub, klass:) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/y_fantasy/concerns/subresourceable.rb', line 47

def has_subresource(sub, klass:)
  check_inheritance # This smells
  klass.dependent? ? (dependent_subresources << sub) : (primary_subresources << sub)
  add_to_subresource_tree(sub, klass)

  define_method(sub) do
    ivar = :"@#{sub}"
    value = instance_variable_get(ivar)
    return value if (value && value != []) || fetched_subresources.include?(sub)

    value = instance_variable_set(ivar, self.class.fetch_subresource(key, sub))
    add_fetched_subresources(sub)
    value
  end
end

#primary_subresourcesObject

TODO: may not need these first 3 methods if the subresource_tree works the way I want it to



35
36
37
# File 'lib/y_fantasy/concerns/subresourceable.rb', line 35

def primary_subresources
  @primary_subresources ||= []
end

#subresource_treeObject



73
74
75
# File 'lib/y_fantasy/concerns/subresourceable.rb', line 73

def subresource_tree
  @subresource_tree || {}
end

#subresourcesObject



43
44
45
# File 'lib/y_fantasy/concerns/subresourceable.rb', line 43

def subresources
  primary_subresources | dependent_subresources
end