rubysl-observer 1.0.0 → 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/.travis.yml +5 -6
 - data/lib/rubysl/observer/observer.rb +45 -35
 - data/lib/rubysl/observer/version.rb +1 -1
 - data/rubysl-observer.gemspec +0 -1
 - metadata +2 -16
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 93ace3722a7a1a31ff19eb6dd3f274df55e79d58
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 43cb458919cfc1c7a05ff8be99f1c68220600eaf
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 4058fc818ee2aa041614451d122199d1b93d03ef4bf361e1215ef2f3dd697172edb2bc640f22d0f920f5b750190221772886a559881e3071f54a3eb4d4c84546
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: a7e30103766f5d712f93292b58576f95bce33394a296dfb3f2bb4b496ddb300080ac51e9f5539163c2d87401463ec93edb7217814fa5013236a442ff46e7cca2
         
     | 
    
        data/.travis.yml
    CHANGED
    
    
| 
         @@ -1,33 +1,34 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            #
         
     | 
| 
       2 
     | 
    
         
            -
            #  
     | 
| 
      
 2 
     | 
    
         
            +
            # Implementation of the _Observer_ object-oriented design pattern.  The
         
     | 
| 
       3 
3 
     | 
    
         
             
            # following documentation is copied, with modifications, from "Programming
         
     | 
| 
       4 
     | 
    
         
            -
            # Ruby", by Hunt and Thomas; http://www. 
     | 
| 
      
 4 
     | 
    
         
            +
            # Ruby", by Hunt and Thomas; http://www.ruby-doc.org/docs/ProgrammingRuby/html/lib_patterns.html.
         
     | 
| 
       5 
5 
     | 
    
         
             
            #
         
     | 
| 
       6 
     | 
    
         
            -
            #  
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
            # The Observer pattern 
     | 
| 
      
 6 
     | 
    
         
            +
            # See Observable for more info.
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            # The Observer pattern (also known as publish/subscribe) provides a simple
         
     | 
| 
       9 
9 
     | 
    
         
             
            # mechanism for one object to inform a set of interested third-party objects
         
     | 
| 
       10 
10 
     | 
    
         
             
            # when its state changes.
         
     | 
| 
       11 
11 
     | 
    
         
             
            #
         
     | 
| 
       12 
12 
     | 
    
         
             
            # == Mechanism
         
     | 
| 
       13 
13 
     | 
    
         
             
            #
         
     | 
| 
       14 
     | 
    
         
            -
            #  
     | 
| 
      
 14 
     | 
    
         
            +
            # The notifying class mixes in the +Observable+
         
     | 
| 
       15 
15 
     | 
    
         
             
            # module, which provides the methods for managing the associated observer
         
     | 
| 
       16 
16 
     | 
    
         
             
            # objects.
         
     | 
| 
       17 
17 
     | 
    
         
             
            #
         
     | 
| 
       18 
     | 
    
         
            -
            # The observers must implement  
     | 
| 
      
 18 
     | 
    
         
            +
            # The observers must implement a method called +update+ to receive
         
     | 
| 
      
 19 
     | 
    
         
            +
            # notifications.
         
     | 
| 
       19 
20 
     | 
    
         
             
            #
         
     | 
| 
       20 
21 
     | 
    
         
             
            # The observable object must:
         
     | 
| 
       21 
     | 
    
         
            -
            # * assert that it has  
     | 
| 
       22 
     | 
    
         
            -
            # * call  
     | 
| 
      
 22 
     | 
    
         
            +
            # * assert that it has +#changed+
         
     | 
| 
      
 23 
     | 
    
         
            +
            # * call +#notify_observers+
         
     | 
| 
       23 
24 
     | 
    
         
             
            #
         
     | 
| 
       24 
     | 
    
         
            -
            #  
     | 
| 
      
 25 
     | 
    
         
            +
            # === Example
         
     | 
| 
       25 
26 
     | 
    
         
             
            #
         
     | 
| 
       26 
27 
     | 
    
         
             
            # The following example demonstrates this nicely.  A +Ticker+, when run,
         
     | 
| 
       27 
     | 
    
         
            -
            # continually receives the stock +Price+ for its  
     | 
| 
       28 
     | 
    
         
            -
            # general observer of the price, and two warners are demonstrated, a 
     | 
| 
       29 
     | 
    
         
            -
            # and a +WarnHigh+, which print a warning if the price is below or 
     | 
| 
       30 
     | 
    
         
            -
            # set limits, respectively.
         
     | 
| 
      
 28 
     | 
    
         
            +
            # continually receives the stock +Price+ for its <tt>@symbol</tt>.  A +Warner+
         
     | 
| 
      
 29 
     | 
    
         
            +
            # is a general observer of the price, and two warners are demonstrated, a
         
     | 
| 
      
 30 
     | 
    
         
            +
            # +WarnLow+ and a +WarnHigh+, which print a warning if the price is below or
         
     | 
| 
      
 31 
     | 
    
         
            +
            # above their set limits, respectively.
         
     | 
| 
       31 
32 
     | 
    
         
             
            #
         
     | 
| 
       32 
33 
     | 
    
         
             
            # The +update+ callback allows the warners to run without being explicitly
         
     | 
| 
       33 
34 
     | 
    
         
             
            # called.  The system is set up with the +Ticker+ and several observers, and the
         
     | 
| 
         @@ -108,36 +109,39 @@ 
     | 
|
| 
       108 
109 
     | 
    
         
             
            #   Current price: 112
         
     | 
| 
       109 
110 
     | 
    
         
             
            #   Current price: 79
         
     | 
| 
       110 
111 
     | 
    
         
             
            #   --- Sun Jun 09 00:10:25 CDT 2002: Price below 80: 79
         
     | 
| 
       111 
     | 
    
         
            -
             
     | 
| 
       112 
     | 
    
         
            -
             
     | 
| 
       113 
     | 
    
         
            -
            #
         
     | 
| 
       114 
     | 
    
         
            -
            # Implements the Observable design pattern as a mixin so that other objects can
         
     | 
| 
       115 
     | 
    
         
            -
            # be notified of changes in state.  See observer.rb for details and an example.
         
     | 
| 
       116 
     | 
    
         
            -
            #
         
     | 
| 
       117 
112 
     | 
    
         
             
            module Observable
         
     | 
| 
       118 
113 
     | 
    
         | 
| 
       119 
114 
     | 
    
         
             
              #
         
     | 
| 
       120 
     | 
    
         
            -
              # Add +observer+ as an observer on this object.  
     | 
| 
      
 115 
     | 
    
         
            +
              # Add +observer+ as an observer on this object. so that it will receive
         
     | 
| 
       121 
116 
     | 
    
         
             
              # notifications.
         
     | 
| 
       122 
117 
     | 
    
         
             
              #
         
     | 
| 
       123 
     | 
    
         
            -
               
     | 
| 
       124 
     | 
    
         
            -
             
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
      
 118 
     | 
    
         
            +
              # +observer+:: the object that will be notified of changes.
         
     | 
| 
      
 119 
     | 
    
         
            +
              # +func+:: Symbol naming the method that will be called when this Observable
         
     | 
| 
      
 120 
     | 
    
         
            +
              #          has changes.
         
     | 
| 
      
 121 
     | 
    
         
            +
              #
         
     | 
| 
      
 122 
     | 
    
         
            +
              #          This method must return true for +observer.respond_to?+ and will
         
     | 
| 
      
 123 
     | 
    
         
            +
              #          receive <tt>*arg</tt> when #notify_observers is called, where
         
     | 
| 
      
 124 
     | 
    
         
            +
              #          <tt>*arg</tt> is the value passed to #notify_observers by this
         
     | 
| 
      
 125 
     | 
    
         
            +
              #          Observable
         
     | 
| 
      
 126 
     | 
    
         
            +
              def add_observer(observer, func=:update)
         
     | 
| 
      
 127 
     | 
    
         
            +
                @observer_peers = {} unless defined? @observer_peers
         
     | 
| 
      
 128 
     | 
    
         
            +
                unless observer.respond_to? func
         
     | 
| 
      
 129 
     | 
    
         
            +
                  raise NoMethodError, "observer does not respond to `#{func.to_s}'"
         
     | 
| 
       127 
130 
     | 
    
         
             
                end
         
     | 
| 
       128 
     | 
    
         
            -
                @observer_peers 
     | 
| 
      
 131 
     | 
    
         
            +
                @observer_peers[observer] = func
         
     | 
| 
       129 
132 
     | 
    
         
             
              end
         
     | 
| 
       130 
133 
     | 
    
         | 
| 
       131 
134 
     | 
    
         
             
              #
         
     | 
| 
       132 
     | 
    
         
            -
              #  
     | 
| 
       133 
     | 
    
         
            -
              # notifications.
         
     | 
| 
      
 135 
     | 
    
         
            +
              # Remove +observer+ as an observer on this object so that it will no longer
         
     | 
| 
      
 136 
     | 
    
         
            +
              # receive notifications.
         
     | 
| 
       134 
137 
     | 
    
         
             
              #
         
     | 
| 
      
 138 
     | 
    
         
            +
              # +observer+:: An observer of this Observable
         
     | 
| 
       135 
139 
     | 
    
         
             
              def delete_observer(observer)
         
     | 
| 
       136 
140 
     | 
    
         
             
                @observer_peers.delete observer if defined? @observer_peers
         
     | 
| 
       137 
141 
     | 
    
         
             
              end
         
     | 
| 
       138 
142 
     | 
    
         | 
| 
       139 
143 
     | 
    
         
             
              #
         
     | 
| 
       140 
     | 
    
         
            -
              #  
     | 
| 
      
 144 
     | 
    
         
            +
              # Remove all observers associated with this object.
         
     | 
| 
       141 
145 
     | 
    
         
             
              #
         
     | 
| 
       142 
146 
     | 
    
         
             
              def delete_observers
         
     | 
| 
       143 
147 
     | 
    
         
             
                @observer_peers.clear if defined? @observer_peers
         
     | 
| 
         @@ -158,12 +162,15 @@ module Observable 
     | 
|
| 
       158 
162 
     | 
    
         
             
              # Set the changed state of this object.  Notifications will be sent only if
         
     | 
| 
       159 
163 
     | 
    
         
             
              # the changed +state+ is +true+.
         
     | 
| 
       160 
164 
     | 
    
         
             
              #
         
     | 
| 
      
 165 
     | 
    
         
            +
              # +state+:: Boolean indicating the changed state of this Observable.
         
     | 
| 
      
 166 
     | 
    
         
            +
              #
         
     | 
| 
       161 
167 
     | 
    
         
             
              def changed(state=true)
         
     | 
| 
       162 
168 
     | 
    
         
             
                @observer_state = state
         
     | 
| 
       163 
169 
     | 
    
         
             
              end
         
     | 
| 
       164 
170 
     | 
    
         | 
| 
       165 
171 
     | 
    
         
             
              #
         
     | 
| 
       166 
     | 
    
         
            -
              #  
     | 
| 
      
 172 
     | 
    
         
            +
              # Returns true if this object's state has been changed since the last
         
     | 
| 
      
 173 
     | 
    
         
            +
              # #notify_observers call.
         
     | 
| 
       167 
174 
     | 
    
         
             
              #
         
     | 
| 
       168 
175 
     | 
    
         
             
              def changed?
         
     | 
| 
       169 
176 
     | 
    
         
             
                if defined? @observer_state and @observer_state
         
     | 
| 
         @@ -174,15 +181,18 @@ module Observable 
     | 
|
| 
       174 
181 
     | 
    
         
             
              end
         
     | 
| 
       175 
182 
     | 
    
         | 
| 
       176 
183 
     | 
    
         
             
              #
         
     | 
| 
       177 
     | 
    
         
            -
              #  
     | 
| 
       178 
     | 
    
         
            -
              #  
     | 
| 
       179 
     | 
    
         
            -
              # 
     | 
| 
      
 184 
     | 
    
         
            +
              # Notify observers of a change in state *if* this object's changed state is
         
     | 
| 
      
 185 
     | 
    
         
            +
              # +true+.
         
     | 
| 
      
 186 
     | 
    
         
            +
              #
         
     | 
| 
      
 187 
     | 
    
         
            +
              # This will invoke the method named in #add_observer, passing <tt>*arg</tt>.
         
     | 
| 
      
 188 
     | 
    
         
            +
              # The changed state is then set to +false+.
         
     | 
| 
       180 
189 
     | 
    
         
             
              #
         
     | 
| 
      
 190 
     | 
    
         
            +
              # <tt>*arg</tt>:: Any arguments to pass to the observers.
         
     | 
| 
       181 
191 
     | 
    
         
             
              def notify_observers(*arg)
         
     | 
| 
       182 
192 
     | 
    
         
             
                if defined? @observer_state and @observer_state
         
     | 
| 
       183 
193 
     | 
    
         
             
                  if defined? @observer_peers
         
     | 
| 
       184 
     | 
    
         
            -
                    @observer_peers. 
     | 
| 
       185 
     | 
    
         
            -
                       
     | 
| 
      
 194 
     | 
    
         
            +
                    @observer_peers.each do |k, v|
         
     | 
| 
      
 195 
     | 
    
         
            +
                      k.send v, *arg
         
     | 
| 
       186 
196 
     | 
    
         
             
                    end
         
     | 
| 
       187 
197 
     | 
    
         
             
                  end
         
     | 
| 
       188 
198 
     | 
    
         
             
                  @observer_state = false
         
     | 
    
        data/rubysl-observer.gemspec
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: rubysl-observer
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version:  
     | 
| 
      
 4 
     | 
    
         
            +
              version: 2.0.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Brian Shirai
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2013- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2013-09-05 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bundler
         
     | 
| 
         @@ -52,20 +52,6 @@ dependencies: 
     | 
|
| 
       52 
52 
     | 
    
         
             
                - - ~>
         
     | 
| 
       53 
53 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       54 
54 
     | 
    
         
             
                    version: '1.5'
         
     | 
| 
       55 
     | 
    
         
            -
            - !ruby/object:Gem::Dependency
         
     | 
| 
       56 
     | 
    
         
            -
              name: rubysl-prettyprint
         
     | 
| 
       57 
     | 
    
         
            -
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       58 
     | 
    
         
            -
                requirements:
         
     | 
| 
       59 
     | 
    
         
            -
                - - ~>
         
     | 
| 
       60 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       61 
     | 
    
         
            -
                    version: '1.0'
         
     | 
| 
       62 
     | 
    
         
            -
              type: :development
         
     | 
| 
       63 
     | 
    
         
            -
              prerelease: false
         
     | 
| 
       64 
     | 
    
         
            -
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       65 
     | 
    
         
            -
                requirements:
         
     | 
| 
       66 
     | 
    
         
            -
                - - ~>
         
     | 
| 
       67 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       68 
     | 
    
         
            -
                    version: '1.0'
         
     | 
| 
       69 
55 
     | 
    
         
             
            description: Ruby standard library observer.
         
     | 
| 
       70 
56 
     | 
    
         
             
            email:
         
     | 
| 
       71 
57 
     | 
    
         
             
            - brixen@gmail.com
         
     |