datashake-ruby-sdk 1.0.0 → 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: 1e9bef7b0a5f2b6c4722b987796279e4699aa1f9e6fdf1eabf26bfde0fa65963
4
- data.tar.gz: 28126f4e94e3cde865901dbaa0dd0edd6cc71c110e1ca0f22b8ae680758ecfda
3
+ metadata.gz: 4f0df80b56b9b5f976b62f206111490edef96fd7b77a564745467fabc37e7b15
4
+ data.tar.gz: 5f117c1c58754f37ceaa60eb8a595a603050d5217ae521bdc7ff59c472bd80f2
5
5
  SHA512:
6
- metadata.gz: f3332643deab9ec63978d325db02d3584d3de04589b12b3b442dddf6edeffd1073349edcfd6c095bf6845c63cdb6905d5e27e0e4380b0756c1c5dbbe9ce73fc2
7
- data.tar.gz: d71f31d8b30f75f22571bd47249617540b9c1a54954ba34e6cdb7da24be8583c39babaf9b39e52b09351ce40700085387595fd3ba2a81655eeac7f5117234dba
6
+ metadata.gz: b0ed0de9d0cfa2336b34d3c2e0817647eb95d17d72cf42084aa1c4b85f26f28a4409db9cde566d9ca49abca31bd25115dbc3da0e250506bb37cac9409cdf57b8
7
+ data.tar.gz: c48aa5f0cf6a1a6fef42a673a5fab41a8fb66505f2a2e9c74e178edc193cd5dbd6f950489c7c1ada7c626605f0beb56478e8336806def459f35b87675d6f3e3e
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # datashake-ruby-sdk
1
+ # Datashake Ruby SDK ![Build status](https://github.com/reviewshake/datashake-ruby-sdk/actions/workflows/main.yml/badge.svg) [![Gem Version](https://badge.fury.io/rb/datashake-ruby-sdk.svg)](https://badge.fury.io/rb/datashake-ruby-sdk)
2
2
 
3
3
  An API wrapper written in ruby for Datashake API
4
4
  https://docs.datashake.com/
@@ -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.
@@ -54,6 +70,10 @@ To release a new version, update the version number in `version.rb`, and then ru
54
70
 
55
71
  Bug reports and pull requests are welcome on GitHub at https://github.com/reviewshake/datashake-ruby-sdk.
56
72
 
73
+ ## Release
74
+
75
+ Bump the version number in https://github.com/reviewshake/datashake-ruby-sdk/blob/main/lib/datashake-ruby-sdk/version.rb, create a release with github and a tag from the new version number. After doing the github release, build the gem (`gem build`) from your terminal and push (`gem push`) the new version rubygems https://rubygems.org/gems/datashake-ruby-sdk. You need to be a gem owner in order to do this.
76
+
57
77
  ## License
58
78
 
59
79
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -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
@@ -15,13 +15,13 @@ module Datashake
15
15
  attribute :source_name, Datashake::Types::Strict::String
16
16
  attribute :place_id, Datashake::Types::Strict::String.optional
17
17
  attribute :external_identifier, Datashake::Types::Strict::String.optional
18
- attribute :meta_data, Datashake::Types::Metadata
18
+ attribute :meta_data, Datashake::Types::Metadata.optional
19
19
  attribute :unique_id, Datashake::Types::Strict::String.optional
20
- attribute :review_count, Datashake::Types::Strict::Integer
21
- attribute :average_rating, Datashake::Types::Strict::Float
22
- attribute :last_crawl, Datashake::Types::Params::Date
20
+ attribute :review_count, Datashake::Types::Strict::Integer.optional
21
+ attribute :average_rating, Datashake::Types::Strict::Float.optional
22
+ attribute :last_crawl, Datashake::Types::Params::Date.optional
23
23
  attribute :crawl_status, Datashake::Types::Strict::String
24
- attribute :percentage_complete, Datashake::Types::Strict::Integer
24
+ attribute :percentage_complete, Datashake::Types::Coercible::Integer
25
25
  attribute :result_count, Datashake::Types::Strict::Integer
26
26
  attribute :credits_used, Datashake::Types::Strict::Integer
27
27
  attribute :from_date, Datashake::Types::Params::Date.optional
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Datashake
4
- VERSION = "1.0.0"
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.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Reviewshake <3 Datashake
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-08 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
@@ -38,7 +38,7 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2.2'
41
- description:
41
+ description:
42
42
  email:
43
43
  - dev@shake.io
44
44
  executables: []
@@ -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
@@ -79,7 +89,7 @@ licenses:
79
89
  metadata:
80
90
  homepage_uri: https://docs.datashake.com
81
91
  source_code_uri: https://github.com/reviewshake/datashake-ruby-sdk
82
- post_install_message:
92
+ post_install_message:
83
93
  rdoc_options: []
84
94
  require_paths:
85
95
  - lib
@@ -94,8 +104,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
94
104
  - !ruby/object:Gem::Version
95
105
  version: '0'
96
106
  requirements: []
97
- rubygems_version: 3.3.7
98
- signing_key:
107
+ rubygems_version: 3.0.3
108
+ signing_key:
99
109
  specification_version: 4
100
110
  summary: An API wrapper for Datashake API
101
111
  test_files: []