Sha256: d7e2b255e261ee11d3f9952900c898ee82ea434ae8c95b2b844d675b40c0fd6a

Contents?: true

Size: 1.14 KB

Versions: 4

Compression:

Stored size: 1.14 KB

Contents

require 'fortitude/tags/tag'
require 'fortitude/errors'

module Fortitude
  module Tags
    module TagStore
      def tag(name, options = nil)
        @_tags_by_name ||= { }

        name = Fortitude::Tags::Tag.normalize_tag_name(name)
        tag_object = Fortitude::Tags::Tag.new(name, options || { })
        @_tags_by_name[name] = tag_object

        tags_added!([ tag_object ])
      end

      def modify_tag(name)
        name = Fortitude::Tags::Tag.normalize_tag_name(name)
        existing_tag = tags[name]

        unless existing_tag
          raise Fortitude::Errors::TagNotFound.new(self, name)
        end

        new_tag = existing_tag.dup
        yield new_tag
        @_tags_by_name ||= { }
        @_tags_by_name[name] = new_tag

        tags_changed!([ new_tag ])
      end

      def tags
        out = { }
        (delegate_tag_stores || [ ]).each { |d| out.merge!(d.tags) }
        out.merge!(@_tags_by_name || { })
        out
      end

      def tags_added!(tags)
        tags_changed!(tags)
      end

      def tags_changed!(tags)
        # nothing here
      end

      def delegate_tag_stores
        [ ]
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
fortitude-0.0.4-java lib/fortitude/tags/tag_store.rb
fortitude-0.0.4 lib/fortitude/tags/tag_store.rb
fortitude-0.0.3 lib/fortitude/tags/tag_store.rb
fortitude-0.0.2 lib/fortitude/tags/tag_store.rb