Class: Configly::Client
- Inherits:
-
Object
- Object
- Configly::Client
- Defined in:
- lib/configly/client.rb
Class Method Summary collapse
- .fetch(keys) ⇒ Object
- .generate_qs(keys_to_preload) ⇒ Object
- .get(key) ⇒ Object
- .get_api_key ⇒ Object
- .get_keys_to_preload ⇒ Object
- .init ⇒ Object
- .load_initial_data ⇒ Object
- .start_web_socket_client ⇒ Object
Class Method Details
.fetch(keys) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/configly/client.rb', line 65 def self.fetch(keys) uri = URI("https://#{CONFIGLY_SERVER}#{CONFIGLY_VALUE_URL}?#{generate_qs(keys)}") loaded_keys = {} Net::HTTP.start(uri.host, uri.port, :use_ssl => true) do |http| request = Net::HTTP::Get.new uri request.basic_auth get_api_key, '' response = http.request request data = JSON.parse(response.body)['data'] data.keys.each do |key| loaded_keys[key] = data[key]['value'] end end return loaded_keys end |
.generate_qs(keys_to_preload) ⇒ Object
29 30 31 |
# File 'lib/configly/client.rb', line 29 def self.generate_qs(keys_to_preload) return keys_to_preload.map { |key| "keys[]=#{key}" }.join("&") end |
.get(key) ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/configly/client.rb', line 80 def self.get(key) if @use_ws if @keys.has_key? key return @keys[key] else raise KeyError.new(key) end else loaded_keys = fetch([key]) if loaded_keys.has_key? key return loaded_keys[key] else raise KeyError.new(key) end end end |
.get_api_key ⇒ Object
21 22 23 |
# File 'lib/configly/client.rb', line 21 def self.get_api_key return ENV['CONFIGLY_API_KEY'] end |
.get_keys_to_preload ⇒ Object
25 26 27 |
# File 'lib/configly/client.rb', line 25 def self.get_keys_to_preload return ENV['CONFIGLY_KEYS_TO_PRELOAD'].split(',') end |
.init ⇒ Object
13 14 15 16 17 18 19 |
# File 'lib/configly/client.rb', line 13 def self.init @use_ws = true if get_api_key load_initial_data Thread.new { EM.run { start_web_socket_client }} end end |
.load_initial_data ⇒ Object
33 34 35 |
# File 'lib/configly/client.rb', line 33 def self.load_initial_data @keys = fetch(get_keys_to_preload) end |
.start_web_socket_client ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/configly/client.rb', line 37 def self.start_web_socket_client ws = Faye::WebSocket::Client.new("ws://configly.herokuapp.com", nil, {:ping => 30}) ws.on :open do |event| Rails.logger.debug :open ws.send(JSON.generate({"apiKey" => get_api_key, "type" => "handshake"})) end ws.on :message do |event| Rails.logger.debug :message data = JSON.parse(event.data) if data["type"] == "configUpdate" payload = data["payload"]["payload"] keyToUpdate = payload['key'] value = payload['value'] @keys[keyToUpdate] = value end Rails.logger.debug @keys end ws.on :close do |event| Rails.logger.debug :close Rails.logger.debug event.code start_web_socket_client end end |