render_json_rails 0.1.3 → 0.1.8
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 +4 -4
- data/README.md +86 -24
- data/Rakefile +2 -0
- data/lib/render_json_rails/concern.rb +45 -22
- data/lib/render_json_rails/helper.rb +2 -2
- data/lib/render_json_rails/version.rb +1 -1
- data/render_json_rails.gemspec +5 -3
- metadata +34 -6
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: eb405a241676a116ccdac4592f94dc5c594ecc9e2ef57e143abac35a0c16a8da
         | 
| 4 | 
            +
              data.tar.gz: c5b19f1919ded93a0284f7840318db2e3ed6348398b564a52ff10e66eb2289ee
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 942b07e300001cf70c9295e0dff798277f4b846871acedc9c255109c314983d3882cf34a47be445f6181675d1897de65502af8c07e7bf14066fba30b4632c560
         | 
| 7 | 
            +
              data.tar.gz: 3d2e700f497789a001860b17794f5441598237f28dbe4178fd021dcca65a448eb3f9786d799224639943cb02293b0644f62e7870c5fb556603ab889b0d7d4ecc
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,51 +1,113 @@ | |
| 1 1 | 
             
            # RenderJsonRails
         | 
| 2 2 |  | 
| 3 | 
            -
             | 
| 3 | 
            +
            RenderJsonRails pozwala w łatwy sposób dodać możliwość renderowania JSON z ActiveRecord-ów z zależnościami (has_many itp).
         | 
| 4 | 
            +
            Dzięki temu łatwo jest stworzyć backend Json API np. do pracy z Reactem lub Vue.js
         | 
| 4 5 |  | 
| 5 | 
            -
             | 
| 6 | 
            +
            ## Przykład
         | 
| 6 7 |  | 
| 7 | 
            -
             | 
| 8 | 
            +
            ```ruby
         | 
| 8 9 |  | 
| 9 | 
            -
             | 
| 10 | 
            +
            class Team < ActiveRecord::Base
         | 
| 11 | 
            +
              has_many :users
         | 
| 10 12 |  | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            +
              include RenderJsonRails::Concern
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              render_json_config name: :team,
         | 
| 16 | 
            +
                                 includes: {
         | 
| 17 | 
            +
                                   users: User
         | 
| 18 | 
            +
                                 }
         | 
| 19 | 
            +
            end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            class User < ActiveRecord::Base
         | 
| 22 | 
            +
              belongs_to :team
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              include RenderJsonRails::Concern
         | 
| 13 25 |  | 
| 14 | 
            -
             | 
| 26 | 
            +
              render_json_config name: :user,
         | 
| 27 | 
            +
                                 except: [:account_id, :id],
         | 
| 28 | 
            +
                                 default_fields: [:login, :email, :calculated_age],
         | 
| 29 | 
            +
                                 allowed_methods: [:calculated_age],
         | 
| 30 | 
            +
                                 includes: {
         | 
| 31 | 
            +
                                   team: Team
         | 
| 32 | 
            +
                                 }
         | 
| 15 33 |  | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 34 | 
            +
              def calculated_age
         | 
| 35 | 
            +
                rand(100)
         | 
| 36 | 
            +
              end
         | 
| 18 37 | 
             
            end
         | 
| 19 38 | 
             
            ```
         | 
| 20 39 |  | 
| 21 | 
            -
             | 
| 40 | 
            +
            Dodajemy też w kontrolerze ```teams_controller.rb```
         | 
| 22 41 |  | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 42 | 
            +
            ```ruby
         | 
| 43 | 
            +
              include RenderJsonRails::Helper
         | 
| 44 | 
            +
             | 
| 45 | 
            +
              def index
         | 
| 46 | 
            +
                @team = Team.all
         | 
| 47 | 
            +
                respond_to do |format|
         | 
| 48 | 
            +
                  format.html
         | 
| 49 | 
            +
                  format.json { render_json @team }
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
              end
         | 
| 52 | 
            +
            ```
         | 
| 26 53 |  | 
| 27 | 
            -
             | 
| 54 | 
            +
            i możemy już otrzymać JSON team-u wraz z userami
         | 
| 28 55 |  | 
| 29 | 
            -
             | 
| 56 | 
            +
            ```html
         | 
| 57 | 
            +
            http://example.test/teams/1.json?include=users
         | 
| 58 | 
            +
            ```
         | 
| 30 59 |  | 
| 31 | 
            -
             | 
| 60 | 
            +
            możemy też określić jakie pola mają być w json
         | 
| 32 61 |  | 
| 33 | 
            -
             | 
| 62 | 
            +
            ```html
         | 
| 63 | 
            +
            http://example.test/teams/1.json?fields[team]=name,description
         | 
| 64 | 
            +
            ```
         | 
| 34 65 |  | 
| 35 | 
            -
             | 
| 66 | 
            +
            i możemy łączyć to z include
         | 
| 36 67 |  | 
| 37 | 
            -
             | 
| 68 | 
            +
            ```html
         | 
| 69 | 
            +
            http://example.text/teams/1.json?fields[team]=name,description&fields[user]=email,name&include=users
         | 
| 70 | 
            +
            ```
         | 
| 38 71 |  | 
| 39 | 
            -
            ##  | 
| 72 | 
            +
            ## Pełny opis ```render_json_config```
         | 
| 40 73 |  | 
| 41 | 
            -
             | 
| 74 | 
            +
            ```ruby
         | 
| 75 | 
            +
            render_json_config name: :team,
         | 
| 76 | 
            +
              except: [:account_id, :config], # tych pól nie będzie w json-ie
         | 
| 77 | 
            +
              only: [:id, :name], # tylko te pola będą w jsonie (wymiennie z except)
         | 
| 78 | 
            +
              default_fields: [:id, :name, :members], # domyślnie wyświetlone pola + metody
         | 
| 79 | 
            +
              methods: [:image], # ten parametr warto uzywac tylko, gdy nie ma parametru "default_fields" - przy ustawionym "default_fields" trzeba metody wymienic w allowed_methods
         | 
| 80 | 
            +
              allowed_methods: [:members], # te metody mogą być dodane przez parametr fileds np: fields[team]=id,members
         | 
| 81 | 
            +
              includes: { # to mozna dołączać za pomoca parametru include np include=users,category
         | 
| 82 | 
            +
               users: Users,
         | 
| 83 | 
            +
               category: Category
         | 
| 84 | 
            +
              }
         | 
| 85 | 
            +
            ```
         | 
| 42 86 |  | 
| 87 | 
            +
            ## Installation
         | 
| 43 88 |  | 
| 44 | 
            -
             | 
| 89 | 
            +
            Add this line to your application's Gemfile:
         | 
| 45 90 |  | 
| 91 | 
            +
            ```ruby
         | 
| 92 | 
            +
            gem 'render_json_rails'
         | 
| 46 93 | 
             
            ```
         | 
| 47 | 
            -
            gem build render_json_rails.gemspec
         | 
| 48 94 |  | 
| 49 | 
            -
             | 
| 95 | 
            +
            And then execute:
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                $ bundle install
         | 
| 98 | 
            +
             | 
| 99 | 
            +
            Or install it yourself as:
         | 
| 100 | 
            +
             | 
| 101 | 
            +
                $ gem install render_json_rails
         | 
| 102 | 
            +
             | 
| 103 | 
            +
            ## Tests
         | 
| 104 | 
            +
             | 
| 105 | 
            +
            ```
         | 
| 106 | 
            +
            rake test
         | 
| 50 107 | 
             
            ```
         | 
| 51 108 |  | 
| 109 | 
            +
             | 
| 110 | 
            +
            ## Contributing
         | 
| 111 | 
            +
             | 
| 112 | 
            +
            Bug reports and pull requests are welcome on GitHub at https://github.com/intum/render_json_rails.
         | 
| 113 | 
            +
             | 
    
        data/Rakefile
    CHANGED
    
    
| @@ -17,20 +17,27 @@ module RenderJsonRails | |
| 17 17 | 
             
                  #  zostaną one wyświelone w json-ie
         | 
| 18 18 | 
             
                  # TODO:
         | 
| 19 19 | 
             
                  # [ ] spradzanie czy parametry "fields" i "include" sa ok i jesli nie to error
         | 
| 20 | 
            -
                  def default_json_options(name:, fields: nil, except: nil, methods: nil, allowed_methods: nil)
         | 
| 20 | 
            +
                  def default_json_options(name:, fields: nil, only: nil, except: nil, methods: nil, allowed_methods: nil)
         | 
| 21 21 | 
             
                    # name ||= self.name.underscore.gsub('/', '_')
         | 
| 22 22 | 
             
                    # raise self.name.underscore.gsub('/', '_')
         | 
| 23 | 
            -
                    except ||= [:account_id, :agent, :ip]
         | 
| 23 | 
            +
                    # except ||= [:account_id, :agent, :ip]
         | 
| 24 24 |  | 
| 25 25 | 
             
                    options = {}
         | 
| 26 26 | 
             
                    if fields && fields[name].present?
         | 
| 27 | 
            -
                      options[:only] = fields[name].split(',').find_all{ |el| !except | 
| 28 | 
            -
                       | 
| 27 | 
            +
                      options[:only] = fields[name].split(',').map{ |e| e.to_s.strip.to_sym }.find_all { |el| !except&.include?(el) }
         | 
| 28 | 
            +
                      if only.present?
         | 
| 29 | 
            +
                        options[:only] = options[:only].find_all { |el| only.include?(el) || allowed_methods&.include?(el) || methods&.include?(el) }
         | 
| 30 | 
            +
                      end
         | 
| 31 | 
            +
                      options[:methods] = methods&.find_all { |el| options[:only].include?(el) }
         | 
| 29 32 | 
             
                      if allowed_methods
         | 
| 30 | 
            -
                        options[:methods] = (options[:methods] || []) | allowed_methods.find_all{ |el| options[:only].include?(el | 
| 33 | 
            +
                        options[:methods] = (options[:methods] || []) | allowed_methods.find_all { |el| options[:only].include?(el) }
         | 
| 34 | 
            +
                      end
         | 
| 35 | 
            +
                      if options[:methods].present? && options[:only].present?
         | 
| 36 | 
            +
                        options[:methods].each { |method| options[:only].delete(method) }
         | 
| 31 37 | 
             
                      end
         | 
| 32 38 | 
             
                    else
         | 
| 33 39 | 
             
                      options[:except] = except
         | 
| 40 | 
            +
                      options[:only] = only if only.present?
         | 
| 34 41 | 
             
                      options[:methods] = methods
         | 
| 35 42 | 
             
                    end
         | 
| 36 43 | 
             
                    options
         | 
| @@ -38,16 +45,22 @@ module RenderJsonRails | |
| 38 45 |  | 
| 39 46 | 
             
                  def render_json_config(config)
         | 
| 40 47 | 
             
                    @render_json_config = config
         | 
| 41 | 
            -
                    # @render_json_config[:methods] = [:image]
         | 
| 42 48 | 
             
                  end
         | 
| 43 49 |  | 
| 44 | 
            -
                  # rubocop:disable Lint/UnusedMethodArgument
         | 
| 45 50 | 
             
                  def render_json_options(includes: nil, fields: nil, additional_config: nil)
         | 
| 46 51 | 
             
                    raise "należy skonfigurowac render_json metodą: render_json_config" if !defined?(@render_json_config)
         | 
| 47 52 |  | 
| 53 | 
            +
                    name = @render_json_config[:name].to_s
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                    if (fields.blank? || fields[name].blank?) && @render_json_config[:default_fields].present?
         | 
| 56 | 
            +
                      fields ||= {}
         | 
| 57 | 
            +
                      fields[name] = @render_json_config[:default_fields].join(',')
         | 
| 58 | 
            +
                    end
         | 
| 59 | 
            +
             | 
| 48 60 | 
             
                    options = default_json_options(
         | 
| 49 | 
            -
                      name:  | 
| 61 | 
            +
                      name: name,
         | 
| 50 62 | 
             
                      fields: fields,
         | 
| 63 | 
            +
                      only: @render_json_config[:only],
         | 
| 51 64 | 
             
                      except: @render_json_config[:except],
         | 
| 52 65 | 
             
                      methods: @render_json_config[:methods],
         | 
| 53 66 | 
             
                      allowed_methods: @render_json_config[:allowed_methods]
         | 
| @@ -58,29 +71,22 @@ module RenderJsonRails | |
| 58 71 | 
             
                      @render_json_config[:includes].each do |name, klass|
         | 
| 59 72 | 
             
                        if includes.include?(name.to_s)
         | 
| 60 73 | 
             
                          includes2 = RenderJsonRails::Concern.includes_for_model(includes: includes, model: name.to_s)
         | 
| 61 | 
            -
                          # raise includes2.inspect + ' ' + includes.inspect
         | 
| 62 74 | 
             
                          include_options << { name => klass.render_json_options(includes: includes2, fields: fields) }
         | 
| 63 75 | 
             
                        end
         | 
| 64 76 | 
             
                      end if @render_json_config[:includes]
         | 
| 65 77 |  | 
| 66 | 
            -
                      # if includes.include?('questions')
         | 
| 67 | 
            -
                      #   includes2 = RenderJsonRails::Concern.includes_for_model(includes: includes, model: 'questions')
         | 
| 68 | 
            -
                      #   # raise includes2.inspect + ' ' + includes.inspect
         | 
| 69 | 
            -
                      #   include_options << { questions: Organize::Question.render_json_options(includes: includes2, fields: fields) }
         | 
| 70 | 
            -
                      # end
         | 
| 71 78 | 
             
                      options[:include] = include_options
         | 
| 72 79 | 
             
                    end
         | 
| 73 80 |  | 
| 74 | 
            -
                    options
         | 
| 75 | 
            -
                  end # render_json_options
         | 
| 76 | 
            -
                  # rubocop:enable Lint/UnusedMethodArgument
         | 
| 81 | 
            +
                    options = RenderJsonRails::Concern.deep_meld(options, additional_config) if additional_config
         | 
| 77 82 |  | 
| 83 | 
            +
                    options.delete(:methods) if options[:methods].blank?
         | 
| 78 84 |  | 
| 85 | 
            +
                    options
         | 
| 86 | 
            +
                  end # render_json_options
         | 
| 79 87 | 
             
                end # class_methods
         | 
| 80 88 |  | 
| 81 89 | 
             
                def self.includes_for_model(includes:, model:)
         | 
| 82 | 
            -
                  # include.split(',')
         | 
| 83 | 
            -
                  # includes.delete(to_remove)
         | 
| 84 90 | 
             
                  includes = includes.map do |el|
         | 
| 85 91 | 
             
                    if el.start_with?(model + '.')
         | 
| 86 92 | 
             
                      el = el.gsub(/^#{model}\./, '')
         | 
| @@ -88,8 +94,25 @@ module RenderJsonRails | |
| 88 94 | 
             
                      el = nil
         | 
| 89 95 | 
             
                    end
         | 
| 90 96 | 
             
                  end
         | 
| 91 | 
            -
                  includes.find_all{ |el| el.present? }
         | 
| 92 | 
            -
             | 
| 97 | 
            +
                  includes.find_all { |el| el.present? }
         | 
| 98 | 
            +
                end
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                private
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                def self.deep_meld(h1, h2)
         | 
| 103 | 
            +
                  h1.deep_merge(h2) do |key, this_val, other_val|
         | 
| 104 | 
            +
                    if this_val != nil && other_val == nil
         | 
| 105 | 
            +
                      this_val
         | 
| 106 | 
            +
                    elsif this_val == nil && other_val != nil
         | 
| 107 | 
            +
                      other_val
         | 
| 108 | 
            +
                    elsif this_val.is_a?(Array) && other_val.is_a?(Array)
         | 
| 109 | 
            +
                      this_val | other_val
         | 
| 110 | 
            +
                    elsif this_val.is_a?(Hash) && other_val.is_a?(Hash)
         | 
| 111 | 
            +
                      deep_meld(this_val, other_val)
         | 
| 112 | 
            +
                    else
         | 
| 113 | 
            +
                      [this_val, other_val]
         | 
| 114 | 
            +
                    end
         | 
| 115 | 
            +
                  end
         | 
| 93 116 | 
             
                end
         | 
| 94 117 | 
             
              end
         | 
| 95 | 
            -
            end
         | 
| 118 | 
            +
            end
         | 
| @@ -27,7 +27,7 @@ module RenderJsonRails | |
| 27 27 | 
             
                  else
         | 
| 28 28 | 
             
                    class_object = object.class
         | 
| 29 29 | 
             
                  end
         | 
| 30 | 
            -
                  includes = params[:include].to_s.split(',').map{ |el| el.to_s.strip } if params[:include]
         | 
| 30 | 
            +
                  includes = params[:include].to_s.split(',').map { |el| el.to_s.strip } if params[:include]
         | 
| 31 31 | 
             
                  options = class_object.render_json_options(
         | 
| 32 32 | 
             
                    includes: includes,
         | 
| 33 33 | 
             
                    fields: params[:fields],
         | 
| @@ -44,4 +44,4 @@ module RenderJsonRails | |
| 44 44 | 
             
                  end
         | 
| 45 45 | 
             
                end
         | 
| 46 46 | 
             
              end
         | 
| 47 | 
            -
            end
         | 
| 47 | 
            +
            end
         | 
    
        data/render_json_rails.gemspec
    CHANGED
    
    | @@ -7,9 +7,9 @@ Gem::Specification.new do |spec| | |
| 7 7 | 
             
              spec.authors       = ["Marcin"]
         | 
| 8 8 | 
             
              spec.email         = ["marcin@radgost.com"]
         | 
| 9 9 |  | 
| 10 | 
            -
              spec.summary       = "Simle JSON render like JonApi"
         | 
| 10 | 
            +
              spec.summary       = "Simle JSON API render like JonApi"
         | 
| 11 11 | 
             
              spec.description   = "render json with 'includes' and 'fields' with simple config"
         | 
| 12 | 
            -
              spec.homepage      = "https:// | 
| 12 | 
            +
              spec.homepage      = "https://github.com/intum/render_json_rails"
         | 
| 13 13 | 
             
              spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
         | 
| 14 14 |  | 
| 15 15 | 
             
              # spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
         | 
| @@ -20,10 +20,12 @@ Gem::Specification.new do |spec| | |
| 20 20 |  | 
| 21 21 | 
             
              # Specify which files should be added to the gem when it is released.
         | 
| 22 22 | 
             
              # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
         | 
| 23 | 
            -
              spec.files | 
| 23 | 
            +
              spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
         | 
| 24 24 | 
             
                `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
         | 
| 25 25 | 
             
              end
         | 
| 26 26 | 
             
              spec.bindir        = "exe"
         | 
| 27 27 | 
             
              spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
         | 
| 28 28 | 
             
              spec.require_paths = ["lib"]
         | 
| 29 | 
            +
              spec.add_development_dependency "activesupport"
         | 
| 30 | 
            +
              spec.add_development_dependency "byebug"
         | 
| 29 31 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,15 +1,43 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: render_json_rails
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.8
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Marcin
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2020- | 
| 12 | 
            -
            dependencies: | 
| 11 | 
            +
            date: 2020-10-20 00:00:00.000000000 Z
         | 
| 12 | 
            +
            dependencies:
         | 
| 13 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            +
              name: activesupport
         | 
| 15 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            +
                requirements:
         | 
| 17 | 
            +
                - - ">="
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: '0'
         | 
| 20 | 
            +
              type: :development
         | 
| 21 | 
            +
              prerelease: false
         | 
| 22 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 | 
            +
                requirements:
         | 
| 24 | 
            +
                - - ">="
         | 
| 25 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            +
                    version: '0'
         | 
| 27 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            +
              name: byebug
         | 
| 29 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 | 
            +
                requirements:
         | 
| 31 | 
            +
                - - ">="
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            +
                    version: '0'
         | 
| 34 | 
            +
              type: :development
         | 
| 35 | 
            +
              prerelease: false
         | 
| 36 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 | 
            +
                requirements:
         | 
| 38 | 
            +
                - - ">="
         | 
| 39 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            +
                    version: '0'
         | 
| 13 41 | 
             
            description: render json with 'includes' and 'fields' with simple config
         | 
| 14 42 | 
             
            email:
         | 
| 15 43 | 
             
            - marcin@radgost.com
         | 
| @@ -29,7 +57,7 @@ files: | |
| 29 57 | 
             
            - lib/render_json_rails/helper.rb
         | 
| 30 58 | 
             
            - lib/render_json_rails/version.rb
         | 
| 31 59 | 
             
            - render_json_rails.gemspec
         | 
| 32 | 
            -
            homepage: https:// | 
| 60 | 
            +
            homepage: https://github.com/intum/render_json_rails
         | 
| 33 61 | 
             
            licenses:
         | 
| 34 62 | 
             
            - MIT
         | 
| 35 63 | 
             
            metadata: {}
         | 
| @@ -48,8 +76,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 48 76 | 
             
                - !ruby/object:Gem::Version
         | 
| 49 77 | 
             
                  version: '0'
         | 
| 50 78 | 
             
            requirements: []
         | 
| 51 | 
            -
            rubygems_version: 3. | 
| 79 | 
            +
            rubygems_version: 3.0.3
         | 
| 52 80 | 
             
            signing_key: 
         | 
| 53 81 | 
             
            specification_version: 4
         | 
| 54 | 
            -
            summary: Simle JSON render like JonApi
         | 
| 82 | 
            +
            summary: Simle JSON API render like JonApi
         | 
| 55 83 | 
             
            test_files: []
         |