Module: ActiveRemote::Search::ClassMethods

Defined in:
lib/active_remote/search.rb

Instance Method Summary collapse

Instance Method Details

#_active_remote_search_args(args) ⇒ Object

:noapi:



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

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

  args
end

#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'))


31
32
33
34
35
36
# File 'lib/active_remote/search.rb', line 31

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

  return 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'))


49
50
51
52
53
# File 'lib/active_remote/search.rb', line 49

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.



58
59
60
61
62
# File 'lib/active_remote/search.rb', line 58

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'))


75
76
77
78
79
# File 'lib/active_remote/search.rb', line 75

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'))


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

def search(args)
  args = _active_remote_search_args(args)

  remote = self.new
  remote._active_remote_search(args)
  remote.serialize_records
end