Class: Passwordstate::ResourceList

Inherits:
Array
  • Object
show all
Defined in:
lib/passwordstate/resource_list.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client, resource, options = {}) ⇒ ResourceList



31
32
33
34
35
36
37
38
39
# File 'lib/passwordstate/resource_list.rb', line 31

def initialize(client, resource, options = {})
  @client = client
  @resource = resource
  @loaded = false
  @options = options

  options[:only] = [options[:only]].flatten if options.key? :only
  options[:except] = [options[:except]].flatten if options.key? :except
end

Instance Attribute Details

#clientObject (readonly)

Returns the value of attribute client.



29
30
31
# File 'lib/passwordstate/resource_list.rb', line 29

def client
  @client
end

#optionsObject (readonly)

Returns the value of attribute options.



29
30
31
# File 'lib/passwordstate/resource_list.rb', line 29

def options
  @options
end

#resourceObject (readonly)

Returns the value of attribute resource.



29
30
31
# File 'lib/passwordstate/resource_list.rb', line 29

def resource
  @resource
end

Instance Method Details

#all(query = {}) ⇒ Object



86
87
88
89
90
91
92
93
# File 'lib/passwordstate/resource_list.rb', line 86

def all(query = {})
  raise 'Operation not supported' unless operation_supported?(:all)

  api_path = options.fetch(:all_path, resource.api_path)
  query = options.fetch(:all_query, {}).merge(query)

  load resource.all(client, query.merge(_api_path: api_path))
end

#clearObject



41
42
43
# File 'lib/passwordstate/resource_list.rb', line 41

def clear
  @loaded = super
end

#create(data) ⇒ Object



69
70
71
72
73
74
75
# File 'lib/passwordstate/resource_list.rb', line 69

def create(data)
  raise 'Operation not supported' unless operation_supported?(:post)

  obj = resource.new options.fetch(:object_data, {}).merge(data).merge(_client: client)
  obj.post
  obj
end

#delete(id, query = {}) ⇒ Object



122
123
124
125
126
127
128
129
# File 'lib/passwordstate/resource_list.rb', line 122

def delete(id, query = {})
  raise 'Operation not supported' unless operation_supported?(:delete)

  api_path = options.fetch(:delete_path, resource.api_path)
  query = options.fetch(:delete_query, {}).merge(query)

  resource.delete(client, id, query.merge(_api_path: api_path))
end

#get(id, query = {}) ⇒ Object



95
96
97
98
99
100
101
102
# File 'lib/passwordstate/resource_list.rb', line 95

def get(id, query = {})
  raise 'Operation not supported' unless operation_supported?(:get)

  api_path = options.fetch(:get_path, resource.api_path)
  query = options.fetch(:get_query, {}).merge(query)

  resource.get(client, id, query.merge(_api_path: api_path))
end

#inspectObject



24
25
26
27
# File 'lib/passwordstate/resource_list.rb', line 24

def inspect
  lazy_load unless @loaded
  super
end

#load(entries) ⇒ Object



50
51
52
53
54
55
# File 'lib/passwordstate/resource_list.rb', line 50

def load(entries)
  clear && entries.tap do |loaded|
    loaded.sort! { |a, b| a.send(a.class.index_field) <=> b.send(b.class.index_field) } if options.fetch(:sort, true)
  end.each { |obj| self << obj }
  self
end

#new(data) ⇒ Object



65
66
67
# File 'lib/passwordstate/resource_list.rb', line 65

def new(data)
  resource.new options.fetch(:object_data, {}).merge(data).merge(_client: client)
end

#operation_supported?(operation) ⇒ Boolean



57
58
59
60
61
62
63
# File 'lib/passwordstate/resource_list.rb', line 57

def operation_supported?(operation)
  return nil unless i[search all get post put delete].include?(operation)
  return false if options.key?(:only) && !options[:only].include?(operation)
  return false if options.key?(:except) && options[:except].include?(operation)

  !options.fetch("#{operation}_path".to_sym, '').nil?
end

#post(data, query = {}) ⇒ Object



104
105
106
107
108
109
110
111
# File 'lib/passwordstate/resource_list.rb', line 104

def post(data, query = {})
  raise 'Operation not supported' unless operation_supported?(:post)

  api_path = options.fetch(:post_path, resource.api_path)
  query = options.fetch(:post_query, {}).merge(query)

  resource.post(client, data, query.merge(_api_path: api_path))
end

#put(data, query = {}) ⇒ Object



113
114
115
116
117
118
119
120
# File 'lib/passwordstate/resource_list.rb', line 113

def put(data, query = {})
  raise 'Operation not supported' unless operation_supported?(:put)

  api_path = options.fetch(:put_path, resource.api_path)
  query = options.fetch(:put_query, {}).merge(query)

  resource.put(client, data, query.merge(_api_path: api_path))
end

#reloadObject



45
46
47
48
# File 'lib/passwordstate/resource_list.rb', line 45

def reload
  clear && lazy_load
  self
end

#search(query = {}) ⇒ Object



77
78
79
80
81
82
83
84
# File 'lib/passwordstate/resource_list.rb', line 77

def search(query = {})
  raise 'Operation not supported' unless operation_supported?(:search)

  api_path = options.fetch(:search_path, resource.api_path)
  query = options.fetch(:search_query, {}).merge(query)

  resource.search(client, query.merge(_api_path: api_path))
end