Class: Phenotype::Versioner

Inherits:
Object
  • Object
show all
Defined in:
lib/phenotype/versioner.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(routes: {}, strategies: [], env: {}) ⇒ Versioner

Returns a new instance of Versioner.



9
10
11
12
13
14
# File 'lib/phenotype/versioner.rb', line 9

def initialize(routes: {}, strategies: [], env: {})
  @routes = routes
  @versions = routes.keys.sort.reverse
  @strategies = strategies
  @env = env
end

Instance Attribute Details

#envObject (readonly)

Returns the value of attribute env.



7
8
9
# File 'lib/phenotype/versioner.rb', line 7

def env
  @env
end

#routesObject (readonly)

Returns the value of attribute routes.



7
8
9
# File 'lib/phenotype/versioner.rb', line 7

def routes
  @routes
end

#strategiesObject (readonly)

Returns the value of attribute strategies.



7
8
9
# File 'lib/phenotype/versioner.rb', line 7

def strategies
  @strategies
end

#versionsObject (readonly)

Returns the value of attribute versions.



7
8
9
# File 'lib/phenotype/versioner.rb', line 7

def versions
  @versions
end

Instance Method Details

#callObject

rubocop:disable Metrics/AbcSize



16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/phenotype/versioner.rb', line 16

def call # rubocop:disable Metrics/AbcSize
  return display_errors if errors?

  cascading_versions.each do |v|
    if strategies.first.instance_of?(PathStrategy) && version_mismatch?(v)
      env['PATH_INFO'] = updated_versioned_path(env['PATH_INFO'], v)
    end
    route = call_route(v)
    handler = ResponseHandler.new(route.block.call(env))
    return handler.response unless route.cascade? && handler.retry?
  end
end