datawow 1.2.0
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 +7 -0
- data/.gitignore +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +59 -0
- data/INSTALL.md +7 -0
- data/README/ai_docs.md +153 -0
- data/README/image_docs.md +119 -0
- data/README/text_docs.md +83 -0
- data/README/video_docs.md +53 -0
- data/README.md +160 -0
- data/Rakefile +12 -0
- data/datawow.gemspec +28 -0
- data/lib/datawow/client_response.rb +18 -0
- data/lib/datawow/connection.rb +99 -0
- data/lib/datawow/connector.rb +118 -0
- data/lib/datawow/error.rb +15 -0
- data/lib/datawow/faraday/raise_http_exception.rb +40 -0
- data/lib/datawow/models/images/image_choices.rb +16 -0
- data/lib/datawow/models/images/image_closed_questions.rb +16 -0
- data/lib/datawow/models/images/image_messages.rb +16 -0
- data/lib/datawow/models/images/image_photo_tags.rb +16 -0
- data/lib/datawow/models/images/nanameue_human.rb +16 -0
- data/lib/datawow/models/interface.rb +26 -0
- data/lib/datawow/models/predictions/predictors.rb +18 -0
- data/lib/datawow/models/texts/text_categories.rb +16 -0
- data/lib/datawow/models/texts/text_closed_questions.rb +16 -0
- data/lib/datawow/models/texts/text_conversations.rb +16 -0
- data/lib/datawow/models/videos/video_classifications.rb +17 -0
- data/lib/datawow/version.rb +3 -0
- data/lib/datawow.rb +75 -0
- data/lib/generators/datawow/install_generator.rb +18 -0
- data/lib/generators/templates/datawow_api.rb +5 -0
- data/test/datawow/client_response_test.rb +29 -0
- data/test/datawow/connection_test.rb +85 -0
- data/test/datawow/connector_test.rb +79 -0
- data/test/datawow/image_choices_test.rb +48 -0
- data/test/datawow/image_closed_questions_test.rb +47 -0
- data/test/datawow/image_messages_test.rb +48 -0
- data/test/datawow/image_photo_tags_test.rb +48 -0
- data/test/datawow/nanameue_human_test.rb +47 -0
- data/test/datawow/predictors_test.rb +48 -0
- data/test/datawow/text_categories_test.rb +48 -0
- data/test/datawow/text_closed_questions_test.rb +48 -0
- data/test/datawow/text_conversations_test.rb +48 -0
- data/test/datawow/video_classifications_test.rb +48 -0
- data/test/datawow_test.rb +34 -0
- data/test/fixtures/image_choice/all.json +27 -0
- data/test/fixtures/image_choice/create.json +25 -0
- data/test/fixtures/image_closed_question/all.json +21 -0
- data/test/fixtures/image_closed_question/create.json +19 -0
- data/test/fixtures/image_message/all.json +22 -0
- data/test/fixtures/image_message/create.json +20 -0
- data/test/fixtures/image_photo_tag/all.json +22 -0
- data/test/fixtures/image_photo_tag/create.json +20 -0
- data/test/fixtures/nanameue_human/all.json +25 -0
- data/test/fixtures/nanameue_human/create.json +21 -0
- data/test/fixtures/prediction/all.json +21 -0
- data/test/fixtures/prediction/create.json +19 -0
- data/test/fixtures/text_category/all.json +34 -0
- data/test/fixtures/text_category/create.json +27 -0
- data/test/fixtures/text_closed_question/all.json +27 -0
- data/test/fixtures/text_closed_question/create.json +20 -0
- data/test/fixtures/text_conversation/all.json +33 -0
- data/test/fixtures/text_conversation/create.json +26 -0
- data/test/fixtures/video_classification/all.json +21 -0
- data/test/fixtures/video_classification/create.json +19 -0
- data/test/helper/file_reader.rb +11 -0
- data/test/test_helper.rb +59 -0
- metadata +254 -0
@@ -0,0 +1,18 @@
|
|
1
|
+
module Datawow
|
2
|
+
class Response
|
3
|
+
attr_reader :total, :message, :status
|
4
|
+
attr_accessor :data, :meta
|
5
|
+
|
6
|
+
def initialize(data, response_code = '', response_message = 'success', meta = nil, total = 0)
|
7
|
+
@data = data
|
8
|
+
@status = response_code.to_i
|
9
|
+
@message = response_message
|
10
|
+
@meta = meta
|
11
|
+
@total = total unless total.nil?
|
12
|
+
end
|
13
|
+
|
14
|
+
def successful?
|
15
|
+
[200, 201].include? status
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require File.expand_path('faraday/raise_http_exception.rb', __dir__)
|
4
|
+
require File.expand_path('client_response.rb', __dir__)
|
5
|
+
|
6
|
+
module Datawow
|
7
|
+
# :nodoc:
|
8
|
+
class Connection
|
9
|
+
def initialize(model:, version_api: 'v1')
|
10
|
+
@model = model
|
11
|
+
@version_api = version_api
|
12
|
+
end
|
13
|
+
|
14
|
+
def get(path, options = {})
|
15
|
+
@response = connection.get do |request|
|
16
|
+
request.url("#{@version_api}#{path}")
|
17
|
+
request.headers['Content-Type'] = 'application/json'
|
18
|
+
request.headers['Authorization'] = options[:token] unless options[:token].nil?
|
19
|
+
request.params = options[:path_param] ? params_url_options(options) : options
|
20
|
+
end
|
21
|
+
Response.new(data, status_code, message, meta, total)
|
22
|
+
rescue Error, Faraday::Error => e
|
23
|
+
handle_error(e)
|
24
|
+
end
|
25
|
+
|
26
|
+
def post(path, options = {}, query_params = {})
|
27
|
+
@response = connection.post do |request|
|
28
|
+
request.url("#{@version_api}#{path}")
|
29
|
+
request.headers['Content-Type'] = 'application/json'
|
30
|
+
request.headers['Authorization'] = options[:token] unless options[:token].nil?
|
31
|
+
request.params = query_params
|
32
|
+
request.body = options unless options.nil?
|
33
|
+
end
|
34
|
+
Response.new(data, status_code, message, meta, nil)
|
35
|
+
rescue Error, Faraday::Error => e
|
36
|
+
handle_error(e)
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def connection
|
42
|
+
@connection ||= Faraday::Connection.new(base_point) do |connection|
|
43
|
+
connection.request :url_encoded
|
44
|
+
connection.request :json
|
45
|
+
connection.response :json
|
46
|
+
connection.use Datawow::FaradayMiddleware::RaiseHttpException
|
47
|
+
connection.use :gzip
|
48
|
+
connection.adapter Faraday.default_adapter
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def data
|
53
|
+
@response.body['data']
|
54
|
+
end
|
55
|
+
|
56
|
+
def meta
|
57
|
+
@response.body['meta']
|
58
|
+
end
|
59
|
+
|
60
|
+
def status_code
|
61
|
+
meta['code'] unless meta.nil?
|
62
|
+
end
|
63
|
+
|
64
|
+
def message
|
65
|
+
meta['message'] unless meta.nil?
|
66
|
+
end
|
67
|
+
|
68
|
+
def total
|
69
|
+
meta['total_count'] unless meta.nil?
|
70
|
+
end
|
71
|
+
|
72
|
+
def handle_error(exception)
|
73
|
+
if exception.is_a?(Faraday::ConnectionFailed)
|
74
|
+
code = 599
|
75
|
+
message = 'Connection Failed'
|
76
|
+
else
|
77
|
+
code = exception.to_s.partition(':').first
|
78
|
+
message = exception.to_s.partition(':').last
|
79
|
+
end
|
80
|
+
|
81
|
+
Response.new(nil, code, message, nil)
|
82
|
+
end
|
83
|
+
|
84
|
+
def params_url_options(options)
|
85
|
+
%i[id path_param].each { |e| options.delete(e) }
|
86
|
+
options
|
87
|
+
end
|
88
|
+
|
89
|
+
def base_point
|
90
|
+
options = {
|
91
|
+
image: 'https://kiyo-image.datawow.io/api/',
|
92
|
+
ai: 'https://kiyo-image.datawow.io/api/',
|
93
|
+
text: 'https://kiyo-text.datawow.io/api/',
|
94
|
+
video: 'https://kiyo-image.datawow.io/api/'
|
95
|
+
}
|
96
|
+
options[@model]
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'net/http'
|
4
|
+
require 'net/https'
|
5
|
+
require 'uri'
|
6
|
+
|
7
|
+
require File.expand_path('client_response.rb', __dir__)
|
8
|
+
|
9
|
+
module Datawow
|
10
|
+
# :nodoc:
|
11
|
+
class Connector
|
12
|
+
def initialize(path, type, token: '', version_api: 'v1')
|
13
|
+
@version_api = version_api
|
14
|
+
@type = type
|
15
|
+
@path = path
|
16
|
+
@token = token
|
17
|
+
@method = :GET
|
18
|
+
end
|
19
|
+
|
20
|
+
def post(data = {})
|
21
|
+
@method = :POST
|
22
|
+
response = send_request(data)
|
23
|
+
|
24
|
+
body = JSON.parse response.body
|
25
|
+
|
26
|
+
Response.new(body['data'], response.code, body['meta']['message'], body['meta'], 1)
|
27
|
+
end
|
28
|
+
|
29
|
+
def get(data = {}, query_str = true)
|
30
|
+
@method = :GET
|
31
|
+
response = send_request(data, query_str)
|
32
|
+
body = JSON.parse response.body
|
33
|
+
|
34
|
+
Response.new(body['data'], response.code, body['meta']['message'], body['meta'], body['meta']['total_count'])
|
35
|
+
end
|
36
|
+
|
37
|
+
def put(data = {})
|
38
|
+
@method = :PUT
|
39
|
+
response = send_request(data)
|
40
|
+
body = JSON.parse response.body
|
41
|
+
|
42
|
+
Response.new(body['data'], response.code, body['meta']['message'], body['meta'], 1)
|
43
|
+
end
|
44
|
+
|
45
|
+
def delete(data = {}, query_str = true)
|
46
|
+
@method = :DELETE
|
47
|
+
response = send_request(data, query_str)
|
48
|
+
body = JSON.parse response.body
|
49
|
+
|
50
|
+
Response.new(body['data'], response.code, body['meta']['message'], body['meta'], body['meta']['total_count'])
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def send_request(data = {}, query_str = true)
|
56
|
+
base_uri = base_point(@type)
|
57
|
+
url_base = "#{base_uri}/#{@version_api}/#{@path}"
|
58
|
+
uri = URI.parse(url_base)
|
59
|
+
|
60
|
+
if @method == :GET
|
61
|
+
if query_str
|
62
|
+
uri.query = URI.encode_www_form(data)
|
63
|
+
else
|
64
|
+
url_base = "#{url_base}/#{data[:id]}"
|
65
|
+
uri = URI.parse(url_base)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
https = Net::HTTP.new(uri.host, uri.port)
|
70
|
+
https.use_ssl = true
|
71
|
+
request = build_request(uri)
|
72
|
+
request.set_form_data(data)
|
73
|
+
response = https.request(request)
|
74
|
+
end
|
75
|
+
|
76
|
+
def build_request(uri)
|
77
|
+
request = {}
|
78
|
+
token = if Datawow.project_key
|
79
|
+
Datawow.project_key
|
80
|
+
else
|
81
|
+
@token
|
82
|
+
end
|
83
|
+
|
84
|
+
if (token || '').empty?
|
85
|
+
raise ArgumentError, 'project\'s token has missed. To config about token check our document'
|
86
|
+
end
|
87
|
+
|
88
|
+
case @method
|
89
|
+
when :POST
|
90
|
+
request = Net::HTTP::Post.new(uri.request_uri)
|
91
|
+
when :GET
|
92
|
+
request = Net::HTTP::Get.new(uri.request_uri)
|
93
|
+
when :PUT
|
94
|
+
request = Net::HTTP::Put.new(uri.request_uri)
|
95
|
+
when :DELETE
|
96
|
+
request = Net::HTTP::Delete.new(uri.request_uri)
|
97
|
+
else
|
98
|
+
raise ArgumentError, 'HTTP method is not exist, We allowed GET, POST, PUT, DELET only'
|
99
|
+
end
|
100
|
+
|
101
|
+
request['User-Agent'] = 'Datawow Ruby gem client'
|
102
|
+
request['Accept'] = 'application/json'
|
103
|
+
request['Content-Type'] = 'application/json'
|
104
|
+
request['Authorization'] = token
|
105
|
+
|
106
|
+
request
|
107
|
+
end
|
108
|
+
|
109
|
+
def base_point(type)
|
110
|
+
{
|
111
|
+
image: 'https://kiyo-image.datawow.io/api',
|
112
|
+
ai: 'https://kiyo-image.datawow.io/api',
|
113
|
+
text: 'https://kiyo-text.datawow.io/api',
|
114
|
+
video: 'https://kiyo-image.datawow.io/api'
|
115
|
+
}[type]
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Datawow
|
2
|
+
|
3
|
+
# Custom error class for rescuing from all API errors
|
4
|
+
class Error < StandardError; end
|
5
|
+
|
6
|
+
# Raised when API returns the HTTP status code 400
|
7
|
+
class BadRequest < Error; end
|
8
|
+
|
9
|
+
# Raised when API returns the HTTP status code 403
|
10
|
+
class NotPermitted < Error; end
|
11
|
+
|
12
|
+
# Raised when API returns the HTTP status code 404
|
13
|
+
class NotFound < Error; end
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'faraday_middleware'
|
2
|
+
|
3
|
+
module Datawow
|
4
|
+
module FaradayMiddleware
|
5
|
+
class RaiseHttpException < Faraday::Middleware
|
6
|
+
def call(request_env)
|
7
|
+
@app.call(request_env).on_complete do |response|
|
8
|
+
case response[:status].to_i
|
9
|
+
when 200, 201
|
10
|
+
# nothing to do here
|
11
|
+
when 400
|
12
|
+
error_message = error_message(response[:body])
|
13
|
+
raise BadRequest, "#{response[:status]}: #{error_message}"
|
14
|
+
when 403
|
15
|
+
error_message = error_message(response[:body])
|
16
|
+
raise NotPermitted, "#{response[:status]}: #{error_message}"
|
17
|
+
when 404
|
18
|
+
error_message = error_message(response[:body])
|
19
|
+
raise NotFound, "#{response[:status]}: #{error_message}"
|
20
|
+
else
|
21
|
+
request_method = response[:method].to_s.upcase
|
22
|
+
request_url = response[:url].to_s
|
23
|
+
response_status = response[:status]
|
24
|
+
error_message = error_message(response[:body])
|
25
|
+
raise Error, "#{response_status}: #{request_method} #{request_url} #{error_message}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def error_message(response_body)
|
33
|
+
if !response_body.nil? && response_body.is_a?(String)
|
34
|
+
response_body = JSON.parse(response_body)
|
35
|
+
response_body['message']
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datawow
|
4
|
+
# :nodoc:
|
5
|
+
class ImageClosedQuestion
|
6
|
+
include Datawow::Models::Interface
|
7
|
+
|
8
|
+
attr_writer :token
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@token = nil
|
12
|
+
@type = :image
|
13
|
+
@path = 'images/closed_questions'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datawow
|
4
|
+
# :nodoc:
|
5
|
+
class NanameueHuman
|
6
|
+
include Datawow::Models::Interface
|
7
|
+
|
8
|
+
attr_writer :token
|
9
|
+
|
10
|
+
def initialize(token = nil)
|
11
|
+
@token = token
|
12
|
+
@type = :image
|
13
|
+
@path = 'jobs/nanameue/consensuses'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datawow
|
4
|
+
module Models
|
5
|
+
module Interface
|
6
|
+
def all(options = {})
|
7
|
+
connector.get(options)
|
8
|
+
end
|
9
|
+
|
10
|
+
def create(options)
|
11
|
+
connector.post(options)
|
12
|
+
end
|
13
|
+
|
14
|
+
def find_by(options = {})
|
15
|
+
@query_str = true if @query_str.nil?
|
16
|
+
connector.get(options, @query_str)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def connector
|
22
|
+
@connection ||= Connector.new(@path, @type, token: @token)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datawow
|
4
|
+
# :nodoc:
|
5
|
+
class Predictor
|
6
|
+
include Datawow::Models::Interface
|
7
|
+
|
8
|
+
attr_writer :token
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@token = nil
|
12
|
+
@type = :ai
|
13
|
+
@query_str = false
|
14
|
+
|
15
|
+
@path = 'prime/predictions'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datawow
|
4
|
+
# :nodoc:
|
5
|
+
class TextCategory
|
6
|
+
include Datawow::Models::Interface
|
7
|
+
|
8
|
+
attr_writer :token
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@token = nil
|
12
|
+
@type = :text
|
13
|
+
@path = 'text/text_categories'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datawow
|
4
|
+
# :nodoc:
|
5
|
+
class TextClosedQuestion
|
6
|
+
include Datawow::Models::Interface
|
7
|
+
|
8
|
+
attr_writer :token
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@token = nil
|
12
|
+
@type = :text
|
13
|
+
@path = 'text/text_closed_questions'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datawow
|
4
|
+
# :nodoc:
|
5
|
+
class TextConversation
|
6
|
+
include Datawow::Models::Interface
|
7
|
+
|
8
|
+
attr_writer :token
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@token = nil
|
12
|
+
@type = :text
|
13
|
+
@path = 'text/text_conversations'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datawow
|
4
|
+
# :nodoc:
|
5
|
+
class VideoClassification
|
6
|
+
include Datawow::Models::Interface
|
7
|
+
|
8
|
+
attr_writer :token
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@token = nil
|
12
|
+
@type = :video
|
13
|
+
@query_str = false
|
14
|
+
@path = 'videos/closed_questions'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/datawow.rb
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'pry-byebug'
|
3
|
+
|
4
|
+
require_relative 'datawow/client_response'
|
5
|
+
require_relative 'datawow/connection'
|
6
|
+
require_relative 'datawow/connector'
|
7
|
+
require_relative 'datawow/error'
|
8
|
+
require_relative 'datawow/version'
|
9
|
+
require_relative 'datawow/models/interface'
|
10
|
+
|
11
|
+
require_relative 'datawow/models/images/image_closed_questions'
|
12
|
+
require_relative 'datawow/models/images/image_photo_tags'
|
13
|
+
require_relative 'datawow/models/images/image_choices'
|
14
|
+
require_relative 'datawow/models/images/image_messages'
|
15
|
+
require_relative 'datawow/models/images/nanameue_human'
|
16
|
+
require_relative 'datawow/models/predictions/predictors'
|
17
|
+
|
18
|
+
require_relative 'datawow/models/texts/text_categories'
|
19
|
+
require_relative 'datawow/models/texts/text_closed_questions'
|
20
|
+
require_relative 'datawow/models/texts/text_conversations'
|
21
|
+
|
22
|
+
require_relative 'datawow/models/videos/video_classifications'
|
23
|
+
|
24
|
+
# :nodoc:
|
25
|
+
module Datawow
|
26
|
+
extend self
|
27
|
+
|
28
|
+
attr_accessor :project_key
|
29
|
+
|
30
|
+
class << self
|
31
|
+
def setup
|
32
|
+
yield self
|
33
|
+
end
|
34
|
+
|
35
|
+
def video_classification
|
36
|
+
VideoClassification.new
|
37
|
+
end
|
38
|
+
|
39
|
+
def text_closed_question
|
40
|
+
TextClosedQuestion.new
|
41
|
+
end
|
42
|
+
|
43
|
+
def text_category
|
44
|
+
TextCategory.new
|
45
|
+
end
|
46
|
+
|
47
|
+
def text_conversation
|
48
|
+
TextConversation.new
|
49
|
+
end
|
50
|
+
|
51
|
+
def image_closed_question
|
52
|
+
ImageClosedQuestion.new
|
53
|
+
end
|
54
|
+
|
55
|
+
def image_photo_tag
|
56
|
+
ImagePhotoTag.new
|
57
|
+
end
|
58
|
+
|
59
|
+
def image_choice
|
60
|
+
ImageChoice.new
|
61
|
+
end
|
62
|
+
|
63
|
+
def image_message
|
64
|
+
ImageMessage.new
|
65
|
+
end
|
66
|
+
|
67
|
+
def prediction
|
68
|
+
Predictor.new
|
69
|
+
end
|
70
|
+
|
71
|
+
def nanameue_human
|
72
|
+
NanameueHuman.new
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'rails/generators/base'
|
2
|
+
require 'securerandom'
|
3
|
+
|
4
|
+
module Datawow
|
5
|
+
module Generators
|
6
|
+
# :nodoc:
|
7
|
+
class InstallGenerator < Rails::Generators::Base
|
8
|
+
source_root File.expand_path('../../templates', __FILE__)
|
9
|
+
|
10
|
+
desc 'Creates a Datawow initializer
|
11
|
+
and copy locale files to your application.'
|
12
|
+
|
13
|
+
def copy_initializer
|
14
|
+
template 'datawow_api.rb', 'config/initializers/datawow_api.rb'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
module Datawow
|
6
|
+
class ResponseTest < Minitest::Test
|
7
|
+
def test_new_success_response
|
8
|
+
response = Response.new('response', 200, 'success', 'meta', 5)
|
9
|
+
refute_nil(response)
|
10
|
+
refute_nil(response.data)
|
11
|
+
assert_equal(true, response.successful?)
|
12
|
+
assert_equal('response', response.data)
|
13
|
+
assert_equal('success', response.message)
|
14
|
+
assert_equal('meta', response.meta)
|
15
|
+
assert_equal(5, response.total)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_failure_response
|
19
|
+
response = Response.new('response', 500, 'failure', 'meta')
|
20
|
+
refute_nil(response)
|
21
|
+
refute_nil(response.data)
|
22
|
+
assert_equal(false, response.successful?)
|
23
|
+
assert_equal('response', response.data)
|
24
|
+
assert_equal('failure', response.message)
|
25
|
+
assert_equal('meta', response.meta)
|
26
|
+
assert_equal(0, response.total)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|