gmc 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/gmc/client.rb +87 -0
- data/lib/gmc/configuration.rb +32 -0
- data/lib/gmc/version.rb +3 -0
- data/lib/gmc.rb +33 -0
- metadata +50 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 464eb8b61fb26f7aa3406420982b8d0de03a255b33dc09a9dd45064d9c63975c
|
4
|
+
data.tar.gz: 591f5c94d155770d8e3bdabc3c04657136affd6de8d9d18ffbffd29f521e068e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4790b9416355260d75ee1d4428a46d3be156b34f02a906973ecb2101b19d3a062d3c34f87d4f7e5e01b111aba4acb6fba14103066c14ec96885f79e9b02b3b40
|
7
|
+
data.tar.gz: c17250aa389968bf9f14a75ccf953a4a1f96ba60cbc42bfdb40fbff4897b46708f56b225e4111dc4c4a28af78d5ffe30bdbd96e5780f50247644e1ebe92445aa
|
data/lib/gmc/client.rb
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
module Gmc
|
2
|
+
class Client
|
3
|
+
def initialize(config_arg = {})
|
4
|
+
@config = Gmc.config.reverse_duplicate_merge(config_arg)
|
5
|
+
end
|
6
|
+
|
7
|
+
def create(**args)
|
8
|
+
body = {}
|
9
|
+
body[:offerId] = args[:id]
|
10
|
+
body[:title] = args[:title]
|
11
|
+
body[:description] = args[:description]
|
12
|
+
body[:link] = args[:link]
|
13
|
+
body[:imageLink] = args[:image_link]
|
14
|
+
body[:contentLanguage] = args[:content_language] || @config.language
|
15
|
+
body[:targetCountry] = args[:target_country] || @config.country
|
16
|
+
body[:brand] = args[:brand]
|
17
|
+
body[:feedLabel] = args[:feed_label] || @config.country
|
18
|
+
body[:channel] = args[:channel] || 'online'
|
19
|
+
body[:availability] = args[:availability] || 'in stock'
|
20
|
+
body[:condition] = args[:condition] || 'new'
|
21
|
+
body[:price] = {}
|
22
|
+
body[:price][:currency] = args[:currency] || @config.currency
|
23
|
+
body[:price][:value] = args[:price]
|
24
|
+
|
25
|
+
call('/products', body, 'POST')
|
26
|
+
end
|
27
|
+
|
28
|
+
def update(**args)
|
29
|
+
body = {}
|
30
|
+
body[:title] = args[:title]
|
31
|
+
body[:description] = args[:description]
|
32
|
+
body[:link] = args[:link]
|
33
|
+
body[:imageLink] = args[:image_link]
|
34
|
+
body[:availability] = args[:availability] || 'in stock'
|
35
|
+
body[:condition] = args[:condition] || 'new'
|
36
|
+
body[:price] = {}
|
37
|
+
body[:price][:currency] = args[:currency] || @config.currency
|
38
|
+
body[:price][:value] = args[:price]
|
39
|
+
|
40
|
+
call("/products/#{args[:id]}", body, 'PATCH')
|
41
|
+
end
|
42
|
+
|
43
|
+
def destroy(id)
|
44
|
+
call("/products/#{id}", 'DELETE')
|
45
|
+
end
|
46
|
+
|
47
|
+
def product(id)
|
48
|
+
call("/products/#{id}", nil)
|
49
|
+
end
|
50
|
+
|
51
|
+
def products
|
52
|
+
call("/products", nil)
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def call(endpoint, body, method_name = 'GET')
|
58
|
+
url = URI("#{@config.base_url}/#{@config.merchant_id}#{endpoint}?key=#{@config.api_key}")
|
59
|
+
https = Net::HTTP.new(url.host, url.port)
|
60
|
+
https.use_ssl = true
|
61
|
+
|
62
|
+
case method_name
|
63
|
+
when 'POST'
|
64
|
+
request = Net::HTTP::Post.new(url)
|
65
|
+
request.body = JSON.dump(body)
|
66
|
+
when 'PATCH'
|
67
|
+
request = Net::HTTP::Patch.new(url)
|
68
|
+
request.body = JSON.dump(body)
|
69
|
+
when 'DELETE'
|
70
|
+
request = Net::HTTP::Delete.new(url)
|
71
|
+
else
|
72
|
+
request = Net::HTTP::Get.new(url)
|
73
|
+
end
|
74
|
+
|
75
|
+
request['Authorization'] = "Bearer #{@config.access_token}"
|
76
|
+
request['Accept'] = 'application/json'
|
77
|
+
request['Content-Type'] = 'application/json'
|
78
|
+
response_formate(https.request(request))
|
79
|
+
end
|
80
|
+
|
81
|
+
def response_formate(res)
|
82
|
+
OpenStruct.new({ code: res.code, data: JSON.parse(res.read_body) })
|
83
|
+
rescue StandardError => e
|
84
|
+
OpenStruct.new({ code: res.code, data: res.read_body, exception_message: e.to_s })
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Gmc
|
2
|
+
class Configuration
|
3
|
+
attr_accessor :merchant_id
|
4
|
+
attr_accessor :currency
|
5
|
+
attr_accessor :access_token
|
6
|
+
attr_accessor :api_key
|
7
|
+
attr_accessor :language
|
8
|
+
attr_accessor :country
|
9
|
+
attr_accessor :base_url
|
10
|
+
|
11
|
+
def self.setup
|
12
|
+
new.tap do |instance|
|
13
|
+
yield(instance) if block_given?
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def reverse_duplicate_merge(hash)
|
18
|
+
dup.tap do |instance|
|
19
|
+
hash.each do |option, value|
|
20
|
+
instance.public_send("#{option}=", value)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def initialize
|
26
|
+
@base_url = "https://shoppingcontent.googleapis.com/content/v2.1"
|
27
|
+
@country = 'AU'
|
28
|
+
@currency = 'AUD'
|
29
|
+
@language = 'en'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/gmc/version.rb
ADDED
data/lib/gmc.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "json"
|
4
|
+
require "net/http"
|
5
|
+
require "rbconfig"
|
6
|
+
require "securerandom"
|
7
|
+
require "set"
|
8
|
+
require "socket"
|
9
|
+
require "uri"
|
10
|
+
require "forwardable"
|
11
|
+
require_relative "gmc/version"
|
12
|
+
require "gmc/client"
|
13
|
+
require "gmc/configuration"
|
14
|
+
|
15
|
+
module Gmc
|
16
|
+
class Error < StandardError; end
|
17
|
+
@config = Gmc::Configuration.setup
|
18
|
+
|
19
|
+
class << self
|
20
|
+
extend Forwardable
|
21
|
+
|
22
|
+
attr_reader :config
|
23
|
+
|
24
|
+
# User configurable options
|
25
|
+
def_delegators :@config, :merchant_id, :merchant_id=
|
26
|
+
def_delegators :@config, :currency, :currency=
|
27
|
+
def_delegators :@config, :language, :language=
|
28
|
+
def_delegators :@config, :country, :country=
|
29
|
+
def_delegators :@config, :access_token, :access_token=
|
30
|
+
def_delegators :@config, :api_key, :api_key=
|
31
|
+
def_delegators :@config, :base_url, :base_url=
|
32
|
+
end
|
33
|
+
end
|
metadata
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gmc
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Varun Kothari
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-05-08 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: APIs to upload product details on the merchant center.
|
14
|
+
email:
|
15
|
+
- varunkothari007@gmail.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- lib/gmc.rb
|
21
|
+
- lib/gmc/client.rb
|
22
|
+
- lib/gmc/configuration.rb
|
23
|
+
- lib/gmc/version.rb
|
24
|
+
homepage: https://throughouttechnologies.com/contact_us
|
25
|
+
licenses:
|
26
|
+
- MIT
|
27
|
+
metadata:
|
28
|
+
homepage_uri: https://throughouttechnologies.com/contact_us
|
29
|
+
source_code_uri: https://github.com/vik007/gmc
|
30
|
+
changelog_uri: https://throughouttechnologies.com/contact_us
|
31
|
+
post_install_message:
|
32
|
+
rdoc_options: []
|
33
|
+
require_paths:
|
34
|
+
- lib
|
35
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '2.5'
|
40
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
requirements: []
|
46
|
+
rubygems_version: 3.2.3
|
47
|
+
signing_key:
|
48
|
+
specification_version: 4
|
49
|
+
summary: GMC is Google merchant API for Product
|
50
|
+
test_files: []
|