role_playing 0.1.0 → 0.1.2
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 +7 -0
- data/.gitignore +1 -0
- data/.travis.yml +7 -0
- data/README.md +74 -58
- data/lib/role_playing.rb +2 -1
- data/lib/role_playing/context.rb +1 -1
- data/lib/role_playing/railtie.rb +9 -3
- data/lib/role_playing/version.rb +1 -1
- data/role_playing.gemspec +1 -1
- metadata +16 -25
- data/lib/role_playing/engine.rb +0 -4
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA1:
         | 
| 3 | 
            +
              metadata.gz: 0bb79da3d2d1f840906ef6a9b5007a4c3341a354
         | 
| 4 | 
            +
              data.tar.gz: 116bd8cddd8b97b7bf4b47fedf49d2090c8fbf70
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: a6e6e30ede28a81b584185b3d4e113f81bcb5a33ab96f5e74d285404f5b504ae7d0d982c4e0944345faf83796b4321123104d1652f54f28afc30686edbedf025
         | 
| 7 | 
            +
              data.tar.gz: 558d0d07a4bfe621689d2524f6bf33ecb608523f5d3a3819dc3b3dafa0db3ed53d1b28fdc94c9a62a8f0c3a8b127a1cf69adc2d16293940b97e9c18cdd601bb5
         | 
    
        data/.gitignore
    CHANGED
    
    
    
        data/.travis.yml
    ADDED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -1,3 +1,5 @@ | |
| 1 | 
            +
            [](https://travis-ci.org/johnae/role_playing)
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            # RolePlaying
         | 
| 2 4 |  | 
| 3 5 | 
             
            A ruby DCI implementation using SimpleDelegator. This was extracted from a Rails app I'm working on. It's a very simple and straightforward implementation.
         | 
| @@ -15,7 +17,9 @@ A further comment on 2 is that it means EVERY time you call extend it blows Ruby | |
| 15 17 |  | 
| 16 18 | 
             
            Add this line to your application's Gemfile:
         | 
| 17 19 |  | 
| 18 | 
            -
             | 
| 20 | 
            +
            ```ruby
         | 
| 21 | 
            +
            gem 'role_playing'
         | 
| 22 | 
            +
            ```
         | 
| 19 23 |  | 
| 20 24 | 
             
            And then execute:
         | 
| 21 25 |  | 
| @@ -29,85 +33,97 @@ Or install it yourself as: | |
| 29 33 |  | 
| 30 34 | 
             
            Using it is as simple as defining (usually) a context like so:
         | 
| 31 35 |  | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
                  end
         | 
| 48 | 
            -
                
         | 
| 49 | 
            -
                  role :SourceAccount do
         | 
| 50 | 
            -
                    def withdraw(amount)
         | 
| 51 | 
            -
                      self.amount=self.amount-amount
         | 
| 52 | 
            -
                      amount
         | 
| 53 | 
            -
                    end
         | 
| 54 | 
            -
                  end
         | 
| 55 | 
            -
                
         | 
| 56 | 
            -
                  role :DestinationAccount do
         | 
| 57 | 
            -
                    def deposit(amount)
         | 
| 58 | 
            -
                      self.amount=self.amount+amount
         | 
| 59 | 
            -
                    end
         | 
| 60 | 
            -
                  end
         | 
| 61 | 
            -
                
         | 
| 36 | 
            +
            ```ruby
         | 
| 37 | 
            +
            class MoneyTransferring
         | 
| 38 | 
            +
              include RolePlaying::Context
         | 
| 39 | 
            +
             | 
| 40 | 
            +
              def initialize(from_account, to_account)
         | 
| 41 | 
            +
                @from_account = from_account
         | 
| 42 | 
            +
                @to_account = to_account
         | 
| 43 | 
            +
              end
         | 
| 44 | 
            +
              def call(amount)
         | 
| 45 | 
            +
                ## this is a little contrived I know
         | 
| 46 | 
            +
                ## it could be easily implemented using
         | 
| 47 | 
            +
                ## increment/decrement methods - just
         | 
| 48 | 
            +
                ## showing the block syntax here
         | 
| 49 | 
            +
                SourceAccount(@from_account) do |source_account|
         | 
| 50 | 
            +
                  DestinationAccount(@to_account).deposit(source_account.withdraw(amount))
         | 
| 62 51 | 
             
                end
         | 
| 52 | 
            +
              end
         | 
| 63 53 |  | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
                   | 
| 68 | 
            -
                  end
         | 
| 54 | 
            +
              role :SourceAccount do
         | 
| 55 | 
            +
                def withdraw(amount)
         | 
| 56 | 
            +
                  self.amount=self.amount-amount
         | 
| 57 | 
            +
                  amount
         | 
| 69 58 | 
             
                end
         | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 59 | 
            +
              end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
              role :DestinationAccount do
         | 
| 62 | 
            +
                def deposit(amount)
         | 
| 63 | 
            +
                  self.amount=self.amount+amount
         | 
| 74 64 | 
             
                end
         | 
| 65 | 
            +
              end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
            end
         | 
| 68 | 
            +
            ```
         | 
| 69 | 
            +
             | 
| 70 | 
            +
            Or roles by themselves like so:
         | 
| 71 | 
            +
             | 
| 72 | 
            +
            ```ruby
         | 
| 73 | 
            +
            class MyRole < RolePlaying::Role
         | 
| 74 | 
            +
              def my_additional_method
         | 
| 75 | 
            +
              end
         | 
| 76 | 
            +
            end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
            class MyOtherRole < RolePlaying::Role
         | 
| 79 | 
            +
              def my_other_method
         | 
| 80 | 
            +
              end
         | 
| 81 | 
            +
            end
         | 
| 82 | 
            +
            ```
         | 
| 75 83 |  | 
| 76 84 | 
             
            And, if defined by themselves, they can be applied in a few ways:
         | 
| 77 85 |  | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 83 | 
            -
             | 
| 84 | 
            -
             | 
| 86 | 
            +
            ```ruby
         | 
| 87 | 
            +
            ## our data object which will play different roles (eg. get new/different behavior within a context)
         | 
| 88 | 
            +
            class MyDataObject
         | 
| 89 | 
            +
            end
         | 
| 90 | 
            +
             | 
| 91 | 
            +
            MyRole.played_by(MyDataObject) do |role|
         | 
| 92 | 
            +
              role.my_additional_method
         | 
| 93 | 
            +
            end
         | 
| 94 | 
            +
            ```
         | 
| 85 95 |  | 
| 86 96 | 
             
            or
         | 
| 87 97 |  | 
| 88 | 
            -
             | 
| 89 | 
            -
             | 
| 98 | 
            +
            ```ruby
         | 
| 99 | 
            +
            role = MyRole.played_by(MyDataObject)
         | 
| 100 | 
            +
            role.my_additional_method
         | 
| 101 | 
            +
            ```
         | 
| 90 102 |  | 
| 91 103 | 
             
            several roles can be applied too like so:
         | 
| 92 104 |  | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 95 | 
            -
             | 
| 96 | 
            -
             | 
| 105 | 
            +
            ```ruby
         | 
| 106 | 
            +
            [MyRole, MyOtherRole].played_by(MyDataObject) do |role|
         | 
| 107 | 
            +
              role.my_additional_method
         | 
| 108 | 
            +
              role.my_other_method
         | 
| 109 | 
            +
            end
         | 
| 110 | 
            +
            ```
         | 
| 97 111 |  | 
| 98 112 | 
             
            or
         | 
| 99 113 |  | 
| 100 | 
            -
             | 
| 101 | 
            -
             | 
| 102 | 
            -
             | 
| 114 | 
            +
            ```ruby
         | 
| 115 | 
            +
            role = [MyRole, MyOtherRole].played_by(MyDataObject)
         | 
| 116 | 
            +
            role.my_additional_method
         | 
| 117 | 
            +
            role.my_other_method
         | 
| 118 | 
            +
            ```
         | 
| 103 119 |  | 
| 104 | 
            -
            Within a context a role is defined by the role class method. The syntax sugar of applying a role - eg. MyRole(MyDataObject) do |role| - is only available within classes including the  | 
| 120 | 
            +
            Within a context a role is defined by the role class method. The syntax sugar of applying a role - eg. MyRole(MyDataObject) do |role| - is only available within classes including the RolePlaying::Context module. This was the way I envisioned it - to basically keep all code concerning a context within the same file (and inside the context class).
         | 
| 105 121 |  | 
| 106 122 | 
             
            Please read the specs for a better understanding. Also please look up DCI (data, context, interaction) for a better understanding of what this is trying to accomplish.
         | 
| 107 123 |  | 
| 108 124 | 
             
            ## RSpec
         | 
| 109 125 |  | 
| 110 | 
            -
             | 
| 126 | 
            +
            There's an RSpec extension included which basically aliases RSpecs context to role so the language used in RSpec can be closer to DCI when testing these things.
         | 
| 111 127 | 
             
            To use that extension just do require 'role_playing/rspec_role' in your spec_helper. Look at the specs in this gem to see what I mean.
         | 
| 112 128 |  | 
| 113 129 | 
             
            ## Rails
         | 
    
        data/lib/role_playing.rb
    CHANGED
    
    
    
        data/lib/role_playing/context.rb
    CHANGED
    
    | @@ -4,7 +4,7 @@ module RolePlaying | |
| 4 4 | 
             
                  base.extend(ClassMethods)
         | 
| 5 5 | 
             
                end
         | 
| 6 6 | 
             
                module ClassMethods
         | 
| 7 | 
            -
                  ## this seemed  | 
| 7 | 
            +
                  ## this seemed too dangerous to use
         | 
| 8 8 | 
             
                  ## it enabled us to use Constants when
         | 
| 9 9 | 
             
                  ## defining roles but would also not
         | 
| 10 10 | 
             
                  ## warn about missing constants - which is pretty bad
         | 
    
        data/lib/role_playing/railtie.rb
    CHANGED
    
    | @@ -1,9 +1,15 @@ | |
| 1 | 
            -
            require 'rails'
         | 
| 1 | 
            +
            require 'rails/railtie'
         | 
| 2 2 |  | 
| 3 3 | 
             
            module RolePlaying
         | 
| 4 | 
            -
              class Railtie <  | 
| 5 | 
            -
                 | 
| 4 | 
            +
              class Railtie < Rails::Railtie #:nodoc:
         | 
| 5 | 
            +
                
         | 
| 6 | 
            +
                config.after_initialize do |app|
         | 
| 6 7 | 
             
                  config.autoload_paths += %W(#{config.root}/app/contexts)
         | 
| 8 | 
            +
                  ## this seems necessary
         | 
| 9 | 
            +
                  Dir["#{config.root}/app/contexts/*"].each do |ctx|
         | 
| 10 | 
            +
                     require_dependency ctx
         | 
| 11 | 
            +
                  end
         | 
| 7 12 | 
             
                end
         | 
| 13 | 
            +
                
         | 
| 8 14 | 
             
              end
         | 
| 9 15 | 
             
            end
         | 
    
        data/lib/role_playing/version.rb
    CHANGED
    
    
    
        data/role_playing.gemspec
    CHANGED
    
    | @@ -18,7 +18,7 @@ Gem::Specification.new do |gem| | |
| 18 18 | 
             
              gem.require_paths = ["lib"]
         | 
| 19 19 |  | 
| 20 20 | 
             
              gem.add_development_dependency("rspec", ">= 2.12.0")
         | 
| 21 | 
            -
              gem.add_development_dependency("bundler" | 
| 21 | 
            +
              gem.add_development_dependency("bundler")
         | 
| 22 22 |  | 
| 23 23 | 
             
              gem.add_dependency("activesupport", ">= 3.0.0")
         | 
| 24 24 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,62 +1,55 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: role_playing
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 5 | 
            -
              prerelease: 
         | 
| 4 | 
            +
              version: 0.1.2
         | 
| 6 5 | 
             
            platform: ruby
         | 
| 7 6 | 
             
            authors:
         | 
| 8 7 | 
             
            - John Axel Eriksson
         | 
| 9 8 | 
             
            autorequire: 
         | 
| 10 9 | 
             
            bindir: bin
         | 
| 11 10 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2013-02 | 
| 11 | 
            +
            date: 2013-09-02 00:00:00.000000000 Z
         | 
| 13 12 | 
             
            dependencies:
         | 
| 14 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 14 | 
             
              name: rspec
         | 
| 16 15 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 17 | 
            -
                none: false
         | 
| 18 16 | 
             
                requirements:
         | 
| 19 | 
            -
                - -  | 
| 17 | 
            +
                - - '>='
         | 
| 20 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 21 19 | 
             
                    version: 2.12.0
         | 
| 22 20 | 
             
              type: :development
         | 
| 23 21 | 
             
              prerelease: false
         | 
| 24 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 25 | 
            -
                none: false
         | 
| 26 23 | 
             
                requirements:
         | 
| 27 | 
            -
                - -  | 
| 24 | 
            +
                - - '>='
         | 
| 28 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 29 26 | 
             
                    version: 2.12.0
         | 
| 30 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 31 28 | 
             
              name: bundler
         | 
| 32 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 33 | 
            -
                none: false
         | 
| 34 30 | 
             
                requirements:
         | 
| 35 | 
            -
                - -  | 
| 31 | 
            +
                - - '>='
         | 
| 36 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 37 | 
            -
                    version:  | 
| 33 | 
            +
                    version: '0'
         | 
| 38 34 | 
             
              type: :development
         | 
| 39 35 | 
             
              prerelease: false
         | 
| 40 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 41 | 
            -
                none: false
         | 
| 42 37 | 
             
                requirements:
         | 
| 43 | 
            -
                - -  | 
| 38 | 
            +
                - - '>='
         | 
| 44 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 45 | 
            -
                    version:  | 
| 40 | 
            +
                    version: '0'
         | 
| 46 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 47 42 | 
             
              name: activesupport
         | 
| 48 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 49 | 
            -
                none: false
         | 
| 50 44 | 
             
                requirements:
         | 
| 51 | 
            -
                - -  | 
| 45 | 
            +
                - - '>='
         | 
| 52 46 | 
             
                  - !ruby/object:Gem::Version
         | 
| 53 47 | 
             
                    version: 3.0.0
         | 
| 54 48 | 
             
              type: :runtime
         | 
| 55 49 | 
             
              prerelease: false
         | 
| 56 50 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 57 | 
            -
                none: false
         | 
| 58 51 | 
             
                requirements:
         | 
| 59 | 
            -
                - -  | 
| 52 | 
            +
                - - '>='
         | 
| 60 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 61 54 | 
             
                    version: 3.0.0
         | 
| 62 55 | 
             
            description: A ruby DCI implementation
         | 
| @@ -67,6 +60,7 @@ extensions: [] | |
| 67 60 | 
             
            extra_rdoc_files: []
         | 
| 68 61 | 
             
            files:
         | 
| 69 62 | 
             
            - .gitignore
         | 
| 63 | 
            +
            - .travis.yml
         | 
| 70 64 | 
             
            - Gemfile
         | 
| 71 65 | 
             
            - LICENSE.txt
         | 
| 72 66 | 
             
            - README.md
         | 
| @@ -74,7 +68,6 @@ files: | |
| 74 68 | 
             
            - lib/role_playing.rb
         | 
| 75 69 | 
             
            - lib/role_playing/context.rb
         | 
| 76 70 | 
             
            - lib/role_playing/core_ext.rb
         | 
| 77 | 
            -
            - lib/role_playing/engine.rb
         | 
| 78 71 | 
             
            - lib/role_playing/railtie.rb
         | 
| 79 72 | 
             
            - lib/role_playing/role.rb
         | 
| 80 73 | 
             
            - lib/role_playing/rspec_role.rb
         | 
| @@ -84,29 +77,27 @@ files: | |
| 84 77 | 
             
            - spec/spec_helper.rb
         | 
| 85 78 | 
             
            homepage: ''
         | 
| 86 79 | 
             
            licenses: []
         | 
| 80 | 
            +
            metadata: {}
         | 
| 87 81 | 
             
            post_install_message: 
         | 
| 88 82 | 
             
            rdoc_options: []
         | 
| 89 83 | 
             
            require_paths:
         | 
| 90 84 | 
             
            - lib
         | 
| 91 85 | 
             
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 92 | 
            -
              none: false
         | 
| 93 86 | 
             
              requirements:
         | 
| 94 | 
            -
              - -  | 
| 87 | 
            +
              - - '>='
         | 
| 95 88 | 
             
                - !ruby/object:Gem::Version
         | 
| 96 89 | 
             
                  version: '0'
         | 
| 97 90 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 98 | 
            -
              none: false
         | 
| 99 91 | 
             
              requirements:
         | 
| 100 | 
            -
              - -  | 
| 92 | 
            +
              - - '>='
         | 
| 101 93 | 
             
                - !ruby/object:Gem::Version
         | 
| 102 94 | 
             
                  version: '0'
         | 
| 103 95 | 
             
            requirements: []
         | 
| 104 96 | 
             
            rubyforge_project: 
         | 
| 105 | 
            -
            rubygems_version:  | 
| 97 | 
            +
            rubygems_version: 2.0.2
         | 
| 106 98 | 
             
            signing_key: 
         | 
| 107 | 
            -
            specification_version:  | 
| 99 | 
            +
            specification_version: 4
         | 
| 108 100 | 
             
            summary: A ruby DCI implementation
         | 
| 109 101 | 
             
            test_files:
         | 
| 110 102 | 
             
            - spec/role_playing/role_playing_spec.rb
         | 
| 111 103 | 
             
            - spec/spec_helper.rb
         | 
| 112 | 
            -
            has_rdoc: 
         | 
    
        data/lib/role_playing/engine.rb
    DELETED