Skip to content

Objective-C implementation of the {{ mustache }} template engine, for both MacOS Cocoa and iOS.

License

Notifications You must be signed in to change notification settings

oleganza/GRMustache

 
 

Repository files navigation

GRMustache

GRMustache is a flexible and production-ready implementation of Mustache templates for MacOS Cocoa and iOS.

GRMustache targets iOS down to version 4.3, MacOS down to 10.6 Snow Leopard (with or without garbage collection), and only depends on the Foundation framework.

February 14, 2013: GRMustache 6.4.0 is out. Release notes

Don't miss a single release: follow @GRMustache on Twitter.

How To

1. Setup your Xcode project

You have three options, from the simplest to the hairiest:

2. Start rendering templates

#import "GRMustache.h"

// Renders "Hello Arthur!"
NSString *rendering = [GRMustacheTemplate renderObject:[Person personWithName:@"Arthur"]
                                            fromString:@"Hello {{name}}!"
                                                 error:NULL];

// Renders a document from the `Profile.mustache` resource
NSString *rendering = [GRMustacheTemplate renderObject:[Person personWithName:@"Arthur"]
                                          fromResource:@"Profile"
                                                bundle:nil
                                                 error:NULL];

GRMustachio by Jonathan Mitchell is "A super simple, interactive GRMustache based application". It can help you design and test your templates.

Documentation

Mustache syntax

Guides

Introduction:

  • Introduction: a tour of the library features, and most common use cases.

Basics:

Services:

Hooks:

Mustache, and beyond:

  • Compatibility: compatibility with other Mustache implementations, in details.

Sample code

  • Feeding The Templates: an overview of various techniques to feed templates.
  • Collection Indexes: how to render array indexes, render sections for the first or the last element, for odd or even elements, etc.

Reference

  • Reference: the GRMustache reference, automatically generated from inline documentation, for fun and profit, by appledoc.

Internals

  • Forking: the forking guide tells you everything about GRMustache organization.

FAQ

  • Q: I get "unrecognized selector sent to instance" errors.

    A: Check that you have added the -ObjC option in the "Other Linker Flags" of your target (how to).

  • Q: Is it possible to render array indexes? Customize first and last elements? Distinguish odd and even items, play fizzbuzz?

    A: Yes, yes, and yes

  • Q: Is it possible to format numbers and dates?

    A: Yes. Use NSNumberFormatter and NSDateFormatter.

  • Q: Is it possible to embed partial templates whose name is only known at runtime?

    A: Yes

  • Q: Does GRMustache provide any layout or template inheritance facility?

    A: Yes

  • Q: Is it possible to localize templates?

    A: Yes

  • Q: Is it possible to render a default value for missing keys?

    A: Yes

  • Q: Is it possible to disable HTML escaping?

    A: Yes

  • Q: What is this NSUndefinedKeyException stuff?

    A: When GRMustache has to try several objects until it finds the one that provides a {{key}}, several NSUndefinedKeyException are raised and caught. Let us double guess you: it's likely that you wish Xcode would stop breaking on those exceptions. This use case is covered in the Runtime Guide.

  • Q: Why does GRMustache need JRSwizzle?

    A: GRMustache does not need it, and this swizzling is a mere convenience that will not ship in your released binary:

    You may be happy having GRMustache swizzle valueForUndefinedKey: in the NSObject class when you invoke [GRMustache preventNSUndefinedKeyExceptionAttack]: it allows you to debug your application without being interrupted by the NSUndefinedKeyException that may be raised and caught by template rendering. The use case is described in the Runtime Guide.

What other people say

@JeffSchilling:

I'm loving grmustache

@basilshkara:

Oh man GRMustache saved my ass once again. Awesome lib.

@guiheneuf:

GRMustache filters extension saved us from great escaping PITAs. Thanks @groue.

@orj:

Thank fucking christ for decent iOS developers who ship .lib files in their Github repos. #GRMustache

@SebastienPeek

@issya should see the HTML template I built, pretty wicked. GRMustache is the best.

@mugginsoft

Using GRMustache (Cocoa) for template processing. Looks like a top quality library. Good developer and good units tests. Get it on GitHub.

@dannolan

okay GRMustache is the fucking daddy

Popular projects & apps using GRMustache

  • tomaz/appledoc: Objective-c code Apple style documentation set generator
  • mapbox/mapbox-ios-sdk: MapBox iOS SDK, an open source alternative to MapKit
  • CarterA/Tribo: Extremely fast static site generator written in Objective-C
  • AutoLib uses GRMustache and spullara/mustache.java for rendering an identical set of Mustache templates on iOS and Android.
  • CinéObs uses GRMustache for RSS feeds rendering
  • Fotopedia, the first collaborative photo encyclopedia
  • FunGolf GPS, a golf app with 3D maps
  • KosmicTask, an integrated scripting environment for OS X that supports more than 20 scripting languages.
  • Servus can turn any file on your computer into a branded download page hosted on Dropbox.

Contribution wish-list

Please look for an open issue that smiles at you!

... And I wish somebody would review the non-native English of the documentation and guides.

Forking

Please fork. You'll learn useful information in the Forking Guide.

License

Released under the MIT License.

About

Objective-C implementation of the {{ mustache }} template engine, for both MacOS Cocoa and iOS.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Objective-C 98.2%
  • Racket 1.1%
  • C 0.7%