app_manifest 0.2.1 → 0.3.0
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/CHANGELOG.md +16 -0
- data/app_manifest.gemspec +1 -0
- data/lib/app_manifest.rb +9 -0
- data/lib/app_manifest/addon.rb +10 -0
- data/lib/app_manifest/buildpack.rb +8 -0
- data/lib/app_manifest/env.rb +11 -0
- data/lib/app_manifest/environment.rb +7 -0
- data/lib/app_manifest/environment_attributes.rb +21 -0
- data/lib/app_manifest/formation.rb +9 -0
- data/lib/app_manifest/manifest.rb +12 -12
- data/lib/app_manifest/nullable_array.rb +13 -0
- data/lib/app_manifest/serializer.rb +29 -0
- data/lib/app_manifest/version.rb +1 -1
- metadata +24 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 98e7fd7a9df5650e85261c7075ba606fee8577a3
         | 
| 4 | 
            +
              data.tar.gz: d05a3fc7de5170ee6382f374bf11bbe00cc7d23d
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 52af724010c244dfa20b5f17ce50f109089acc3e0189ce268ce3391ba781a39a0ece6639aa224ebb6936a801e07ab02fa6538c3097426996f01a1e20fc1a542e
         | 
| 7 | 
            +
              data.tar.gz: 695439ffdb68a4a023ed50e8ce522a87275f37cc41bb834e647d4151995d49c021c1746aefee6a52a2a0ec0fb317d4380655800a7adb0d5c450a40d4911c5065
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -7,6 +7,22 @@ and this project adheres to [Semantic Versioning](http://semver.org/). | |
| 7 7 |  | 
| 8 8 | 
             
            ## Unreleased
         | 
| 9 9 |  | 
| 10 | 
            +
            ## [0.3.0] - 2017-06-18
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            ### Added
         | 
| 13 | 
            +
            - Manifests are now fully modeled. There are now getters and setters for
         | 
| 14 | 
            +
              nested data (for example: `manifest.addons.first.plan`).
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            ### Changed
         | 
| 17 | 
            +
            - `Manifest#to_hash` now returns a hash for the current manifest state, rather
         | 
| 18 | 
            +
              than the hash that was passed in.
         | 
| 19 | 
            +
            - `Manifest#environment` now returns an `Environment` instance, as a result,
         | 
| 20 | 
            +
              it's serialization will not include nested `environments` data.
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            ### Removed
         | 
| 23 | 
            +
            - `Manifest#manifest` was removed as it was superfluous and potentially 
         | 
| 24 | 
            +
              confusing. `Manifest#to_hash` may be a suitable replacement.
         | 
| 25 | 
            +
             | 
| 10 26 | 
             
            ## [0.2.1] - 2017-04-04
         | 
| 11 27 | 
             
            ### Fixed
         | 
| 12 28 | 
             
            - Prevent `NoMethodError on TrueClass` when a `true` or `false` environment variable is provided.
         | 
    
        data/app_manifest.gemspec
    CHANGED
    
    
    
        data/lib/app_manifest.rb
    CHANGED
    
    | @@ -1,6 +1,15 @@ | |
| 1 1 | 
             
            require 'multi_json'
         | 
| 2 | 
            +
            require 'virtus'
         | 
| 2 3 |  | 
| 3 4 | 
             
            require "app_manifest/version"
         | 
| 5 | 
            +
            require "app_manifest/nullable_array"
         | 
| 6 | 
            +
            require "app_manifest/serializer"
         | 
| 7 | 
            +
            require "app_manifest/addon"
         | 
| 8 | 
            +
            require "app_manifest/buildpack"
         | 
| 9 | 
            +
            require "app_manifest/env"
         | 
| 10 | 
            +
            require "app_manifest/formation"
         | 
| 11 | 
            +
            require "app_manifest/environment_attributes"
         | 
| 12 | 
            +
            require "app_manifest/environment"
         | 
| 4 13 | 
             
            require "app_manifest/manifest"
         | 
| 5 14 |  | 
| 6 15 | 
             
            # Create a new manifest from json string or a hash
         | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            module AppManifest
         | 
| 2 | 
            +
              # Setup attributes that are shared on Manifest and Environment models
         | 
| 3 | 
            +
              module EnvironmentAttributes
         | 
| 4 | 
            +
                def self.included(base)
         | 
| 5 | 
            +
                  base.attribute :addons,      NullableArray[Addon]
         | 
| 6 | 
            +
                  base.attribute :buildpacks,  NullableArray[Buildpack]
         | 
| 7 | 
            +
                  base.attribute :description, String
         | 
| 8 | 
            +
                  base.attribute :env,         Hash[String => Env],       default: nil
         | 
| 9 | 
            +
                  base.attribute :formation,   Hash[String => Formation], default: nil
         | 
| 10 | 
            +
                  base.attribute :image,       String
         | 
| 11 | 
            +
                  base.attribute :keywords,    NullableArray[String]
         | 
| 12 | 
            +
                  base.attribute :logo,        String
         | 
| 13 | 
            +
                  base.attribute :name,        String
         | 
| 14 | 
            +
                  base.attribute :repository,  String
         | 
| 15 | 
            +
                  base.attribute :scripts,     Hash[String => String],    default: nil
         | 
| 16 | 
            +
                  base.attribute :stack,       String
         | 
| 17 | 
            +
                  base.attribute :success_url, String
         | 
| 18 | 
            +
                  base.attribute :website,     String
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
            end
         | 
| @@ -1,26 +1,26 @@ | |
| 1 1 | 
             
            module AppManifest
         | 
| 2 2 | 
             
              # A simple model-like wrapper around a manifest hash.
         | 
| 3 3 | 
             
              class Manifest
         | 
| 4 | 
            +
                include Virtus.model
         | 
| 5 | 
            +
                include EnvironmentAttributes
         | 
| 6 | 
            +
                include Serializer
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                attribute :environments, Hash[String => Environment], default: nil
         | 
| 9 | 
            +
             | 
| 4 10 | 
             
                def self.from_json(string)
         | 
| 5 11 | 
             
                  hash = MultiJson.load(string)
         | 
| 6 | 
            -
                   | 
| 12 | 
            +
                  new(hash)
         | 
| 7 13 | 
             
                end
         | 
| 8 14 |  | 
| 9 15 | 
             
                def initialize(hash)
         | 
| 10 | 
            -
                   | 
| 16 | 
            +
                  canonicalized = AppManifest.canonicalize(hash)
         | 
| 17 | 
            +
                  super(canonicalized)
         | 
| 11 18 | 
             
                end
         | 
| 12 19 |  | 
| 13 20 | 
             
                def environment(name)
         | 
| 14 | 
            -
                   | 
| 15 | 
            -
                   | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
                def to_hash
         | 
| 19 | 
            -
                  manifest
         | 
| 21 | 
            +
                  scoped_data = (environments || {}).fetch(name.to_s, {}).to_hash
         | 
| 22 | 
            +
                  global_data = to_hash
         | 
| 23 | 
            +
                  Environment.new(global_data.merge(scoped_data))
         | 
| 20 24 | 
             
                end
         | 
| 21 | 
            -
             | 
| 22 | 
            -
                private
         | 
| 23 | 
            -
             | 
| 24 | 
            -
                attr_reader :manifest
         | 
| 25 25 | 
             
              end
         | 
| 26 26 | 
             
            end
         | 
| @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            module AppManifest
         | 
| 2 | 
            +
              # Serialization logic for AppManifest models
         | 
| 3 | 
            +
              module Serializer
         | 
| 4 | 
            +
                def self.serialize(value)
         | 
| 5 | 
            +
                  case value
         | 
| 6 | 
            +
                  when Array
         | 
| 7 | 
            +
                    value.map { |v| serialize(v) }
         | 
| 8 | 
            +
                  when Hash
         | 
| 9 | 
            +
                    value.each_with_object({}) do |(k, v), h|
         | 
| 10 | 
            +
                      h[k] = serialize(v)
         | 
| 11 | 
            +
                    end
         | 
| 12 | 
            +
                  when Integer, Float, String, Symbol, TrueClass, FalseClass, NilClass
         | 
| 13 | 
            +
                    value
         | 
| 14 | 
            +
                  else
         | 
| 15 | 
            +
                    if value.respond_to?(:attributes)
         | 
| 16 | 
            +
                      value.attributes.each_with_object({}) do |(key, val), hash|
         | 
| 17 | 
            +
                        hash[key] = serialize(val) unless val.nil?
         | 
| 18 | 
            +
                      end
         | 
| 19 | 
            +
                    else
         | 
| 20 | 
            +
                      val.to_s
         | 
| 21 | 
            +
                    end
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                def to_hash
         | 
| 26 | 
            +
                  Serializer.serialize(self)
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
            end
         | 
    
        data/lib/app_manifest/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: app_manifest
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.3.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Owen Jacobson
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: exe
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2017- | 
| 12 | 
            +
            date: 2017-07-18 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: bundler
         | 
| @@ -67,6 +67,20 @@ dependencies: | |
| 67 67 | 
             
                - - "~>"
         | 
| 68 68 | 
             
                  - !ruby/object:Gem::Version
         | 
| 69 69 | 
             
                    version: '1.0'
         | 
| 70 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 71 | 
            +
              name: virtus
         | 
| 72 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 73 | 
            +
                requirements:
         | 
| 74 | 
            +
                - - "~>"
         | 
| 75 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 76 | 
            +
                    version: '1.0'
         | 
| 77 | 
            +
              type: :runtime
         | 
| 78 | 
            +
              prerelease: false
         | 
| 79 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 80 | 
            +
                requirements:
         | 
| 81 | 
            +
                - - "~>"
         | 
| 82 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 83 | 
            +
                    version: '1.0'
         | 
| 70 84 | 
             
            description: Parse app manifests used by Heroku Button, Heroku Review Apps, and Heroku
         | 
| 71 85 | 
             
              CI.
         | 
| 72 86 | 
             
            email:
         | 
| @@ -86,7 +100,15 @@ files: | |
| 86 100 | 
             
            - bin/console
         | 
| 87 101 | 
             
            - bin/setup
         | 
| 88 102 | 
             
            - lib/app_manifest.rb
         | 
| 103 | 
            +
            - lib/app_manifest/addon.rb
         | 
| 104 | 
            +
            - lib/app_manifest/buildpack.rb
         | 
| 105 | 
            +
            - lib/app_manifest/env.rb
         | 
| 106 | 
            +
            - lib/app_manifest/environment.rb
         | 
| 107 | 
            +
            - lib/app_manifest/environment_attributes.rb
         | 
| 108 | 
            +
            - lib/app_manifest/formation.rb
         | 
| 89 109 | 
             
            - lib/app_manifest/manifest.rb
         | 
| 110 | 
            +
            - lib/app_manifest/nullable_array.rb
         | 
| 111 | 
            +
            - lib/app_manifest/serializer.rb
         | 
| 90 112 | 
             
            - lib/app_manifest/version.rb
         | 
| 91 113 | 
             
            homepage: https://devcenter.heroku.com/articles/app-json-schema
         | 
| 92 114 | 
             
            licenses: []
         |