elessar 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
 - data/Gemfile.lock +27 -0
 - data/README.md +111 -0
 - data/Rakefile +8 -0
 - data/bin/sdk-console +16 -0
 - data/designer.md +22 -0
 - data/elessar.gemspec +26 -0
 - data/gemfile +12 -0
 - data/lib/.DS_Store +0 -0
 - data/lib/elessar/.DS_Store +0 -0
 - data/lib/elessar/api_operations/request.rb +33 -0
 - data/lib/elessar/connection_manager.rb +95 -0
 - data/lib/elessar/elessar_configuration.rb +44 -0
 - data/lib/elessar/elessar_response.rb +45 -0
 - data/lib/elessar/resources/movie.rb +41 -0
 - data/lib/elessar/resources/quote.rb +29 -0
 - data/lib/elessar/resources.rb +4 -0
 - data/lib/elessar.rb +29 -0
 - metadata +60 -0
 
    
        checksums.yaml
    ADDED
    
    | 
         @@ -0,0 +1,7 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ---
         
     | 
| 
      
 2 
     | 
    
         
            +
            SHA256:
         
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 397fc3055adbb9d6d5a8415a5709e22899cc90fd471552ca810566b9dcc4cbaa
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 693aa15f1092a68147bf7cc35f324f1f52329921a850fa1be29d0d1cec4aa949
         
     | 
| 
      
 5 
     | 
    
         
            +
            SHA512:
         
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 9e2b4cc37588bb6b9455099a204fcb1f1e0a772acce9ec14558eb580465f0b0bef4eeb5bb33be9ba3ca074eb60b3fcda10bab4051a93437c017468266cd4d62a
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 0b753bcb26d4aedda291524c67a6e84ea72154c0e571c251031075cd23c71a9bb6585464ab1004191fa4a13308bbd09cd7268836125cd70ab521d3036181bcac
         
     | 
    
        data/Gemfile.lock
    ADDED
    
    | 
         @@ -0,0 +1,27 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            PATH
         
     | 
| 
      
 2 
     | 
    
         
            +
              remote: .
         
     | 
| 
      
 3 
     | 
    
         
            +
              specs:
         
     | 
| 
      
 4 
     | 
    
         
            +
                elessar (0.0.1)
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            GEM
         
     | 
| 
      
 7 
     | 
    
         
            +
              remote: https://rubygems.org/
         
     | 
| 
      
 8 
     | 
    
         
            +
              specs:
         
     | 
| 
      
 9 
     | 
    
         
            +
                mocha (2.0.2)
         
     | 
| 
      
 10 
     | 
    
         
            +
                  ruby2_keywords (>= 0.0.5)
         
     | 
| 
      
 11 
     | 
    
         
            +
                power_assert (1.2.0)
         
     | 
| 
      
 12 
     | 
    
         
            +
                rake (13.0.6)
         
     | 
| 
      
 13 
     | 
    
         
            +
                ruby2_keywords (0.0.5)
         
     | 
| 
      
 14 
     | 
    
         
            +
                test-unit (3.3.7)
         
     | 
| 
      
 15 
     | 
    
         
            +
                  power_assert
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            PLATFORMS
         
     | 
| 
      
 18 
     | 
    
         
            +
              arm64-darwin-21
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            DEPENDENCIES
         
     | 
| 
      
 21 
     | 
    
         
            +
              elessar!
         
     | 
| 
      
 22 
     | 
    
         
            +
              mocha
         
     | 
| 
      
 23 
     | 
    
         
            +
              rake
         
     | 
| 
      
 24 
     | 
    
         
            +
              test-unit
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            BUNDLED WITH
         
     | 
| 
      
 27 
     | 
    
         
            +
               2.2.3
         
     | 
    
        data/README.md
    ADDED
    
    | 
         @@ -0,0 +1,111 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Elessar Ruby Library
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            Elessar - In the book, Elessar is a green gemstone that is a symbol of the kingship of Gondor.
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            The Elessar Ruby library provides convenient access to the The Lord of the Rings API from
         
     | 
| 
      
 6 
     | 
    
         
            +
            applications written in the Ruby language.
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            ## Documentation
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            See the [The Lord of the Rings API docs](https://the-one-api.dev/documentation).
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            ## Installation
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            You don't need this source code unless you want to modify the gem. If you just
         
     | 
| 
      
 15 
     | 
    
         
            +
            want to use the package, just run:
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            ```sh
         
     | 
| 
      
 18 
     | 
    
         
            +
            gem install elessar
         
     | 
| 
      
 19 
     | 
    
         
            +
            ```
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            If you want to build the gem from source:
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            ```sh
         
     | 
| 
      
 24 
     | 
    
         
            +
            gem build elessar.gemspec
         
     | 
| 
      
 25 
     | 
    
         
            +
            ```
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            ### Requirements
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            - Ruby 2.3+.
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            ### Bundler
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
            If you are installing via bundler, you should be sure to use the https rubygems
         
     | 
| 
      
 34 
     | 
    
         
            +
            source in your Gemfile, as any gems fetched over http could potentially be
         
     | 
| 
      
 35 
     | 
    
         
            +
            compromised in transit and alter the code of gems fetched securely over https:
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 38 
     | 
    
         
            +
            gem 'elessar'
         
     | 
| 
      
 39 
     | 
    
         
            +
            ```
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
            ## Usage
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            The library needs to be configured with your account's secret key which is
         
     | 
| 
      
 44 
     | 
    
         
            +
            available in your [The Lord of the Rings Account](https://the-one-api.dev/account). Set `Elessar.api_key` to its
         
     | 
| 
      
 45 
     | 
    
         
            +
            value:
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 48 
     | 
    
         
            +
            require 'elessar'
         
     | 
| 
      
 49 
     | 
    
         
            +
            Elessar.api_key = 'aR9j-...'
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
            # list movies
         
     | 
| 
      
 52 
     | 
    
         
            +
            Elessar::Movie.list()
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
            # retrieve single movie
         
     | 
| 
      
 55 
     | 
    
         
            +
            movie = Elessar::Movie.retrieve('5cd95395de30eff6ebccde5b')
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
            # list quotes
         
     | 
| 
      
 58 
     | 
    
         
            +
            movie.list_quotes()
         
     | 
| 
      
 59 
     | 
    
         
            +
            ```
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
            ### Params
         
     | 
| 
      
 62 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 63 
     | 
    
         
            +
            # using params as hash
         
     | 
| 
      
 64 
     | 
    
         
            +
            Elessar::Movie.list({limit: 3, page: 2})
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
            # using params as string
         
     | 
| 
      
 67 
     | 
    
         
            +
            Elessar::Movie.list("budgetInMillions<100")
         
     | 
| 
      
 68 
     | 
    
         
            +
            ```
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
            ### Configuring Automatic Retries
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
            You can enable automatic retries on requests that fail due to a transient
         
     | 
| 
      
 74 
     | 
    
         
            +
            problem by configuring the maximum number of retries:
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 77 
     | 
    
         
            +
            Elessar.max_network_retries = 2
         
     | 
| 
      
 78 
     | 
    
         
            +
            ```
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
            Various errors can trigger a retry, like a connection error or a timeout, and
         
     | 
| 
      
 81 
     | 
    
         
            +
            also certain API responses like HTTP status `409 Conflict`.
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
            ### Configuring Timeouts
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
            Open, read timeouts are configurable:
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 88 
     | 
    
         
            +
            Elessar.open_timeout = 30 # in seconds
         
     | 
| 
      
 89 
     | 
    
         
            +
            Elessar.read_timeout = 80
         
     | 
| 
      
 90 
     | 
    
         
            +
            ```
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
            ## Development
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
            Instructions to run tests:
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
            ```sh
         
     | 
| 
      
 98 
     | 
    
         
            +
            bundle install
         
     | 
| 
      
 99 
     | 
    
         
            +
            ```
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
            Run all tests:
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
            ```sh
         
     | 
| 
      
 104 
     | 
    
         
            +
            bundle exec ruby test/run_test.rb
         
     | 
| 
      
 105 
     | 
    
         
            +
            ```
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
            Run a single test:
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
            ```sh
         
     | 
| 
      
 110 
     | 
    
         
            +
            bundle exec ruby test/elessar_test.rb
         
     | 
| 
      
 111 
     | 
    
         
            +
            ```
         
     | 
    
        data/Rakefile
    ADDED
    
    
    
        data/bin/sdk-console
    ADDED
    
    | 
         @@ -0,0 +1,16 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            require "irb"
         
     | 
| 
      
 6 
     | 
    
         
            +
            require "irb/completion"
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            require "#{::File.dirname(__FILE__)}/../lib/sdk.rb"
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            # Config IRB to enable --simple-prompt and auto indent
         
     | 
| 
      
 11 
     | 
    
         
            +
            IRB.conf[:PROMPT_MODE] = :SIMPLE
         
     | 
| 
      
 12 
     | 
    
         
            +
            IRB.conf[:AUTO_INDENT] = true
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            puts "Loaded gem 'murilo-zaffalon-sdk'"
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            IRB.start
         
     | 
    
        data/designer.md
    ADDED
    
    | 
         @@ -0,0 +1,22 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ### Designer
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            You can add `opts` to add some headers to the request.
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 6 
     | 
    
         
            +
            # get movie by id
         
     | 
| 
      
 7 
     | 
    
         
            +
            Elessar::Movie.retrieve(id, opts = {})
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            # get all movies
         
     | 
| 
      
 10 
     | 
    
         
            +
            movie = Elessar::Movie.list(filters = {limit: 10}, opts = {})
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            # You can acces the data
         
     | 
| 
      
 13 
     | 
    
         
            +
            movie.docs.first.name
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            # get all quotes from a movie
         
     | 
| 
      
 16 
     | 
    
         
            +
            quote = movie.list_quotes(filters = { limit: 10 }, opts = {})
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            quote.docs.first.dialog
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            # For Custom searches you can use the filters passing the string
         
     | 
| 
      
 21 
     | 
    
         
            +
            Elessar::Movie.list("budgetInMillions<100")
         
     | 
| 
      
 22 
     | 
    
         
            +
            ```
         
     | 
    
        data/elessar.gemspec
    ADDED
    
    | 
         @@ -0,0 +1,26 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            $LOAD_PATH.unshift(::File.join(::File.dirname(__FILE__), "lib"))
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            Gem::Specification.new do |s|
         
     | 
| 
      
 4 
     | 
    
         
            +
              s.name = "elessar"
         
     | 
| 
      
 5 
     | 
    
         
            +
              s.version = "0.0.1"
         
     | 
| 
      
 6 
     | 
    
         
            +
              s.required_ruby_version = ">= 2.3.0"
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              s.authors = ["Murilo Zaffalon"]
         
     | 
| 
      
 9 
     | 
    
         
            +
              s.date = %q{2023-03-05}
         
     | 
| 
      
 10 
     | 
    
         
            +
              s.description = %q{A simple SDK for Murilo Zaffalon, Elessar - In the book, Elessar is a green gemstone that is a symbol of the kingship of Gondor.}
         
     | 
| 
      
 11 
     | 
    
         
            +
              s.email = %q{mzaffalon@hotmail.com}
         
     | 
| 
      
 12 
     | 
    
         
            +
              # s.test_files = ["test/test_hola.rb"]
         
     | 
| 
      
 13 
     | 
    
         
            +
              s.homepage = %q{http://rubygems.org/gems/elessar}
         
     | 
| 
      
 14 
     | 
    
         
            +
              s.summary = %q{Murilo Zaffalon SDK!}
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              ignored = Regexp.union(
         
     | 
| 
      
 17 
     | 
    
         
            +
                "elessar-0.0.1.gem",
         
     | 
| 
      
 18 
     | 
    
         
            +
                /\A\.git/,
         
     | 
| 
      
 19 
     | 
    
         
            +
                /\A\.vscode/,
         
     | 
| 
      
 20 
     | 
    
         
            +
                /\Atest/
         
     | 
| 
      
 21 
     | 
    
         
            +
              )
         
     | 
| 
      
 22 
     | 
    
         
            +
              s.files = `git ls-files`.split("\n").reject { |f| ignored.match(f) }
         
     | 
| 
      
 23 
     | 
    
         
            +
              s.executables   = `git ls-files -- bin/*`.split("\n")
         
     | 
| 
      
 24 
     | 
    
         
            +
                                                       .map { |f| ::File.basename(f) }
         
     | 
| 
      
 25 
     | 
    
         
            +
              s.require_paths = ["lib"]
         
     | 
| 
      
 26 
     | 
    
         
            +
            end
         
     | 
    
        data/gemfile
    ADDED
    
    
    
        data/lib/.DS_Store
    ADDED
    
    | 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         @@ -0,0 +1,33 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Elessar
         
     | 
| 
      
 4 
     | 
    
         
            +
              module APIOperations
         
     | 
| 
      
 5 
     | 
    
         
            +
                module Request
         
     | 
| 
      
 6 
     | 
    
         
            +
                  module ClassMethods
         
     | 
| 
      
 7 
     | 
    
         
            +
                    def request(method, url, params = {}, opts = {})
         
     | 
| 
      
 8 
     | 
    
         
            +
                      connection = Elessar::ConnectionManager.new
         
     | 
| 
      
 9 
     | 
    
         
            +
                      connection.execute_request(
         
     | 
| 
      
 10 
     | 
    
         
            +
                        method,
         
     | 
| 
      
 11 
     | 
    
         
            +
                        url,
         
     | 
| 
      
 12 
     | 
    
         
            +
                        query: params,
         
     | 
| 
      
 13 
     | 
    
         
            +
                        headers: opts,
         
     | 
| 
      
 14 
     | 
    
         
            +
                      )
         
     | 
| 
      
 15 
     | 
    
         
            +
                    end
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  def request(method, url, params = {}, opts = {})
         
     | 
| 
      
 19 
     | 
    
         
            +
                    connection = Elessar::ConnectionManager.new
         
     | 
| 
      
 20 
     | 
    
         
            +
                    connection.execute_request(
         
     | 
| 
      
 21 
     | 
    
         
            +
                      method,
         
     | 
| 
      
 22 
     | 
    
         
            +
                      url,
         
     | 
| 
      
 23 
     | 
    
         
            +
                      query: params,
         
     | 
| 
      
 24 
     | 
    
         
            +
                      headers: opts,
         
     | 
| 
      
 25 
     | 
    
         
            +
                    )
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  def self.included(base)
         
     | 
| 
      
 29 
     | 
    
         
            +
                    base.extend(ClassMethods)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,95 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Elessar
         
     | 
| 
      
 4 
     | 
    
         
            +
              class ConnectionManager
         
     | 
| 
      
 5 
     | 
    
         
            +
                attr_reader :config
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                def initialize(config = Elessar.config)
         
     | 
| 
      
 8 
     | 
    
         
            +
                  @config = config
         
     | 
| 
      
 9 
     | 
    
         
            +
                  @active_connections = {}
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                def connection_for(uri)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  u = URI.parse(uri)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  connection = @active_connections[[u.host, u.port]]
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  if connection.nil?
         
     | 
| 
      
 17 
     | 
    
         
            +
                    connection = create_connection(u)
         
     | 
| 
      
 18 
     | 
    
         
            +
                    connection.start
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                    @active_connections[[u.host, u.port]] = connection
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                  connection
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                def authorization_headers
         
     | 
| 
      
 27 
     | 
    
         
            +
                  headers = {
         
     | 
| 
      
 28 
     | 
    
         
            +
                    "Authorization" => "Bearer #{Elessar.api_key}",
         
     | 
| 
      
 29 
     | 
    
         
            +
                    "Content-Type" => "application/json",
         
     | 
| 
      
 30 
     | 
    
         
            +
                  }
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                def execute_request(method, uri, body: nil, headers: {}, query:, &block)
         
     | 
| 
      
 34 
     | 
    
         
            +
                  raise ArgumentError, "method should be a symbol" unless method.is_a?(Symbol)
         
     | 
| 
      
 35 
     | 
    
         
            +
                  raise ArgumentError, "uri should be a string" unless uri.is_a?(String)
         
     | 
| 
      
 36 
     | 
    
         
            +
                  raise ArgumentError, "body should be a string" if body && !body.is_a?(String)
         
     | 
| 
      
 37 
     | 
    
         
            +
                  raise ArgumentError, "headers should be a hash" if headers && !headers.is_a?(Hash)
         
     | 
| 
      
 38 
     | 
    
         
            +
                  raise ArgumentError, "query should be a hash or string" if query && (!query.is_a?(Hash) and !query.is_a?(String))
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                  headers = headers.merge(authorization_headers)
         
     | 
| 
      
 41 
     | 
    
         
            +
                  uri = Elessar.api_base + uri
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                  connection = connection_for(uri)
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                  u = URI.parse(uri)
         
     | 
| 
      
 46 
     | 
    
         
            +
                  path = case query
         
     | 
| 
      
 47 
     | 
    
         
            +
                    when String
         
     | 
| 
      
 48 
     | 
    
         
            +
                      u.path + "?" + query
         
     | 
| 
      
 49 
     | 
    
         
            +
                    when Hash
         
     | 
| 
      
 50 
     | 
    
         
            +
                      u.path + "?" + URI.encode_www_form(query)
         
     | 
| 
      
 51 
     | 
    
         
            +
                    else
         
     | 
| 
      
 52 
     | 
    
         
            +
                      u.path
         
     | 
| 
      
 53 
     | 
    
         
            +
                    end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                  method_name = method.to_s.upcase
         
     | 
| 
      
 56 
     | 
    
         
            +
                  has_response_body = method_name != "HEAD"
         
     | 
| 
      
 57 
     | 
    
         
            +
                  request = Net::HTTPGenericRequest.new(
         
     | 
| 
      
 58 
     | 
    
         
            +
                    method_name,
         
     | 
| 
      
 59 
     | 
    
         
            +
                    (body ? true : false),
         
     | 
| 
      
 60 
     | 
    
         
            +
                    has_response_body,
         
     | 
| 
      
 61 
     | 
    
         
            +
                    path,
         
     | 
| 
      
 62 
     | 
    
         
            +
                    headers
         
     | 
| 
      
 63 
     | 
    
         
            +
                  )
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                  http_resp = begin
         
     | 
| 
      
 66 
     | 
    
         
            +
                      retries ||= 0
         
     | 
| 
      
 67 
     | 
    
         
            +
                      connection.request(request, body, &block)
         
     | 
| 
      
 68 
     | 
    
         
            +
                    rescue
         
     | 
| 
      
 69 
     | 
    
         
            +
                      retry if (retries += 1) < Elessar.max_network_retries
         
     | 
| 
      
 70 
     | 
    
         
            +
                    end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 73 
     | 
    
         
            +
                    resp = ElessarResponse.from_net_http(http_resp)
         
     | 
| 
      
 74 
     | 
    
         
            +
                  rescue JSON::ParserError
         
     | 
| 
      
 75 
     | 
    
         
            +
                    raise general_api_error(http_resp.code.to_i, http_resp.body)
         
     | 
| 
      
 76 
     | 
    
         
            +
                  end
         
     | 
| 
      
 77 
     | 
    
         
            +
                end
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                private def create_connection(uri)
         
     | 
| 
      
 80 
     | 
    
         
            +
                  connection = Net::HTTP.new(uri.host, uri.port)
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
                  connection.use_ssl = true
         
     | 
| 
      
 83 
     | 
    
         
            +
                  connection.keep_alive_timeout = 30
         
     | 
| 
      
 84 
     | 
    
         
            +
                  connection.open_timeout = config.open_timeout
         
     | 
| 
      
 85 
     | 
    
         
            +
                  connection.read_timeout = config.read_timeout
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                  connection
         
     | 
| 
      
 88 
     | 
    
         
            +
                end
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                private def general_api_error(status, body)
         
     | 
| 
      
 91 
     | 
    
         
            +
                  StandardError.new("Invalid response object from API: #{body.inspect} " \
         
     | 
| 
      
 92 
     | 
    
         
            +
                  "(HTTP response code was #{status})")
         
     | 
| 
      
 93 
     | 
    
         
            +
                end
         
     | 
| 
      
 94 
     | 
    
         
            +
              end
         
     | 
| 
      
 95 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,44 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Elessar
         
     | 
| 
      
 4 
     | 
    
         
            +
              class ElessarConfiguration
         
     | 
| 
      
 5 
     | 
    
         
            +
                attr_accessor :api_key
         
     | 
| 
      
 6 
     | 
    
         
            +
                attr_accessor :api_version
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                attr_reader :api_base
         
     | 
| 
      
 9 
     | 
    
         
            +
                attr_reader :max_network_retries
         
     | 
| 
      
 10 
     | 
    
         
            +
                attr_reader :open_timeout
         
     | 
| 
      
 11 
     | 
    
         
            +
                attr_reader :read_timeout
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                def self.setup
         
     | 
| 
      
 14 
     | 
    
         
            +
                  new.tap do |instance|
         
     | 
| 
      
 15 
     | 
    
         
            +
                    yield(instance) if block_given?
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                def initialize
         
     | 
| 
      
 20 
     | 
    
         
            +
                  @max_network_retries = 0
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                  @open_timeout = 30
         
     | 
| 
      
 23 
     | 
    
         
            +
                  @read_timeout = 80
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                  @api_base = "https://the-one-api.dev/v2/"
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                def max_network_retries=(val)
         
     | 
| 
      
 29 
     | 
    
         
            +
                  @max_network_retries = val.to_i
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                def open_timeout=(open_timeout)
         
     | 
| 
      
 33 
     | 
    
         
            +
                  @open_timeout = open_timeout
         
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                def read_timeout=(read_timeout)
         
     | 
| 
      
 37 
     | 
    
         
            +
                  @read_timeout = read_timeout
         
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                def api_base=(api_base)
         
     | 
| 
      
 41 
     | 
    
         
            +
                  @api_base = api_base
         
     | 
| 
      
 42 
     | 
    
         
            +
                end
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,45 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Elessar
         
     | 
| 
      
 4 
     | 
    
         
            +
              class ElessarResponseHeaders
         
     | 
| 
      
 5 
     | 
    
         
            +
                def self.from_net_http(resp)
         
     | 
| 
      
 6 
     | 
    
         
            +
                  new(resp.to_hash || resp.to_h)
         
     | 
| 
      
 7 
     | 
    
         
            +
                end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                def initialize(hash)
         
     | 
| 
      
 10 
     | 
    
         
            +
                  return if hash.nil?
         
     | 
| 
      
 11 
     | 
    
         
            +
                  @hash = {}
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  hash.each do |k, v|
         
     | 
| 
      
 14 
     | 
    
         
            +
                    @hash[k.downcase] = v
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              module ElessarResponseBase
         
     | 
| 
      
 20 
     | 
    
         
            +
                attr_accessor :http_headers
         
     | 
| 
      
 21 
     | 
    
         
            +
                attr_accessor :http_status
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                def self.populate_for_net_http(resp, http_resp)
         
     | 
| 
      
 24 
     | 
    
         
            +
                  resp.http_headers = ElessarResponseHeaders.from_net_http(http_resp)
         
     | 
| 
      
 25 
     | 
    
         
            +
                  resp.http_status = http_resp.code.to_i
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              class ElessarResponse
         
     | 
| 
      
 30 
     | 
    
         
            +
                include ElessarResponseBase
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                attr_accessor :data
         
     | 
| 
      
 33 
     | 
    
         
            +
                attr_accessor :http_body
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                def self.from_net_http(http_resp)
         
     | 
| 
      
 36 
     | 
    
         
            +
                  resp = ElessarResponse.new
         
     | 
| 
      
 37 
     | 
    
         
            +
                  resp.data = JSON.parse(http_resp.body, object_class: OpenStruct)
         
     | 
| 
      
 38 
     | 
    
         
            +
                  resp.http_body = http_resp.body
         
     | 
| 
      
 39 
     | 
    
         
            +
                  ElessarResponseBase.populate_for_net_http(resp, http_resp)
         
     | 
| 
      
 40 
     | 
    
         
            +
                  resp
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
              ElessarResponse::Headers = ElessarResponseHeaders
         
     | 
| 
      
 45 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,41 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Elessar
         
     | 
| 
      
 4 
     | 
    
         
            +
              class Movie
         
     | 
| 
      
 5 
     | 
    
         
            +
                include Elessar::APIOperations::Request
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                attr_accessor :id, :data
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                def initialize(id, data = {})
         
     | 
| 
      
 10 
     | 
    
         
            +
                  @id = id
         
     | 
| 
      
 11 
     | 
    
         
            +
                  @data = data
         
     | 
| 
      
 12 
     | 
    
         
            +
                end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                OBJECT_NAME = "movie"
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                def self.retrieve(id, opts = {})
         
     | 
| 
      
 17 
     | 
    
         
            +
                  url = resource_url + "/#{id}"
         
     | 
| 
      
 18 
     | 
    
         
            +
                  resp = request(:get, url, params = nil, opts = opts)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  new(id, resp.data)
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                def self.list(filters = { limit: 10 }, opts = {})
         
     | 
| 
      
 23 
     | 
    
         
            +
                  resp = request(:get, resource_url, params = filters, opts = opts)
         
     | 
| 
      
 24 
     | 
    
         
            +
                  new(nil, resp.data)
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                def list_quotes(filters = { limit: 10 }, opts = {})
         
     | 
| 
      
 28 
     | 
    
         
            +
                  url = "#{resource_url}/#{id}/quote"
         
     | 
| 
      
 29 
     | 
    
         
            +
                  resp = request(:get, url, params = filters, opts = opts)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  Elessar::Quote.new(nil, resp.data)
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                def self.resource_url
         
     | 
| 
      
 34 
     | 
    
         
            +
                  "#{OBJECT_NAME}"
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                def resource_url
         
     | 
| 
      
 38 
     | 
    
         
            +
                  "#{OBJECT_NAME}"
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
      
 40 
     | 
    
         
            +
              end
         
     | 
| 
      
 41 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,29 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Elessar
         
     | 
| 
      
 4 
     | 
    
         
            +
              class Quote
         
     | 
| 
      
 5 
     | 
    
         
            +
                include Elessar::APIOperations::Request
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                attr_accessor :id, :data
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                def initialize(id, data = {})
         
     | 
| 
      
 10 
     | 
    
         
            +
                  @id = id
         
     | 
| 
      
 11 
     | 
    
         
            +
                  @data = data
         
     | 
| 
      
 12 
     | 
    
         
            +
                end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                OBJECT_NAME = "quote"
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                def self.list(filters = { limit: 10 }, opts = {})
         
     | 
| 
      
 17 
     | 
    
         
            +
                  resp = request(:get, resource_url, params = filters, opts = opts)
         
     | 
| 
      
 18 
     | 
    
         
            +
                  new(nil, resp.data)
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                def self.resource_url
         
     | 
| 
      
 22 
     | 
    
         
            +
                  "#{OBJECT_NAME}"
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                def resource_url
         
     | 
| 
      
 26 
     | 
    
         
            +
                  "#{OBJECT_NAME}"
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/elessar.rb
    ADDED
    
    | 
         @@ -0,0 +1,29 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "net/http"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require "json"
         
     | 
| 
      
 3 
     | 
    
         
            +
            require "forwardable"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            # API operations
         
     | 
| 
      
 6 
     | 
    
         
            +
            require "elessar/api_operations/request"
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            require "elessar/elessar_configuration"
         
     | 
| 
      
 9 
     | 
    
         
            +
            require "elessar/connection_manager"
         
     | 
| 
      
 10 
     | 
    
         
            +
            require "elessar/elessar_response"
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            require "elessar/resources"
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            module Elessar
         
     | 
| 
      
 15 
     | 
    
         
            +
              @config = Elessar::ElessarConfiguration.setup
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              class << self
         
     | 
| 
      
 18 
     | 
    
         
            +
                extend Forwardable
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                attr_reader :config
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                def_delegators :@config, :api_key, :api_key=
         
     | 
| 
      
 23 
     | 
    
         
            +
                def_delegators :@config, :api_version, :api_version=
         
     | 
| 
      
 24 
     | 
    
         
            +
                def_delegators :@config, :api_base, :api_base=
         
     | 
| 
      
 25 
     | 
    
         
            +
                def_delegators :@config, :open_timeout, :open_timeout=
         
     | 
| 
      
 26 
     | 
    
         
            +
                def_delegators :@config, :read_timeout, :read_timeout=
         
     | 
| 
      
 27 
     | 
    
         
            +
                def_delegators :@config, :max_network_retries, :max_network_retries=
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,60 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification
         
     | 
| 
      
 2 
     | 
    
         
            +
            name: elessar
         
     | 
| 
      
 3 
     | 
    
         
            +
            version: !ruby/object:Gem::Version
         
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.1
         
     | 
| 
      
 5 
     | 
    
         
            +
            platform: ruby
         
     | 
| 
      
 6 
     | 
    
         
            +
            authors:
         
     | 
| 
      
 7 
     | 
    
         
            +
            - Murilo Zaffalon
         
     | 
| 
      
 8 
     | 
    
         
            +
            autorequire:
         
     | 
| 
      
 9 
     | 
    
         
            +
            bindir: bin
         
     | 
| 
      
 10 
     | 
    
         
            +
            cert_chain: []
         
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2023-03-05 00:00:00.000000000 Z
         
     | 
| 
      
 12 
     | 
    
         
            +
            dependencies: []
         
     | 
| 
      
 13 
     | 
    
         
            +
            description: A simple SDK for Murilo Zaffalon, Elessar - In the book, Elessar is a
         
     | 
| 
      
 14 
     | 
    
         
            +
              green gemstone that is a symbol of the kingship of Gondor.
         
     | 
| 
      
 15 
     | 
    
         
            +
            email: mzaffalon@hotmail.com
         
     | 
| 
      
 16 
     | 
    
         
            +
            executables:
         
     | 
| 
      
 17 
     | 
    
         
            +
            - sdk-console
         
     | 
| 
      
 18 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 19 
     | 
    
         
            +
            extra_rdoc_files: []
         
     | 
| 
      
 20 
     | 
    
         
            +
            files:
         
     | 
| 
      
 21 
     | 
    
         
            +
            - Gemfile.lock
         
     | 
| 
      
 22 
     | 
    
         
            +
            - README.md
         
     | 
| 
      
 23 
     | 
    
         
            +
            - Rakefile
         
     | 
| 
      
 24 
     | 
    
         
            +
            - bin/sdk-console
         
     | 
| 
      
 25 
     | 
    
         
            +
            - designer.md
         
     | 
| 
      
 26 
     | 
    
         
            +
            - elessar.gemspec
         
     | 
| 
      
 27 
     | 
    
         
            +
            - gemfile
         
     | 
| 
      
 28 
     | 
    
         
            +
            - lib/.DS_Store
         
     | 
| 
      
 29 
     | 
    
         
            +
            - lib/elessar.rb
         
     | 
| 
      
 30 
     | 
    
         
            +
            - lib/elessar/.DS_Store
         
     | 
| 
      
 31 
     | 
    
         
            +
            - lib/elessar/api_operations/request.rb
         
     | 
| 
      
 32 
     | 
    
         
            +
            - lib/elessar/connection_manager.rb
         
     | 
| 
      
 33 
     | 
    
         
            +
            - lib/elessar/elessar_configuration.rb
         
     | 
| 
      
 34 
     | 
    
         
            +
            - lib/elessar/elessar_response.rb
         
     | 
| 
      
 35 
     | 
    
         
            +
            - lib/elessar/resources.rb
         
     | 
| 
      
 36 
     | 
    
         
            +
            - lib/elessar/resources/movie.rb
         
     | 
| 
      
 37 
     | 
    
         
            +
            - lib/elessar/resources/quote.rb
         
     | 
| 
      
 38 
     | 
    
         
            +
            homepage: http://rubygems.org/gems/elessar
         
     | 
| 
      
 39 
     | 
    
         
            +
            licenses: []
         
     | 
| 
      
 40 
     | 
    
         
            +
            metadata: {}
         
     | 
| 
      
 41 
     | 
    
         
            +
            post_install_message:
         
     | 
| 
      
 42 
     | 
    
         
            +
            rdoc_options: []
         
     | 
| 
      
 43 
     | 
    
         
            +
            require_paths:
         
     | 
| 
      
 44 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 45 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 46 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 47 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 48 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 49 
     | 
    
         
            +
                  version: 2.3.0
         
     | 
| 
      
 50 
     | 
    
         
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 51 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 52 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 53 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 54 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 55 
     | 
    
         
            +
            requirements: []
         
     | 
| 
      
 56 
     | 
    
         
            +
            rubygems_version: 3.2.3
         
     | 
| 
      
 57 
     | 
    
         
            +
            signing_key:
         
     | 
| 
      
 58 
     | 
    
         
            +
            specification_version: 4
         
     | 
| 
      
 59 
     | 
    
         
            +
            summary: Murilo Zaffalon SDK!
         
     | 
| 
      
 60 
     | 
    
         
            +
            test_files: []
         
     |