Class: Travis::Client::Entity

Inherits:
Object
  • Object
show all
Defined in:
lib/travis/client/entity.rb

Constant Summary collapse

MAP =
{}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(session, id) ⇒ Entity

Returns a new instance of Entity.



112
113
114
115
116
117
# File 'lib/travis/client/entity.rb', line 112

def initialize(session, id)
  raise Travis::Client::Error, '%p is not a valid id' % id unless self.class.id? id
  @attributes = {}
  @session    = session
  @id         = self.class.cast_id(id) if id
end

Instance Attribute Details

#attributesObject (readonly)

Returns the value of attribute attributes.



7
8
9
# File 'lib/travis/client/entity.rb', line 7

def attributes
  @attributes
end

#curryObject

Returns the value of attribute curry.



8
9
10
# File 'lib/travis/client/entity.rb', line 8

def curry
  @curry
end

#idObject (readonly)

Returns the value of attribute id.



7
8
9
# File 'lib/travis/client/entity.rb', line 7

def id
  @id
end

#sessionObject (readonly)

Returns the value of attribute session.



7
8
9
# File 'lib/travis/client/entity.rb', line 7

def session
  @session
end

Class Method Details

.aka(*names) ⇒ Object



24
25
26
# File 'lib/travis/client/entity.rb', line 24

def self.aka(*names)
  names.each { |n| MAP[n.to_s] = self }
end

.attributes(*list) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/travis/client/entity.rb', line 46

def self.attributes(*list)
  @attributes ||= []

  list.each do |name|
    name = name.to_s
    fail "can't call an attribute id" if name == "id"

    @attributes << name
    define_method(name) { load_attribute(name) }
    define_method("#{name}=") { |value| set_attribute(name, value) }
    define_method("#{name}?") { !!send(name) }
  end

  @attributes
end

.base_pathObject



42
43
44
# File 'lib/travis/client/entity.rb', line 42

def self.base_path
  many
end

.cast_id(id) ⇒ Object



87
88
89
# File 'lib/travis/client/entity.rb', line 87

def self.cast_id(id)
  Integer(id)
end

.has(*list) ⇒ Object



68
69
70
71
72
73
# File 'lib/travis/client/entity.rb', line 68

def self.has(*list)
  list.each do |name|
    relations << name
    define_method(name) { relation(name.to_s) }
  end
end

.has_singleton(*list) ⇒ Object



75
76
77
78
79
80
# File 'lib/travis/client/entity.rb', line 75

def self.has_singleton(*list)
  list.each do |name|
    alias_method :"#{name}_id", :id unless method_defined? :"#{name}_id"
    has(name)
  end
end

.id?(object) ⇒ Boolean

Returns:

  • (Boolean)


91
92
93
# File 'lib/travis/client/entity.rb', line 91

def self.id?(object)
  object.is_a? Integer
end

.id_field(key = nil) ⇒ Object



95
96
97
98
# File 'lib/travis/client/entity.rb', line 95

def self.id_field(key = nil)
  @id_field = key.to_s if key
  @id_field || superclass.id_field
end

.inspect_info(name) ⇒ Object



82
83
84
85
# File 'lib/travis/client/entity.rb', line 82

def self.inspect_info(name)
  alias_method(:inspect_info, name)
  private(:inspect_info)
end

.many(key = nil) ⇒ Object



37
38
39
40
# File 'lib/travis/client/entity.rb', line 37

def self.many(key = nil)
  MAP[key.to_s] = self if key
  @many ||= key.to_s
end

.one(key = nil) ⇒ Object



32
33
34
35
# File 'lib/travis/client/entity.rb', line 32

def self.one(key = nil)
  MAP[key.to_s] = self if key
  @one ||= key.to_s
end

.preloadableObject



100
101
102
103
104
# File 'lib/travis/client/entity.rb', line 100

def self.preloadable
  def self.preloadable?
    true
  end
end

.preloadable?Boolean

Returns:

  • (Boolean)


101
102
103
# File 'lib/travis/client/entity.rb', line 101

def self.preloadable?
  true
end

.relationsObject



12
13
14
# File 'lib/travis/client/entity.rb', line 12

def self.relations
  @relations ||= []
end

.subclass_for(key) ⇒ Object



20
21
22
# File 'lib/travis/client/entity.rb', line 20

def self.subclass_for(key)
  MAP.fetch(key.to_s)
end

.subclassesObject



16
17
18
# File 'lib/travis/client/entity.rb', line 16

def self.subclasses
  MAP.values.uniq
end

.time(*list) ⇒ Object



62
63
64
65
66
# File 'lib/travis/client/entity.rb', line 62

def self.time(*list)
  list.each do |name|
    define_method("#{name}=") { |value| set_attribute(name, time(value)) }
  end
end

.weak?Boolean

Returns:

  • (Boolean)


28
29
30
# File 'lib/travis/client/entity.rb', line 28

def self.weak?
  false
end

Instance Method Details

#[](key) ⇒ Object



133
134
135
136
# File 'lib/travis/client/entity.rb', line 133

def [](key)
  key = key.to_s
  send(key) if include? key
end

#[]=(key, value) ⇒ Object



138
139
140
141
# File 'lib/travis/client/entity.rb', line 138

def []=(key, value)
  key = key.to_s
  send("#{key}=", value) if include? key
end

#attribute_namesObject



125
126
127
# File 'lib/travis/client/entity.rb', line 125

def attribute_names
  self.class.attributes
end

#cancelable?Boolean

Returns:

  • (Boolean)


179
180
181
# File 'lib/travis/client/entity.rb', line 179

def cancelable?
  false
end

#complete?Boolean

Returns:

  • (Boolean)


161
162
163
# File 'lib/travis/client/entity.rb', line 161

def complete?
  attribute_names.all? { |key| attributes.include? key }
end

#include?(key) ⇒ Boolean

Returns:

  • (Boolean)


143
144
145
# File 'lib/travis/client/entity.rb', line 143

def include?(key)
  attributes.include? key or attribute_names.include? key.to_s
end

#inspectObject



165
166
167
168
169
# File 'lib/travis/client/entity.rb', line 165

def inspect
  klass = self.class
  klass = curry if curry and curry.name and curry.to_s.size < klass.to_s.size
  "#<#{klass}: #{inspect_info}>"
end

#loadObject



152
153
154
# File 'lib/travis/client/entity.rb', line 152

def load
  session.reload(self) unless complete?
end

#missing?(key) ⇒ Boolean

Returns:

  • (Boolean)


156
157
158
159
# File 'lib/travis/client/entity.rb', line 156

def missing?(key)
  return false unless include? key
  !attributes.include?(key.to_s)
end

#relationsObject



171
172
173
# File 'lib/travis/client/entity.rb', line 171

def relations
  self.class.relations.map { |r| public_send(r) }.flatten(1)
end

#reloadObject



147
148
149
150
# File 'lib/travis/client/entity.rb', line 147

def reload
  relations.each { |e| session.reset(e) }
  session.reset(self)
end

#restartable?Boolean

Returns:

  • (Boolean)


175
176
177
# File 'lib/travis/client/entity.rb', line 175

def restartable?
  false
end

#to_hObject



129
130
131
# File 'lib/travis/client/entity.rb', line 129

def to_h
  Hash[attribute_names.map { |n| [n, self[n]] }]
end

#update_attributes(data) ⇒ Object



119
120
121
122
123
# File 'lib/travis/client/entity.rb', line 119

def update_attributes(data)
  data.each_pair do |key, value|
    self[key] = value
  end
end