Module: Earthquake::Core
- Included in:
- Earthquake
- Defined in:
- lib/earthquake/core.rb
Instance Method Summary (collapse)
- - (Object) _init
- - (Object) _once
- - (Object) async(&block)
- - (Object) config
- - (Object) error(e)
- - (Object) init(&block)
- - (Object) inits
- - (Object) item_queue
- - (Object) load_config
- - (Object) load_plugins
- - (Object) mutex
- - (Object) notify(message, options = {:title => 'earthquake'}) (also: #n)
- - (Object) once(&block)
- - (Object) onces
- - (Object) reconnect
- - (Object) reload
- - (Object) restore_history
- - (Object) start(*argv)
- - (Object) start_stream(options)
- - (Object) stop
- - (Object) stop_stream
- - (Object) store_history
- - (Object) sync(&block)
Instance Method Details
- (Object) _init
34 35 36 37 38 39 |
# File 'lib/earthquake/core.rb', line 34 def _init load_config load_plugins inits.each { |block| class_eval(&block) } inits.clear end |
- (Object) _once
30 31 32 |
# File 'lib/earthquake/core.rb', line 30 def _once onces.each { |block| class_eval(&block) } end |
- (Object) async(&block)
182 183 184 |
# File 'lib/earthquake/core.rb', line 182 def async(&block) Thread.start(&block) end |
- (Object) config
6 7 8 |
# File 'lib/earthquake/core.rb', line 6 def config @config ||= {} end |
- (Object) error(e)
186 187 188 |
# File 'lib/earthquake/core.rb', line 186 def error(e) notify "[ERROR] #{e.}\n#{e.backtrace.join("\n")}" end |
- (Object) init(&block)
18 19 20 |
# File 'lib/earthquake/core.rb', line 18 def init(&block) inits << block end |
- (Object) inits
14 15 16 |
# File 'lib/earthquake/core.rb', line 14 def inits @inits ||= [] end |
- (Object) item_queue
10 11 12 |
# File 'lib/earthquake/core.rb', line 10 def item_queue @item_queue ||= [] end |
- (Object) load_config
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/earthquake/core.rb', line 49 def load_config # TODO: parse argv config[:dir] ||= File.(ARGV[0] || '~/.earthquake') config[:time_format] ||= Time::DATE_FORMATS[:short] config[:plugin_dir] ||= File.join(config[:dir], 'plugin') config[:file] ||= File.join(config[:dir], 'config') config[:consumer_key] ||= 'RmzuwQ5g0SYObMfebIKJag' config[:consumer_secret] ||= 'V98dYYmWm9JoG7qfOF0jhJaVEVW3QhGYcDJ9JQSXU' [config[:dir], config[:plugin_dir]].each do |dir| unless File.exists?(dir) FileUtils.mkdir_p(dir) end end if File.exists?(config[:file]) load config[:file] else File.open(config[:file], 'w') end get_access_token unless self.config[:token] && self.config[:secret] end |
- (Object) load_plugins
73 74 75 76 77 78 79 80 81 |
# File 'lib/earthquake/core.rb', line 73 def load_plugins Dir[File.join(config[:plugin_dir], '*.rb')].each do |lib| begin require_dependency lib rescue Exception => e error e end end end |
- (Object) mutex
172 173 174 |
# File 'lib/earthquake/core.rb', line 172 def mutex @mutex ||= Mutex.new end |
- (Object) notify(message, options = {:title => 'earthquake'}) Also known as: n
190 191 192 193 |
# File 'lib/earthquake/core.rb', line 190 def notify(, = {:title => 'earthquake'}) = .is_a?(String) ? : .inspect Notify.notify [:title], end |
- (Object) once(&block)
26 27 28 |
# File 'lib/earthquake/core.rb', line 26 def once(&block) onces << block end |
- (Object) onces
22 23 24 |
# File 'lib/earthquake/core.rb', line 22 def onces @once ||= [] end |
- (Object) reconnect
115 116 117 118 |
# File 'lib/earthquake/core.rb', line 115 def reconnect item_queue.clear start_stream(:host => 'userstream.twitter.com', :path => '/2/user.json', :ssl => true) end |
- (Object) reload
41 42 43 44 45 46 47 |
# File 'lib/earthquake/core.rb', line 41 def reload loaded = ActiveSupport::Dependencies.loaded.dup ActiveSupport::Dependencies.clear loaded.each { |lib| require_dependency lib } ensure _init end |
- (Object) restore_history
165 166 167 168 169 170 |
# File 'lib/earthquake/core.rb', line 165 def restore_history history_file = File.join(config[:dir], 'history') if File.exists?(history_file) File.read(history_file).split(/\n/).each { |line| Readline::HISTORY << line } end end |
- (Object) start(*argv)
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/earthquake/core.rb', line 83 def start(*argv) _init _once restore_history EventMachine::run do Thread.start do while buf = Readline.readline("⚡ ", true) unless Readline::HISTORY.count == 1 Readline::HISTORY.pop if buf.empty? || Readline::HISTORY[-1] == Readline::HISTORY[-2] end sync { input(buf.strip) } end end Thread.start do loop do if Readline.line_buffer.nil? || Readline.line_buffer.empty? sync { output } sleep 1 else sleep 2 end end end reconnect trap('TERM') { stop } end end |
- (Object) start_stream(options)
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
# File 'lib/earthquake/core.rb', line 120 def start_stream() stop_stream = { :oauth => config.slice(:consumer_key, :consumer_secret).merge( :access_key => config[:token], :access_secret => config[:secret] ) }.merge() @stream = ::Twitter::JSONStream.connect() @stream.each_item do |item| item_queue << JSON.parse(item) end @stream.on_error do || notify "error: #{}" end @stream.on_reconnect do |timeout, retries| notify "reconnecting in: #{timeout} seconds" end @stream.on_max_reconnects do |timeout, retries| notify "Failed after #{retries} failed reconnects" end end |
- (Object) stop
152 153 154 155 |
# File 'lib/earthquake/core.rb', line 152 def stop stop_stream EventMachine.stop_event_loop end |
- (Object) stop_stream
148 149 150 |
# File 'lib/earthquake/core.rb', line 148 def stop_stream @stream.stop if @stream end |
- (Object) store_history
157 158 159 160 161 162 163 |
# File 'lib/earthquake/core.rb', line 157 def store_history history_size = config[:history_size] || 1000 File.open(File.join(config[:dir], 'history'), 'w') do |file| lines = Readline::HISTORY.to_a[([Readline::HISTORY.size - history_size, 0].max)..-1] file.print(lines.join("\n")) end end |
- (Object) sync(&block)
176 177 178 179 180 |
# File 'lib/earthquake/core.rb', line 176 def sync(&block) mutex.synchronize do block.call end end |