the_help 1.6.2 → 2.0.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/.tool-versions +1 -1
- data/Gemfile.lock +22 -24
- data/lib/the_help/service.rb +64 -45
- data/lib/the_help/version.rb +1 -1
- metadata +3 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: f11ddd3d1fc5d239938188bda0cba4c3e57d86433fc39f5214dc9ae6aee875af
         | 
| 4 | 
            +
              data.tar.gz: e1a80305b54998dfb4c84e6ec8c1b0c49ccaedc0b21c969becfaca90a671ac60
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 0af2dbe4d5979ed8d525794f9797c0011a4535ebe7127afd3bddd2a5c11911c0b919c86b8527916a49ee0e29decf662a28c9317cdea935cd8366e1bf56d781e7
         | 
| 7 | 
            +
              data.tar.gz: '019aaca0b3c14e5d96ac5e0f661f5fb9cb8c04ddcbff254ae27f9c380c19a44019037ae80026dbb24604c0a2d09e8b50331f9e94b325515083ab1c67cb083594'
         | 
    
        data/.tool-versions
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            ruby 2. | 
| 1 | 
            +
            ruby 2.6.3
         | 
    
        data/Gemfile.lock
    CHANGED
    
    | @@ -1,45 +1,43 @@ | |
| 1 1 | 
             
            PATH
         | 
| 2 2 | 
             
              remote: .
         | 
| 3 3 | 
             
              specs:
         | 
| 4 | 
            -
                the_help ( | 
| 4 | 
            +
                the_help (2.0.0)
         | 
| 5 5 |  | 
| 6 6 | 
             
            GEM
         | 
| 7 7 | 
             
              remote: https://rubygems.org/
         | 
| 8 8 | 
             
              specs:
         | 
| 9 9 | 
             
                ast (2.4.0)
         | 
| 10 | 
            -
                byebug ( | 
| 10 | 
            +
                byebug (11.0.1)
         | 
| 11 11 | 
             
                diff-lcs (1.3)
         | 
| 12 | 
            -
                jaro_winkler (1.5. | 
| 13 | 
            -
                parallel (1. | 
| 14 | 
            -
                parser (2.6. | 
| 12 | 
            +
                jaro_winkler (1.5.3)
         | 
| 13 | 
            +
                parallel (1.18.0)
         | 
| 14 | 
            +
                parser (2.6.5.0)
         | 
| 15 15 | 
             
                  ast (~> 2.4.0)
         | 
| 16 | 
            -
                powerpack (0.1.2)
         | 
| 17 16 | 
             
                rainbow (3.0.0)
         | 
| 18 17 | 
             
                rake (10.5.0)
         | 
| 19 | 
            -
                rspec (3. | 
| 20 | 
            -
                  rspec-core (~> 3. | 
| 21 | 
            -
                  rspec-expectations (~> 3. | 
| 22 | 
            -
                  rspec-mocks (~> 3. | 
| 23 | 
            -
                rspec-core (3. | 
| 24 | 
            -
                  rspec-support (~> 3. | 
| 25 | 
            -
                rspec-expectations (3. | 
| 18 | 
            +
                rspec (3.9.0)
         | 
| 19 | 
            +
                  rspec-core (~> 3.9.0)
         | 
| 20 | 
            +
                  rspec-expectations (~> 3.9.0)
         | 
| 21 | 
            +
                  rspec-mocks (~> 3.9.0)
         | 
| 22 | 
            +
                rspec-core (3.9.0)
         | 
| 23 | 
            +
                  rspec-support (~> 3.9.0)
         | 
| 24 | 
            +
                rspec-expectations (3.9.0)
         | 
| 26 25 | 
             
                  diff-lcs (>= 1.2.0, < 2.0)
         | 
| 27 | 
            -
                  rspec-support (~> 3. | 
| 28 | 
            -
                rspec-mocks (3. | 
| 26 | 
            +
                  rspec-support (~> 3.9.0)
         | 
| 27 | 
            +
                rspec-mocks (3.9.0)
         | 
| 29 28 | 
             
                  diff-lcs (>= 1.2.0, < 2.0)
         | 
| 30 | 
            -
                  rspec-support (~> 3. | 
| 31 | 
            -
                rspec-support (3. | 
| 32 | 
            -
                rubocop (0. | 
| 29 | 
            +
                  rspec-support (~> 3.9.0)
         | 
| 30 | 
            +
                rspec-support (3.9.0)
         | 
| 31 | 
            +
                rubocop (0.75.1)
         | 
| 33 32 | 
             
                  jaro_winkler (~> 1.5.1)
         | 
| 34 33 | 
             
                  parallel (~> 1.10)
         | 
| 35 | 
            -
                  parser (>= 2. | 
| 36 | 
            -
                  powerpack (~> 0.1)
         | 
| 34 | 
            +
                  parser (>= 2.6)
         | 
| 37 35 | 
             
                  rainbow (>= 2.2.2, < 4.0)
         | 
| 38 36 | 
             
                  ruby-progressbar (~> 1.7)
         | 
| 39 | 
            -
                  unicode-display_width ( | 
| 40 | 
            -
                ruby-progressbar (1.10. | 
| 41 | 
            -
                unicode-display_width (1. | 
| 42 | 
            -
                yard (0.9. | 
| 37 | 
            +
                  unicode-display_width (>= 1.4.0, < 1.7)
         | 
| 38 | 
            +
                ruby-progressbar (1.10.1)
         | 
| 39 | 
            +
                unicode-display_width (1.6.0)
         | 
| 40 | 
            +
                yard (0.9.20)
         | 
| 43 41 |  | 
| 44 42 | 
             
            PLATFORMS
         | 
| 45 43 | 
             
              ruby
         | 
    
        data/lib/the_help/service.rb
    CHANGED
    
    | @@ -15,18 +15,17 @@ module TheHelp | |
| 15 15 | 
             
              #     input :send_welcome_message, default: true
         | 
| 16 16 | 
             
              #
         | 
| 17 17 | 
             
              #     authorization_policy do
         | 
| 18 | 
            -
              #        | 
| 19 | 
            -
              #       call_service(Authorize, permission: :admin_users,
         | 
| 20 | 
            -
              #                    allowed: ->() { authorized = true })
         | 
| 21 | 
            -
              #       authorized
         | 
| 18 | 
            +
              #       call_service(Authorize, permission: :admin_users).success?
         | 
| 22 19 | 
             
              #     end
         | 
| 23 20 | 
             
              #
         | 
| 24 21 | 
             
              #     main do
         | 
| 25 22 | 
             
              #       # do something to create the user account
         | 
| 26 23 | 
             
              #       if send_welcome_message
         | 
| 27 | 
            -
              #         call_service(SendWelcomeMessage, user: user | 
| 28 | 
            -
              # | 
| 24 | 
            +
              #         call_service(SendWelcomeMessage, user: user) do |result|
         | 
| 25 | 
            +
              #           callback(:message_sent) if result.success?
         | 
| 26 | 
            +
              #         end
         | 
| 29 27 | 
             
              #       end
         | 
| 28 | 
            +
              #       result.success
         | 
| 30 29 | 
             
              #     end
         | 
| 31 30 | 
             
              #
         | 
| 32 31 | 
             
              #     callback(:message_sent) do |message|
         | 
| @@ -36,25 +35,25 @@ module TheHelp | |
| 36 35 | 
             
              #
         | 
| 37 36 | 
             
              #   class Authorize < TheHelp::Service
         | 
| 38 37 | 
             
              #     input :permission
         | 
| 39 | 
            -
              #     input :allowed
         | 
| 40 38 | 
             
              #
         | 
| 41 39 | 
             
              #     authorization_policy allow_all: true
         | 
| 42 40 | 
             
              #
         | 
| 43 41 | 
             
              #     main do
         | 
| 44 42 | 
             
              #       if user_has_permission?
         | 
| 45 | 
            -
              #          | 
| 43 | 
            +
              #         result.success
         | 
| 44 | 
            +
              #       else
         | 
| 45 | 
            +
              #         result.error 'Permission Denied'
         | 
| 46 46 | 
             
              #       end
         | 
| 47 47 | 
             
              #     end
         | 
| 48 48 | 
             
              #   end
         | 
| 49 49 | 
             
              #
         | 
| 50 50 | 
             
              #   class SendWelcomeMessage < TheHelp::Service
         | 
| 51 51 | 
             
              #     input :user
         | 
| 52 | 
            -
              #     input :success, default: ->(message) { }
         | 
| 53 52 | 
             
              #
         | 
| 54 53 | 
             
              #     main do
         | 
| 55 54 | 
             
              #       message = 'Hello, world!'
         | 
| 56 55 | 
             
              #       # do something with message...
         | 
| 57 | 
            -
              #        | 
| 56 | 
            +
              #       result.success message
         | 
| 58 57 | 
             
              #     end
         | 
| 59 58 | 
             
              #   end
         | 
| 60 59 | 
             
              #
         | 
| @@ -62,38 +61,20 @@ module TheHelp | |
| 62 61 | 
             
              #
         | 
| 63 62 | 
             
              # @example Calling services with a block
         | 
| 64 63 | 
             
              #
         | 
| 65 | 
            -
              #   #  | 
| 66 | 
            -
              #   # receive one will result in an exception being raised
         | 
| 67 | 
            -
              #
         | 
| 68 | 
            -
              #   class DoesNotTakeBlock < TheHelp::Service
         | 
| 69 | 
            -
              #     authorization_policy allow_all: true
         | 
| 70 | 
            -
              #
         | 
| 71 | 
            -
              #     main do
         | 
| 72 | 
            -
              #       # whatever
         | 
| 73 | 
            -
              #     end
         | 
| 74 | 
            -
              #   end
         | 
| 75 | 
            -
              #
         | 
| 76 | 
            -
              #   DoesNotTakeBlock.call { |result| true } # raises TheHelp::NoResultError
         | 
| 77 | 
            -
              #
         | 
| 78 | 
            -
              #   # However, if the service *is* designed to receive a block (by explicitly
         | 
| 79 | 
            -
              #   # assigning to the internal `#result` attribute in the main routine), the
         | 
| 80 | 
            -
              #   # result will be yielded to the block if a block is present.
         | 
| 64 | 
            +
              #   # The service result will be yielded to the block if a block is present.
         | 
| 81 65 | 
             
              #
         | 
| 82 66 | 
             
              #   class CanTakeABlock < TheHelp::Service
         | 
| 83 67 | 
             
              #     authorization_policy allow_all: true
         | 
| 84 68 | 
             
              #
         | 
| 85 69 | 
             
              #     main do
         | 
| 86 | 
            -
              #        | 
| 70 | 
            +
              #       result.success :the_service_result
         | 
| 87 71 | 
             
              #     end
         | 
| 88 72 | 
             
              #   end
         | 
| 89 73 | 
             
              #
         | 
| 90 74 | 
             
              #   service_result = nil
         | 
| 91 75 | 
             
              #
         | 
| 92 | 
            -
              #   CanTakeABlock.call | 
| 93 | 
            -
              #   service_result
         | 
| 94 | 
            -
              #   #=> nil              # but obviously the result is just discarded
         | 
| 76 | 
            +
              #   CanTakeABlock.call { |result| service_result = result.value }
         | 
| 95 77 | 
             
              #
         | 
| 96 | 
            -
              #   CanTakeABlock.call { |result| service_result = result }
         | 
| 97 78 | 
             
              #   service_result
         | 
| 98 79 | 
             
              #   #=> :the_service_result
         | 
| 99 80 | 
             
              #
         | 
| @@ -126,9 +107,7 @@ module TheHelp | |
| 126 107 | 
             
                  #
         | 
| 127 108 | 
             
                  # Any arguments are passed to #initialize
         | 
| 128 109 | 
             
                  def call(*args, &block)
         | 
| 129 | 
            -
                     | 
| 130 | 
            -
                    return result unless result.is_a?(self)
         | 
| 131 | 
            -
                    self
         | 
| 110 | 
            +
                    new(*args).call(&block)
         | 
| 132 111 | 
             
                  end
         | 
| 133 112 |  | 
| 134 113 | 
             
                  # :nodoc:
         | 
| @@ -185,8 +164,51 @@ module TheHelp | |
| 185 164 | 
             
                  end
         | 
| 186 165 | 
             
                end
         | 
| 187 166 |  | 
| 167 | 
            +
                # Holds the result of running a service as well as the execution status
         | 
| 168 | 
            +
                #
         | 
| 169 | 
            +
                # An instance of this class will be returned from any service call and will have a status of
         | 
| 170 | 
            +
                # either :success or :error along with a value that is set by the service.
         | 
| 171 | 
            +
                class Result
         | 
| 172 | 
            +
                  attr_reader :status, :value
         | 
| 173 | 
            +
             | 
| 174 | 
            +
                  def initialize
         | 
| 175 | 
            +
                    self.status = :pending
         | 
| 176 | 
            +
                    self.value = nil
         | 
| 177 | 
            +
                  end
         | 
| 178 | 
            +
             | 
| 179 | 
            +
                  def pending?
         | 
| 180 | 
            +
                    status == :pending
         | 
| 181 | 
            +
                  end
         | 
| 182 | 
            +
             | 
| 183 | 
            +
                  def success?
         | 
| 184 | 
            +
                    status == :success
         | 
| 185 | 
            +
                  end
         | 
| 186 | 
            +
             | 
| 187 | 
            +
                  def error?
         | 
| 188 | 
            +
                    status == :error
         | 
| 189 | 
            +
                  end
         | 
| 190 | 
            +
             | 
| 191 | 
            +
                  def success(value = nil)
         | 
| 192 | 
            +
                    self.value = value
         | 
| 193 | 
            +
                    self.status = :success
         | 
| 194 | 
            +
                    freeze
         | 
| 195 | 
            +
                  end
         | 
| 196 | 
            +
             | 
| 197 | 
            +
                  def error(value)
         | 
| 198 | 
            +
                    self.value = value
         | 
| 199 | 
            +
                    self.status = :error
         | 
| 200 | 
            +
                    freeze
         | 
| 201 | 
            +
                  end
         | 
| 202 | 
            +
             | 
| 203 | 
            +
                  private
         | 
| 204 | 
            +
             | 
| 205 | 
            +
                  attr_writer :status, :value
         | 
| 206 | 
            +
                end
         | 
| 207 | 
            +
             | 
| 188 208 | 
             
                def initialize(context:, logger: Logger.new($stdout),
         | 
| 189 209 | 
             
                               not_authorized: CB_NOT_AUTHORIZED, **inputs)
         | 
| 210 | 
            +
                  @result = Result.new
         | 
| 211 | 
            +
             | 
| 190 212 | 
             
                  self.context = context
         | 
| 191 213 | 
             
                  self.logger = logger
         | 
| 192 214 | 
             
                  self.not_authorized = not_authorized
         | 
| @@ -194,26 +216,28 @@ module TheHelp | |
| 194 216 | 
             
                  self.stop_caller = false
         | 
| 195 217 | 
             
                end
         | 
| 196 218 |  | 
| 219 | 
            +
                # Executes the service and returns the result
         | 
| 220 | 
            +
                #
         | 
| 221 | 
            +
                # @return [TheHelp::Service::Result]
         | 
| 197 222 | 
             
                def call
         | 
| 198 223 | 
             
                  validate_service_definition
         | 
| 199 224 | 
             
                  catch(:stop) do
         | 
| 200 225 | 
             
                    authorize
         | 
| 201 226 | 
             
                    log_service_call
         | 
| 202 227 | 
             
                    main
         | 
| 228 | 
            +
                    check_result!
         | 
| 203 229 | 
             
                    self.block_result = yield result if block_given?
         | 
| 204 230 | 
             
                  end
         | 
| 205 231 | 
             
                  throw :stop if stop_caller
         | 
| 206 232 | 
             
                  return block_result if block_given?
         | 
| 207 | 
            -
                  return result | 
| 208 | 
            -
                  self
         | 
| 233 | 
            +
                  return result
         | 
| 209 234 | 
             
                end
         | 
| 210 235 |  | 
| 211 236 | 
             
                private
         | 
| 212 237 |  | 
| 213 238 | 
             
                attr_accessor :context, :logger, :not_authorized, :block_result,
         | 
| 214 239 | 
             
                              :stop_caller
         | 
| 215 | 
            -
                 | 
| 216 | 
            -
                attr_reader :inputs
         | 
| 240 | 
            +
                attr_reader :inputs, :result
         | 
| 217 241 |  | 
| 218 242 | 
             
                alias service_context context
         | 
| 219 243 | 
             
                alias service_logger logger
         | 
| @@ -257,13 +281,8 @@ module TheHelp | |
| 257 281 | 
             
                  throw :stop
         | 
| 258 282 | 
             
                end
         | 
| 259 283 |  | 
| 260 | 
            -
                def  | 
| 261 | 
            -
                  raise TheHelp::NoResultError  | 
| 262 | 
            -
                  @result
         | 
| 263 | 
            -
                end
         | 
| 264 | 
            -
             | 
| 265 | 
            -
                def result_set?
         | 
| 266 | 
            -
                  defined?(@result)
         | 
| 284 | 
            +
                def check_result!
         | 
| 285 | 
            +
                  raise TheHelp::NoResultError if result.pending?
         | 
| 267 286 | 
             
                end
         | 
| 268 287 |  | 
| 269 288 | 
             
                def run_callback(callback, *args)
         | 
    
        data/lib/the_help/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: the_help
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version:  | 
| 4 | 
            +
              version: 2.0.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - John Wilger
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2019- | 
| 11 | 
            +
            date: 2019-10-28 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: byebug
         | 
| @@ -127,8 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 127 127 | 
             
                - !ruby/object:Gem::Version
         | 
| 128 128 | 
             
                  version: '0'
         | 
| 129 129 | 
             
            requirements: []
         | 
| 130 | 
            -
             | 
| 131 | 
            -
            rubygems_version: 2.7.6
         | 
| 130 | 
            +
            rubygems_version: 3.0.3
         | 
| 132 131 | 
             
            signing_key: 
         | 
| 133 132 | 
             
            specification_version: 4
         | 
| 134 133 | 
             
            summary: A service layer framework
         |