datashake-ruby-sdk 1.0.1 → 1.1.1

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
2
  SHA256:
3
- metadata.gz: c5e8658f1037418c26e29a10674219c469c76946e997c33f6ee7a4c175184ec8
4
- data.tar.gz: b313abc0652ef1bd697f5be1e152e3be79a167f1609e24a3d8f1c226e58676f5
3
+ metadata.gz: 4f0df80b56b9b5f976b62f206111490edef96fd7b77a564745467fabc37e7b15
4
+ data.tar.gz: 5f117c1c58754f37ceaa60eb8a595a603050d5217ae521bdc7ff59c472bd80f2
5
5
  SHA512:
6
- metadata.gz: 1a75cd30b5894219366ad0cf9dbc723f58b47a106b437b801afe67608dab0e2d125c5cd27afb9afb440e00843ffa84abf3550280d15d3a62edb5f9c0c2f1ea52
7
- data.tar.gz: e311c570b0b6bb3ebea576b82815193a1a28452b0aa8b2786b8b6728b193f04200853a82ae5959e38d3a802bf39edc8973321ee3a111b451fee7af246a993782
6
+ metadata.gz: b0ed0de9d0cfa2336b34d3c2e0817647eb95d17d72cf42084aa1c4b85f26f28a4409db9cde566d9ca49abca31bd25115dbc3da0e250506bb37cac9409cdf57b8
7
+ data.tar.gz: c48aa5f0cf6a1a6fef42a673a5fab41a8fb66505f2a2e9c74e178edc193cd5dbd6f950489c7c1ada7c626605f0beb56478e8336806def459f35b87675d6f3e3e
data/README.md CHANGED
@@ -39,6 +39,22 @@ client.info.job_id(346998013).fetch # Fetch job details
39
39
  client.reviews.job_id(346998013).page(2).per_page(10).fetch # Fetch reviews for the given job
40
40
  ```
41
41
 
42
+ ```ruby
43
+ client = Datashake::ReviewIndex::Client.new(token: 'your-api-token')
44
+
45
+ response = client # Get reviews from RIAPI
46
+ .reviews
47
+ .callback("https://myserver.com/callbacks/reviews")
48
+ .name("McDonalds")
49
+ .city("Tbilisi")
50
+ .fetch
51
+
52
+ response.success => true
53
+ response.request_id => "1665992737596342636-004fd578-fd32-41"
54
+ response.status => 201
55
+ response.message => "Your task was successfully submitted."
56
+ ```
57
+
42
58
  ## Development
43
59
 
44
60
  After checking out the repo, run `bin/setup` to install dependencies.
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "faraday"
4
+
5
+ module Datashake
6
+ module ReviewIndex
7
+ class Client
8
+ BASE_URL = "https://reviewindexapi.datashake.com"
9
+
10
+ attr_reader :token
11
+
12
+ def initialize(token:, adapter: Faraday.default_adapter, timeout: 30, open_timeout: 30)
13
+ @token = token
14
+ @adapter = adapter
15
+ @timeout = timeout
16
+ @open_timeout = open_timeout
17
+ end
18
+
19
+ def connection
20
+ @connection ||= Faraday.new do |conn|
21
+ conn.url_prefix = BASE_URL
22
+ conn.request(:json)
23
+ conn.response(:json, content_type: "application/json")
24
+ conn.options.timeout = timeout
25
+ conn.options.open_timeout = open_timeout
26
+ conn.adapter(adapter)
27
+ end
28
+ end
29
+
30
+ def v1
31
+ @v1 ||= V1.new(self)
32
+ end
33
+
34
+ def profiles
35
+ v1.profiles
36
+ end
37
+
38
+ def reviews
39
+ v1.reviews
40
+ end
41
+
42
+ def update_status
43
+ v1.update_status
44
+ end
45
+
46
+ private
47
+
48
+ attr_reader :adapter, :timeout, :open_timeout
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Datashake
4
+ module ReviewIndex
5
+ class V1
6
+ class BaseEndpoint
7
+ def self.request_parameters(request_parameters)
8
+ request_parameters.each do |param_name|
9
+ define_method(param_name) do |value|
10
+ @params[param_name] = value
11
+
12
+ self
13
+ end
14
+ end
15
+ end
16
+
17
+ def initialize(version)
18
+ @version = version
19
+ @params = {}
20
+ end
21
+
22
+ def fetch
23
+ response = version.fetch(method: :get, path: endpoint_path, params: params)
24
+
25
+ response_class.new(response)
26
+ end
27
+
28
+ def response_class
29
+ raise NotImplementedError, "Implement it in a successor class"
30
+ end
31
+
32
+ def endpoint_path
33
+ raise NotImplementedError, "Implement it in a successor class"
34
+ end
35
+
36
+ private
37
+
38
+ attr_reader :version, :params
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Datashake
4
+ module ReviewIndex
5
+ class V1
6
+ class Error < StandardError
7
+ attr_reader :status
8
+
9
+ def initialize(msg, status)
10
+ @status = status
11
+
12
+ super(msg)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Datashake
4
+ module ReviewIndex
5
+ class V1
6
+ class Profiles < BaseEndpoint
7
+ PATH = "profiles"
8
+
9
+ request_parameters %i[
10
+ address
11
+ callback
12
+ city
13
+ country
14
+ domain
15
+ external_identifier
16
+ name
17
+ page_number
18
+ per_page
19
+ phone_number
20
+ state
21
+ street
22
+ ticker_symbol
23
+ update
24
+ zip_code
25
+ ]
26
+
27
+ def response_class
28
+ Datashake::ReviewIndex::V1::Response
29
+ end
30
+
31
+ def endpoint_path
32
+ PATH
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry-struct"
4
+
5
+ module Datashake
6
+ module ReviewIndex
7
+ class V1
8
+ class Response < ::Dry::Struct
9
+ transform_keys(&:to_sym)
10
+
11
+ attribute :success, Datashake::Types::Strict::Bool
12
+ attribute? :request_id, Datashake::Types::Strict::String
13
+ attribute :http_status, Datashake::Types::Strict::Integer
14
+ attribute :message, Datashake::Types::Strict::String
15
+ attribute? :credits_used, Datashake::Types::Strict::Integer
16
+ attribute? :details, Datashake::Types::Strict::String
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Datashake
4
+ module ReviewIndex
5
+ class V1
6
+ class Reviews < BaseEndpoint
7
+ PATH = "reviews"
8
+
9
+ request_parameters %i[
10
+ address
11
+ callback
12
+ city
13
+ country
14
+ diff
15
+ domain
16
+ external_identifier
17
+ from_date
18
+ name
19
+ page_number
20
+ per_page
21
+ phone_number
22
+ review_site
23
+ state
24
+ street
25
+ ticker_symbol
26
+ timeseries
27
+ to_date
28
+ update
29
+ zip_code
30
+ ]
31
+
32
+ def response_class
33
+ Datashake::ReviewIndex::V1::Response
34
+ end
35
+
36
+ def endpoint_path
37
+ PATH
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry-struct"
4
+
5
+ module Datashake
6
+ module ReviewIndex
7
+ class V1
8
+ class StatusResponse < ::Dry::Struct
9
+ transform_keys(&:to_sym)
10
+
11
+ attribute :request_id, Datashake::Types::Strict::String
12
+ attribute :http_status, Datashake::Types::Strict::Integer
13
+ attribute :status, Datashake::Types::Strict::String
14
+ attribute :created_at, Datashake::Types::Strict::String
15
+ attribute :completeness_rate, Datashake::Types::Strict::Float
16
+ attribute :success_rate, Datashake::Types::Strict::Float
17
+ attribute :size, Datashake::Types::Strict::Integer
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Datashake
4
+ module ReviewIndex
5
+ class V1
6
+ class UpdateStatus < BaseEndpoint
7
+ PATH = "update/status"
8
+
9
+ request_parameters [:request_id]
10
+
11
+ def response_class
12
+ Datashake::ReviewIndex::V1::StatusResponse
13
+ end
14
+
15
+ def endpoint_path
16
+ PATH
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Datashake
4
+ module ReviewIndex
5
+ class V1
6
+ autoload :BaseEndpoint, "datashake-ruby-sdk/review_index/v1/base_endpoint"
7
+ autoload :Error, "datashake-ruby-sdk/review_index/v1/error"
8
+ autoload :Profiles, "datashake-ruby-sdk/review_index/v1/profiles"
9
+ autoload :Response, "datashake-ruby-sdk/review_index/v1/response"
10
+ autoload :StatusResponse, "datashake-ruby-sdk/review_index/v1/status_response"
11
+ autoload :Reviews, "datashake-ruby-sdk/review_index/v1/reviews"
12
+ autoload :UpdateStatus, "datashake-ruby-sdk/review_index/v1/update_status"
13
+
14
+ def initialize(client)
15
+ @client = client
16
+ end
17
+
18
+ def profiles
19
+ @profiles ||= Profiles.new(self)
20
+ end
21
+
22
+ def reviews
23
+ @reviews ||= Reviews.new(self)
24
+ end
25
+
26
+ def update_status
27
+ @update_status ||= UpdateStatus.new(self)
28
+ end
29
+
30
+ def connection
31
+ client.connection
32
+ end
33
+
34
+ def fetch(method:, path:, params: {}, body: {})
35
+ response = connection.public_send(method, path) do |request|
36
+ request.params = params
37
+ request.params[:api_key] = client.token
38
+ request.body = body.to_json
39
+ end
40
+
41
+ body = response.body
42
+ body["http_status"] = response.status
43
+
44
+ return body if body["success"] || success_status?(response.status)
45
+
46
+ raise Datashake::ReviewIndex::V1::Error.new(
47
+ body["message"],
48
+ body["http_status"]
49
+ )
50
+ end
51
+
52
+ def success_status?(status)
53
+ [200, 201].include?(status)
54
+ end
55
+
56
+ private
57
+
58
+ attr_reader :client
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Datashake
4
+ module ReviewIndex
5
+ autoload :Client, "datashake-ruby-sdk/review_index/client"
6
+ autoload :V1, "datashake-ruby-sdk/review_index/v1"
7
+ end
8
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Datashake
4
- VERSION = "1.0.1"
4
+ VERSION = "1.1.1"
5
5
  end
@@ -3,6 +3,7 @@
3
3
  require_relative "datashake-ruby-sdk/version"
4
4
 
5
5
  module Datashake
6
+ autoload :ReviewIndex, "datashake-ruby-sdk/review_index"
6
7
  autoload :ReviewScraper, "datashake-ruby-sdk/review_scraper"
7
8
  autoload :Types, "datashake-ruby-sdk/types"
8
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datashake-ruby-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Reviewshake <3 Datashake
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-14 00:00:00.000000000 Z
11
+ date: 2022-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-struct
@@ -52,6 +52,16 @@ files:
52
52
  - README.md
53
53
  - Rakefile
54
54
  - lib/datashake-ruby-sdk.rb
55
+ - lib/datashake-ruby-sdk/review_index.rb
56
+ - lib/datashake-ruby-sdk/review_index/client.rb
57
+ - lib/datashake-ruby-sdk/review_index/v1.rb
58
+ - lib/datashake-ruby-sdk/review_index/v1/base_endpoint.rb
59
+ - lib/datashake-ruby-sdk/review_index/v1/error.rb
60
+ - lib/datashake-ruby-sdk/review_index/v1/profiles.rb
61
+ - lib/datashake-ruby-sdk/review_index/v1/response.rb
62
+ - lib/datashake-ruby-sdk/review_index/v1/reviews.rb
63
+ - lib/datashake-ruby-sdk/review_index/v1/status_response.rb
64
+ - lib/datashake-ruby-sdk/review_index/v1/update_status.rb
55
65
  - lib/datashake-ruby-sdk/review_scraper.rb
56
66
  - lib/datashake-ruby-sdk/review_scraper/client.rb
57
67
  - lib/datashake-ruby-sdk/review_scraper/v2.rb