embulk-input-redash 0.1.1 → 0.1.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 31d63e2c6b7fe8d3c5617b2533324d8be7f0bae1
4
- data.tar.gz: a3da768233f4b5e93ce4178aacf3b115ab988c8d
2
+ SHA256:
3
+ metadata.gz: ba9e913a42edcbc1693228e3394ea4d9e570ffb1992cecd293665b9b356e8ea1
4
+ data.tar.gz: 6fd28276e141cf81c7ad44de18d0f61a7590a89f262a7df476891ea94c5ea667
5
5
  SHA512:
6
- metadata.gz: c54efef3dc804c4ee335d164a7711eb1c61c61573ae27a2f28c62fcea0960a8cc0de7d96170563adde1796cad3e2b75402a1bc31471fe3b14276e226d73d0132
7
- data.tar.gz: f2ae77b038fbd46f3ee3b3d65e21ab311ee02ac4da49556058b31f3703d75b5bcdf86a8876ab98be0bed0b831cf6cc2ff8b9994fd74650bb3bed9e89148042c4
6
+ metadata.gz: d367bbffde661d1b63b0278ca644bf27fbb302badb5d63db5038693e233d2e1db77b3d19c056854eb25e52b6b830470ae9524e922215f38a7e3524d30a6cefa1
7
+ data.tar.gz: e5d675bcc6d04346cd66003233dba3f1895f6424e993c101867753966b2f4744b80cd39385a4554b5cbc72fbbc73e7183d6bf83009a61569713c5006db1c762a
@@ -0,0 +1,25 @@
1
+ version: 2
2
+ jobs:
3
+ build:
4
+ docker:
5
+ - image: circleci/ruby:2.4.1
6
+ working_directory: ~/repo
7
+ steps:
8
+ - checkout
9
+ - restore_cache:
10
+ keys:
11
+ - v1-dependencies-{{ checksum "Gemfile.lock" }}
12
+ # fallback to using the latest cache if no exact match is found
13
+ - v1-dependencies-
14
+ - run:
15
+ name: install dependencies
16
+ command: |
17
+ bundle install --jobs=4 --retry=3 --path vendor/bundle
18
+ - save_cache:
19
+ paths:
20
+ - ./vendor/bundle
21
+ key: v1-dependencies-{{ checksum "Gemfile.lock" }}
22
+ - run:
23
+ name: run tests
24
+ command: |
25
+ bundle exec rake test
data/README.md CHANGED
@@ -1,18 +1,21 @@
1
1
  # Redash input plugin for Embulk
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/embulk-input-redash.svg)](https://badge.fury.io/rb/embulk-input-redash)
4
+ [![CircleCI](https://circleci.com/gh/ariarijp/embulk-input-redash.svg?style=svg)](https://circleci.com/gh/ariarijp/embulk-input-redash)
5
+
3
6
  embulk-input-redash is the Embulk input plugin for [Redash](https://redash.io).
4
7
 
5
8
  ## Overview
6
9
 
7
10
  * **Plugin type**: input
8
- * **Resume supported**: yes
9
- * **Cleanup supported**: yes
11
+ * **Resume supported**: no
12
+ * **Cleanup supported**: no
10
13
  * **Guess supported**: yes
11
14
 
12
15
  ## Configuration
13
16
 
14
- - **url**: description (string, required)
15
- - **api_key**: description (string, required)
17
+ - **url**: URL of Query Result (string, required)
18
+ - **api_key**: API Key (string, required)
16
19
 
17
20
  ## Example
18
21
 
data/Rakefile CHANGED
@@ -1,3 +1,10 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << 'test'
6
+ t.libs << 'lib'
7
+ t.test_files = FileList['test/**/*_test.rb']
8
+ end
2
9
 
3
10
  task default: :build
@@ -1,20 +1,21 @@
1
-
2
1
  Gem::Specification.new do |spec|
3
- spec.name = "embulk-input-redash"
4
- spec.version = "0.1.1"
5
- spec.authors = ["ariarijp"]
6
- spec.summary = "Redash input plugin for Embulk"
7
- spec.description = "Loads records from Redash."
8
- spec.email = ["takuya.arita@gmail.com"]
9
- spec.licenses = ["MIT"]
10
- spec.homepage = "https://github.com/ariarijp/embulk-input-redash"
2
+ spec.name = 'embulk-input-redash'
3
+ spec.version = '0.1.3'
4
+ spec.authors = ['ariarijp']
5
+ spec.summary = 'Redash input plugin for Embulk'
6
+ spec.description = 'Loads records from Redash.'
7
+ spec.email = ['takuya.arita@gmail.com']
8
+ spec.licenses = ['MIT']
9
+ spec.homepage = 'https://github.com/ariarijp/embulk-input-redash'
11
10
 
12
- spec.files = `git ls-files`.split("\n") + Dir["classpath/*.jar"]
13
- spec.test_files = spec.files.grep(%r{^(test|spec)/})
14
- spec.require_paths = ["lib"]
11
+ spec.files = `git ls-files`.split("\n") + Dir['classpath/*.jar']
12
+ spec.test_files = spec.files.grep(%r{^(test|spec)/})
13
+ spec.require_paths = ['lib']
15
14
 
16
15
  spec.add_dependency 'rest-client'
17
- spec.add_development_dependency 'embulk', ['>= 0.8.17']
18
16
  spec.add_development_dependency 'bundler', ['>= 1.10.6']
17
+ spec.add_development_dependency 'embulk', ['>= 0.8.39']
19
18
  spec.add_development_dependency 'rake', ['>= 10.0']
19
+ spec.add_development_dependency 'test-unit', ['>= 3.2.8']
20
+ spec.add_development_dependency 'webmock', ['>= 3.4.2']
20
21
  end
@@ -2,6 +2,7 @@ require 'embulk/input/redash/plugin'
2
2
 
3
3
  module Embulk
4
4
  module Input
5
+ # A module for Redash input plugin for Embulk
5
6
  module Redash
6
7
  end
7
8
  end
@@ -0,0 +1,17 @@
1
+ require 'rest-client'
2
+
3
+ module Embulk
4
+ module Input
5
+ module Redash
6
+ # Redash API client
7
+ class Client
8
+ def self.get_rows(url, api_key)
9
+ res = RestClient.get(url, params: { api_key: api_key })
10
+ data = JSON.parse(res.body)
11
+
12
+ data['query_result']['data']['rows']
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module Embulk
2
+ module Input
3
+ module Redash
4
+ # Type converter
5
+ class Converter
6
+ def self.convert(type, value)
7
+ case type
8
+ when :timestamp
9
+ Time.parse(value)
10
+ else
11
+ value
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,33 +1,31 @@
1
- require 'rest-client'
1
+ require_relative './client'
2
+ require_relative './converter'
2
3
 
3
4
  module Embulk
4
5
  module Input
5
6
  module Redash
7
+ # Redash input plugin for Embulk
6
8
  class Plugin < InputPlugin
7
9
  ::Embulk::Plugin.register_input('redash', self)
8
10
 
9
- def self.transaction(config, &control)
11
+ def self.transaction(config, &_control)
10
12
  task = {
11
- 'url' => config.param('url', :string),
12
- 'api_key' => config.param('api_key', :string)
13
+ url: config.param('url', :string),
14
+ api_key: config.param('api_key', :string)
13
15
  }
14
16
 
15
17
  columns = embulk_columns(config)
16
18
 
17
- resume(task, columns, 1, &control)
18
- end
19
-
20
- def self.resume(task, columns, count)
21
- task_reports = yield(task, columns, count)
19
+ task_reports = yield(task, columns, 1)
22
20
 
23
- next_config_diff = {}
24
- next_config_diff
21
+ task_reports.first
25
22
  end
26
23
 
27
- def self.guess(_config)
28
- sample_records = get_rows(_config['url'], _config['api_key']).first(10)
24
+ def self.guess(config)
25
+ sample_records = Client.get_rows(config['url'], config['api_key'])
26
+ .first(10)
29
27
  columns = Guess::SchemaGuess.from_hash_records(sample_records)
30
- { 'columns' => columns }
28
+ { columns: columns }
31
29
  end
32
30
 
33
31
  def init
@@ -36,46 +34,25 @@ module Embulk
36
34
  end
37
35
 
38
36
  def run
39
- column_names = @schema.map(&:name)
40
-
41
- Plugin.get_rows(@url, @api_key).each do |row|
37
+ Client.get_rows(@url, @api_key).each do |row|
42
38
  values = schema.map do |col|
43
- convert(col.type, row[col.name])
39
+ Converter.convert(col.type, row[col.name])
44
40
  end
45
41
  page_builder.add(values)
46
42
  end
47
43
 
48
44
  page_builder.finish
49
45
 
50
- task_report = {}
51
-
52
- task_report
46
+ {}
53
47
  end
54
48
 
55
49
  def self.embulk_columns(config)
56
50
  config.param(:columns, :array).map do |column|
57
51
  name = column['name']
58
52
  type = column['type'].to_sym
53
+ format = column['format']
59
54
 
60
- Column.new(nil, name, type, column['format'])
61
- end
62
- end
63
-
64
- private
65
-
66
- def self.get_rows(url, api_key)
67
- res = RestClient.get(url, params: { 'api_key' => api_key })
68
- data = JSON.parse(res.body)
69
-
70
- data['query_result']['data']['rows']
71
- end
72
-
73
- def convert(type, value)
74
- case type
75
- when :timestamp
76
- Time.parse(value)
77
- else
78
- value
55
+ Column.new(nil, name, type, format)
79
56
  end
80
57
  end
81
58
  end
@@ -0,0 +1,41 @@
1
+ require 'json'
2
+ require 'test_helper'
3
+ require 'embulk/input/redash/client'
4
+
5
+ Client = Embulk::Input::Redash::Client
6
+
7
+ class ClientTest < Test::Unit::TestCase
8
+ def test_get_rows
9
+ url = 'http://example.com/api/queries/123/results.json'
10
+ api_key = 'veryverysecret'
11
+
12
+ stub_body = {
13
+ 'query_result' => {
14
+ 'data' => {
15
+ 'rows' => [
16
+ { 'foo' => 'hoge', 'bar' => 'fuga' }
17
+ ],
18
+ 'columns' => [
19
+ {
20
+ 'name' => 'foo',
21
+ 'type' => 'string',
22
+ 'friendly_name' => 'foo'
23
+ },
24
+ {
25
+ 'name' => 'bar',
26
+ 'type' => 'integer',
27
+ 'friendly_name' => 'foo'
28
+ }
29
+ ]
30
+ },
31
+ 'id' => 123,
32
+ 'data_source_id' => 1
33
+ }
34
+ }
35
+
36
+ stub_request(:get, "#{url}?api_key=#{api_key}")
37
+ .to_return(status: 200, body: stub_body.to_json, headers: {})
38
+ expected = [{ 'foo' => 'hoge', 'bar' => 'fuga' }]
39
+ assert_equal(expected, Client.get_rows(url, api_key))
40
+ end
41
+ end
@@ -0,0 +1,22 @@
1
+ require 'test_helper'
2
+ require 'time'
3
+ require 'embulk/input/redash/converter'
4
+
5
+ Converter = Embulk::Input::Redash::Converter
6
+
7
+ class ConverterTest < Test::Unit::TestCase
8
+ data(
9
+ 'boolean' => [true, :boolean, true],
10
+ 'long' => [123, :long, 123],
11
+ 'timestamp' => [Time.parse('2018-09-24 20:15:45'),
12
+ :timestamp,
13
+ '2018-09-24 20:15:45'],
14
+ 'double' => [1.23, :double, 1.23],
15
+ 'string' => ['embulk', :string, 'embulk']
16
+ )
17
+
18
+ def test_convert(data)
19
+ expected, type, value = data
20
+ assert_equal(expected, Converter.convert(type, value))
21
+ end
22
+ end
@@ -0,0 +1,4 @@
1
+ $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
2
+
3
+ require 'test/unit'
4
+ require 'webmock/test_unit'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-input-redash
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - ariarijp
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-11 00:00:00.000000000 Z
11
+ date: 2018-09-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -25,33 +25,33 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: embulk
28
+ name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 0.8.17
33
+ version: 1.10.6
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 0.8.17
40
+ version: 1.10.6
41
41
  - !ruby/object:Gem::Dependency
42
- name: bundler
42
+ name: embulk
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 1.10.6
47
+ version: 0.8.39
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 1.10.6
54
+ version: 0.8.39
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +66,34 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '10.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: test-unit
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 3.2.8
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 3.2.8
83
+ - !ruby/object:Gem::Dependency
84
+ name: webmock
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 3.4.2
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: 3.4.2
69
97
  description: Loads records from Redash.
70
98
  email:
71
99
  - takuya.arita@gmail.com
@@ -73,6 +101,7 @@ executables: []
73
101
  extensions: []
74
102
  extra_rdoc_files: []
75
103
  files:
104
+ - ".circleci/config.yml"
76
105
  - ".gitignore"
77
106
  - ".ruby-version"
78
107
  - Gemfile
@@ -81,7 +110,12 @@ files:
81
110
  - Rakefile
82
111
  - embulk-input-redash.gemspec
83
112
  - lib/embulk/input/redash.rb
113
+ - lib/embulk/input/redash/client.rb
114
+ - lib/embulk/input/redash/converter.rb
84
115
  - lib/embulk/input/redash/plugin.rb
116
+ - test/client_test.rb
117
+ - test/converter_test.rb
118
+ - test/test_helper.rb
85
119
  homepage: https://github.com/ariarijp/embulk-input-redash
86
120
  licenses:
87
121
  - MIT
@@ -102,8 +136,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
136
  version: '0'
103
137
  requirements: []
104
138
  rubyforge_project:
105
- rubygems_version: 2.6.8
139
+ rubygems_version: 2.7.6
106
140
  signing_key:
107
141
  specification_version: 4
108
142
  summary: Redash input plugin for Embulk
109
- test_files: []
143
+ test_files:
144
+ - test/client_test.rb
145
+ - test/converter_test.rb
146
+ - test/test_helper.rb