qqq 0.1.1 → 0.1.1.1
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/CHANGELOG.org +128 -27
 - data/Gemfile.lock +1 -1
 - data/lib/qqq/api.rb +9 -0
 - data/lib/qqq/cli.rb +19 -31
 - data/lib/qqq/{event.rb → events.rb} +13 -3
 - data/lib/qqq/keys.rb +3 -3
 - data/lib/qqq/version.rb +1 -1
 - data/lib/qqq.rb +51 -32
 - metadata +3 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: bb0807569101ac3a9dd5bcb582dbcaced669fd5b71d298b75edb3fa18652aae1
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 484588c403f56496c7cfd884c60b47c1a7d72f36167bc4c5ad7693a8b52a150c
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 4e6c7a27bfd72b2b42808136f4cd026d00f88a702286e0a9ace78ee9d201a8a7f61e8f4773f716e52d22dd0d9d947c7bbf2bc8c7616b81fa44fdbc0c3ccca91a
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 562a4bff7546705caf92a099b66e36c3e241479a633c2d799cd35f82af41ac73370dd702e30f3002629edc35633f17c2cbe181e999c6c4b668989a6f543dc1ac
         
     | 
    
        data/CHANGELOG.org
    CHANGED
    
    | 
         @@ -1,59 +1,160 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            * Upcoming 0.2.0 - Woodworking
         
     | 
| 
       1 
2 
     | 
    
         | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
      
 3 
     | 
    
         
            +
            "Do one thing well"
         
     | 
| 
       3 
4 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
      
 5 
     | 
    
         
            +
            Slim down all the extras. Focus on print debugging from anywhere in ruby.
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            ** 0.1.2
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            - [X] Simplify dashboard, easier to read
         
     | 
| 
      
 10 
     | 
    
         
            +
            - [X] remove send... for now. 
         
     | 
| 
      
 11 
     | 
    
         
            +
            - [X] remove payload command for only tail
         
     | 
| 
      
 12 
     | 
    
         
            +
            - [X] mark command can optionally repeat
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            ** 0.1.1 
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            - [X] Hack around fakeredis to get redis connection, if enabled
         
     | 
| 
      
 17 
     | 
    
         
            +
            - [X] Remove messages in favor of richer Event structure 
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            * DONE 0.1.0 - A Thing
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            "It's doing /something/"
         
     | 
| 
       5 
22 
     | 
    
         | 
| 
       6 
23 
     | 
    
         
             
            features
         
     | 
| 
       7 
     | 
    
         
            -
            - [X] recorded timestamp and uuid recorded in db
         
     | 
| 
       8 
     | 
    
         
            -
            - [X] record in a database
         
     | 
| 
      
 24 
     | 
    
         
            +
            - [X] recorded timestamp and uuid recorded in db through app
         
     | 
| 
      
 25 
     | 
    
         
            +
            - [X] record message in a database
         
     | 
| 
       9 
26 
     | 
    
         
             
            - [X] send to an api
         
     | 
| 
       10 
27 
     | 
    
         
             
            - [X] timestamps 
         
     | 
| 
       11 
28 
     | 
    
         
             
            - [X] send message from command line
         
     | 
| 
       12 
29 
     | 
    
         
             
            - [X] tail and mark from command line
         
     | 
| 
       13 
30 
     | 
    
         | 
| 
       14 
31 
     | 
    
         
             
            dev
         
     | 
| 
       15 
     | 
    
         
            -
            - [ 
     | 
| 
       16 
     | 
    
         
            -
            - [X]  
     | 
| 
       17 
     | 
    
         
            -
            - [X] Tighten e2e.sh test.
         
     | 
| 
      
 32 
     | 
    
         
            +
            - [X] Create rudimentary uh... dashboard/orchestration
         
     | 
| 
      
 33 
     | 
    
         
            +
            - [X] Create e2e.sh
         
     | 
| 
       18 
34 
     | 
    
         | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
      
 35 
     | 
    
         
            +
            * Roadmap 
         
     | 
| 
       20 
36 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
            - [ ]  
     | 
| 
       23 
     | 
    
         
            -
            - [ ]  
     | 
| 
       24 
     | 
    
         
            -
            - [ ]  
     | 
| 
      
 37 
     | 
    
         
            +
            ** Table stakes / cleanup
         
     | 
| 
      
 38 
     | 
    
         
            +
            - [ ] Add enough documentation to hello, world (and understand what qqq is) 
         
     | 
| 
      
 39 
     | 
    
         
            +
            - [ ] get someone else to install it, use it
         
     | 
| 
      
 40 
     | 
    
         
            +
            - [ ] Supervisor around cli, etc. e.g. api send dies if server not up yet
         
     | 
| 
      
 41 
     | 
    
         
            +
            - [ ] Cut out redis for ruby pubsub? generate servers for every lang..? just make them..?  https://blog.appsignal.com/2018/08/28/push-and-pubsub-in-ruby.html
         
     | 
| 
       25 
42 
     | 
    
         
             
            - [ ] more tests? CI?
         
     | 
| 
      
 43 
     | 
    
         
            +
            - [ ] Remove payload/messages dichotomy
         
     | 
| 
       26 
44 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
            features
         
     | 
| 
       28 
     | 
    
         
            -
            - [ ]  
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
            * Milestone II
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
            features
         
     | 
| 
      
 45 
     | 
    
         
            +
            ** user features
         
     | 
| 
      
 46 
     | 
    
         
            +
            - [ ] file worker (append to /tmp/qqq)
         
     | 
| 
      
 47 
     | 
    
         
            +
            - [ ] a way to specifiy redis config
         
     | 
| 
       33 
48 
     | 
    
         
             
            - [ ] did not run (no wondering if line didn't run)... possible?
         
     | 
| 
       34 
49 
     | 
    
         
             
            - [ ] increments if run multiple times..
         
     | 
| 
       35 
50 
     | 
    
         
             
            - [ ] start / stop 'marks' 
         
     | 
| 
       36 
51 
     | 
    
         
             
            - [ ] some recent history (last 100?) when I start tailing
         
     | 
| 
       37 
52 
     | 
    
         
             
            - [ ] q, qq, qqq levels
         
     | 
| 
       38 
     | 
    
         
            -
            - [ ] file worker (append to /tmp/qqq)
         
     | 
| 
       39 
53 
     | 
    
         
             
            - [ ] plugin arch for worker 
         
     | 
| 
       40 
54 
     | 
    
         
             
            - [ ] updated development documentation 
         
     | 
| 
       41 
55 
     | 
    
         
             
            - [ ] api key to follow me around (~/.qqq.conf or whatever) 
         
     | 
| 
       42 
56 
     | 
    
         
             
            - [ ] updating webapp (websockets) 
         
     | 
| 
       43 
57 
     | 
    
         
             
            - [ ] handles complex object printing
         
     | 
| 
       44 
     | 
    
         
            -
            - [ ] rich data
         
     | 
| 
      
 58 
     | 
    
         
            +
            - [ ] accept payloads, rich data, rich data
         
     | 
| 
       45 
59 
     | 
    
         
             
            - [ ] metaprogramming / reflection
         
     | 
| 
       46 
60 
     | 
    
         
             
            - [ ] config panel to turn on/off 'q steams'
         
     | 
| 
       47 
61 
     | 
    
         | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
            - [ ]  
     | 
| 
      
 62 
     | 
    
         
            +
            ** dev
         
     | 
| 
      
 63 
     | 
    
         
            +
            - [ ] how can i test this whole system
         
     | 
| 
      
 64 
     | 
    
         
            +
            - [ ] system log channel, 
         
     | 
| 
      
 65 
     | 
    
         
            +
            - [ ] perhaps.. handshake system for handling processes, testing?
         
     | 
| 
       51 
66 
     | 
    
         
             
            - [ ] local gem dev - de-req rake install loop 
         
     | 
| 
       52 
67 
     | 
    
         
             
            - [ ] split out configuration (yaml?) for 'service' interaction
         
     | 
| 
       53 
     | 
    
         
            -
            - [ ] split the development panel / user panel 
     | 
| 
      
 68 
     | 
    
         
            +
            - [ ] split the development panel / user panel
         
     | 
| 
       54 
69 
     | 
    
         | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
      
 70 
     | 
    
         
            +
            ** brewing ideas
         
     | 
| 
       56 
71 
     | 
    
         | 
| 
      
 72 
     | 
    
         
            +
            - get off redis... https://faye.jcoglan.com/ruby/clients.html
         
     | 
| 
       57 
73 
     | 
    
         
             
            - move to a ruby only actor model? (https://github.com/ntl/actor)
         
     | 
| 
       58 
     | 
    
         
            -
            -  
     | 
| 
       59 
     | 
    
         
            -
            - electron app for dashboard? get away from shell stuff
         
     | 
| 
      
 74 
     | 
    
         
            +
            - other langs, javascript?
         
     | 
| 
      
 75 
     | 
    
         
            +
            - electron app for dashboard? get away from shell stuff... 
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
            restreaming
         
     | 
| 
      
 78 
     | 
    
         
            +
            - qqq.restream(:my_event) do |event| 
         
     | 
| 
      
 79 
     | 
    
         
            +
                ...
         
     | 
| 
      
 80 
     | 
    
         
            +
              end
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
            - log to the standard log with a link to the specific log
         
     | 
| 
      
 83 
     | 
    
         
            +
             
         
     | 
| 
      
 84 
     | 
    
         
            +
            check out https://github.com/janlelis/debugging
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
            *** Writing a program to generate the apis...
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
             Could I write some sort of program that could.. create these clients? 
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
             #+begin_src lisp
         
     | 
| 
      
 91 
     | 
    
         
            +
               (namespace :QQQ :CLI
         
     | 
| 
      
 92 
     | 
    
         
            +
                 (define-cli
         
     | 
| 
      
 93 
     | 
    
         
            +
                   (define-task "tail"
         
     | 
| 
      
 94 
     | 
    
         
            +
                     (qqq/subscribe (key message-channel) print-event-to-screen)))
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
                 (define-function print-event-to-screen (event)
         
     | 
| 
      
 97 
     | 
    
         
            +
                   (system-output-command
         
     | 
| 
      
 98 
     | 
    
         
            +
                    (brackets (:timestamp event))
         
     | 
| 
      
 99 
     | 
    
         
            +
                    (space)
         
     | 
| 
      
 100 
     | 
    
         
            +
                    (brackets (:uuid event))
         
     | 
| 
      
 101 
     | 
    
         
            +
                    (space)
         
     | 
| 
      
 102 
     | 
    
         
            +
                    (brackets (:message event))
         
     | 
| 
      
 103 
     | 
    
         
            +
                    (newline))))
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
               (namespace
         
     | 
| 
      
 106 
     | 
    
         
            +
                :QQQ :API
         
     | 
| 
      
 107 
     | 
    
         
            +
                (define-function :publish (message)
         
     | 
| 
      
 108 
     | 
    
         
            +
                  (redis :publish (key event-channel)
         
     | 
| 
      
 109 
     | 
    
         
            +
                         (marshall-to-json (create-event
         
     | 
| 
      
 110 
     | 
    
         
            +
                                            (create-uuid
         
     | 
| 
      
 111 
     | 
    
         
            +
                                             create-timestamp
         
     | 
| 
      
 112 
     | 
    
         
            +
                                             message)))))
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
               (namespace
         
     | 
| 
      
 115 
     | 
    
         
            +
                :QQQ :API
         
     | 
| 
      
 116 
     | 
    
         
            +
                (define-function :subscribe (function_or_callable)
         
     | 
| 
      
 117 
     | 
    
         
            +
                  (redis :subscribe (key event-channel)
         
     | 
| 
      
 118 
     | 
    
         
            +
                         (lambda (event) (call function_or_callable event)))))
         
     | 
| 
      
 119 
     | 
    
         
            +
             #+end_src
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
             Could potentially use org-mode/tangle to do multi-lang well
         
     | 
| 
      
 123 
     | 
    
         
            +
             
     | 
| 
      
 124 
     | 
    
         
            +
             (After qqq, do developer user interviews screen share to find real patterns...)
         
     | 
| 
      
 125 
     | 
    
         
            +
             
     | 
| 
      
 126 
     | 
    
         
            +
             Under heading * Ruby ** Define Module
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
      
 128 
     | 
    
         
            +
             #+value: module-name
         
     | 
| 
      
 129 
     | 
    
         
            +
             #+value: content
         
     | 
| 
      
 130 
     | 
    
         
            +
             #+begin_src ruby
         
     | 
| 
      
 131 
     | 
    
         
            +
             defmodule #{module-name}
         
     | 
| 
      
 132 
     | 
    
         
            +
                #{content}
         
     | 
| 
      
 133 
     | 
    
         
            +
             end
         
     | 
| 
      
 134 
     | 
    
         
            +
             #+end_src
         
     | 
| 
      
 135 
     | 
    
         
            +
             
     | 
| 
      
 136 
     | 
    
         
            +
             I bet that could done reasonably in ruby...
         
     | 
| 
      
 137 
     | 
    
         
            +
             
     | 
| 
      
 138 
     | 
    
         
            +
             
     | 
| 
      
 139 
     | 
    
         
            +
             #+begin_src ruby
         
     | 
| 
      
 140 
     | 
    
         
            +
               class Generator
         
     | 
| 
      
 141 
     | 
    
         
            +
                 attr_reader :lang
         
     | 
| 
      
 142 
     | 
    
         
            +
                 def define_namespace (name, &content_block)
         
     | 
| 
      
 143 
     | 
    
         
            +
                   #render :erb, "path/to/_module.erb", name, content_block.render
         
     | 
| 
      
 144 
     | 
    
         
            +
               <<-END
         
     | 
| 
      
 145 
     | 
    
         
            +
               defmodule #{name}
         
     | 
| 
      
 146 
     | 
    
         
            +
                 #{content_block.render}
         
     | 
| 
      
 147 
     | 
    
         
            +
               end
         
     | 
| 
      
 148 
     | 
    
         
            +
               END
         
     | 
| 
      
 149 
     | 
    
         
            +
                 end
         
     | 
| 
      
 150 
     | 
    
         
            +
             
     | 
| 
      
 151 
     | 
    
         
            +
             
     | 
| 
      
 152 
     | 
    
         
            +
               define_namespace(:QQQ) do
         
     | 
| 
      
 153 
     | 
    
         
            +
                 define_module(:CLI) do 
         
     | 
| 
      
 154 
     | 
    
         
            +
                   define_func(:echo, :argument_vector) do |messages|
         
     | 
| 
      
 155 
     | 
    
         
            +
                     Generated::Formatters::ForHumans.format(messages)
         
     | 
| 
      
 156 
     | 
    
         
            +
                     Generated::Library::QQQ::publish 
         
     | 
| 
      
 157 
     | 
    
         
            +
                   end
         
     | 
| 
      
 158 
     | 
    
         
            +
                 end
         
     | 
| 
      
 159 
     | 
    
         
            +
               end
         
     | 
| 
      
 160 
     | 
    
         
            +
             #+end_src
         
     | 
    
        data/Gemfile.lock
    CHANGED
    
    
    
        data/lib/qqq/api.rb
    CHANGED
    
    | 
         @@ -2,6 +2,15 @@ require 'faraday' 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            module QQQ
         
     | 
| 
       4 
4 
     | 
    
         
             
              module API
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                # desc :send, "Sends message to a remote server"
         
     | 
| 
      
 7 
     | 
    
         
            +
                # def send
         
     | 
| 
      
 8 
     | 
    
         
            +
                #   QQQ.subscribe do |event|
         
     | 
| 
      
 9 
     | 
    
         
            +
                #     puts "Remotely publishing: #{event.message}"
         
     | 
| 
      
 10 
     | 
    
         
            +
                #     API.publish(event)
         
     | 
| 
      
 11 
     | 
    
         
            +
                #   end
         
     | 
| 
      
 12 
     | 
    
         
            +
                # end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
       5 
14 
     | 
    
         
             
                def self.publish(event)
         
     | 
| 
       6 
15 
     | 
    
         
             
                  conn = Faraday.new(:url => "http://localhost:3600")
         
     | 
| 
       7 
16 
     | 
    
         
             
                  resp = conn.post '/events', { :event => event.as_json }
         
     | 
    
        data/lib/qqq/cli.rb
    CHANGED
    
    | 
         @@ -1,52 +1,40 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'thor'
         
     | 
| 
       2 
     | 
    
         
            -
            require 'json'
         
     | 
| 
       3 
2 
     | 
    
         | 
| 
       4 
3 
     | 
    
         
             
            module QQQ
         
     | 
| 
       5 
4 
     | 
    
         
             
              class CLI < Thor
         
     | 
| 
       6 
     | 
    
         
            -
                default_task  
     | 
| 
      
 5 
     | 
    
         
            +
                default_task "tail"
         
     | 
| 
       7 
6 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
                desc  
     | 
| 
      
 7 
     | 
    
         
            +
                desc "tail", "Tails the qqq log"
         
     | 
| 
       9 
8 
     | 
    
         
             
                def tail
         
     | 
| 
       10 
     | 
    
         
            -
                   
     | 
| 
       11 
     | 
    
         
            -
                    puts event. 
     | 
| 
      
 9 
     | 
    
         
            +
                  qqq.subscribe do |event|
         
     | 
| 
      
 10 
     | 
    
         
            +
                    puts event.for_humans
         
     | 
| 
       12 
11 
     | 
    
         
             
                  end
         
     | 
| 
       13 
12 
     | 
    
         
             
                end
         
     | 
| 
       14 
13 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
                desc  
     | 
| 
       16 
     | 
    
         
            -
                def  
     | 
| 
       17 
     | 
    
         
            -
                   
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
      
 14 
     | 
    
         
            +
                desc "mark [repeat_interval]", "Marks the log (optionally every X seconds)"
         
     | 
| 
      
 15 
     | 
    
         
            +
                def mark(repeat_interval)
         
     | 
| 
      
 16 
     | 
    
         
            +
                  repeat_interval = repeat_interval.to_i rescue 0
         
     | 
| 
      
 17 
     | 
    
         
            +
                  loop do
         
     | 
| 
      
 18 
     | 
    
         
            +
                    qqq.mark
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                    if repeat_interval > 0
         
     | 
| 
      
 21 
     | 
    
         
            +
                      sleep repeat_interval
         
     | 
| 
      
 22 
     | 
    
         
            +
                    else
         
     | 
| 
      
 23 
     | 
    
         
            +
                      break
         
     | 
| 
      
 24 
     | 
    
         
            +
                    end
         
     | 
| 
       19 
25 
     | 
    
         
             
                  end
         
     | 
| 
       20 
26 
     | 
    
         
             
                end
         
     | 
| 
       21 
27 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
                desc  
     | 
| 
       23 
     | 
    
         
            -
                def mark
         
     | 
| 
       24 
     | 
    
         
            -
                  QQQ.publish("MARK: --MARK--")
         
     | 
| 
       25 
     | 
    
         
            -
                end
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
                desc "echo [messages]", "Simple echo"
         
     | 
| 
      
 28 
     | 
    
         
            +
                desc "echo [messages]", "Log a message"
         
     | 
| 
       28 
29 
     | 
    
         
             
                def echo(*messages)
         
     | 
| 
       29 
     | 
    
         
            -
                  QQQ.publish(" 
     | 
| 
       30 
     | 
    
         
            -
                end
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
                desc :send, "Sends message to a remote server"
         
     | 
| 
       33 
     | 
    
         
            -
                def send
         
     | 
| 
       34 
     | 
    
         
            -
                  QQQ.subscribe do |event|
         
     | 
| 
       35 
     | 
    
         
            -
                    puts "Remotely publishing: #{event.message}"
         
     | 
| 
       36 
     | 
    
         
            -
                    API.publish(event)
         
     | 
| 
       37 
     | 
    
         
            -
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
                  QQQ.publish("#{messages.join(" ")}")
         
     | 
| 
       38 
31 
     | 
    
         
             
                end
         
     | 
| 
       39 
32 
     | 
    
         | 
| 
       40 
     | 
    
         
            -
                desc :version, " 
     | 
| 
      
 33 
     | 
    
         
            +
                desc :version, "Logs the version number"
         
     | 
| 
       41 
34 
     | 
    
         
             
                def version
         
     | 
| 
       42 
     | 
    
         
            -
                  puts "QQQ  
     | 
| 
      
 35 
     | 
    
         
            +
                  puts "QQQ version: #{QQQ::VERSION}"
         
     | 
| 
       43 
36 
     | 
    
         
             
                  QQQ.publish(QQQ::VERSION)
         
     | 
| 
       44 
37 
     | 
    
         
             
                end
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
                # desc :server, "Starts server to receive message"
         
     | 
| 
       47 
     | 
    
         
            -
                # def server
         
     | 
| 
       48 
     | 
    
         
            -
                #   Sinatra....how?
         
     | 
| 
       49 
     | 
    
         
            -
                # end
         
     | 
| 
       50 
38 
     | 
    
         
             
              end
         
     | 
| 
       51 
39 
     | 
    
         
             
            end
         
     | 
| 
       52 
40 
     | 
    
         | 
| 
         @@ -3,16 +3,25 @@ module QQQ 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
                attr_reader :uuid, :message, :recorded_at
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
                def self. 
     | 
| 
      
 6 
     | 
    
         
            +
                def self.from_message(message)
         
     | 
| 
      
 7 
     | 
    
         
            +
                  timestamp = Time.now
         
     | 
| 
      
 8 
     | 
    
         
            +
                  uuid = UUIDTools::UUID.random_create().to_s
         
     | 
| 
      
 9 
     | 
    
         
            +
                  Event.new(uuid: uuid, message: message, recorded_at: timestamp)
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                def self.from_json_string(json_string)
         
     | 
| 
       7 
13 
     | 
    
         
             
                  payload = JSON.parse json_string
         
     | 
| 
       8 
     | 
    
         
            -
                  puts payload
         
     | 
| 
       9 
14 
     | 
    
         
             
                  Event.new(uuid: payload["uuid"], message: payload["message"], recorded_at: payload["recorded_at"])
         
     | 
| 
       10 
15 
     | 
    
         
             
                end
         
     | 
| 
       11 
16 
     | 
    
         | 
| 
       12 
17 
     | 
    
         
             
                def initialize(uuid:, message:, recorded_at:)
         
     | 
| 
       13 
18 
     | 
    
         
             
                  @uuid = uuid
         
     | 
| 
       14 
     | 
    
         
            -
                  @message = message
         
     | 
| 
       15 
19 
     | 
    
         
             
                  @recorded_at = recorded_at
         
     | 
| 
      
 20 
     | 
    
         
            +
                  @message = message
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                def for_humans
         
     | 
| 
      
 24 
     | 
    
         
            +
                  "[#{@uuid}] [#{@recorded_at}] #{@message}"
         
     | 
| 
       16 
25 
     | 
    
         
             
                end
         
     | 
| 
       17 
26 
     | 
    
         | 
| 
       18 
27 
     | 
    
         
             
                def as_json(options={})
         
     | 
| 
         @@ -27,4 +36,5 @@ module QQQ 
     | 
|
| 
       27 
36 
     | 
    
         
             
                end
         
     | 
| 
       28 
37 
     | 
    
         | 
| 
       29 
38 
     | 
    
         
             
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
       30 
40 
     | 
    
         
             
            end
         
     | 
    
        data/lib/qqq/keys.rb
    CHANGED
    
    
    
        data/lib/qqq/version.rb
    CHANGED
    
    
    
        data/lib/qqq.rb
    CHANGED
    
    | 
         @@ -1,57 +1,76 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Gems
         
     | 
| 
       1 
2 
     | 
    
         
             
            require 'redis'
         
     | 
| 
       2 
3 
     | 
    
         
             
            require 'json'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'uuidtools'
         
     | 
| 
       3 
5 
     | 
    
         | 
| 
       4 
6 
     | 
    
         
             
            # Lib
         
     | 
| 
       5 
     | 
    
         
            -
            require 'qqq/ 
     | 
| 
      
 7 
     | 
    
         
            +
            require 'qqq/events'
         
     | 
| 
       6 
8 
     | 
    
         
             
            require 'qqq/api'
         
     | 
| 
       7 
9 
     | 
    
         
             
            require 'qqq/cli'
         
     | 
| 
       8 
10 
     | 
    
         
             
            require 'qqq/keys'
         
     | 
| 
       9 
11 
     | 
    
         
             
            require 'qqq/version'
         
     | 
| 
       10 
12 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
            require 'uuidtools'
         
     | 
| 
       12 
13 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
            module QQQ
         
     | 
| 
       14 
     | 
    
         
            -
              class Error < StandardError; end
         
     | 
| 
       15 
14 
     | 
    
         | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
               
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
      
 15 
     | 
    
         
            +
            module Kernel
         
     | 
| 
      
 16 
     | 
    
         
            +
              private
         
     | 
| 
      
 17 
     | 
    
         
            +
              def q(message=nil)
         
     | 
| 
      
 18 
     | 
    
         
            +
                @qqq_developer ||= QQQ::Developer.new
         
     | 
| 
      
 19 
     | 
    
         
            +
                message ? @qqq_developer.publish(message) : @qqq_developer.mark
         
     | 
| 
      
 20 
     | 
    
         
            +
                @qqq_developer
         
     | 
| 
       19 
21 
     | 
    
         
             
              end
         
     | 
| 
       20 
22 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
              def  
     | 
| 
       22 
     | 
    
         
            -
                 
     | 
| 
       23 
     | 
    
         
            -
                 
     | 
| 
      
 23 
     | 
    
         
            +
              def qqq(message=nil)
         
     | 
| 
      
 24 
     | 
    
         
            +
                @qqq_developer ||= QQQ::Developer.new
         
     | 
| 
      
 25 
     | 
    
         
            +
                message ? @qqq_developer.publish(message) : @qqq_developer.mark
         
     | 
| 
      
 26 
     | 
    
         
            +
                @qqq_developer
         
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
            end
         
     | 
| 
       24 
29 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
      
 30 
     | 
    
         
            +
            module QQQ
         
     | 
| 
      
 31 
     | 
    
         
            +
              class Error < StandardError; end
         
     | 
| 
       27 
32 
     | 
    
         | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
               
     | 
| 
      
 33 
     | 
    
         
            +
              #
         
     | 
| 
      
 34 
     | 
    
         
            +
              # Developer log channels
         
     | 
| 
      
 35 
     | 
    
         
            +
              #
         
     | 
| 
      
 36 
     | 
    
         
            +
              class Developer
         
     | 
| 
       31 
37 
     | 
    
         | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
      
 38 
     | 
    
         
            +
                def initialize
         
     | 
| 
      
 39 
     | 
    
         
            +
                  @mark_counter = 0
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                def mark
         
     | 
| 
      
 43 
     | 
    
         
            +
                  @mark_counter += 1
         
     | 
| 
      
 44 
     | 
    
         
            +
                  publish("MARK: --MARK-- (#{@mark_counter})")
         
     | 
| 
      
 45 
     | 
    
         
            +
                end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                def publish(message)
         
     | 
| 
      
 48 
     | 
    
         
            +
                  event = Event.from_message(message)
         
     | 
| 
      
 49 
     | 
    
         
            +
                  redis.publish(Keys::EVENT_CHANNEL_KEY, event.to_json)
         
     | 
| 
      
 50 
     | 
    
         
            +
                end
         
     | 
| 
       35 
51 
     | 
    
         | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
                     
     | 
| 
      
 52 
     | 
    
         
            +
                def subscribe &block
         
     | 
| 
      
 53 
     | 
    
         
            +
                  redis.subscribe Keys::EVENT_CHANNEL_KEY do |on|
         
     | 
| 
      
 54 
     | 
    
         
            +
                    on.message do |channel, event_json_string|
         
     | 
| 
      
 55 
     | 
    
         
            +
                      event = Event.from_json_string(event_json_string)
         
     | 
| 
      
 56 
     | 
    
         
            +
                      block.call(event)
         
     | 
| 
      
 57 
     | 
    
         
            +
                    end
         
     | 
| 
       39 
58 
     | 
    
         
             
                  end
         
     | 
| 
       40 
59 
     | 
    
         
             
                end
         
     | 
| 
       41 
     | 
    
         
            -
              end
         
     | 
| 
       42 
60 
     | 
    
         | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
      
 61 
     | 
    
         
            +
                private
         
     | 
| 
       44 
62 
     | 
    
         | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
                   
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
                   
     | 
| 
      
 63 
     | 
    
         
            +
                def redis
         
     | 
| 
      
 64 
     | 
    
         
            +
                  if defined?(FakeRedis) && FakeRedis.enabled?
         
     | 
| 
      
 65 
     | 
    
         
            +
                    FakeRedis.disable
         
     | 
| 
      
 66 
     | 
    
         
            +
                    @redis ||= Redis.new
         
     | 
| 
      
 67 
     | 
    
         
            +
                    FakeRedis.enable
         
     | 
| 
      
 68 
     | 
    
         
            +
                  else
         
     | 
| 
      
 69 
     | 
    
         
            +
                    @redis ||= Redis.new
         
     | 
| 
      
 70 
     | 
    
         
            +
                  end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                  @redis
         
     | 
| 
       53 
73 
     | 
    
         
             
                end
         
     | 
| 
       54 
74 
     | 
    
         
             
              end
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
75 
     | 
    
         
             
            end
         
     | 
| 
       57 
76 
     | 
    
         | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: qqq
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.1.1
         
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.1.1.1
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Jon Skulski
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2019-05- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2019-05-29 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: redis
         
     | 
| 
         @@ -203,7 +203,7 @@ files: 
     | 
|
| 
       203 
203 
     | 
    
         
             
            - lib/qqq.rb
         
     | 
| 
       204 
204 
     | 
    
         
             
            - lib/qqq/api.rb
         
     | 
| 
       205 
205 
     | 
    
         
             
            - lib/qqq/cli.rb
         
     | 
| 
       206 
     | 
    
         
            -
            - lib/qqq/ 
     | 
| 
      
 206 
     | 
    
         
            +
            - lib/qqq/events.rb
         
     | 
| 
       207 
207 
     | 
    
         
             
            - lib/qqq/keys.rb
         
     | 
| 
       208 
208 
     | 
    
         
             
            - lib/qqq/version.rb
         
     | 
| 
       209 
209 
     | 
    
         
             
            - qqq.gemspec
         
     |