lib/parsley-store.rb in parsley-store-0.1.5 vs lib/parsley-store.rb in parsley-store-0.2.0

- old
+ new

@@ -9,24 +9,52 @@ def initialize(local_db = LOCAL, slave_db = SLAVE) @parser = ScientificNameParser.new @local = Redis.new @local.select(local_db) - # slave replication is not set up yet, so I comment it out - # @slave = Redis.new - # @slave.select(slave_db) end - def parse(scientific_name) - stored = @local.get(scientific_name) - return JSON.parse(stored, :symbolize_names => true) if stored + def parse(scientific_name, opts = {}) + @canonical_only = !!opts[:canonical_only] + @scientific_name = scientific_name + + parsed_data = get_redis_data + return parsed_data if parsed_data + + cache_parsed_data(parse_scientific_name) + end + + private + + def get_redis_data + if @canonical_only + stored = @local.hget(@scientific_name, 'canonical') + return stored if stored + else + stored = @local.get(@scientific_name) + return JSON.parse(stored, :symbolize_names => true) if stored + end + end + + def parse_scientific_name begin - parsed = @parser.parse(scientific_name) + @parser.parse(@scientific_name) rescue @parser = ScientificNameParser.new - parsed = @parser.parse(scientific_name) + @parser.parse(@scientific_name) end - serialized = parsed.to_json - @local.set scientific_name, serialized - parsed end + + def cache_parsed_data(parsed_data) + if @canonical_only + @local.hset @scientific_name, 'parsed', parsed_data[:scientificName][:parsed] + @local.hset @scientific_name, 'parser_version', parsed_data[:scientificName][:parser_version] + @local.hset @scientific_name, 'canonical', parsed_data[:scientificName][:canonical] + parsed_data[:scientificName][:canonical] + else + serialized = parsed_data.to_json + @local.set @scientific_name, serialized + parsed_data + end + end + end