wrapping an api with a ruby gem
TRANSCRIPT
![Page 1: Wrapping an api with a ruby gem](https://reader034.vdocument.in/reader034/viewer/2022042723/587dd4f61a28ab5b5b8b612d/html5/thumbnails/1.jpg)
Wrapping an APIWITH A RUBY GEM
![Page 2: Wrapping an api with a ruby gem](https://reader034.vdocument.in/reader034/viewer/2022042723/587dd4f61a28ab5b5b8b612d/html5/thumbnails/2.jpg)
James Thompson
● Engineering Team Lead with Mavenlink
● Software Developer since 2003
○ Ruby since 2006
○ Rails since 2007
plainprogrammer
![Page 3: Wrapping an api with a ruby gem](https://reader034.vdocument.in/reader034/viewer/2022042723/587dd4f61a28ab5b5b8b612d/html5/thumbnails/3.jpg)
WHY?
![Page 4: Wrapping an api with a ruby gem](https://reader034.vdocument.in/reader034/viewer/2022042723/587dd4f61a28ab5b5b8b612d/html5/thumbnails/4.jpg)
RTFM — Become comfortable with what you want to wrap
UnderstandTHE API YOU’RE WRAPPING
![Page 5: Wrapping an api with a ruby gem](https://reader034.vdocument.in/reader034/viewer/2022042723/587dd4f61a28ab5b5b8b612d/html5/thumbnails/5.jpg)
Develop a general strategy early on
UnderstandTHE API YOU’RE WRAPPING
![Page 6: Wrapping an api with a ruby gem](https://reader034.vdocument.in/reader034/viewer/2022042723/587dd4f61a28ab5b5b8b612d/html5/thumbnails/6.jpg)
Delve into the purpose of the API and your Gem
UnderstandTHE API YOU’RE WRAPPING
![Page 7: Wrapping an api with a ruby gem](https://reader034.vdocument.in/reader034/viewer/2022042723/587dd4f61a28ab5b5b8b612d/html5/thumbnails/7.jpg)
Make ChoicesDON’T FEAR YOUR BIASES
What is important, and what can wait?
![Page 8: Wrapping an api with a ruby gem](https://reader034.vdocument.in/reader034/viewer/2022042723/587dd4f61a28ab5b5b8b612d/html5/thumbnails/8.jpg)
Make ChoicesDON’T FEAR YOUR BIASES
How do you want to handle configuration?
![Page 9: Wrapping an api with a ruby gem](https://reader034.vdocument.in/reader034/viewer/2022042723/587dd4f61a28ab5b5b8b612d/html5/thumbnails/9.jpg)
Make ChoicesDON’T FEAR YOUR BIASES
What things would you change?
![Page 10: Wrapping an api with a ruby gem](https://reader034.vdocument.in/reader034/viewer/2022042723/587dd4f61a28ab5b5b8b612d/html5/thumbnails/10.jpg)
Some AdviceTHESE ARE MY BIASES
Start out by favoring a concrete implementation, rather than getting too fancy or abstract
![Page 11: Wrapping an api with a ruby gem](https://reader034.vdocument.in/reader034/viewer/2022042723/587dd4f61a28ab5b5b8b612d/html5/thumbnails/11.jpg)
Some AdviceTHESE ARE MY BIASES
Avoid implementing protocol wrappers — reading formal specs sucks
![Page 12: Wrapping an api with a ruby gem](https://reader034.vdocument.in/reader034/viewer/2022042723/587dd4f61a28ab5b5b8b612d/html5/thumbnails/12.jpg)
simple_bitly
module SimpleBitly # ... class Client def initialize(username, api_key) # ... end def shorten(long_url) # ... end
def expand(*short_urls) # ... end endend
![Page 13: Wrapping an api with a ruby gem](https://reader034.vdocument.in/reader034/viewer/2022042723/587dd4f61a28ab5b5b8b612d/html5/thumbnails/13.jpg)
bitly# lib/bitly.rbrequire 'multi_json'
require 'bitly/config'require 'bitly/utils'require 'bitly/client'require 'bitly/url'require 'bitly/version'require 'bitly/v3'
![Page 14: Wrapping an api with a ruby gem](https://reader034.vdocument.in/reader034/viewer/2022042723/587dd4f61a28ab5b5b8b612d/html5/thumbnails/14.jpg)
odata
# lib/odata.rbrequire 'uri'require 'date'require 'bigdecimal'require 'nokogiri'require 'typhoeus'require 'andand'
# require 'active_support'# require 'active_support/core_ext'# require 'active_support/concern'
require 'odata/version'require 'odata/property_registry'require 'odata/property'require 'odata/properties'require 'odata/complex_type'require 'odata/association'require 'odata/entity'require 'odata/entity_set'require 'odata/query/criteria'require 'odata/query/result'require 'odata/query'require 'odata/service'require 'odata/service_registry'
require 'odata/railtie' if defined?(::Rails)