From 6b819c37310b6fd165cf6d7e883dc9353715e972 Mon Sep 17 00:00:00 2001
From: nattanon <nattanon@hospital-os.com>
Date: Thu, 8 Jul 2021 15:02:11 +0700
Subject: [PATCH] Use config file and update version to 1.0.0-beta

---
 Gemfile.lock                                  |   2 +-
 README.md                                     | 104 ++++++++++++------
 lib/latias/influxdb.rb                        |   1 +
 lib/latias/influxdb/bucket.rb                 |  36 +++---
 lib/latias/influxdb/configuration.rb          |  11 +-
 lib/latias/influxdb/version.rb                |   2 +-
 .../latias/influxdb/templates/initializer.rb  |   8 +-
 7 files changed, 109 insertions(+), 55 deletions(-)

diff --git a/Gemfile.lock b/Gemfile.lock
index ff8e270..9232ca2 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,7 +1,7 @@
 PATH
   remote: .
   specs:
-    latias-influxdb (0.3.0)
+    latias-influxdb (1.0.0.pre.bata)
       influxdb-client (~> 1.16.0.pre.2765)
       rails (~> 6.1.4)
 
diff --git a/README.md b/README.md
index 48c79c4..78155da 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,77 @@
 
 Ruby lib for use influxdb version 2 on Ruby language
 
-## Usage
+## Installation
+
+Add this line to your application's Gemfile:
+
+```ruby
+gem 'latias-influxdb'
+```
+
+And then execute:
+
+```bash
+$ bundle
+```
+
+Or install it yourself as:
+
+```bash
+$ gem install latias-influxdb
+```
+
+Check version
+
+```bash
+ rails latias:influxdb:verion
+```
+
+## Configuration & Usage
+
+### Configuration
+
+First generating config file
+
+```bash
+ rails g latias:influxdb:install
+```
+
+```ruby
+# config/initializers/latias_influxdb
+Latias::Influxdb.configure do |config|
+  # default
+  # config.url = 'http://localhost:8086'
+  # config.token = 'token'
+  # config.bucket = 'bucket'
+  # config.org = 'org'
+  # config.use_ssl = false
+  # config.verify_mode = OpenSSL::SSL::VERIFY_NONE
+end
+```
+
+### Usage
+
+You can use
+
+<!--
+
+  # config.url = 'http://188.166.252.165:8086'
+  # config.token = 'YyD4UGu4_Xn0CIVsycFdjaQVd7m1g5wRp0z2BCfBSyNL6-GHqqyZRePGy46B2m8Zg6jgqHAN_J6jyhCmvGeQRA=='
+  # config.bucket = 'MDBEnergy'
+  # config.org = 'MDBEnergy'
+
+-->
+
+```ruby
+  bucket = Latias::Influxdb::Bucket.new
+  bucket.client_connection
+  # or bucket = Latias::Influxdb::Bucket.new.client_connection
+  bucket.range('start: -1m').filter('fn: (r) => r["_measurement"] == "cpu"')
+  bucket.call
+```
+
+Or use with model
 
 <!-- ```ruby
 class MdbEnergyBucket < Latias::Influxdb::Bucket
@@ -40,38 +110,6 @@ mdb_energy_bucket.range('start: -1m').filter('fn: (r) => r["_measurement"] == "c
 mdb_energy_bucket.call
 ```
 
-## Installation
-
-Add this line to your application's Gemfile:
-
-```ruby
-gem 'latias-influxdb'
-```
-
-And then execute:
-
-```bash
-$ bundle
-```
-
-Or install it yourself as:
-
-```bash
-$ gem install latias-influxdb
-```
-
-Check version
-
-```bash
- rails latias:influxdb:verion
-```
-
-## Contributing
-
-```bash
- rails g latias:influxdb:install
-```
-
 ## License
 
 The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
diff --git a/lib/latias/influxdb.rb b/lib/latias/influxdb.rb
index ac94642..430427e 100644
--- a/lib/latias/influxdb.rb
+++ b/lib/latias/influxdb.rb
@@ -3,6 +3,7 @@
 require 'latias/influxdb/bucket'
 require 'latias/influxdb/version'
 require 'latias/influxdb/engine'
+require "latias/influxdb/configuration"
 
 module Latias
   # Influxdb
diff --git a/lib/latias/influxdb/bucket.rb b/lib/latias/influxdb/bucket.rb
index a9d0848..df63028 100644
--- a/lib/latias/influxdb/bucket.rb
+++ b/lib/latias/influxdb/bucket.rb
@@ -10,13 +10,13 @@ module Latias
       attr_reader :url, :token, :bucket, :org, :use_ssl, :verify_mode, :precision
 
       def initialize
-        set_default
+        @query = ''
       end
 
       def call
-        all_query = "from(bucket: \"#{@bucket}\") #{@query}"
+        all_query = "from(bucket: \"#{use_value('bucket')}\") #{@query}"
         @query = ''
-        @client.create_query_api.query(query: all_query, org: @org)
+        @client.create_query_api.query(query: all_query, org: use_value('org'))
       end
 
       def yield(query)
@@ -38,27 +38,31 @@ module Latias
         @query += query
       end
 
+      def client_connection
+        @client = InfluxDB2::Client.new(use_value('url'), use_value('token'),
+                                        use_ssl: use_value('use_ssl'),
+                                        verify_mode: use_value('verify_mode'),
+                                        precision: InfluxDB2::WritePrecision::NANOSECOND)
+        self
+      end
+
+      def client_reconnection
+        client_connection
+      end
+
       private
 
-      def set_default
-        @query = ''
-        @url = 'http://localhost:8086'
-        @token = 'token'
-        @bucket = 'bucket'
-        @org = 'org'
-        @use_ssl = false
-        @verify_mode = OpenSSL::SSL::VERIFY_NONE
+      def use_value(key)
+        b = get_binding("self")
+        b.eval("@#{key}") || Latias::Influxdb.configuration.send(key)
       end
 
       def new_command
         '|> '
       end
 
-      def client_connection
-        @client = InfluxDB2::Client.new(@url, @token,
-                                        use_ssl: @use_ssl,
-                                        verify_mode: @verify_mode.present? ? @verify_mode : OpenSSL::SSL::VERIFY_NONE,
-                                        precision: InfluxDB2::WritePrecision::NANOSECOND)
+      def get_binding(param)
+        binding
       end
     end
   end
diff --git a/lib/latias/influxdb/configuration.rb b/lib/latias/influxdb/configuration.rb
index 158b044..2b1fba0 100644
--- a/lib/latias/influxdb/configuration.rb
+++ b/lib/latias/influxdb/configuration.rb
@@ -5,14 +5,19 @@ module Latias
   module Influxdb
     # Configuration
     class Configuration
-      attr_accessor :async
+      attr_accessor :url, :token, :bucket, :org, :use_ssl, :verify_mode, :precision
 
       def initialize
-        @async = true
+        @query = ''
+        @url = 'http://localhost:8086'
+        @token = 'token'
+        @bucket = 'bucket'
+        @org = 'org'
+        @use_ssl = false
+        @verify_mode = OpenSSL::SSL::VERIFY_NONE
       end
     end
 
-    # Borrow syntax from Clearance: https://github.com/thoughtbot/clearance/blob/master/lib/clearance/configuration.rb
     def self.configuration
       @configuration ||= Configuration.new
     end
diff --git a/lib/latias/influxdb/version.rb b/lib/latias/influxdb/version.rb
index a999af7..0e7640e 100644
--- a/lib/latias/influxdb/version.rb
+++ b/lib/latias/influxdb/version.rb
@@ -2,6 +2,6 @@
 
 module Latias
   module Influxdb
-    VERSION = '0.3.0'
+    VERSION = '1.0.0-bata'
   end
 end
diff --git a/lib/rails/generators/latias/influxdb/templates/initializer.rb b/lib/rails/generators/latias/influxdb/templates/initializer.rb
index 04f8434..8c5930f 100644
--- a/lib/rails/generators/latias/influxdb/templates/initializer.rb
+++ b/lib/rails/generators/latias/influxdb/templates/initializer.rb
@@ -1,3 +1,9 @@
 Latias::Influxdb.configure do |config|
-  # Latias::Influxdb.configure
+  # default
+  # config.url = 'http://localhost:8086'
+  # config.token = 'token'
+  # config.bucket = 'bucket'
+  # config.org = 'org'
+  # config.use_ssl = false
+  # config.verify_mode = OpenSSL::SSL::VERIFY_NONE
 end
-- 
GitLab