verbalize 2.0.0 → 2.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 +4 -4
- data/.codeclimate.yml +7 -0
- data/circle.yml +0 -4
- data/lib/verbalize/action.rb +17 -41
- data/lib/verbalize/build.rb +58 -0
- data/lib/verbalize/version.rb +1 -1
- data/verbalize.gemspec +1 -1
- metadata +8 -11
- data/lib/verbalize/build_attribute_readers.rb +0 -20
- data/lib/verbalize/build_dangerous_action_method.rb +0 -15
- data/lib/verbalize/build_initialize_method.rb +0 -21
- data/lib/verbalize/build_method_base.rb +0 -68
- data/lib/verbalize/build_safe_action_method.rb +0 -15
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 28277ada3b560d5fd8ed11a9b568dd03f8c0156a
         | 
| 4 | 
            +
              data.tar.gz: 9ff1315685ffa11c9a997a15a07206fe0e21f112
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: e4049ff78ca84f4e44f34c6525089edb96b74206ca6318f3b84c78779dd303863a612f0be86059e9e6bd1d8fce2f364a62e3d65b6269575ee13cd1dc7bbd44b9
         | 
| 7 | 
            +
              data.tar.gz: a6528d2fa2ec1dc97d9524f6feb75426a249cc6a8bd2b656d7491d2bb5698512ec9718c836f16b33c0bc85d65aba5551a6d135170e2e1ebfb5fdf37c86770948
         | 
    
        data/.codeclimate.yml
    ADDED
    
    
    
        data/circle.yml
    CHANGED
    
    
    
        data/lib/verbalize/action.rb
    CHANGED
    
    | @@ -1,10 +1,7 @@ | |
| 1 | 
            +
            require_relative 'build'
         | 
| 1 2 | 
             
            require_relative 'error'
         | 
| 2 | 
            -
            require_relative 'build_initialize_method'
         | 
| 3 | 
            -
            require_relative 'build_safe_action_method'
         | 
| 4 | 
            -
            require_relative 'build_dangerous_action_method'
         | 
| 5 | 
            -
            require_relative 'build_attribute_readers'
         | 
| 6 | 
            -
            require_relative 'success'
         | 
| 7 3 | 
             
            require_relative 'failure'
         | 
| 4 | 
            +
            require_relative 'success'
         | 
| 8 5 |  | 
| 9 6 | 
             
            module Verbalize
         | 
| 10 7 | 
             
              module Action
         | 
| @@ -19,46 +16,19 @@ module Verbalize | |
| 19 16 | 
             
                end
         | 
| 20 17 |  | 
| 21 18 | 
             
                module ClassMethods
         | 
| 22 | 
            -
                  def input(  | 
| 23 | 
            -
                     | 
| 24 | 
            -
                    optional: [],
         | 
| 25 | 
            -
                    **other_keyword_arguments
         | 
| 26 | 
            -
                  )
         | 
| 27 | 
            -
                    unless other_keyword_arguments.empty?
         | 
| 28 | 
            -
                      raise(
         | 
| 29 | 
            -
                        ArgumentError,
         | 
| 30 | 
            -
                        "Unsupported keyword arguments received: #{other_keyword_arguments.inspect}"
         | 
| 31 | 
            -
                      )
         | 
| 32 | 
            -
                    end
         | 
| 33 | 
            -
             | 
| 34 | 
            -
                    optional_keywords = Array(optional)
         | 
| 35 | 
            -
             | 
| 36 | 
            -
                    class_eval BuildSafeActionMethod.call(
         | 
| 37 | 
            -
                      required_keywords: required_keywords,
         | 
| 38 | 
            -
                      optional_keywords: optional_keywords
         | 
| 39 | 
            -
                    )
         | 
| 40 | 
            -
             | 
| 41 | 
            -
                    class_eval BuildDangerousActionMethod.call(
         | 
| 42 | 
            -
                      required_keywords: required_keywords,
         | 
| 43 | 
            -
                      optional_keywords: optional_keywords
         | 
| 44 | 
            -
                    )
         | 
| 45 | 
            -
             | 
| 46 | 
            -
                    class_eval BuildInitializeMethod.call(
         | 
| 47 | 
            -
                      required_keywords: required_keywords,
         | 
| 48 | 
            -
                      optional_keywords: optional_keywords
         | 
| 49 | 
            -
                    )
         | 
| 50 | 
            -
             | 
| 51 | 
            -
                    class_eval BuildAttributeReaders.call(
         | 
| 52 | 
            -
                      attributes: required_keywords + optional_keywords
         | 
| 53 | 
            -
                    )
         | 
| 19 | 
            +
                  def input(*required_keywords, optional: [])
         | 
| 20 | 
            +
                    class_eval Build.call(required_keywords, Array(optional))
         | 
| 54 21 | 
             
                  end
         | 
| 55 22 |  | 
| 23 | 
            +
                  # Because call/call! are defined when Action.input is called, they would
         | 
| 24 | 
            +
                  # not be defined when there is no input. So we pre-define them here, and
         | 
| 25 | 
            +
                  # if there is any input, they are overwritten
         | 
| 56 26 | 
             
                  def call
         | 
| 57 | 
            -
                     | 
| 27 | 
            +
                    __proxied_call
         | 
| 58 28 | 
             
                  end
         | 
| 59 29 |  | 
| 60 30 | 
             
                  def call!
         | 
| 61 | 
            -
                     | 
| 31 | 
            +
                    __proxied_call!
         | 
| 62 32 | 
             
                  end
         | 
| 63 33 |  | 
| 64 34 | 
             
                  private
         | 
| @@ -67,7 +37,13 @@ module Verbalize | |
| 67 37 | 
             
                    new(*args).send(:call)
         | 
| 68 38 | 
             
                  end
         | 
| 69 39 |  | 
| 70 | 
            -
                   | 
| 40 | 
            +
                  # We used __proxied_call/__proxied_call! for 2 reasons:
         | 
| 41 | 
            +
                  #   1. The declaration of call/call! needs to be explicit so that tools
         | 
| 42 | 
            +
                  #      like rspec-mocks can verify the actions keywords actually
         | 
| 43 | 
            +
                  #      exist when stubbing
         | 
| 44 | 
            +
                  #   2. Because #1, meta-programming a simple interface to these proxied
         | 
| 45 | 
            +
                  #      methods is much simpler than meta-programming the full methods
         | 
| 46 | 
            +
                  def __proxied_call(*args)
         | 
| 71 47 | 
             
                    error = catch(:verbalize_error) do
         | 
| 72 48 | 
             
                      value = perform(*args)
         | 
| 73 49 | 
             
                      return Success.new(value)
         | 
| @@ -76,7 +52,7 @@ module Verbalize | |
| 76 52 | 
             
                    Failure.new(error)
         | 
| 77 53 | 
             
                  end
         | 
| 78 54 |  | 
| 79 | 
            -
                  def  | 
| 55 | 
            +
                  def __proxied_call!(*args)
         | 
| 80 56 | 
             
                    perform(*args)
         | 
| 81 57 | 
             
                  rescue UncaughtThrowError => uncaught_throw_error
         | 
| 82 58 | 
             
                    fail_value = uncaught_throw_error.value
         | 
| @@ -0,0 +1,58 @@ | |
| 1 | 
            +
            module Verbalize
         | 
| 2 | 
            +
              class Build
         | 
| 3 | 
            +
                def self.call(required_keywords = [], optional_keywords = [])
         | 
| 4 | 
            +
                  new(required_keywords, optional_keywords).call
         | 
| 5 | 
            +
                end
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                def initialize(required_keywords, optional_keywords)
         | 
| 8 | 
            +
                  @required_keywords = required_keywords
         | 
| 9 | 
            +
                  @optional_keywords = optional_keywords
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                def call
         | 
| 13 | 
            +
                  <<-CODE
         | 
| 14 | 
            +
            def self.call(#{declaration_arguments_string})
         | 
| 15 | 
            +
              __proxied_call(#{forwarding_arguments_string})
         | 
| 16 | 
            +
            end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            def self.call!(#{declaration_arguments_string})
         | 
| 19 | 
            +
              __proxied_call!(#{forwarding_arguments_string})
         | 
| 20 | 
            +
            end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            def initialize(#{declaration_arguments_string})
         | 
| 23 | 
            +
              #{initialize_body}
         | 
| 24 | 
            +
            end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            private
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            attr_reader #{attribute_readers_string}
         | 
| 29 | 
            +
                  CODE
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                attr_reader :required_keywords, :optional_keywords
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                private
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                def all_keywords
         | 
| 37 | 
            +
                  required_keywords + optional_keywords
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                def declaration_arguments_string
         | 
| 41 | 
            +
                  required_segments = required_keywords.map { |keyword| "#{keyword}:" }
         | 
| 42 | 
            +
                  optional_segments = optional_keywords.map { |keyword| "#{keyword}: nil" }
         | 
| 43 | 
            +
                  (required_segments + optional_segments).join(', ')
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                def forwarding_arguments_string
         | 
| 47 | 
            +
                  all_keywords.map { |keyword| "#{keyword}: #{keyword}" }.join(', ')
         | 
| 48 | 
            +
                end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                def initialize_body
         | 
| 51 | 
            +
                  all_keywords.map { |keyword| "@#{keyword} = #{keyword}" }.join("\n  ")
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                def attribute_readers_string
         | 
| 55 | 
            +
                  all_keywords.map { |keyword| ":#{keyword}" }.join(', ')
         | 
| 56 | 
            +
                end
         | 
| 57 | 
            +
              end
         | 
| 58 | 
            +
            end
         | 
    
        data/lib/verbalize/version.rb
    CHANGED
    
    
    
        data/verbalize.gemspec
    CHANGED
    
    | @@ -24,6 +24,6 @@ Gem::Specification.new do |spec| | |
| 24 24 | 
             
              spec.add_development_dependency 'rake', '~> 10.0'
         | 
| 25 25 | 
             
              spec.add_development_dependency 'rspec'
         | 
| 26 26 | 
             
              spec.add_development_dependency 'coveralls'
         | 
| 27 | 
            -
              spec.add_development_dependency 'rubocop'
         | 
| 27 | 
            +
              spec.add_development_dependency 'rubocop', '0.45'
         | 
| 28 28 | 
             
              spec.add_development_dependency 'pry'
         | 
| 29 29 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: verbalize
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 2.0. | 
| 4 | 
            +
              version: 2.0.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Zach Taylor
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2016-12- | 
| 11 | 
            +
            date: 2016-12-16 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -70,16 +70,16 @@ dependencies: | |
| 70 70 | 
             
              name: rubocop
         | 
| 71 71 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 72 72 | 
             
                requirements:
         | 
| 73 | 
            -
                - -  | 
| 73 | 
            +
                - - '='
         | 
| 74 74 | 
             
                  - !ruby/object:Gem::Version
         | 
| 75 | 
            -
                    version: '0'
         | 
| 75 | 
            +
                    version: '0.45'
         | 
| 76 76 | 
             
              type: :development
         | 
| 77 77 | 
             
              prerelease: false
         | 
| 78 78 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 79 79 | 
             
                requirements:
         | 
| 80 | 
            -
                - -  | 
| 80 | 
            +
                - - '='
         | 
| 81 81 | 
             
                  - !ruby/object:Gem::Version
         | 
| 82 | 
            -
                    version: '0'
         | 
| 82 | 
            +
                    version: '0.45'
         | 
| 83 83 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 84 84 | 
             
              name: pry
         | 
| 85 85 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -101,6 +101,7 @@ executables: [] | |
| 101 101 | 
             
            extensions: []
         | 
| 102 102 | 
             
            extra_rdoc_files: []
         | 
| 103 103 | 
             
            files:
         | 
| 104 | 
            +
            - ".codeclimate.yml"
         | 
| 104 105 | 
             
            - ".gitignore"
         | 
| 105 106 | 
             
            - ".rspec"
         | 
| 106 107 | 
             
            - ".rubocop.yml"
         | 
| @@ -114,11 +115,7 @@ files: | |
| 114 115 | 
             
            - circle.yml
         | 
| 115 116 | 
             
            - lib/verbalize.rb
         | 
| 116 117 | 
             
            - lib/verbalize/action.rb
         | 
| 117 | 
            -
            - lib/verbalize/ | 
| 118 | 
            -
            - lib/verbalize/build_dangerous_action_method.rb
         | 
| 119 | 
            -
            - lib/verbalize/build_initialize_method.rb
         | 
| 120 | 
            -
            - lib/verbalize/build_method_base.rb
         | 
| 121 | 
            -
            - lib/verbalize/build_safe_action_method.rb
         | 
| 118 | 
            +
            - lib/verbalize/build.rb
         | 
| 122 119 | 
             
            - lib/verbalize/error.rb
         | 
| 123 120 | 
             
            - lib/verbalize/failure.rb
         | 
| 124 121 | 
             
            - lib/verbalize/result.rb
         | 
| @@ -1,20 +0,0 @@ | |
| 1 | 
            -
            module Verbalize
         | 
| 2 | 
            -
              class BuildAttributeReaders
         | 
| 3 | 
            -
                def self.call(attributes: [])
         | 
| 4 | 
            -
                  new(attributes: attributes).call
         | 
| 5 | 
            -
                end
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                def initialize(attributes: [])
         | 
| 8 | 
            -
                  @attributes = attributes
         | 
| 9 | 
            -
                end
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                def call
         | 
| 12 | 
            -
                  return '' if attributes.empty?
         | 
| 13 | 
            -
                  "attr_reader #{attributes.map(&:inspect).join ', '}"
         | 
| 14 | 
            -
                end
         | 
| 15 | 
            -
             | 
| 16 | 
            -
                private
         | 
| 17 | 
            -
             | 
| 18 | 
            -
                attr_reader :attributes
         | 
| 19 | 
            -
              end
         | 
| 20 | 
            -
            end
         | 
| @@ -1,21 +0,0 @@ | |
| 1 | 
            -
            require_relative 'build_method_base'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module Verbalize
         | 
| 4 | 
            -
              class BuildInitializeMethod < BuildMethodBase
         | 
| 5 | 
            -
                private
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                def declaration
         | 
| 8 | 
            -
                  declare('initialize')
         | 
| 9 | 
            -
                end
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                def body
         | 
| 12 | 
            -
                  return if all_keywords.empty?
         | 
| 13 | 
            -
             | 
| 14 | 
            -
                  lines = all_keywords.map do |keyword|
         | 
| 15 | 
            -
                    "  @#{keyword} = #{keyword}"
         | 
| 16 | 
            -
                  end
         | 
| 17 | 
            -
             | 
| 18 | 
            -
                  lines.join("\n")
         | 
| 19 | 
            -
                end
         | 
| 20 | 
            -
              end
         | 
| 21 | 
            -
            end
         | 
| @@ -1,68 +0,0 @@ | |
| 1 | 
            -
            module Verbalize
         | 
| 2 | 
            -
              class BuildMethodBase
         | 
| 3 | 
            -
                def self.call(required_keywords: [], optional_keywords: [])
         | 
| 4 | 
            -
                  new(
         | 
| 5 | 
            -
                    required_keywords: required_keywords,
         | 
| 6 | 
            -
                    optional_keywords: optional_keywords
         | 
| 7 | 
            -
                  ).call
         | 
| 8 | 
            -
                end
         | 
| 9 | 
            -
             | 
| 10 | 
            -
                def initialize(required_keywords: [], optional_keywords: [])
         | 
| 11 | 
            -
                  @required_keywords = required_keywords
         | 
| 12 | 
            -
                  @optional_keywords = optional_keywords
         | 
| 13 | 
            -
                end
         | 
| 14 | 
            -
             | 
| 15 | 
            -
                def call
         | 
| 16 | 
            -
                  parts.compact.join "\n"
         | 
| 17 | 
            -
                end
         | 
| 18 | 
            -
             | 
| 19 | 
            -
                private
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                attr_reader :required_keywords, :optional_keywords
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                def parts
         | 
| 24 | 
            -
                  [declaration, body, "end\n"]
         | 
| 25 | 
            -
                end
         | 
| 26 | 
            -
             | 
| 27 | 
            -
                def declaration
         | 
| 28 | 
            -
                  raise NotImplementedError
         | 
| 29 | 
            -
                end
         | 
| 30 | 
            -
             | 
| 31 | 
            -
                def body
         | 
| 32 | 
            -
                  raise NotImplementedError
         | 
| 33 | 
            -
                end
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                def declare(method_name)
         | 
| 36 | 
            -
                  "def #{method_name}(#{declaration_keyword_arguments})"
         | 
| 37 | 
            -
                end
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                def all_keywords
         | 
| 40 | 
            -
                  required_keywords + optional_keywords
         | 
| 41 | 
            -
                end
         | 
| 42 | 
            -
             | 
| 43 | 
            -
                def required_keyword_segments
         | 
| 44 | 
            -
                  required_keywords.map { |keyword| "#{keyword}:" }
         | 
| 45 | 
            -
                end
         | 
| 46 | 
            -
             | 
| 47 | 
            -
                def optional_keyword_segments
         | 
| 48 | 
            -
                  optional_keywords.map { |keyword| "#{keyword}: nil" }
         | 
| 49 | 
            -
                end
         | 
| 50 | 
            -
             | 
| 51 | 
            -
                def declaration_keyword_arguments
         | 
| 52 | 
            -
                  return if all_keywords.empty?
         | 
| 53 | 
            -
                  (required_keyword_segments + optional_keyword_segments).join(', ')
         | 
| 54 | 
            -
                end
         | 
| 55 | 
            -
             | 
| 56 | 
            -
                def initialize_keywords_and_values
         | 
| 57 | 
            -
                  all_keywords.map { |variable| "#{variable}: #{variable}" }.join(', ')
         | 
| 58 | 
            -
                end
         | 
| 59 | 
            -
             | 
| 60 | 
            -
                def verbalized_send_string(bang: false)
         | 
| 61 | 
            -
                  send_string = '  __verbalized_send'
         | 
| 62 | 
            -
                  send_string += '!' if bang
         | 
| 63 | 
            -
             | 
| 64 | 
            -
                  return send_string if all_keywords.empty?
         | 
| 65 | 
            -
                  send_string + "(#{initialize_keywords_and_values})"
         | 
| 66 | 
            -
                end
         | 
| 67 | 
            -
              end
         | 
| 68 | 
            -
            end
         |