Class: LazyResource::ResourceQueue

Inherits:
Object
  • Object
show all
Includes:
UrlGeneration
Defined in:
lib/lazy_resource/resource_queue.rb

Instance Method Summary collapse

Methods included from UrlGeneration

#collection_path, #collection_url, #element_path, #element_url, #new_element_path, #split_options

Constructor Details

#initializeResourceQueue

Returns a new instance of ResourceQueue.



5
6
7
# File 'lib/lazy_resource/resource_queue.rb', line 5

def initialize
  @queue = []
end

Instance Method Details

#flush!Object



13
14
15
# File 'lib/lazy_resource/resource_queue.rb', line 13

def flush!
  @queue = []
end

#queue(relation) ⇒ Object



9
10
11
# File 'lib/lazy_resource/resource_queue.rb', line 9

def queue(relation)
  @queue.push(relation)
end

#request_queueObject



17
18
19
# File 'lib/lazy_resource/resource_queue.rb', line 17

def request_queue
  Thread.current[:request_queue] ||= Typhoeus::Hydra.new(:max_concurrency => LazyResource.max_concurrency)
end

#runObject



21
22
23
24
# File 'lib/lazy_resource/resource_queue.rb', line 21

def run
  send_to_request_queue!
  request_queue.run if request_queue.items_queued?
end

#send_to_request_queue!Object



26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/lazy_resource/resource_queue.rb', line 26

def send_to_request_queue!
  while(relation = @queue.pop)
    options = { :headers => relation.headers, :method => relation.method }

    if [:post, :put].include?(relation.method)
      options[:body] = relation.to_params.to_json
    end

    request = Request.new(url_for(relation), relation, options)
    request_queue.queue(request)
  end
end

#url_for(relation) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/lazy_resource/resource_queue.rb', line 39

def url_for(relation)
  if relation.route.nil?
    include_query = ![:post, :put].include?(relation.method)

    url = ''
    url << relation.klass.site
    url << relation.klass.collection_path(relation.to_params, nil, relation.from, include_query)
    url
  else
    url = relation.route
    url.gsub!(/:\w*/) do |match|
      attr = match[1..-1].to_sym
      if relation.where_values.has_key?(attr)
        relation.where_values[attr]
      else
        match
      end
    end

    if url =~ /http/
      url
    else
      relation.klass.site + url
    end
  end
end