Module: ActiveRemote::Search::ClassMethods

Defined in:
lib/active_remote/search.rb

Instance Method Summary collapse

Instance Method Details

#find(args) ⇒ Object

Tries to load the first record; if it fails, an exception is raised.

Examples

# A single hash
Tag.find(:guid => 'foo')

# Active remote object
Tag.find(Tag.new(:guid => 'foo'))

# Protobuf object
Tag.find(Generic::Remote::TagRequest.new(:guid => 'foo'))


27
28
29
30
31
32
# File 'lib/active_remote/search.rb', line 27

def find(args)
  remote = self.search(args).first
  raise RemoteRecordNotFound, self if remote.nil?

  remote
end

#first_or_create(attributes) ⇒ Object

Tries to load the first record; if it fails, then create is called with the same arguments.

Examples

# A single hash
Tag.first_or_create(:name => 'foo')

# Protobuf object
Tag.first_or_create(Generic::Remote::TagRequest.new(:name => 'foo'))


45
46
47
48
49
# File 'lib/active_remote/search.rb', line 45

def first_or_create(attributes)
  remote = self.search(attributes).first
  remote ||= self.create(attributes)
  remote
end

#first_or_create!(attributes) ⇒ Object

Tries to load the first record; if it fails, then create! is called with the same arguments.



54
55
56
57
58
# File 'lib/active_remote/search.rb', line 54

def first_or_create!(attributes)
  remote = self.search(attributes).first
  remote ||= self.create!(attributes)
  remote
end

#first_or_initialize(attributes) ⇒ Object

Tries to load the first record; if it fails, then a new record is initialized with the same arguments.

Examples

# A single hash
Tag.first_or_initialize(:name => 'foo')

# Protobuf object
Tag.first_or_initialize(Generic::Remote::TagRequest.new(:name => 'foo'))


71
72
73
74
75
# File 'lib/active_remote/search.rb', line 71

def first_or_initialize(attributes)
  remote = self.search(attributes).first
  remote ||= self.new(attributes)
  remote
end

#search(args) ⇒ Object

Searches for records with the given arguments. Returns a collection of Active Remote objects.

Examples

# A single hash
Tag.search(:name => 'foo')

# Protobuf object
Tag.search(Generic::Remote::TagRequest.new(:name => 'foo'))


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

def search(args)
  args = validate_search_args!(args)

  response = remote_call(:search, args)

  if response.respond_to?(:records)
    serialize_records(response.records)
  else
    response
  end
end

#validate_search_args!(args) ⇒ Object

Validates the given args to ensure they are compatible Search args must be a hash or respond to to_hash



103
104
105
106
107
108
109
110
111
112
113
# File 'lib/active_remote/search.rb', line 103

def validate_search_args!(args)
  unless args.is_a?(Hash)
    if args.respond_to?(:to_hash)
      args = args.to_hash
    else
      raise "Invalid parameter: #{args}. Search args must respond to :to_hash."
    end
  end

  args
end