Sha256: 6910a24d213cfff9997e8154645a17ae4597f4e07af73a78a70ff0e7afec7480

Contents?: true

Size: 1.3 KB

Versions: 3

Compression:

Stored size: 1.3 KB

Contents

module Jamnagar
  module Storage
    class ContributorStore < BasicStore
      def initialize(adapter=nil)
        @adapter = adapter || {}
      end

      def find_contributor(item, contributor)
        existing = find_and_update_contributor(item, contributor)
        existing = create_contributor(item, contributor) unless existing
        existing
      end

    private
      def find_and_update_contributor(item, contributor)
        existing = @adapter.find_first({"_id" => contributor["id"]})
        update_contributions(existing, item) if existing
        existing
      end

      def create_contributor(item, contributor)
        contributions = [item["_id"]]
        created = @adapter.store(contributor["id"], contributor.merge({"_id" => contributor["id"], "contributions" => contributions, "contributions_count" => 1}))
        @adapter.find_first({"_id" => created})
      end

      def update_contributions(contributor, item)
        return unless contributor && contributor["contributions"] && item && item["_id"]
        existing_contributions = contributor["contributions"] || []
        contributions =  existing_contributions << item["_id"]
        @adapter.update({"_id" => contributor["_id"]}, "$set" => {"contributions" => contributions}, "$inc" => {"contributions_count" => 1})
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
jamnagar-1.3.9.1 lib/jamnagar/storage/contributor_store.rb
jamnagar-1.3.9 lib/jamnagar/storage/contributor_store.rb
jamnagar-1.3.8 lib/jamnagar/storage/contributor_store.rb