embulk-input-redash 0.1.1 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
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