Class: Trello::BasicData

Inherits:
Object
  • Object
show all
Includes:
ActiveModel::Dirty, ActiveModel::Serializers::JSON, ActiveModel::Validations
Defined in:
lib/trello/basic_data.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(fields = {}) ⇒ BasicData

Returns a new instance of BasicData.



109
110
111
# File 'lib/trello/basic_data.rb', line 109

def initialize(fields = {})
  update_fields(fields)
end

Instance Attribute Details

#clientObject



127
128
129
# File 'lib/trello/basic_data.rb', line 127

def client
  @client ||= self.class.client
end

Class Method Details

.clientObject



101
102
103
# File 'lib/trello/basic_data.rb', line 101

def self.client
  Trello.client
end

.create(options) ⇒ Object



21
22
23
# File 'lib/trello/basic_data.rb', line 21

def create(options)
  client.create(path_name, options)
end

.find(id, params = {}) ⇒ Object



17
18
19
# File 'lib/trello/basic_data.rb', line 17

def find(id, params = {})
  client.find(path_name, id, params)
end

.many(name, opts = {}) ⇒ Object



88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/trello/basic_data.rb', line 88

def self.many(name, opts = {})
  class_eval do
    define_method(:"#{name}") do |*args|
      options   = opts.dup
      resource  = options.delete(:in)  || self.class.to_s.split("::").last.downcase.pluralize
      klass     = options.delete(:via) || Trello.const_get(name.to_s.singularize.camelize)
      params    = options.merge(args[0] || {})
      resources = client.find_many(klass, "/#{resource}/#{id}/#{name}", params)
      MultiAssociation.new(self, resources).proxy
    end
  end
end

.one(name, opts = {}) ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/trello/basic_data.rb', line 71

def self.one(name, opts = {})
  class_eval do
    define_method(:"#{name}") do |*args|
      options = opts.dup
      klass   = options.delete(:via) || Trello.const_get(name.to_s.camelize)
      ident   = options.delete(:using) || :id
      path    = options.delete(:path)

      if path
        client.find(path, self.send(ident))
      else
        klass.find(self.send(ident))
      end
    end
  end
end

.parse(response) ⇒ Object



31
32
33
34
35
# File 'lib/trello/basic_data.rb', line 31

def parse(response)
  response.json_into(self).tap do |basic_data|
    yield basic_data if block_given?
  end
end

.parse_many(response) ⇒ Object



37
38
39
40
41
42
43
# File 'lib/trello/basic_data.rb', line 37

def parse_many(response)
  response.json_into(self).map do |data|
    data.tap do |d|
      yield d if block_given?
    end
  end
end

.path_nameObject



13
14
15
# File 'lib/trello/basic_data.rb', line 13

def path_name
  name.split("::").last.underscore
end

.register_attributes(*names) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/trello/basic_data.rb', line 46

def self.register_attributes(*names)
  options = { readonly: [] }
  options.merge!(names.pop) if names.last.kind_of? Hash

  # Defines the attribute getter and setters.
  class_eval do
    define_method :attributes do
      @attributes ||= names.reduce({}) { |hash, k| hash.merge(k.to_sym => nil) }
    end

    names.each do |key|
      define_method(:"#{key}") { @attributes[key] }

      unless options[:readonly].include?(key.to_sym)
        define_method :"#{key}=" do |val|
          send(:"#{key}_will_change!") unless val == @attributes[key]
          @attributes[key] = val
        end
      end
    end

    define_attribute_methods names
  end
end

.save(options) ⇒ Object



25
26
27
28
29
# File 'lib/trello/basic_data.rb', line 25

def save(options)
  new(options).tap do |basic_data|
    yield basic_data if block_given?
  end.save
end

Instance Method Details

#==(other) ⇒ Object

Two objects are equal if their id methods are equal.



123
124
125
# File 'lib/trello/basic_data.rb', line 123

def ==(other)
  id == other.id
end

#refresh!Object

Refresh the contents of our object.



118
119
120
# File 'lib/trello/basic_data.rb', line 118

def refresh!
  self.class.find(id)
end

#update_fields(fields) ⇒ Object

Raises:

  • (NotImplementedError)


113
114
115
# File 'lib/trello/basic_data.rb', line 113

def update_fields(fields)
  raise NotImplementedError, "#{self.class} does not implement update_fields."
end