custplace 0.0.5 → 0.0.6

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: 2be54dccd275ef8926687ab0b8f5841539b253333f4184c360690cbbb0a3a4b7
4
- data.tar.gz: 6544482930d0f41aebebb15db239e1b50ba997045fde2938898fb710c58b2f0f
3
+ metadata.gz: f968fdfbb429a78b57e20e0d111af237df2dd3aaa6d91205ef1ee469be6683db
4
+ data.tar.gz: 0d2881308c38fe25297c83f015d086699c731efe9bae01c6d1ffe1b4ba1fddef
5
5
  SHA512:
6
- metadata.gz: '0094de765458afad1882c7271cb7824830315e9614d79d6cbe9276f66e5522ee7040963a0a946439bdb82d78de231a55429efc125135606763ddab50ebcdc8c4'
7
- data.tar.gz: 82896b6b44c687e028c330223c191c3c92f4b07f101bf9c176bcd4f438f3ffea9f5dd335e1332f9ffe821dd7e092c8ca446235a97e88213c1b8f6680bf30c628
6
+ metadata.gz: c61fa5ebda18f8495047d5bcca4ba184a67a6cfa8bbf9e442190df3e5780bde601834ae2bb15b23e3e5b27cc52c45fe1681e35122d4fd27025c27a7bf9ac2e9e
7
+ data.tar.gz: 1ebb030469ba3be87250170c22b5aac92dc89dadf537b2ce50a6eaba7ec0b5ddce0c5f91f90d0113d3961cd6c5d2b911c69754decea3bc3733d4c3f4153c8578
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in ntq_excelsior_engine.gemspec.
4
+ gemspec
5
+
6
+ gem "httparty"
data/Gemfile.lock ADDED
@@ -0,0 +1,25 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ custplace (0.0.6)
5
+ httparty (< 1)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ httparty (0.21.0)
11
+ mini_mime (>= 1.0.0)
12
+ multi_xml (>= 0.5.2)
13
+ mini_mime (1.1.5)
14
+ multi_xml (0.6.0)
15
+
16
+ PLATFORMS
17
+ arm64-darwin-21
18
+ ruby
19
+
20
+ DEPENDENCIES
21
+ custplace!
22
+ httparty
23
+
24
+ BUNDLED WITH
25
+ 2.5.5
@@ -0,0 +1,13 @@
1
+ require 'custplace/base'
2
+ require 'custplace/entities/review'
3
+
4
+ module Custplace
5
+ class Reviews < Custplace::Base
6
+
7
+ def reply(review_id, message)
8
+ response = post("/answers", params: { message: message, message_id: review_id })
9
+ Custplace::Entities::Answer.new(response["data"])
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,49 @@
1
+ require 'httparty'
2
+ module Custplace
3
+ class Base
4
+ include HTTParty
5
+
6
+ base_uri 'https://apis.custplace.com/v3'
7
+
8
+ API_VERSION = '3.1.0'
9
+
10
+ attr_accessor :client
11
+
12
+ # Initialize a new Custplace::Api::Base
13
+ #
14
+ # @param client [Custplace::Client] the client to use for the api
15
+ # @return [Custplace::Api::Base]
16
+ def initialize(client)
17
+ @client = client
18
+ end
19
+
20
+ def default_headers
21
+ {
22
+ "Custplace-Version": API_VERSION,
23
+ "Authorization": "Bearer #{client.access_token}"
24
+ }
25
+ end
26
+
27
+ def get(path, params: {})
28
+ response = self.class.get("#{account_base_url}#{path}", query: params, headers: default_headers)
29
+ parsed_response = response.parsed_response
30
+ parsed_response
31
+ end
32
+
33
+ def post(path, params: {})
34
+ response = self.class.post("#{account_base_url}#{path}", body: params.to_json, headers: default_headers)
35
+ parsed_response = response.parsed_response
36
+ parsed_response
37
+ end
38
+
39
+ private
40
+
41
+ # Get the base url for the account
42
+ #
43
+ # @return [String] the base url for the account
44
+ def account_base_url
45
+ "/#{client.account_id}"
46
+ end
47
+
48
+ end
49
+ end
@@ -0,0 +1,34 @@
1
+ require 'custplace/stores'
2
+ require 'custplace/reviews'
3
+ require 'custplace/answers'
4
+
5
+ module Custplace
6
+ class Client
7
+
8
+ attr_reader :account_id, :access_token
9
+
10
+ # Public: Initialize a new Custplace::Client
11
+ #
12
+ # @param account_id [String] the account id found in custplace account url
13
+ # @param access_token [String] the access token for the account found in the integration page on Custplace
14
+ # @param options [Hash] the options to initialize the client with
15
+ # @return [Custplace::Client]
16
+ def initialize(account_id, access_token, options = {})
17
+ @account_id = account_id.to_s
18
+ @access_token = access_token
19
+ end
20
+
21
+ def stores
22
+ @stores ||= Custplace::Stores.new(self)
23
+ end
24
+
25
+ def reviews
26
+ @reviews ||= Custplace::Reviews.new(self)
27
+ end
28
+
29
+ def answers
30
+ @answers ||= Custplace::Answers.new(self)
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,19 @@
1
+ require 'custplace/meta_methods'
2
+ # Describe the store entity to return in the store api
3
+ module Custplace
4
+ module Entities
5
+ class Answer < Custplace::MetaMethods
6
+
7
+ object_attr_reader :id
8
+ object_attr_reader :message
9
+ object_attr_reader :is_official
10
+ object_attr_reader :is_private
11
+ object_attr_reader :source
12
+ object_attr_reader :author, Custplace::Entities::Author
13
+
14
+ object_attr_reader :created_at, Time
15
+ object_attr_reader :updated_at, Time
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,16 @@
1
+ require 'custplace/meta_methods'
2
+ # Describe the store entity to return in the store api
3
+ module Custplace
4
+ module Entities
5
+ class Author < Custplace::MetaMethods
6
+
7
+ object_attr_reader :id
8
+ object_attr_reader :firstname
9
+ object_attr_reader :lastname
10
+ object_attr_reader :fullname
11
+ object_attr_reader :email
12
+ object_attr_reader :username
13
+
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,26 @@
1
+ require 'custplace/meta_methods'
2
+ require 'custplace/entities/author'
3
+ require 'custplace/entities/answer'
4
+ # Describe the store entity to return in the store api
5
+ module Custplace
6
+ module Entities
7
+ class Review < Custplace::MetaMethods
8
+
9
+ object_attr_reader :id
10
+ object_attr_reader :source
11
+ object_attr_reader :type
12
+ object_attr_reader :rating_note
13
+ object_attr_reader :answers_count
14
+ object_attr_reader :shop, Custplace::Entities::Store, method_alias: :store
15
+ object_attr_reader :locale
16
+ object_attr_reader :subject
17
+ object_attr_reader :message
18
+ object_attr_reader :author, Custplace::Entities::Author
19
+ object_attr_reader :answers, [Custplace::Entities::Answer]
20
+
21
+ object_attr_reader :created_at, Time
22
+ object_attr_reader :updated_at, Time
23
+
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,16 @@
1
+ require 'custplace/meta_methods'
2
+ # Describe the store entity to return in the store api
3
+ module Custplace
4
+ module Entities
5
+ class Store < Custplace::MetaMethods
6
+
7
+ object_attr_reader :id
8
+ object_attr_reader :name
9
+ object_attr_reader :type
10
+ object_attr_reader :store_code
11
+ object_attr_reader :reviews_count
12
+ object_attr_reader :score
13
+
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,58 @@
1
+ module Custplace
2
+ class MetaMethods
3
+ include Memoizable
4
+
5
+ attr_reader :attrs, :keys
6
+
7
+ def initialize(data)
8
+ @attrs = data.is_a?(Hash) ? data.with_indifferent_access : data
9
+ end
10
+
11
+ class << self
12
+ def object_attr_reader(key1, klass=nil, **args)
13
+ if key1.is_a?(Array)
14
+ key1.each do |key|
15
+ define_attribute_method(key, klass, args)
16
+ end
17
+ else
18
+ define_attribute_method(key1, klass, args)
19
+ end
20
+ end
21
+
22
+ # Dynamically define a method for an attribute
23
+ #
24
+ # @param key1 [Symbol], or [Array]
25
+ # @param klass [Symbol]
26
+ # @param method_alias [Symbol] - alias
27
+ # @param target_alias [Symbol] - key for this item in the target class
28
+ # @param include_keys [Symbol] - used in define_attribute_method not here
29
+ # @param extra_key [Symbol] - down an extra level. IE progression: { raids: [...] }
30
+ def define_attribute_method(key1, klass = nil, method_alias: key1, target_alias: nil, include_keys: nil, extra_key: nil)
31
+ define_method(method_alias) do ||
32
+ target = extra_key.nil? ? @attrs[key1] : @attrs[key1].nil? ? nil : @attrs[key1][extra_key]
33
+ if target.nil?
34
+ nil
35
+ else
36
+ if klass.nil?
37
+ target
38
+ else
39
+ if klass.is_a?(Array)
40
+ target.map do |t|
41
+ klass.first.new(t)
42
+ end
43
+ else
44
+ klass.new(target)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ begin
50
+ return memoize(method_alias)
51
+ rescue Exception => e
52
+ Appsignal.send_error(e)
53
+ end
54
+ end
55
+ end
56
+
57
+ end
58
+ end
@@ -0,0 +1,40 @@
1
+ require 'custplace/base'
2
+ require 'custplace/entities/review'
3
+
4
+ module Custplace
5
+ class Reviews < Custplace::Base
6
+
7
+ # Get the list of all reviews
8
+ #
9
+ # @param params [Hash] the params to use for the request
10
+ # @return [Array<Custplace::Entities::Store>] the list of stores
11
+ def list(params: {})
12
+ page = 1
13
+ reviews = []
14
+ response = get("/messages", params: params.merge(page: page, per_page: 100 ))
15
+ data = response["data"]
16
+ reviews = reviews.concat(data.map { |review| Custplace::Entities::Review.new(review) })
17
+ pagination = response["links"]
18
+
19
+ while pagination["next"]
20
+ page += 1
21
+ response = get("/messages", params: params.merge(page: page))
22
+ data = response["data"]
23
+ reviews = reviews.concat(data.map { |review| Custplace::Entities::Review.new(review) })
24
+ pagination = response["links"]
25
+ end
26
+
27
+ reviews
28
+ end
29
+
30
+ # Retrieves the details of an existing review.
31
+ #
32
+ # @param review_id [String] the id of the review to retrieve
33
+ # @return [Custplace::Entities::Store] the store
34
+ def find(review_id)
35
+ response = get("/messages/#{review_id}")
36
+ Custplace::Entities::Review.new(response["data"])
37
+ end
38
+
39
+ end
40
+ end
@@ -0,0 +1,40 @@
1
+ require 'custplace/base'
2
+ require 'custplace/entities/store'
3
+
4
+ module Custplace
5
+ class Stores < Custplace::Base
6
+
7
+ # Get the list of all active stores
8
+ #
9
+ # @param params [Hash] the params to use for the request
10
+ # @return [Array<Custplace::Entities::Store>] the list of stores
11
+ def list(params: {})
12
+ page = 1
13
+ stores = []
14
+ response = get("/shops", params: params.merge(page: page))
15
+ data = response["data"]
16
+ stores = stores.concat(data.map { |store| Custplace::Entities::Store.new(store) })
17
+ pagination = response["links"]
18
+
19
+ while pagination["next"]
20
+ page += 1
21
+ response = get("/shops", params: params.merge(page: page))
22
+ data = response["data"]
23
+ stores = stores.concat(data.map { |store| Custplace::Entities::Store.new(store) })
24
+ pagination = response["links"]
25
+ end
26
+
27
+ stores
28
+ end
29
+
30
+ # Retrieves the details of an existing store.
31
+ #
32
+ # @param store_id [String] the id of the store to retrieve
33
+ # @return [Custplace::Entities::Store] the store
34
+ def find(store_id)
35
+ response = get("/shops/#{store_id}")
36
+ Custplace::Entities::Store.new(response["data"])
37
+ end
38
+
39
+ end
40
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Custplace
4
+ VERSION = '0.0.6'
5
+ end
data/lib/custplace.rb CHANGED
@@ -1,4 +1,6 @@
1
+ require_relative 'custplace/version'
1
2
  require 'custplace/client'
2
3
 
3
4
  module Custplace
5
+ class Error < StandardError; end
4
6
  end
metadata CHANGED
@@ -1,12 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: custplace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Qualimétrie
8
8
  autorequire:
9
- bindir: bin
9
+ bindir: exe
10
10
  cert_chain: []
11
11
  date: 2024-03-28 00:00:00.000000000 Z
12
12
  dependencies:
@@ -30,7 +30,20 @@ executables: []
30
30
  extensions: []
31
31
  extra_rdoc_files: []
32
32
  files:
33
+ - Gemfile
34
+ - Gemfile.lock
33
35
  - lib/custplace.rb
36
+ - lib/custplace/answers.rb
37
+ - lib/custplace/base.rb
38
+ - lib/custplace/client.rb
39
+ - lib/custplace/entities/answer.rb
40
+ - lib/custplace/entities/author.rb
41
+ - lib/custplace/entities/review.rb
42
+ - lib/custplace/entities/store.rb
43
+ - lib/custplace/meta_methods.rb
44
+ - lib/custplace/reviews.rb
45
+ - lib/custplace/stores.rb
46
+ - lib/custplace/version.rb
34
47
  homepage: https://rubygems.org/gems/custplace
35
48
  licenses:
36
49
  - MIT