Sha256: 62c5cdbb3312c9e8c6a1e3eaf965f0922e1f7592a370d926ca5846fff34134d9

Contents?: true

Size: 1.63 KB

Versions: 1

Compression:

Stored size: 1.63 KB

Contents

class SiteHub
  class CandidateRoutes

    module FromJson
      extend CollectionMethods

      def self.extended clazz
        clazz.class_eval do
          include InstanceMethods
        end
      end

      # TODO: support nested routes, i.e. support rule name being passed in
      def from_hash(hash, sitehub_cookie_name, sitehub_cookie_path)
        cookie_path = hash[:sitehub_cookie_path] || sitehub_cookie_path
        cookie_name = hash[:sitehub_cookie_name] || sitehub_cookie_name
        new(sitehub_cookie_name: cookie_name,
            sitehub_cookie_path: cookie_path,
            mapped_path: hash[:path]) do
          handle_routes(hash, self)
          default url: hash[:default] if hash[:default]
        end
      end

      module InstanceMethods
        private
        def handle_routes(hash, routes)
          extract_splits(hash, routes)
          extract_routes(hash, routes)
        end

        def extract_routes(hash, routes)
          collection(hash, :routes).each do |route|
            routes.route(url: route[:url], label: route[:label])
          end
        end

        def extract_splits(hash, routes)
          collection(hash, :splits).each do |split|
            label = split[:label]
            percentage = split[:percentage]
            cookie_name = split[:sitehub_cookie_name] || sitehub_cookie_name

            if split[:splits] || split[:routes]
              routes.split(percentage: percentage, label: label)  { handle_routes(split, self) }
            else
              routes.split(percentage: percentage, label: label, url: split[:url])
            end
          end
        end

      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sitehub-0.5.0.alpha11 lib/sitehub/candidate_routes/from_json.rb