Skip to content

Latest commit

 

History

History
1339 lines (803 loc) · 62.2 KB

CHANGELOG.md

File metadata and controls

1339 lines (803 loc) · 62.2 KB

Change Log

All notable changes to this project will be documented in this file. Note that RB_ID=# and DIFF_ID=# correspond to associated message in commits.

[Unreleased]

Added

Changed

Fixed

Closed

finatra-2.9.0 (2017-03-10)

Added

Changed

  • inject-core: (BREAKING API CHANGE) Allow for binding of higher-kinded types when testing. Deprecated @Bind mechanism for replacing bound types in an object graph. Now instead of using @Bind like this:

    class DarkTrafficCanonicalResourceHeaderTest
      extends FeatureTest
      with Mockito {
    
      @Bind
      @DarkTrafficService
      val darkTrafficService: Option[Service[Request, Response]] =
        Some(smartMock[Service[Request, Response]])
    
      /* mock request */
      darkTrafficService.get.apply(any[Request]).returns(Future.value(smartMock[Response]))
    
      override val server = new EmbeddedHttpServer(
        twitterServer = new DarkTrafficTestServer)
    
      test("DarkTrafficServer#has Canonical-Resource header correctly set") {
        ...
    

    Users can instead do:

    class DarkTrafficCanonicalResourceHeaderTest
      extends FeatureTest
      with Mockito {
    
      val darkTrafficService: Option[Service[Request, Response]] =
        Some(smartMock[Service[Request, Response]])
    
      /* mock request */
      darkTrafficService.get.apply(any[Request]).returns(Future.value(smartMock[Response]))
    
      override val server = new EmbeddedHttpServer(
        twitterServer = new DarkTrafficTestServer)
        .bind[Option[Service[Request, Response]], DarkTrafficService](darkTrafficService)
    
      test("DarkTrafficServer#has Canonical-Resource header correctly set") {
        ...
    

    This allows for more flexibility (as the binding is now per object graph, rather than per test files) and is less susceptible to errors due to incorrect usage.

    The breaking API change is due to adding this support in the TestInjector, it is now required that users call the TestInjector#create method in order to build the injector and that this is done after calls to TestInjector#bind. Previously, an Injector was directly returned from TestInjector#apply which is no longer true, thus it may look like your IntegrationTests are broken as you now need to add a call to TestInjector#create.

    Additionally, this change updates all of the framework tests in the inject modules to the FunSuite testing style from the deprecated WordSpec testing style. RB_ID=910011

  • finatra-thrift: Update framework tests to FunSuite ScalaTest testing style. RB_ID=910262

  • inject-core: Move Logging from grizzled-slf4j to util/util-slf4j-api. c.t.inject.Logger is now deprecated in favor of c.t.util.logging.Logger in util. DIFF_ID=D29713

  • finatra-httpclient: Update framework tests to FunSuite ScalaTest testing style. RB_ID=909526

  • finatra-http: Update framework tests to FunSuite ScalaTest testing style. RB_ID=909349

  • finatra: Bump guava to 19.0. RB_ID=907807

  • inject-thrift-client: Various APIs have changed to work with ThriftMethod.SuccessType instead of ThriftMethod.Result. See ThriftClientFilterChain, Controller, ThriftWarmup, PossiblyRetryable. RB_ID=908846

Fixed

Closed

finatra-2.8.0 (2017-02-03)

Added

  • finatra-http: Add Java support for declaring admin routes. RB_ID=906264

  • finatra-http: Add AbstractExceptionMapper for ExceptionMapper usage from Java. Also update the HttpRouter to allow for registration of AbstractExceptionMappers. RB_ID=902995

  • finatra-http: Support for JSON Patch (https://tools.ietf.org/html/rfc6902). Utilities are located in package com.twitter.finatra.http.jsonpatch. RB_ID=889152

  • finatra: Created companion trait mixins for Test/FeatureTest/IntegrationTest/HttpTest. RB_ID=897778

  • finatra-http: Support for optional trailing slashes in HTTP routes. Routes can now specify that they allow an optional trailing slash by ending the route URI in the Controller with "/?". RB_ID=893167

  • finatra-http: Support for Controller route prefixes. This allows users to define a common prefix for a set of routes declaratively inside a controller. RB_ID=894695

Changed

  • inject-core: Add back JUNitRUnner to c.t.inject.Test and c.t.inject.WordSpecTest so that tests can be run when building with maven. RB_ID=909789

  • finatra-http: Allow routes which begin with "/admin" to be exposed on the external interface and routes which DO NOT begin with "/admin" to be exposed on the admin interface. NOTE: routes which begin with "/admin/finatra" will continue to be on the admin interface only. Routes which begin with "/admin" that should be served from the admin interface MUST set the flag "admin = true" on the route in the Controller. RB_ID=905225

  • finatra: Move conversions and retry utilities from finatra/utils to finatra/inject/inject-utils. RB_ID=905109

  • finatra: (BREAKING API CHANGE) Rename the existing test helper classes to include their current opinionated testing style, "WordSpec". These are functionally equivalent as this is just a name change. We also introduce new versions of the test helpers which mix in the recommended FunSuite. Thus it will look like your tests are broken as you will need to update to change to use the new "WordSpec" classes or changed your testing style to the recommended FunSuite style. DIFF_ID=D19822

  • inject-core: Remove JUnitRunner from c.t.inject.Test. This was only necessary for internal building with pants and is no longer required. The sbt build uses the ScalaTest runner and is thus not affected. Additionally, update specs2 to 2.4.17 and to depend on just the specs2-mock dependency where needed. DIFF_ID=D18011

Fixed

  • finatra-http: Fix issue where added admin routes did not have their HTTP method correctly specified leading to all routes being defaulted to 'GET'. RB_ID=905887

  • finatra-http: Fix for custom request case class collection-type fields which are annotated with either @RouteParam, @QueryParam, or @FormParam to correctly use a specified default value when a value is not sent in the request. RB_ID=903697

  • inject-app: Fix TestInjector to properly parse flags. The TestInjector didn't properly handle defaulted boolean flags when defined in Modules. Updated the TestInjector logic to properly parse flags. Fixes Issue #373 RB_ID=901525

  • finatra: Correctly filter published tests-javadocs and tests-sources jars for projects. We are incorrectly publishing tests in the sources and javadocs jars for projects which publish a test-jar dependency (http, httpclient, jackson, thrift, util, inject-app, inject-core, inject-modules, and inject-server). RB_ID=901153

Closed

finatra-2.7.0 (2016-12-20)

Added

  • finatra-http: Add built-in support for Scala scala.concurrent.Future. The CallbackConverter now supports a return type of Scala scala.concurrent.Future by using a bijection to convert to a Twitter c.t.util.Future. RB_ID=898147

  • finatra-http: Support for request forwarding. Requests can be forwarded from one route to another. Forwarded requests will not go through the server's defined filter chain again but will pass through any Controller defined filters on the "forwarded to" route. RB_ID=883224

Changed

Fixed

Closed

finatra-2.6.0 (2016-11-22)

Added

  • finatra: Move the OSS documentation to internal code repository to be co-located with source code. RB_ID=881112

Changed

  • finatra-http: Decompose the ThrowableExceptionMapper to allow users to more easily replace the portions they care about. Users can now just replace the functionality per exception type rather than needing to replace the entire ThrowableExceptionMapper. `RB_ID=891666``

  • finatra-http: The 'cookie' method of c.t.finatra.http.response.ResponseBuilder#EnrichedResponse that takes a Netty 3 cookie instance has been deprecated. Please use the method which takes a Finagle HTTP cookie instead. RB_ID=888683

  • finatra-http: Update adding routes to the TwitterServer HTTP Admin Interface to use c.t.finagle.http.RouteIndex and remove the c.t.finatra.http.routing.AdminIndexInfo. Also relaxed the rules for what routes can be added to the index to include constant /POST routes. Additionally, no longer fail if you define conflicting admin routes -- we will now only warn. It is up to the user to not shoot themselves in the foot. RB_ID=889792

  • finatra-http: Request in request case classes no longer requires Inject annotation. RB_ID=888197

  • inject-utils: Deprecated RootMonitor since finagle DefaultMonitor is implicitly installed and handles all exceptions caught in stack. We provide a monitor method by default is a NullMonitor in c.t.finatra.thrift.modules.DarkTrafficFilterModule and c.t.inject.thrift.modules.FilteredThriftClientModule, users can handle other exceptions (unhandled by DefaultMonitor) by overriding the monitor method RB_ID=886773

  • finatra: We now depend on a fork of libthrift hosted in the Central Repository. The new package lives in the 'com.twitter' organization. This removes the necessity of depending on maven.twttr.com. This also means that eviction will not be automatic and using a newer libthrift library requires manual eviction if artifacts are being pulled in transitively. RB_ID=885879

  • inject-thrift-client: (BREAKING API CHANGE) Update filter building API with FilteredThriftClientModule. The c.t.inject.thrift.filters.ThriftClientFilterChain builder API has changed along with the underlying mechanisms to support enforcement of a "correct" filter order when using the helper methods. Methods have been renamed to a 'with'-syntax to be more inline with other builders and the confusing "globalFilter" method to the more verbose but more accurate "withAgnosticFilter". RB_ID=878260

  • inject-thrift-client: Remove deprecated package aliases. We'd like people to move the correct packages.RB_ID=879330

  • finatra-http: (BREAKING API CHANGE) Update StreamingResponse to avoid keeping a reference to the head of the AsyncStream. This resolves the memory leak when streaming an infinite stream. The constructor is now private; use the StreamingResponse object methods that take an AsyncStream by-name instead. ``RB_ID=890205''

Fixed

  • finatra-http: Allow 0,1,t,f as valid boolean values for QueryParam case class requests. RB_ID=881939

Closed

finatra-2.5.0 (2016-10-10)

Added

  • finatra-http: Add DarkTrafficFilterModule symmetric with thrift/DarkTrafficFilterModule. Add DarkTrafficService annotation in finatra-utils and a filter function used for requests annotated with Annotation Type in order to add DarkTrafficFilter. RB_ID=878079

Changed

  • finatra: No longer need to add an additional resolver that points to maven.twttr.com. RB_ID=878967
  • inject-thrift-client: Stop counting response failures in the c.t.inject.thrift.ThriftClientFilterChain as these are now counted in the c.t.finagle.thrift.ThriftServiceIface. RB_ID=879075
  • finatra-jackson: Fix issue around JsonProperty annotation empty value. In CaseClassField.jsonNameForField, if the @JsonProperty annotation is used without a value, the property name is interpreted as "". It now follows the default Jackson behavior of using the name field name as the property name when the annotation is empty. RB_ID=877060
  • finatra: Correct instances of misspelled word "converter". There are several instances where the word "converter" is misspelled as "convertor". Specifically, TwitterModule.addTypeConvertor has been changed to TwitterModule.addTypeConverter. Other internal renamings are TwitterDurationTypeConverter, JodatimeDurationTypeConverter, and JacksonToGuiceTypeConverter. RB_ID=877736
  • finatra: Move installation of the SLF4JBridgeHandler to the constructor of c.t.inject.server.TwitterServer. The c.t.finatra.logging.modules.Slf4jBridgeModule has been removed as there is now little reason to use it unless you are building an application directly from c.t.inject.app.App since the functionality is now provided by default in the constructor of c.t.inject.server.TwitterServer. If using c.t.inject.app.App, then users can use the c.t.inject.logging.modules.LoggerModule. The main advantage is that slf4j bridges are now installed earlier in the application or server lifecycle and thus more of the initialization logging is bridged to the slf4j-api. RB_ID=870913

Fixed

  • finatra-jackson: Test jar is missing files. Classes in the test c.t.finatra.validation package were not properly marked for inclusion in the finatra-jackson tests jar. They've now been added. RB_ID=878755

Closed

finatra-2.4.0 (2016-09-07)

Added

  • finatra-thrift: Enhanced support for Java Thrift services. RB_ID=868254
  • finatra-examples: Add web/UI application example. RB_ID=868027
  • inject-server: Allow for the ability to disable test logging via System property. RB_ID=867344

Changed

  • finatra-http: Simplify ExceptionMapper configuration and usage. We are dropping the need for a specialized DefaultExceptionMapper (which was simply an ExceptionMapper[Throwable]). Instead we now allow the configuration of mappers in the ExceptionManager to be much more flexible. Previously, the framework tried to prevent a user from registering a mapper over a given exception type multiple times and specialized a "default" ExceptionMapper to invoke on an exception type of Throwable. The ExceptionManager will now accept any mapper. If a mapper is added over a type already added, the previous mapper will be overwritten.

    The last registered mapper for an exception type wins.

    The framework adds three mappers to the manager by default. If a user wants to swap out any of these defaults they simply need add their own mapper to the manager for the exception type to map. E.g., by default the framework will add: Throwable -> com.twitter.finatra.http.internal.exceptions.ThrowableExceptionMapper JsonParseException -> com.twitter.finatra.http.internal.exceptions.json.JsonParseExceptionMapper CaseClassMappingException -> com.twitter.finatra.http.internal.exceptions.json.CaseClassExceptionMapper

    The manager walks the exception type hierarchy starting at the given exceptiontype and moving up the inheritence chain until it finds mapper configured for the type. In this manner an ExceptionMapper[Throwable] will be the last mapper invoked and performs as the "default".

    Thus, to change the "default" mapper, simply adding a new mapper over the Throwable type will suffice, i.e., ExceptionMapper[Throwable] to the ExceptionManager. There are multiple ways to add a mapper. Either through the HttpRouter:

    override def configureHttp(router: HttpRouter): Unit = { router .exceptionMapper[MyDefaultExceptionMapper] ... }

    Or in a module which is then added to the Server, e.g.,

    object MyExceptionMapperModule extends TwitterModule { override def singletonStartup(injector: Injector): Unit = { val manager = injector.instance[ExceptionManager] manager.add[MyDefaultExceptionMapper] manager.add[OtherExceptionMapper] } }

    override val modules = Seq( MyExceptionMapperModule, ...)

    This also means we can simplify the HttpServer as we no longer need to expose any "framework" module for overridding the default ExceptionMappers. So the "def exceptionMapperModule" has also been removed.RB_ID=868614

  • finatra-http: Specify HTTP Java API consistently. RB_ID=868264

  • inject-core: Clean up inject.Logging trait. Remove dead code from Logging. RB_ID=868261

  • finatra-http: Move integration tests to a package under com.twitter.finatra.http. RB_ID=866487

Fixed

  • finatra-http: Fix issue with unimplemented methods in NonValidatingHttpHeadersResponse. RB_ID=868480

Closed

finatra-2.3.0 (2016-08-25)

Added

  • finatra-thrift: Add non-guice method to add controller to ThriftRouter RB_ID=863977
  • finatra-thrift: Add support for a "dark" traffic filter in thrift routing. Add a Finatra implementation of the Finagle AbstractDarkTrafficFilter which sub-classes ThriftFilter and will work in the Finatra filter chain. This will allow users to play incoming requests to a configured "dark" service. RB_ID=852338

Changed

  • finatra-http: Performance improvements from latest micro-benchmarking run.
    • BREAKING API CHANGE: Removed HttpHeaders#setDate, HttpHeaders#set and HttpHeaders#GMT. RB_ID=865247
  • finatra-thrift: Provide access to statsReceiver argument in ThriftClientFilterBuilder. RB_ID=857286

Fixed

  • finatra-http: Add content headers for EmbeddedHttpServer #httpDelete and #httpPatch methods. RB_ID=862200

Closed

finatra-2.2.0 (2016-07-07)

Added

  • finatra-thrift: Add python namespace to finatra_thrift_exceptions.thrift. RB_ID=844668
  • finatra-http: Support ANY method in HTTP Controllers. Adds support for defining routes which will answer to "any" HTTP method. RB_ID=830429

Changed

  • finatra: Address lifecycle around com.twitter.inject.app.App#appMain.

    • (BREAKING CHANGE) EmbeddedApp has been completely re-written to be a better utility for testing command-line applications, as a result there are transparent changes to EmbeddedTwitterServer.
    • com.twitter.inject.app.App#appMain is now com.twitter.inject.app.App#run and com.twitter.inject.server.TwitterServer#start. #run() is used for "running" applications and #start() is used for "starting" servers. In the lifecycle TwitterServer implements App#run() as final and simply delegates to the start() method.
    • Server await callback for adding server Awaitables to a list so that the server will now Await.all on all collected Awaitables.
    • Added a new TwitterModuleLifecycle method: singletonPostWarmupComplete.
    • More documentation around server and app Lifecycle methods, their intended usages, and usages of callback functions.RB_ID=844303
  • finatra: Narrow visibility on classes/objects in internal packages. Classes/objects in internal packages are not intended for use outside of the framework. RB_ID=845278

  • finatra-http: fix HttpHeaders's Date locale problem. RB_ID=843966

  • inject-thrift: Address issues with com.twitter.inject.exceptions.PossiblyRetryable. PossiblyRetryable does not correctly determine what is retryable. Updated to correct the logic for better default retry utility. RB_ID=843428

  • finatra: finatra: Move com.twitter.finatra.annotations.Flag|FlagImpl to com.twitter.inject.annotations.Flag|FlagImpl. RB_ID=843383

  • finatra: Remove com.twitter.inject.conversions.map#atomicGetOrElseUpdate. This was necessary for Scala 2.10 support since #getOrElseUpdate was not atomic until Scala 2.11.6. See: scala/scala#4319. RB_ID=842684

  • finatra: Upgrade to Jackson 2.6.5. RB_ID=836819

  • inject: Introduce inject/inject-thrift module to undo cyclic dependency introduced in RB 839427. RB_ID=841128

  • inject-thrift-client: Improvements to FilteredThriftClientModule to provide finer-grain insight on ThriftClientExceptions. NOTE: previously per-route failure stats were in the form: route/add1String/GET/status/503/handled/ThriftClientException/Adder/add1String/com.twitter.finatra.thrift.thriftscala.ServerError

    These will now split across per-route and detailed "service component" failure stats, e.g.,

    // per-route route/add1String/GET/failure/adder-thrift/Adder/add1String/com.twitter.finatra.thrift.thriftscala.ServerError route/add1String/GET/status/503/mapped/ThriftClientException // service component service/failure/adder-thrift/Adder/add1String/com.twitter.finatra.thrift.thriftscala.ServerError

    Where the latter is in the form "service/failure/SOURCE/THRIFT_SERVICE_NAME/THRIFT_METHOD/NAME/details". "SOURCE" is by default the thrift client label, however, users are able to map this to something else.RB_ID=839427

  • finatra: Renamed Embedded testing utilities constructor args, clientFlags --> flags and extraArgs --> args. RB_ID=839537

  • finatra-http: Set Content-Length correctly in EmbeddedHttpServer, to support multi-byte characters in the request body. RB_ID=837438

  • finatra-http: No longer special-case NoSuchMethodException in the ExceptionMappingFilter. RB_ID=837369

  • finatra-http: Remove deprecated package objects in com.twitter.finatra. Callers should be using code in the com.twitter.finatra.http package. RB_ID=836194

  • finatra-http: Removed deprecated ExceptionBarrierFilter. NOTE: The ExceptionBarrierFilter produced stats in the form: "server/response/status/RESPONSE_CODE". Using the replacement StatsFilter (in combination with the ExceptionMappingFilter) will produce more granular per-route stats. The comparable stats from the StatsFilter will be in the form: "route/ROUTE_URI/HTTP_METHOD/status/RESPONSE_CODE" with an additional aggregated total stat. RB_ID=836073 E.g, server/response/status/200: 5, server/response/status/201: 5, server/response/status/202: 5, server/response/status/403: 5,

    will now be: route/bar_uri/GET/status/200: 5, route/bar_uri/GET/status/2XX: 5, route/bar_uri/GET/status/400: 5, route/bar_uri/GET/status/401: 5, route/bar_uri/GET/status/403: 5, route/bar_uri/GET/status/4XX: 15, route/foo_uri/POST/status/200: 5, route/foo_uri/POST/status/2XX: 5, route/foo_uri/POST/status/400: 5, route/foo_uri/POST/status/401: 5, route/foo_uri/POST/status/403: 5, route/foo_uri/POST/status/4XX: 15,

  • finatra: Made implicit classes extend AnyVal for less runtime overhead. RB_ID=835972

  • finatra-http: Remove deprecated package objects in com.twitter.finatra. Callers should be using code in the com.twitter.finatra.http package. RB_ID=836194

  • finatra: Publish all artifacts under com.twitter organization. RB_ID=834484

  • finatra: Update sbt memory settings. RB_ID=834571

  • inject-server: Rename com.twitter.inject.server.TwitterServer#run to com.twitter.inject.server.TwitterServer#handle. RB_ID=833965

  • finatra-http: Move test utilities in com.twitter.finatra.http.test.* to com.twitter.finatra.http.*. RB_ID=833170

  • finatra: Update SLF4J to version 1.7.21 and Logback to 1.1.7. Also update example logging configurations for best practices. RB_ID=832633

  • Builds are now only for Java 8 and Scala 2.11. See the blog post <https://finagle.github.io/blog/2016/04/20/scala-210-and-java7/>_ for details. RB_ID=828898

Fixed

  • finatra-examples: Add sbt-revolver to the hello-world example. Fixes GH-209. RB_ID=838215
  • finatra: Fix to properly support Java controllers that return Futures in their route callbacks. RB_ID=834467

Closed

finatra-2.1.6 (2016-04-26)

Full Changelog

Added

  • finatra-thrift: Add ThriftWarmup for thrift servers. RB_ID=820771
  • finatra-inject/inject-server: Register framework in Library registry. RB_ID=809458
  • finatra-http: Support for trace, connect & options in RequestBuilder. RB_ID=811102
  • finatra-thrift: Allow for thrift server configuration. RB_ID=811126

Changed

  • finatra/twitter-server: Update to register TwitterServer as library in /admin/registry.json. RB_ID=825129
  • finatra-inject/inject-server: Deprecate PromoteToOldGenUtils in favor of twitter-server's prebindWarmup event. RB_ID=819411
  • finatra-http: Move HttpServer to new Http stack API. RB_ID=812718

Fixed

  • finatra: Revert sbt-scoverage plugin to 1.2.0. RB_ID=812098
  • finatra-http: Ensure headers are set correctly in requests and responses. RB_ID=813969

Closed

v2.1.5 (2016-03-15)

Full Changelog

Added

  • finatra-http: Ability to access the finagle request in the ResponseBuilder for templating. RB_ID=805317
  • finatra-http: Added ability to register routes into the TwitterServer admin UI. RB_ID=808272
  • finatra: Added PULL_REQUEST_TEMPLATE RB_ID=808946

Changed

  • finatra: Move to develop branch as default branch for Github. RB_ID=810088
  • finatra: Updated test jars to only contain test utility code. RB_ID=809803

Fixed

  • finatra-http; finatra-thrift: Slf4JBridgeModule is added by default and no longer breaks services which use the slf4k-jdk14 logging implementation. RB_ID=807171
  • finatra-http: Fixed incorrect (or missing) content-type on some http responses. RB_ID=807773
  • finatra-jackson: Fix to support doubles/floats in the jackson Min/Max/Range validations. RB_ID=809821

v2.1.4 (2016-02-25)

Full Changelog

Fixed

Closed

v2.1.3 (2016-02-05)

Full Changelog

Closed

v2.1.2 (2015-12-09)

Full Changelog

Fixed

Closed

v2.1.1 (2015-10-29)

Full Changelog

Closed

Merged pull requests:

v2.1.0 (2015-10-01)

Full Changelog

Merged pull requests:

v2.0.1 (2015-09-21)

Full Changelog

Closed

Merged pull requests:

v2.0.0 (2015-09-09)

Full Changelog

Closed

Merged pull requests:

v2.0.0.M2 (2015-06-12)

Full Changelog

Closed

Merged pull requests:

v2.0.0.M1 (2015-04-30)

Full Changelog

Closed

Merged pull requests:

1.6.0 (2015-01-08)

Full Changelog

Closed

Merged pull requests:

1.5.4 (2014-07-07)

Full Changelog

Closed

Merged pull requests:

1.5.3 (2014-04-16)

Full Changelog

Closed

Merged pull requests:

1.5.2 (2014-02-03)

Full Changelog

Closed

Merged pull requests:

1.5.1 (2014-01-13)

Full Changelog

Closed

Merged pull requests:

1.5.0a (2014-01-08)

Full Changelog

Closed

1.5.0 (2014-01-07)

Full Changelog

Closed

Merged pull requests:

finatra-1.4.1 (2013-11-13)

Full Changelog

Closed

Merged pull requests:

1.4.0 (2013-10-14)

Full Changelog

Closed

finatra-1.4.0 (2013-10-14)

Full Changelog

1.3.9 (2013-10-14)

Full Changelog

finatra-1.3.9 (2013-10-14)

Full Changelog

1.3.8 (2013-09-22)

Full Changelog

finatra-1.3.8 (2013-09-22)

Full Changelog

Closed

  • Make mustache factory use baseTemplatePath local docroot and template path Github Issue 56

Merged pull requests:

1.3.7 (2013-07-20)

Full Changelog

finatra-1.3.7 (2013-07-20)

Full Changelog

finatra-1.3.4 (2013-07-20)

Full Changelog

Closed

Merged pull requests:

finatra-1.3.3 (2013-06-14)

Full Changelog

Merged pull requests:

finatra-1.3.2 (2013-06-13)

Full Changelog

Merged pull requests:

finatra-1.3.1 (2013-03-12)

Full Changelog

Closed

finatra-1.3.0 (2013-03-10)

Full Changelog

finatra-1.2.2 (2013-03-10)

Full Changelog

Closed

Merged pull requests:

finatra-1.2.0 (2013-01-22)

Full Changelog

finatra-1.1.1 (2012-12-06)

Full Changelog

Closed

Merged pull requests:

finatra-1.1.0 (2012-11-20)

Full Changelog

Closed

finatra-1.0.3 (2012-11-13)

Full Changelog

finatra-1.0.2 (2012-11-13)

Full Changelog

Closed

finatra-1.0.1 (2012-11-11)

Full Changelog

Closed

Merged pull requests:

finatra-1.0.0 (2012-11-08)

Full Changelog

Closed

finatra-0.3.4 (2012-11-07)

Full Changelog

Closed

finatra-0.3.3 (2012-11-05)

Full Changelog

finatra-0.3.2 (2012-11-04)

Full Changelog

Closed

finatra-0.2.4 (2012-08-18)

Full Changelog

Merged pull requests:

finatra-0.2.3 (2012-08-08)

Full Changelog

Merged pull requests:

finatra-0.2.1 (2012-07-20)

Full Changelog

Merged pull requests:

finatra-0.2.0 (2012-07-20)

Full Changelog

Closed

Merged pull requests:

finatra-0.1.10 (2012-07-14)

Full Changelog

finatra-0.1.9 (2012-07-14)

Full Changelog

finatra-0.1.8 (2012-07-14)

Full Changelog

Closed

finatra-0.1.7 (2012-07-13)

Full Changelog

finatra-0.1.6 (2012-07-13)

Full Changelog

Closed

finatra-0.1.5 (2012-07-13)

Full Changelog

Closed

finatra-0.1.3 (2012-07-13)

Full Changelog

finatra-0.1.2 (2012-07-13)

Full Changelog

Closed

finatra-0.1.1 (2012-07-13)

Full Changelog

finatra-0.1.0 (2012-07-12)

Full Changelog

finatra-0.0.1 (2012-07-12)

Merged pull requests: