gistpod

0.2.2 • Public • Published

gistpod

Usage: gistpod [options] [command]


  Commands:

    username <username>         set the GitHub username from which to retrieve gists (config file: ~/.gistpod)
    url <pod>                   look up the latest gist URL for the specified CocoaPod
    pull                        pull the latest data from the GitHub API into your local cache (~/.gistpod-cache)
    update <Podfile> [pods...]  updates the gist refs for the given Pods (or all Pods, if none are specified) in the specified Podfile to the latest revisions
    list                        list known podspec gists
    help [cmd]                  display help for [cmd]

  Options:

    -h, --help     output usage information
    -V, --version  output the version number

CLI tool (written in node.js) to facilitate using GitHub gists as temporary CocoaPods podspecs.

Works with Swift-enabled versions of CocoaPods (gem install cocoapods --pre). In fact, that's pretty much the only reason I made this.

Given how much of the Swift code out in the wild still has no official podspec (and, for that matter, given all of the one-page microclasses I've found myself writing in Swift), I've been using gists (https://gist.github.com) pretty frequently to deal with temporary (and rapidly-changing) podspecs during fast development cycles.

But the problem, as far as I can tell, is that any time you commit a change to a gist, the raw gist URL changes. (I'm not aware of any redirect URL to the actual raw source... is anyone else?). That means that every time you change a podspec, you'll be stuck copying its new gist URL around to all of your Podfiles manually.

Can NOT be trifling with that. I'd much rather just Cmd-Tab into iTerm and run something... like...

$ gistpod update
 
Podfile updated.

moar examples

 $ gistpod list

Pod                      Podspec gist URL
-------------------      ------------------------------------------------------------------
ReactiveCocoaSwift       https://gist.github.com/brynbellomy/.../ReactiveCocoaSwift.podspec
JSTilemap                https://gist.github.com/brynbellomy/.../JSTilemap.podspec
Signals                  https://gist.github.com/brynbellomy/.../Signals.podspec
Starscream               https://gist.github.com/brynbellomy/.../Starscream.podspec
Basis                    https://gist.github.com/brynbellomy/.../Basis.podspec

# the update command is:
# $ gistpod update [Podfile directory] [pods to update]
$ gistpod update . Starscream ReactiveCocoa-Swift

Podfile updated.
  • gistpod list:

    1. queries your GitHub account for all gists containing at least one podspec file — i.e., matching the pattern *.podspec...
    2. ...and displays the direct, raw URL to the latest revision of each podspec's gist.

    (Note: just to be totally clear, I added the dot-dot-dots. The command gives the full path.)


  • gistpod update:

    1. backs up <project root>/Podfile to ~/.gistpod-backup, ...
    2. reads your Podfile template from <project root>/Podfile.gistpod, and then ...
    3. writes an updated Podfile to <project root>/Podfile. Each pod placeholder (#{Starscream}, etc.) is replaced by its respective URL (from the gistpod list command).

    Now you can pod install your heart out, confident that your jank-ass, ghetto-rigged ("dev") in-house podspecs are all at least referencing the latest commits in your gist account.


install

Install with npm

$ npm install -g gistpod

Set your GitHub username (one-time):

$ gistpod username brynbellomy

Now you can list all of the podspecs that you have stored as gists:

$ gistpod list

@@TODO: display a diff if there were any changes

main usage/workflow

1. Make a copy of your Podfile called Podfile.gistpod.

Put it in <project root>, alongside the original:

$ cp Podfile Podfile.gistpod

2. Open Podfile.gistpod.

You will need to change the :podspec => '...' URLs for any of the podspecs that you want to keep automatically synced with your gists account. The entire podspec URL (including quotes) must be replaced with the placeholder #{PodName}.

In other words, change this:

platform :osx, '10.10'
 
pod 'Starscream', :podspec => 'https://raw.github.com/dfd19ac23..../Starscream.podspec'
pod 'ReactiveCocoa-Swift', :podspec => 'https://raw.github.com/fdc2a3d19..../ReactiveCocoa-Swift.podspec'

...to this:

platform :osx, '10.10'
 
pod 'Starscream', :podspec => #{Starscream} 
pod 'ReactiveCocoa-Swift', :podspec => #{ReactiveCocoa-Swift} 

3. Update your local cache of podspec URLs with gistpod pull.

$ gistpod pull

@@TODO: display a diff if there were any changes

4. Run gistpod update to update the URLs in your Podfile.

This does the inverse of step 3: it finds all of those #{PodPlaceholders} in your Podfile.gistpod and replaces each one with the latest commit URL for its respective podspec.

$ gistpod update [optional path to Podfile] [optional list of pods to update]

Any time you run gistpod update, your Podfile is backed up (to ~/.gistpod-backup) and then overwritten with a new Podfile built from its accompanying Podfile.gistpod. The #{PodPlaceholders} will be replaced by URLs pointing at the latest revision of each of your gist podspecs on GitHub.

other commands

The gistpod url command returns only the gist URL for a given podspec (and not a byte more or less):

$ gistpod url Starscream

This is useful if you're doing any kind of shell scripting, or if you want to (painlessly) copy the URL to the clipboard, or...

$ gistpod url Starscream | pbcopy

authors

bryn austin bellomy < bryn.bellomy@gmail.com >

Package Sidebar

Install

npm i gistpod

Weekly Downloads

0

Version

0.2.2

License

WTFPL

Last publish

Collaborators

  • brynb