Class: FeedTools::Cache::Memcached

Inherits:
Object
  • Object
show all
Defined in:
lib/feedtools/cache/memcached.rb,
lib/feedtools/cache/memcached.rb,
lib/feedtools/cache/memcached.rb,
lib/feedtools/cache/memcached/version.rb

Overview

Caching plugin for FeedTools. Cache feched feed into memcached.

usage

Simple to use, you require the library and a set configuration.

 require 'feedtools-cache-memcached'
   or manually installed 
 require 'feedtools/cache/memcached'

 FeedTools.configurations[:feed_cache] = FeedTools::Cache::Memcached

=== configuration
You can configurate memcached servers to use.
1. FeedTools::Cache::Memcached.configuration
2. default: localhost:11211 and { :namespace => nil, :readonly => false, :multithread => false, }

Defined Under Namespace

Modules: VERSION Classes: NullLogger

Constant Summary collapse

ATTRIBUTES =

Required by FeedTools.

%w(
  id href title link
  feed_data feed_data_type
  http_headers last_retrieved
)
@@configuration =

default configuration from memcache-client

['localhost:11211', { :namespace => nil, :readonly => false, :multithread => false, }]
@@logger =
NullLogger.new

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeMemcached

Create a FeedTools::Cache::Memcached instance object.

Returns

cached feed

FeedTools::Cache::Memcached : cached feed.

Create a FeedTools::Cache::Memcached instance object.

Returns

cached feed

FeedTools::Cache::Memcached : cached feed.



137
138
139
140
141
# File 'lib/feedtools/cache/memcached.rb', line 137

def initialize
  @data = {}
  @new_record = true
  @@memcached ||= MemCache.new(*@@configuration)
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(message, *args) ⇒ Object

:nodoc:



199
200
201
202
203
204
205
206
207
208
209
# File 'lib/feedtools/cache/memcached.rb', line 199

def method_missing(message, *args) #:nodoc:
  begin
    if matched = /^(.*)=$/.match(message.to_s)
      set_attribute(matched[1], args.first)
    else
      get_attribute(message.to_s)
    end
  rescue NameError
    raise NoMethodError, "undefined method `#{message}' for #{self.to_s}"
  end
end

Class Method Details

.configurationObject

Get memcached configuration

Returns

configuration

Array : configured memcached settings.



100
101
102
# File 'lib/feedtools/cache/memcached.rb', line 100

def self.configuration
  @@configuration
end

.configuration=(configuration) ⇒ Object

Set memcached configuration

Parameters

configuration

String : set memcached configuration and reset the current connections.



108
109
110
111
# File 'lib/feedtools/cache/memcached.rb', line 108

def self.configuration=(configuration)
  @@configuration = configuration
  @@memcached.reset
end

.connected?Boolean

Required by FeedTools. Return whether this connects memcached or not.

Returns

boolean

true/false: If memcached is avaliable, returns true. If it is not so, returns false.

Returns:

  • (Boolean)


83
84
85
# File 'lib/feedtools/cache/memcached.rb', line 83

def self.connected?
  @@memcached.active?
end

.find_by_href(url) ⇒ Object

Required by FeedTools. Find a cached feed by its url.

Parameters

url

String: feed url.

Returns

cached feed

FeedTools::Cache::YAML: cached feed. If not found, returns nil.



67
68
69
# File 'lib/feedtools/cache/memcached.rb', line 67

def self.find_by_href(url)
  create_from_memcached(key_by_url(url))
end

.find_by_id(id) ⇒ Object

Required by FeedTools. Find a cached feed by its key.

Parameters

id

String: primary key.

Returns

cached feed

FeedTools::Cache::YAML: cached feed. If not found, returns nil.



56
57
58
# File 'lib/feedtools/cache/memcached.rb', line 56

def self.find_by_id(id)
  create_from_memcached(key_by_id(id))
end

.initialize_cacheObject

Required by FeedTools. TODO: implement this.



73
74
75
# File 'lib/feedtools/cache/memcached.rb', line 73

def self.initialize_cache
  # nothing
end

.loggerObject

Debug logger.

Returns

path

String : logger instance. Default is NullLogger (nothing to do).



117
118
119
# File 'lib/feedtools/cache/memcached.rb', line 117

def self.logger
  @@logger
end

.logger=(logger) ⇒ Object

Set logger object if use need. Logger output messages when log level is DEBUG.

Parameters

logger

logger : set logger.



125
126
127
# File 'lib/feedtools/cache/memcached.rb', line 125

def self.logger=(logger)
  @@logger = logger
end

.set_up_correctly?Boolean

Required by FeedTools. TODO: implement this.

Returns

Currently always true.

Returns:

  • (Boolean)


92
93
94
# File 'lib/feedtools/cache/memcached.rb', line 92

def self.set_up_correctly?
  true
end

Instance Method Details

#idObject

Required by FeedTools.

Primary key.

Returns

id

String : primary key.



159
160
161
# File 'lib/feedtools/cache/memcached.rb', line 159

def id
  @data['id']
end

#id=(id) ⇒ Object

Required by FeedTools.

Set primary key.

Parameters

id

String : primary key.



169
170
171
# File 'lib/feedtools/cache/memcached.rb', line 169

def id=(id)
  @data['id'] = id
end

#load_cache(key) ⇒ Object

Load data from memcached.

Parameters

key

String : cache key.



188
189
190
191
192
193
194
195
196
197
# File 'lib/feedtools/cache/memcached.rb', line 188

def load_cache(key)
  begin
    @data = @@memcached.get(key) || {}
    @new_record = false
    debug "load cache: #{key}"
    self
  rescue
    nil
  end
end

#new_record?Boolean

Required by FeedTools.

Returns whether it is a new object.

Returns

boolean

true/false : returns true if the instance has not been saved yet. Returns false if the instance loaded from cache.

Returns:

  • (Boolean)


149
150
151
# File 'lib/feedtools/cache/memcached.rb', line 149

def new_record?
  @new_record
end

#saveObject

Required by FeedTools.

Save new or update instance.



176
177
178
179
180
181
182
# File 'lib/feedtools/cache/memcached.rb', line 176

def save
  unless id
    save_new_cache
  else
    update_cache
  end
end