scamp 0.2.1 → 1.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.
- data/README.md +1 -0
- data/lib/scamp/connection.rb +6 -1
- data/lib/scamp/users.rb +17 -9
- data/lib/scamp/version.rb +1 -1
- data/lib/scamp.rb +2 -2
- data/spec/lib/scamp_spec.rb +33 -2
- metadata +16 -16
    
        data/README.md
    CHANGED
    
    | @@ -232,6 +232,7 @@ First class support, commits and pull requests, thanks guys! | |
| 232 232 |  | 
| 233 233 | 
             
            * [Caius Durling](http://caius.name/)
         | 
| 234 234 | 
             
            * Sudara Williams of [Ramen Music](http://ramenmusic.com)
         | 
| 235 | 
            +
            * [Dom Hodgson](http://www.thehodge.co.uk/) (for the name)
         | 
| 235 236 |  | 
| 236 237 | 
             
            ## License
         | 
| 237 238 |  | 
    
        data/lib/scamp/connection.rb
    CHANGED
    
    | @@ -2,7 +2,7 @@ class Scamp | |
| 2 2 | 
             
              module Connection
         | 
| 3 3 | 
             
                private
         | 
| 4 4 |  | 
| 5 | 
            -
                def connect(api_key, room_list)
         | 
| 5 | 
            +
                def connect(api_key, room_list, &blk)
         | 
| 6 6 | 
             
                  EventMachine.run do
         | 
| 7 7 |  | 
| 8 8 | 
             
                    # Check for rooms to join, and join them
         | 
| @@ -15,6 +15,11 @@ class Scamp | |
| 15 15 | 
             
                    populate_room_list do
         | 
| 16 16 | 
             
                      logger.debug "Adding #{room_list.join ', '} to list of rooms to join"
         | 
| 17 17 | 
             
                      @rooms_to_join = room_list.map{|c| room_id(c) }
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                      # Call a post connection block
         | 
| 20 | 
            +
                      if block_given?
         | 
| 21 | 
            +
                        yield
         | 
| 22 | 
            +
                      end
         | 
| 18 23 | 
             
                    end
         | 
| 19 24 |  | 
| 20 25 | 
             
                    # populate bot data separately, in case we are ignoring ourselves
         | 
    
        data/lib/scamp/users.rb
    CHANGED
    
    | @@ -3,23 +3,31 @@ class Scamp | |
| 3 3 | 
             
                # Return the user_id if we haven't got the real name and
         | 
| 4 4 | 
             
                # kick off a user data fetch
         | 
| 5 5 | 
             
                def username_for(user_id)
         | 
| 6 | 
            -
                   | 
| 7 | 
            -
             | 
| 8 | 
            -
                   | 
| 6 | 
            +
                  if cached_user?(user_id)
         | 
| 7 | 
            +
                    user_cache[user_id]["name"]
         | 
| 8 | 
            +
                  else
         | 
| 9 | 
            +
                    fetch_data_for(user_id)
         | 
| 10 | 
            +
                    user_id.to_s
         | 
| 11 | 
            +
                  end
         | 
| 9 12 | 
             
                end
         | 
| 10 | 
            -
             | 
| 13 | 
            +
             | 
| 11 14 | 
             
                def is_me?(user_id)
         | 
| 12 15 | 
             
                  if user_cache['me']
         | 
| 13 | 
            -
                     | 
| 16 | 
            +
                    user_cache['me']['id'] == user_id
         | 
| 14 17 | 
             
                  else
         | 
| 15 18 | 
             
                    fetch_data_for('me')
         | 
| 16 | 
            -
                     | 
| 19 | 
            +
                    false
         | 
| 17 20 | 
             
                  end
         | 
| 18 21 | 
             
                end
         | 
| 19 | 
            -
             | 
| 20 | 
            -
                 | 
| 21 | 
            -
             | 
| 22 | 
            +
             | 
| 23 | 
            +
                def cached_user? user_id
         | 
| 24 | 
            +
                  user_cache[user_id] != nil
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
              private
         | 
| 28 | 
            +
             | 
| 22 29 | 
             
                def fetch_data_for(user_id)
         | 
| 30 | 
            +
                  return unless user_id
         | 
| 23 31 | 
             
                  url = "https://#{subdomain}.campfirenow.com/users/#{user_id}.json"
         | 
| 24 32 | 
             
                  http = EventMachine::HttpRequest.new(url).get(:head => {'authorization' => [api_key, 'X'], "Content-Type" => "application/json"})
         | 
| 25 33 | 
             
                  http.callback do
         | 
    
        data/lib/scamp/version.rb
    CHANGED
    
    
    
        data/lib/scamp.rb
    CHANGED
    
    
    
        data/spec/lib/scamp_spec.rb
    CHANGED
    
    | @@ -550,6 +550,7 @@ describe Scamp do | |
| 550 550 | 
             
                context "room operations" do
         | 
| 551 551 | 
             
                  before do
         | 
| 552 552 | 
             
                    @room_list_url = "https://#{@valid_params[:subdomain]}.campfirenow.com/rooms.json"
         | 
| 553 | 
            +
                    @me_list_url = "https://#{@valid_params[:subdomain]}.campfirenow.com/users/me.json"
         | 
| 553 554 | 
             
                    @room_url = "https://#{@valid_params[:subdomain]}.campfirenow.com/room/123.json"
         | 
| 554 555 | 
             
                    @stream_url = "https://streaming.campfirenow.com/room/123/live.json"
         | 
| 555 556 | 
             
                  end
         | 
| @@ -566,7 +567,37 @@ describe Scamp do | |
| 566 567 | 
             
                    }
         | 
| 567 568 | 
             
                    logger_output.should =~ /DEBUG.*Fetched room list/
         | 
| 568 569 | 
             
                  end
         | 
| 569 | 
            -
             | 
| 570 | 
            +
             | 
| 571 | 
            +
                  it "should invoke the post connection callback" do
         | 
| 572 | 
            +
                    mock_logger
         | 
| 573 | 
            +
                    bot = a Scamp
         | 
| 574 | 
            +
             | 
| 575 | 
            +
                    invoked_cb = false
         | 
| 576 | 
            +
             | 
| 577 | 
            +
                    EM.run_block {
         | 
| 578 | 
            +
                      stub_request(:get, @room_list_url).
         | 
| 579 | 
            +
                      with(:headers => {
         | 
| 580 | 
            +
                             'Authorization'=>[@valid_params[:api_key], 'X'],
         | 
| 581 | 
            +
                             'Content-Type' => 'application/json'
         | 
| 582 | 
            +
                           }).
         | 
| 583 | 
            +
                      to_return(:status => 200, :body => Yajl::Encoder.encode(:rooms => @valid_room_cache_data.values), :headers => {})
         | 
| 584 | 
            +
             | 
| 585 | 
            +
                      stub_request(:get, @room_list_url).
         | 
| 586 | 
            +
                      with(:headers => {
         | 
| 587 | 
            +
                             'Authorization'=>[@valid_params[:api_key], 'X']
         | 
| 588 | 
            +
                           }).
         | 
| 589 | 
            +
                      to_return(:status => 200, :body => Yajl::Encoder.encode(:rooms => @valid_room_cache_data.values), :headers => {})
         | 
| 590 | 
            +
             | 
| 591 | 
            +
                      # Disable fetch_data_for, not important to this test.
         | 
| 592 | 
            +
                      Scamp.any_instance.expects(:fetch_data_for).returns(nil)
         | 
| 593 | 
            +
             | 
| 594 | 
            +
                      bot.send(:connect!, [@valid_room_cache_data.keys.first]) do
         | 
| 595 | 
            +
                        invoked_cb = true
         | 
| 596 | 
            +
                      end
         | 
| 597 | 
            +
                    }
         | 
| 598 | 
            +
                    invoked_cb.should be_true
         | 
| 599 | 
            +
                  end
         | 
| 600 | 
            +
             | 
| 570 601 | 
             
                  it "should handle HTTP errors fetching the room list" do
         | 
| 571 602 | 
             
                    mock_logger
         | 
| 572 603 | 
             
                    bot = a Scamp
         | 
| @@ -705,7 +736,7 @@ describe Scamp do | |
| 705 736 | 
             
              def mock_logger
         | 
| 706 737 | 
             
                @logger_string = StringIO.new
         | 
| 707 738 | 
             
                @fake_logger = Logger.new(@logger_string)
         | 
| 708 | 
            -
                Scamp.any_instance.expects(:logger).returns(@fake_logger)
         | 
| 739 | 
            +
                Scamp.any_instance.expects(:logger).at_least(1).returns(@fake_logger)
         | 
| 709 740 | 
             
              end
         | 
| 710 741 |  | 
| 711 742 | 
             
              # Bleurgh
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: scamp
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 1.0.0
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,11 +9,11 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2011- | 
| 12 | 
            +
            date: 2011-12-09 00:00:00.000000000Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: eventmachine
         | 
| 16 | 
            -
              requirement: & | 
| 16 | 
            +
              requirement: &70092491483860 !ruby/object:Gem::Requirement
         | 
| 17 17 | 
             
                none: false
         | 
| 18 18 | 
             
                requirements:
         | 
| 19 19 | 
             
                - - ~>
         | 
| @@ -21,10 +21,10 @@ dependencies: | |
| 21 21 | 
             
                    version: 1.0.0.beta.4
         | 
| 22 22 | 
             
              type: :runtime
         | 
| 23 23 | 
             
              prerelease: false
         | 
| 24 | 
            -
              version_requirements: * | 
| 24 | 
            +
              version_requirements: *70092491483860
         | 
| 25 25 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 26 26 | 
             
              name: yajl-ruby
         | 
| 27 | 
            -
              requirement: & | 
| 27 | 
            +
              requirement: &70092491483340 !ruby/object:Gem::Requirement
         | 
| 28 28 | 
             
                none: false
         | 
| 29 29 | 
             
                requirements:
         | 
| 30 30 | 
             
                - - ~>
         | 
| @@ -32,10 +32,10 @@ dependencies: | |
| 32 32 | 
             
                    version: 0.8.3
         | 
| 33 33 | 
             
              type: :runtime
         | 
| 34 34 | 
             
              prerelease: false
         | 
| 35 | 
            -
              version_requirements: * | 
| 35 | 
            +
              version_requirements: *70092491483340
         | 
| 36 36 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 37 37 | 
             
              name: em-http-request
         | 
| 38 | 
            -
              requirement: & | 
| 38 | 
            +
              requirement: &70092491482760 !ruby/object:Gem::Requirement
         | 
| 39 39 | 
             
                none: false
         | 
| 40 40 | 
             
                requirements:
         | 
| 41 41 | 
             
                - - ~>
         | 
| @@ -43,10 +43,10 @@ dependencies: | |
| 43 43 | 
             
                    version: 1.0.0.beta.4
         | 
| 44 44 | 
             
              type: :runtime
         | 
| 45 45 | 
             
              prerelease: false
         | 
| 46 | 
            -
              version_requirements: * | 
| 46 | 
            +
              version_requirements: *70092491482760
         | 
| 47 47 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 48 48 | 
             
              name: rake
         | 
| 49 | 
            -
              requirement: & | 
| 49 | 
            +
              requirement: &70092491482300 !ruby/object:Gem::Requirement
         | 
| 50 50 | 
             
                none: false
         | 
| 51 51 | 
             
                requirements:
         | 
| 52 52 | 
             
                - - ~>
         | 
| @@ -54,10 +54,10 @@ dependencies: | |
| 54 54 | 
             
                    version: 0.9.2
         | 
| 55 55 | 
             
              type: :development
         | 
| 56 56 | 
             
              prerelease: false
         | 
| 57 | 
            -
              version_requirements: * | 
| 57 | 
            +
              version_requirements: *70092491482300
         | 
| 58 58 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 59 59 | 
             
              name: rspec
         | 
| 60 | 
            -
              requirement: & | 
| 60 | 
            +
              requirement: &70092491481840 !ruby/object:Gem::Requirement
         | 
| 61 61 | 
             
                none: false
         | 
| 62 62 | 
             
                requirements:
         | 
| 63 63 | 
             
                - - ~>
         | 
| @@ -65,10 +65,10 @@ dependencies: | |
| 65 65 | 
             
                    version: 2.6.0
         | 
| 66 66 | 
             
              type: :development
         | 
| 67 67 | 
             
              prerelease: false
         | 
| 68 | 
            -
              version_requirements: * | 
| 68 | 
            +
              version_requirements: *70092491481840
         | 
| 69 69 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 70 70 | 
             
              name: mocha
         | 
| 71 | 
            -
              requirement: & | 
| 71 | 
            +
              requirement: &70092491481380 !ruby/object:Gem::Requirement
         | 
| 72 72 | 
             
                none: false
         | 
| 73 73 | 
             
                requirements:
         | 
| 74 74 | 
             
                - - ~>
         | 
| @@ -76,10 +76,10 @@ dependencies: | |
| 76 76 | 
             
                    version: 0.10.0
         | 
| 77 77 | 
             
              type: :development
         | 
| 78 78 | 
             
              prerelease: false
         | 
| 79 | 
            -
              version_requirements: * | 
| 79 | 
            +
              version_requirements: *70092491481380
         | 
| 80 80 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 81 81 | 
             
              name: webmock
         | 
| 82 | 
            -
              requirement: & | 
| 82 | 
            +
              requirement: &70092491480920 !ruby/object:Gem::Requirement
         | 
| 83 83 | 
             
                none: false
         | 
| 84 84 | 
             
                requirements:
         | 
| 85 85 | 
             
                - - ~>
         | 
| @@ -87,7 +87,7 @@ dependencies: | |
| 87 87 | 
             
                    version: 1.7.6
         | 
| 88 88 | 
             
              type: :development
         | 
| 89 89 | 
             
              prerelease: false
         | 
| 90 | 
            -
              version_requirements: * | 
| 90 | 
            +
              version_requirements: *70092491480920
         | 
| 91 91 | 
             
            description: Eventmachine based Campfire bot framework
         | 
| 92 92 | 
             
            email:
         | 
| 93 93 | 
             
            - will@willj.net
         |