Top Banner
Gem API design for authors Emily Stolfo Ruby Engineer at , Adjunct Faculty at Columbia @EmStolfo (and users)
55

Gem API design

Jul 13, 2015

Download

Technology

emstolfo
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Gem API design

Gem API design for authors

Emily StolfoRuby Engineer at , Adjunct Faculty at Columbia@EmStolfo

(and users)

Page 2: Gem API design

Many of us have become gem authors.(whether we like it or not)

Page 3: Gem API design

Our code served a browser and a

mouse.

Page 4: Gem API design

Now our code serves other developers.

Page 5: Gem API design

Is it just me, or does ____ seem like a poorly designed piece of software; lots

of magic, poor OOP design, poor documentation, etc.? I appreciate the contribution to open source, though.

Page 6: Gem API design

gem API design is

UX design

Page 7: Gem API design

The UX Fund experiment

Page 8: Gem API design

Great user experience is

directly reflected in stock price.

Page 9: Gem API design

RubyGems

Page 10: Gem API design

Developer Experience (DX) team

DriversDocs

Tools

Page 11: Gem API design

gem API design is

UX design

Page 12: Gem API design

USERS

Page 13: Gem API design

Know your users.*

* open source users or your colleagues

Page 14: Gem API design

Listen in.

Page 15: Gem API design

Read blogs.Use twitter.Talk to users.Give presentations.

Page 16: Gem API design

Establish trust.

Page 17: Gem API design

USE SEMANTIC

VERSIONING

Page 18: Gem API design

Involve

super users.

Page 19: Gem API design

UX DESIGN CONCEPTS

Page 20: Gem API design

ConsistencySimplicityMapping

Page 21: Gem API design

Consistency MappingSimplicity

Page 22: Gem API design

Simplicity MappingConsistency

Page 23: Gem API design

MappingSimplicityConsistency

Page 24: Gem API design

3 Consistency Considerations

4 Simplicity Suggestions

5 Mapping Mantras

Page 25: Gem API design

Consistency Considerations

Page 26: Gem API design

1. Consider consistent naming.

Page 27: Gem API design

2. Consider consistent style.

Page 28: Gem API design

3. Consider consistent behavior.

Page 29: Gem API design

SimplicitySuggestions

Page 30: Gem API design

1. Give classes a single responsibility.

Page 31: Gem API design
Page 32: Gem API design

2. Hide implementation details.

Page 33: Gem API design

attr_reader :name, :connection

...

protected

...

private

...

Page 34: Gem API design

3. Be frugal with helpers.

Page 35: Gem API design

Index creation

@posts.text_index(‘title’)

@posts.create_index({ ‘title’ => Mongo::TEXT })

X

Page 36: Gem API design

4. Design your API first.

Page 37: Gem API design

new driver “fluent API”

@orders.find_and_modify( :query => {}, :new => true, :update => {:$set => {:processed => true})

@orders.find({}). update_one_then_get({:$set => {:processed => true})

X

Page 38: Gem API design

Mapping Mantras

Page 39: Gem API design

1. Monkey-patching is mean.

Page 40: Gem API design

refine String do ... end

refinements

Page 41: Gem API design

2. Side effects are surprising.

Page 42: Gem API design

Mutating opts def map_reduce(map, reduce, opts={}) ... raw = opts.delete(:raw) ...

def map_reduce(map, reduce, opts={}) opts = opts.dup raw = opts.delete(:raw) ...

X

Page 43: Gem API design

3. Requiring method chaining is impolite.

Page 44: Gem API design

@client.pool_manager.primary_pool

@client.primary

X

Page 45: Gem API design

4. Informative error messages are imperative.

Page 46: Gem API design

mongoid

Page 47: Gem API design

5. Documentation without hesitation.

Page 48: Gem API design

# inline comments

Page 49: Gem API design

Documentation tools

Page 50: Gem API design

README.md

Page 51: Gem API design

Getting startedhttp://code.dblock.org/your-first-ruby-gem

Page 52: Gem API design
Page 53: Gem API design

Think like a UX designer.

Page 54: Gem API design

Get social.© JEG2

Page 55: Gem API design

Emily [email protected]@EmStolfo

Talk to me about the Ruby driver :)