riposte 0.1.0 → 0.2.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/.coveralls.yml +1 -0
- data/.travis.yml +17 -0
- data/README.md +47 -3
- data/lib/riposte/helper.rb +2 -2
- data/lib/riposte/reaction.rb +7 -4
- data/lib/riposte/version.rb +1 -1
- data/riposte.gemspec +2 -0
- data/spec/helper_spec.rb +23 -6
- data/spec/reaction_spec.rb +32 -9
- data/spec/spec_helper.rb +5 -0
- metadata +34 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 5722c850e819bf9da6bf3294e890af95790649b1
         | 
| 4 | 
            +
              data.tar.gz: 51b2fdaa6632edcb5894b143590359817c429cb2
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: ff17b14997e51448b45a5f471f94ca557612b3817517773ffe5c85e4bffcfc3b0f95e1563393855bd1599b8250e8c4445c97bfdf514fa4e5ee9b40c9401547e1
         | 
| 7 | 
            +
              data.tar.gz: bb913c7059542917a85b366c3c4aa18275c50bf35c3a01a9ef5121ea2c5d3c877fbb50319becfcf6ada8c7799f6464ce309583b267919dfc43f7ad07ff183670
         | 
    
        data/.coveralls.yml
    ADDED
    
    | @@ -0,0 +1 @@ | |
| 1 | 
            +
            service_name: travis-ci
         | 
    
        data/.travis.yml
    ADDED
    
    | @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            language: ruby
         | 
| 2 | 
            +
            cache: bundle
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            rvm:
         | 
| 5 | 
            +
              - jruby
         | 
| 6 | 
            +
              - 2.0.0
         | 
| 7 | 
            +
              - 2.2.1
         | 
| 8 | 
            +
              - rbx
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            script: 'CODECLIMATE_REPO_TOKEN=66c92c9cdc6ae744eab70823c420d5db97e97c6b4c404f3fee04ee21c47dc35d bundle exec rake'
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            notifications:
         | 
| 13 | 
            +
              email:
         | 
| 14 | 
            +
                recipients:
         | 
| 15 | 
            +
                  - amos@binarynoggin.com
         | 
| 16 | 
            +
                on_failure: change
         | 
| 17 | 
            +
                on_success: never
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,9 +1,17 @@ | |
| 1 1 | 
             
            # Riposte
         | 
| 2 | 
            +
            [](https://rubygems.org/gems/riposte)
         | 
| 4 | 
            +
            [](https://travis-ci.org/BinaryNoggin/riposte)
         | 
| 6 | 
            +
            [](https://codeclimate.com/github/BinaryNoggin/riposte)
         | 
| 8 | 
            +
            [](https://codeclimate.com/github/BinaryNoggin/riposte)
         | 
| 2 10 |  | 
| 3 11 | 
             
            Riposte was put together to scratch an itch that I had when working with
         | 
| 4 12 | 
             
            multiple outcomes of telling an object what to do and then responding
         | 
| 5 13 | 
             
            differently depending on the results of the action. This happens all the
         | 
| 6 | 
            -
            time in the software that I  | 
| 14 | 
            +
            time in the software that I write. I want to save an object to the
         | 
| 7 15 | 
             
            database and I can't because of the object not meeting the database
         | 
| 8 16 | 
             
            requirements, or the database is down. I might have a whole host of
         | 
| 9 17 | 
             
            different responses for the user. This is where Riposte is geared. It is
         | 
| @@ -39,7 +47,7 @@ class MyController < ApplicationController | |
| 39 47 | 
             
                @article.publish { |on|
         | 
| 40 48 | 
             
                  on.published { send_email_to_subscribers }
         | 
| 41 49 | 
             
                  on.invalid { handle_invalid }
         | 
| 42 | 
            -
                  on.exception { database_down_handler }
         | 
| 50 | 
            +
                  on.exception { |e| database_down_handler(e) }
         | 
| 43 51 | 
             
                }
         | 
| 44 52 |  | 
| 45 53 | 
             
                respond_with @artcile
         | 
| @@ -58,7 +66,43 @@ class Article < ActiveRecord::Base | |
| 58 66 | 
             
                   react_to :invalid, &block
         | 
| 59 67 | 
             
                 end
         | 
| 60 68 | 
             
               rescue SomeError => e
         | 
| 61 | 
            -
                 react_to :exception, &block
         | 
| 69 | 
            +
                 react_to :exception, e, &block #passing an argument for reactions
         | 
| 70 | 
            +
               end
         | 
| 71 | 
            +
            end
         | 
| 72 | 
            +
            ```
         | 
| 73 | 
            +
             | 
| 74 | 
            +
            You may prefer not to use blocks. This is powerful as you can pass the
         | 
| 75 | 
            +
            response object around. You can also use the object multiple times in
         | 
| 76 | 
            +
            different places and with different blocks.
         | 
| 77 | 
            +
             | 
| 78 | 
            +
             | 
| 79 | 
            +
            ```ruby
         | 
| 80 | 
            +
            class MyController < ApplicationController
         | 
| 81 | 
            +
              def create
         | 
| 82 | 
            +
                @article = Article.new
         | 
| 83 | 
            +
             | 
| 84 | 
            +
                on = @article.publish
         | 
| 85 | 
            +
                on.published { send_email_to_subscribers }
         | 
| 86 | 
            +
                on.invalid { handle_invalid }
         | 
| 87 | 
            +
                on.exception { |e| database_down_handler(e) }
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                respond_with @artcile
         | 
| 90 | 
            +
              end
         | 
| 91 | 
            +
            end
         | 
| 92 | 
            +
             | 
| 93 | 
            +
            class Article < ActiveRecord::Base
         | 
| 94 | 
            +
              include Riposte::Helper
         | 
| 95 | 
            +
             | 
| 96 | 
            +
               def publish
         | 
| 97 | 
            +
                 if valid?
         | 
| 98 | 
            +
                   #publish logic
         | 
| 99 | 
            +
                   react_to :published
         | 
| 100 | 
            +
                 else
         | 
| 101 | 
            +
                   #failure logic
         | 
| 102 | 
            +
                   react_to :invalid
         | 
| 103 | 
            +
                 end
         | 
| 104 | 
            +
               rescue SomeError => e
         | 
| 105 | 
            +
                 react_to :exception, e, &block #passing an argument for reactions
         | 
| 62 106 | 
             
               end
         | 
| 63 107 | 
             
            end
         | 
| 64 108 | 
             
            ```
         | 
    
        data/lib/riposte/helper.rb
    CHANGED
    
    
    
        data/lib/riposte/reaction.rb
    CHANGED
    
    | @@ -1,14 +1,17 @@ | |
| 1 1 | 
             
            module Riposte
         | 
| 2 2 | 
             
              class Reaction
         | 
| 3 | 
            -
                attr_accessor :type
         | 
| 3 | 
            +
                attr_accessor :type, :params
         | 
| 4 | 
            +
                private :type=, :params=
         | 
| 5 | 
            +
                protected :params, :type
         | 
| 4 6 |  | 
| 5 | 
            -
                def initialize(type)
         | 
| 7 | 
            +
                def initialize(type, *params)
         | 
| 6 8 | 
             
                  self.type = type
         | 
| 9 | 
            +
                  self.params = params
         | 
| 7 10 | 
             
                end
         | 
| 8 11 |  | 
| 9 12 | 
             
                def method_missing(name, *)
         | 
| 10 13 | 
             
                  if name == type
         | 
| 11 | 
            -
                    yield if block_given?
         | 
| 14 | 
            +
                    yield(*params) if block_given?
         | 
| 12 15 | 
             
                  end
         | 
| 13 16 | 
             
                end
         | 
| 14 17 |  | 
| @@ -17,7 +20,7 @@ module Riposte | |
| 17 20 | 
             
                end
         | 
| 18 21 |  | 
| 19 22 | 
             
                def ==(other)
         | 
| 20 | 
            -
                  [self.class, self.type] == [other.class, other.type]
         | 
| 23 | 
            +
                  [self.class, self.type, self.params] == [other.class, other.type, other.params]
         | 
| 21 24 | 
             
                end
         | 
| 22 25 | 
             
              end
         | 
| 23 26 | 
             
            end
         | 
    
        data/lib/riposte/version.rb
    CHANGED
    
    
    
        data/riposte.gemspec
    CHANGED
    
    | @@ -20,4 +20,6 @@ Gem::Specification.new do |spec| | |
| 20 20 | 
             
              spec.add_development_dependency "bundler", "~> 1.7"
         | 
| 21 21 | 
             
              spec.add_development_dependency "rake", "~> 10.0"
         | 
| 22 22 | 
             
              spec.add_development_dependency "rspec", "~> 3.2.0"
         | 
| 23 | 
            +
              spec.add_development_dependency "coveralls"
         | 
| 24 | 
            +
              spec.add_development_dependency "codeclimate-test-reporter"
         | 
| 23 25 | 
             
            end
         | 
    
        data/spec/helper_spec.rb
    CHANGED
    
    | @@ -1,3 +1,4 @@ | |
| 1 | 
            +
            require "spec_helper"
         | 
| 1 2 | 
             
            require "riposte/helper"
         | 
| 2 3 |  | 
| 3 4 | 
             
            module Riposte
         | 
| @@ -10,15 +11,31 @@ module Riposte | |
| 10 11 |  | 
| 11 12 | 
             
                subject { described_class.new }
         | 
| 12 13 |  | 
| 13 | 
            -
                context " | 
| 14 | 
            -
                   | 
| 15 | 
            -
                     | 
| 14 | 
            +
                context "with no params" do
         | 
| 15 | 
            +
                  context "#react_to with no block" do
         | 
| 16 | 
            +
                    it do
         | 
| 17 | 
            +
                      expect(subject.react_to(:foo)).to eq(Riposte::Reaction.new(:foo))
         | 
| 18 | 
            +
                    end
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  context "#react_to with a block" do
         | 
| 22 | 
            +
                    it do
         | 
| 23 | 
            +
                      expect {|b| subject.react_to(:foo, &b) }.to yield_with_args(Riposte::Reaction.new(:foo))
         | 
| 24 | 
            +
                    end
         | 
| 16 25 | 
             
                  end
         | 
| 17 26 | 
             
                end
         | 
| 18 27 |  | 
| 19 | 
            -
                context " | 
| 20 | 
            -
                   | 
| 21 | 
            -
                     | 
| 28 | 
            +
                context "with params" do
         | 
| 29 | 
            +
                  context "#react_to with no block" do
         | 
| 30 | 
            +
                    it do
         | 
| 31 | 
            +
                      expect(subject.react_to(:foo, :param)).to eq(Riposte::Reaction.new(:foo, :param))
         | 
| 32 | 
            +
                    end
         | 
| 33 | 
            +
                  end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  context "#react_to with a block" do
         | 
| 36 | 
            +
                    it do
         | 
| 37 | 
            +
                      expect {|b| subject.react_to(:foo, :param, &b) }.to yield_with_args(Riposte::Reaction.new(:foo, :param))
         | 
| 38 | 
            +
                    end
         | 
| 22 39 | 
             
                  end
         | 
| 23 40 | 
             
                end
         | 
| 24 41 | 
             
              end
         | 
    
        data/spec/reaction_spec.rb
    CHANGED
    
    | @@ -1,3 +1,4 @@ | |
| 1 | 
            +
            require "spec_helper"
         | 
| 1 2 | 
             
            require "riposte/reaction"
         | 
| 2 3 |  | 
| 3 4 | 
             
            module Riposte
         | 
| @@ -10,19 +11,41 @@ module Riposte | |
| 10 11 | 
             
                end
         | 
| 11 12 |  | 
| 12 13 | 
             
                it "doesn't call a block when it isn't the response type" do
         | 
| 13 | 
            -
                  subject.public_send(random_method)  | 
| 14 | 
            -
                    fail "shoud have not run the block"
         | 
| 15 | 
            -
                  end
         | 
| 14 | 
            +
                  expect{ |b| subject.public_send(random_method, &b) }.not_to yield_control
         | 
| 16 15 | 
             
                end
         | 
| 17 16 |  | 
| 18 | 
            -
                 | 
| 19 | 
            -
                   | 
| 20 | 
            -
             | 
| 21 | 
            -
                   | 
| 17 | 
            +
                context "with no params" do
         | 
| 18 | 
            +
                  subject { described_class.new(:response_type) }
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  it "calls the block when it is the response type" do
         | 
| 21 | 
            +
                    expect{ |b| subject.public_send(:response_type, &b) }.to yield_control
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  it "is equal to another reaction with the same type" do
         | 
| 25 | 
            +
                    expect(subject).to eq(described_class.new(:response_type))
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  it "is not equal to another reaction with a different type" do
         | 
| 29 | 
            +
                    expect(subject).not_to eq(described_class.new(:other_type))
         | 
| 30 | 
            +
                  end
         | 
| 22 31 | 
             
                end
         | 
| 23 32 |  | 
| 24 | 
            -
                 | 
| 25 | 
            -
                   | 
| 33 | 
            +
                context "with params" do
         | 
| 34 | 
            +
                  let(:param) { double(:param) }
         | 
| 35 | 
            +
                  let(:param2) { double(:param2) }
         | 
| 36 | 
            +
                  subject { described_class.new(:response_type, param, param2) }
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                  it "calls the block when it is the response type" do
         | 
| 39 | 
            +
                    expect{ |b| subject.public_send(:response_type, &b) }.to yield_with_args(param, param2)
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  it "is equal to another reaction with the same type" do
         | 
| 43 | 
            +
                    expect(subject).to eq(described_class.new(:response_type, param, param2))
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                  it "is not equal if they have different params" do
         | 
| 47 | 
            +
                    expect(subject).to_not eq(described_class.new(:response_type, param2, param))
         | 
| 48 | 
            +
                  end
         | 
| 26 49 | 
             
                end
         | 
| 27 50 | 
             
              end
         | 
| 28 51 | 
             
            end
         | 
    
        data/spec/spec_helper.rb
    ADDED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: riposte
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.2.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Amos L King
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2015-03- | 
| 11 | 
            +
            date: 2015-03-12 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -52,6 +52,34 @@ dependencies: | |
| 52 52 | 
             
                - - ~>
         | 
| 53 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 54 54 | 
             
                    version: 3.2.0
         | 
| 55 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            +
              name: coveralls
         | 
| 57 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 | 
            +
                requirements:
         | 
| 59 | 
            +
                - - '>='
         | 
| 60 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            +
                    version: '0'
         | 
| 62 | 
            +
              type: :development
         | 
| 63 | 
            +
              prerelease: false
         | 
| 64 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 | 
            +
                requirements:
         | 
| 66 | 
            +
                - - '>='
         | 
| 67 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            +
                    version: '0'
         | 
| 69 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 70 | 
            +
              name: codeclimate-test-reporter
         | 
| 71 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 72 | 
            +
                requirements:
         | 
| 73 | 
            +
                - - '>='
         | 
| 74 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 75 | 
            +
                    version: '0'
         | 
| 76 | 
            +
              type: :development
         | 
| 77 | 
            +
              prerelease: false
         | 
| 78 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 79 | 
            +
                requirements:
         | 
| 80 | 
            +
                - - '>='
         | 
| 81 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 82 | 
            +
                    version: '0'
         | 
| 55 83 | 
             
            description: 
         | 
| 56 84 | 
             
            email:
         | 
| 57 85 | 
             
            - amos.l.king@gmail.com
         | 
| @@ -59,7 +87,9 @@ executables: [] | |
| 59 87 | 
             
            extensions: []
         | 
| 60 88 | 
             
            extra_rdoc_files: []
         | 
| 61 89 | 
             
            files:
         | 
| 90 | 
            +
            - .coveralls.yml
         | 
| 62 91 | 
             
            - .gitignore
         | 
| 92 | 
            +
            - .travis.yml
         | 
| 63 93 | 
             
            - Gemfile
         | 
| 64 94 | 
             
            - LICENSE.txt
         | 
| 65 95 | 
             
            - README.md
         | 
| @@ -71,6 +101,7 @@ files: | |
| 71 101 | 
             
            - riposte.gemspec
         | 
| 72 102 | 
             
            - spec/helper_spec.rb
         | 
| 73 103 | 
             
            - spec/reaction_spec.rb
         | 
| 104 | 
            +
            - spec/spec_helper.rb
         | 
| 74 105 | 
             
            homepage: https://github.com/BinaryNoggin/riposte
         | 
| 75 106 | 
             
            licenses:
         | 
| 76 107 | 
             
            - MIT
         | 
| @@ -98,3 +129,4 @@ summary: A micro-gem for handling different outcomes of an action | |
| 98 129 | 
             
            test_files:
         | 
| 99 130 | 
             
            - spec/helper_spec.rb
         | 
| 100 131 | 
             
            - spec/reaction_spec.rb
         | 
| 132 | 
            +
            - spec/spec_helper.rb
         |