british 0.1.1 → 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/lib/british.rb +65 -34
- metadata +3 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 3836974f5f6e65cc936f70cf0c34dad3eb98f9b7
         | 
| 4 | 
            +
              data.tar.gz: 7ec6347cb6583f9cea09d399e32e277a60ce6753
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 2efa86bab2c4438f3bba0b8831e57a727019f01cde7b6e8187c50b049636dbb31a86bddcab39915fbd32e3d70cbcc1c213ef0aad1cd9404cd89e67fc64b130f5
         | 
| 7 | 
            +
              data.tar.gz: f103153e8c950d6397c718025eb1c25516d8fba309c10380ae64755f4ca9dfd3c65c17809cc80bcdb701d16d877498258401ff256f298483a4d578037030aed7
         | 
    
        data/lib/british.rb
    CHANGED
    
    | @@ -62,7 +62,10 @@ module British | |
| 62 62 | 
             
                'isation' => 'ization',
         | 
| 63 63 | 
             
                'yse'     => 'yze',
         | 
| 64 64 | 
             
                'ogue'    => 'og'
         | 
| 65 | 
            -
              }
         | 
| 65 | 
            +
              }.freeze
         | 
| 66 | 
            +
             | 
| 67 | 
            +
              # Public: Regexp pattern to search/replace British words endings
         | 
| 68 | 
            +
              BRITISH_ENDING_PATTERN = /#{Regexp.union(ENDINGS.keys)}(?=_|-|\?|\!|=|$)/
         | 
| 66 69 |  | 
| 67 70 | 
             
              # Public: Submodule to be included in your own classes to use `initialise`
         | 
| 68 71 | 
             
              #
         | 
| @@ -94,46 +97,74 @@ module British | |
| 94 97 | 
             
              # Public: British alias of native is_a? method
         | 
| 95 98 | 
             
              # Returns the original method's result
         | 
| 96 99 | 
             
              def is_an?(*args)
         | 
| 97 | 
            -
                is_a?(*args) if  | 
| 100 | 
            +
                is_a?(*args) if respond_to?(:is_a?)
         | 
| 98 101 | 
             
              end
         | 
| 99 102 |  | 
| 100 103 | 
             
              # Public: additional alias for is_an?/is_a? method
         | 
| 101 | 
            -
               | 
| 104 | 
            +
              alias an? is_an?
         | 
| 102 105 |  | 
| 103 | 
            -
               | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 106 | 
            -
              #   name - original method name
         | 
| 107 | 
            -
              #   *args - original method args
         | 
| 108 | 
            -
              #
         | 
| 109 | 
            -
              # Example
         | 
| 110 | 
            -
              #
         | 
| 111 | 
            -
              #   # with any British object
         | 
| 112 | 
            -
              #   british_object.colour    # will be translated into color
         | 
| 113 | 
            -
              #   british_object.magnetise # will be translated into magnetize
         | 
| 114 | 
            -
              #
         | 
| 115 | 
            -
              #   # all method endings age allowed
         | 
| 116 | 
            -
              #   british_object.surprize!
         | 
| 117 | 
            -
              #   british_object.surprize?
         | 
| 118 | 
            -
              #   british_object.surprize=
         | 
| 119 | 
            -
              #
         | 
| 120 | 
            -
              #   # complex names are supported
         | 
| 121 | 
            -
              #   british_object.initialise_something # initialize_something will be called
         | 
| 122 | 
            -
              #
         | 
| 123 | 
            -
              # Returns the original method's result
         | 
| 124 | 
            -
              # Raises NoMethodError if the method cannot be found.
         | 
| 125 | 
            -
              def method_missing(name, *args)
         | 
| 126 | 
            -
                name = name.to_s
         | 
| 106 | 
            +
              def self.included(host_class)
         | 
| 107 | 
            +
                host_class.extend ClassMethods
         | 
| 108 | 
            +
                host_class.overwrite_method_missing
         | 
| 127 109 |  | 
| 128 | 
            -
                 | 
| 129 | 
            -
                   | 
| 110 | 
            +
                host_class.instance_eval do
         | 
| 111 | 
            +
                  def method_added(name)
         | 
| 112 | 
            +
                    return if name != :method_missing
         | 
| 113 | 
            +
                    overwrite_method_missing
         | 
| 114 | 
            +
                  end
         | 
| 115 | 
            +
                end
         | 
| 116 | 
            +
              end
         | 
| 130 117 |  | 
| 131 | 
            -
             | 
| 132 | 
            -
             | 
| 118 | 
            +
              # Public: ClassMethods to extend in self.included
         | 
| 119 | 
            +
              # Defines an?, is_an?, method_missing
         | 
| 120 | 
            +
              module ClassMethods
         | 
| 133 121 |  | 
| 134 | 
            -
             | 
| 135 | 
            -
                 | 
| 122 | 
            +
                # Public: method to overwrite original method_missing with magic one:
         | 
| 123 | 
            +
                # this method_missing tries to translate British methods to American
         | 
| 124 | 
            +
                # ones before throwing NoMethodError if neither method was found.
         | 
| 125 | 
            +
                #
         | 
| 126 | 
            +
                #   name - original method name
         | 
| 127 | 
            +
                #   *args - original method args
         | 
| 128 | 
            +
                #
         | 
| 129 | 
            +
                # Example
         | 
| 130 | 
            +
                #
         | 
| 131 | 
            +
                #   # with any British object
         | 
| 132 | 
            +
                #   british_object.colour    # will be translated into color
         | 
| 133 | 
            +
                #   british_object.magnetise # will be translated into magnetize
         | 
| 134 | 
            +
                #
         | 
| 135 | 
            +
                #   # all method endings age allowed
         | 
| 136 | 
            +
                #   british_object.surprize!
         | 
| 137 | 
            +
                #   british_object.surprize?
         | 
| 138 | 
            +
                #   british_object.surprize=
         | 
| 139 | 
            +
                #
         | 
| 140 | 
            +
                #   # complex names are supported
         | 
| 141 | 
            +
                #   british_object.initialise_something # initialize_something will be called
         | 
| 142 | 
            +
                #
         | 
| 143 | 
            +
                # Returns the original method's result
         | 
| 144 | 
            +
                # Calls original method_missing (if British didn't hook anything)
         | 
| 145 | 
            +
                # Raises NoMethodError if the method cannot be found
         | 
| 146 | 
            +
                def overwrite_method_missing
         | 
| 147 | 
            +
                  class_eval do
         | 
| 148 | 
            +
                    unless method_defined?(:british_method_missing)
         | 
| 149 | 
            +
                      define_method(:british_method_missing) do |name, *args|
         | 
| 150 | 
            +
                        # do British magic
         | 
| 151 | 
            +
                        americanised_name = name.to_s.gsub(BRITISH_ENDING_PATTERN, ENDINGS)
         | 
| 152 | 
            +
                        return send(americanised_name, *args) if respond_to?(americanised_name)
         | 
| 136 153 |  | 
| 137 | 
            -
             | 
| 154 | 
            +
                        # call original method_missing (avoid double original method calls)
         | 
| 155 | 
            +
                        return original_method_missing(name, *args) if caller[0] !~ /method_missing/ && defined?(:original_method_missing)
         | 
| 156 | 
            +
             | 
| 157 | 
            +
                        # call original parent's method_missing
         | 
| 158 | 
            +
                        method = self.class.superclass.instance_method(:original_method_missing)
         | 
| 159 | 
            +
                        return method.bind(self).call(name, *args) if method
         | 
| 160 | 
            +
                      end
         | 
| 161 | 
            +
                    end
         | 
| 162 | 
            +
             | 
| 163 | 
            +
                    if instance_method(:method_missing) != instance_method(:british_method_missing)
         | 
| 164 | 
            +
                      alias_method :original_method_missing, :method_missing
         | 
| 165 | 
            +
                      alias_method :method_missing, :british_method_missing
         | 
| 166 | 
            +
                    end
         | 
| 167 | 
            +
                  end
         | 
| 168 | 
            +
                end
         | 
| 138 169 | 
             
              end
         | 
| 139 170 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: british
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.2.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Serge Bedzhyk
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2016- | 
| 11 | 
            +
            date: 2016-03-06 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies: []
         | 
| 13 13 | 
             
            description: 'Allows to use alternative words endings: -ise instead of -ize etc. Defines
         | 
| 14 14 | 
             
              `is_an?` as an alias of the is_a? method. Provides module to use `initialise` in
         | 
| @@ -39,7 +39,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 39 39 | 
             
                  version: '0'
         | 
| 40 40 | 
             
            requirements: []
         | 
| 41 41 | 
             
            rubyforge_project: 
         | 
| 42 | 
            -
            rubygems_version: 2.5. | 
| 42 | 
            +
            rubygems_version: 2.5.2
         | 
| 43 43 | 
             
            signing_key: 
         | 
| 44 44 | 
             
            specification_version: 4
         | 
| 45 45 | 
             
            summary: A tiny module that is supposed to help Brits to use Ruby with more comfort.
         |