From 8910c37ab2a5efdfcec08fc9d0233754f961da73 Mon Sep 17 00:00:00 2001
From: nattanon <nattanon@hospital-os.com>
Date: Fri, 9 Jul 2021 16:04:39 +0700
Subject: [PATCH] Version 1.1.0

---
 Gemfile                                   |   2 +-
 Gemfile.lock                              |  10 ++--
 README.md                                 |  44 ++++++++++++++++++
 gemfiles/latias-influxdb-1.1.1.gem        | Bin 0 -> 7680 bytes
 latias-influxdb.gemspec                   |   4 +-
 lib/latias/influxdb.rb                    |   1 +
 lib/latias/influxdb/action_bucket/base.rb |  50 ++++++++++++++++++++
 lib/latias/influxdb/bucket.rb             |  54 +++++++---------------
 lib/latias/influxdb/version.rb            |   2 +-
 9 files changed, 120 insertions(+), 47 deletions(-)
 create mode 100644 gemfiles/latias-influxdb-1.1.1.gem
 create mode 100644 lib/latias/influxdb/action_bucket/base.rb

diff --git a/Gemfile b/Gemfile
index 14bfccf..dea3f17 100644
--- a/Gemfile
+++ b/Gemfile
@@ -6,7 +6,7 @@ gemspec
 
 group :development do
   # gem 'sqlite3'
-  gem 'influxdb-client', '1.16.0.pre.2765'
+  gem 'influxdb-client', '1.16.0.pre.2890'
 end
 
 # To use a debugger
diff --git a/Gemfile.lock b/Gemfile.lock
index 0020e26..c90f4e7 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,8 +1,8 @@
 PATH
   remote: .
   specs:
-    latias-influxdb (1.0.1)
-      influxdb-client (~> 1.16.0.pre.2765)
+    latias-influxdb (1.1.1)
+      influxdb-client (~> 1.16.0.pre.2890)
       rails (~> 6.1.4)
 
 GEM
@@ -75,7 +75,7 @@ GEM
       activesupport (>= 4.2.0)
     i18n (1.8.10)
       concurrent-ruby (~> 1.0)
-    influxdb-client (1.16.0.pre.2765)
+    influxdb-client (1.16.0.pre.2890)
     loofah (2.10.0)
       crass (~> 1.0.2)
       nokogiri (>= 1.5.9)
@@ -118,7 +118,7 @@ GEM
       method_source
       rake (>= 0.13)
       thor (~> 1.0)
-    rake (13.0.5)
+    rake (13.0.6)
     sprockets (4.0.2)
       concurrent-ruby (~> 1.0)
       rack (> 1, < 3)
@@ -138,7 +138,7 @@ PLATFORMS
   x86_64-darwin-19
 
 DEPENDENCIES
-  influxdb-client (= 1.16.0.pre.2765)
+  influxdb-client (= 1.16.0.pre.2890)
   latias-influxdb!
 
 BUNDLED WITH
diff --git a/README.md b/README.md
index 30107e6..6532f05 100644
--- a/README.md
+++ b/README.md
@@ -141,6 +141,50 @@ mdb_energy_bucket.one_minute_before.find_cpu.call
 mdb_energy_bucket.my_cpu_value
 ```
 
+## Method
+
+```ruby
+def yield(query)
+  merge_query('yield', query)
+end
+
+def range(query)
+  merge_query('range', query)
+end
+
+def filter(query)
+  merge_query('filter', query)
+end
+
+def duplicate(query)
+  merge_query('duplicate', query)
+end
+
+def merge_query(key, query)
+  raw_function "#{key}(#{query})"
+end
+
+def raw_function(function)
+  raw_query "#{new_command} #{function}"
+end
+
+def raw_query(query)
+  @query += query
+  self
+end
+
+def client_reconnection
+  client_connection
+end
+
+# And
+
+def execute(query)
+  @query = query
+end
+
+```
+
 ## License
 
 The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
diff --git a/gemfiles/latias-influxdb-1.1.1.gem b/gemfiles/latias-influxdb-1.1.1.gem
new file mode 100644
index 0000000000000000000000000000000000000000..320dbbde1a7fd50b4e09168fff848dadacf6125a
GIT binary patch
literal 7680
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
A5C8xG

literal 0
HcmV?d00001

diff --git a/latias-influxdb.gemspec b/latias-influxdb.gemspec
index 8a2328b..e8306d3 100644
--- a/latias-influxdb.gemspec
+++ b/latias-influxdb.gemspec
@@ -15,8 +15,8 @@ Gem::Specification.new do |spec|
   spec.metadata['source_code_uri'] = spec.homepage
   # spec.metadata['changelog_uri'] = spec.homepage
 
-  spec.files = Dir['{app,config,db,lib}/**/*', 'MIT-LICENSE', 'Rakefile', 'README.md']
+  spec.files = Dir['{config,lib}/**/**/*', 'MIT-LICENSE', 'Rakefile', 'README.md']
 
-  spec.add_dependency 'influxdb-client', '~> 1.16.0.pre.2765'
+  spec.add_dependency 'influxdb-client', '~> 1.16.0.pre.2890'
   spec.add_dependency 'rails', '~> 6.1.4'
 end
diff --git a/lib/latias/influxdb.rb b/lib/latias/influxdb.rb
index 430427e..112a3bf 100644
--- a/lib/latias/influxdb.rb
+++ b/lib/latias/influxdb.rb
@@ -4,6 +4,7 @@ require 'latias/influxdb/bucket'
 require 'latias/influxdb/version'
 require 'latias/influxdb/engine'
 require "latias/influxdb/configuration"
+require "latias/influxdb/action_bucket/base"
 
 module Latias
   # Influxdb
diff --git a/lib/latias/influxdb/action_bucket/base.rb b/lib/latias/influxdb/action_bucket/base.rb
new file mode 100644
index 0000000..a930b2e
--- /dev/null
+++ b/lib/latias/influxdb/action_bucket/base.rb
@@ -0,0 +1,50 @@
+# frozen_string_literal: true
+
+require 'influxdb-client'
+
+module Latias
+  # Influxdb
+  module Influxdb
+    # Bucket
+    module ActionBucket
+      # base
+      class Base
+        attr_reader :url, :token, :bucket, :org, :use_ssl, :verify_mode, :precision, :query, :client
+
+        def execute(query)
+          @query = query
+        end
+
+        def call
+          all_query = "from(bucket: \"#{use_value('bucket')}\") #{@query}"
+          @query = ''
+          @client.create_query_api.query(query: all_query, org: use_value('org'))
+        end
+
+        def client_connection
+          @query = ''
+          @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
+
+        private
+
+        def use_value(key)
+          b = get_binding("self")
+          b.eval("@#{key}") || Latias::Influxdb.configuration.send(key)
+        end
+
+        def new_command
+          '|> '
+        end
+
+        def get_binding(param)
+          binding
+        end
+      end
+    end
+  end
+end
diff --git a/lib/latias/influxdb/bucket.rb b/lib/latias/influxdb/bucket.rb
index 97679a0..a1f7cad 100644
--- a/lib/latias/influxdb/bucket.rb
+++ b/lib/latias/influxdb/bucket.rb
@@ -1,65 +1,43 @@
 # frozen_string_literal: true
 
-require 'influxdb-client'
+require "latias/influxdb/action_bucket/base"
 
 module Latias
   # Influxdb
   module Influxdb
     # Bucket
-    class Bucket
-      attr_reader :url, :token, :bucket, :org, :use_ssl, :verify_mode, :precision
-
-      def call
-        all_query = "from(bucket: \"#{use_value('bucket')}\") #{@query}"
-        @query = ''
-        @client.create_query_api.query(query: all_query, org: use_value('org'))
-      end
-
+    class Bucket < Latias::Influxdb::ActionBucket::Base
       def yield(query)
-        @query += "#{new_command} yield(#{query})"
-        self
+        merge_query('yield', query)
       end
 
       def range(query)
-        @query += "#{new_command} range(#{query})"
-        self
+        merge_query('range', query)
       end
 
       def filter(query)
-        @query += "#{new_command} filter(#{query})"
-        self
+        merge_query('filter', query)
       end
 
-      def real_query(query)
-        @query += query
+      def duplicate(query)
+        merge_query('duplicate', query)
       end
 
-      def client_connection
-        @query = ''
-        @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
+      def merge_query(key, query)
+        raw_function "#{key}(#{query})"
       end
 
-      def client_reconnection
-        client_connection
-      end
-
-      private
-
-      def use_value(key)
-        b = get_binding("self")
-        b.eval("@#{key}") || Latias::Influxdb.configuration.send(key)
+      def raw_function(function)
+        raw_query "#{new_command} #{function}"
       end
 
-      def new_command
-        '|> '
+      def raw_query(query)
+        @query += query
+        self
       end
 
-      def get_binding(param)
-        binding
+      def client_reconnection
+        client_connection
       end
     end
   end
diff --git a/lib/latias/influxdb/version.rb b/lib/latias/influxdb/version.rb
index 9257f5a..53684b3 100644
--- a/lib/latias/influxdb/version.rb
+++ b/lib/latias/influxdb/version.rb
@@ -2,6 +2,6 @@
 
 module Latias
   module Influxdb
-    VERSION = '1.0.1'
+    VERSION = '1.1.1'
   end
 end
-- 
GitLab