datashake-ruby-sdk 1.0.0 → 1.1.1

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
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: []