gecko-ruby 0.8.0 → 0.9.0
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 +4 -4
- data/CHANGELOG.md +31 -25
- data/README.md +7 -0
- data/lib/gecko.rb +10 -0
- data/lib/gecko/ext/liquid_compat.rb +90 -0
- data/lib/gecko/ext/log_subscriber.rb +46 -0
- data/lib/gecko/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b82efcf479bde2b049bfd09f55185e8c4c5fd29377ca35a8865dc2816c6cba0c
|
4
|
+
data.tar.gz: 838ba153b885dcbca0accf42143733b4e9d79478bcd1d26d57001c3cfda9f4ca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 607951bf8f6958c8b11814dcaa5c9f8d3d24517dcf0ae2f34e2b443358abdf1f27354a53f227baba505a1bfebae42891519b17cdadecde23c5fd696d0a9ff087
|
7
|
+
data.tar.gz: da203fe38e4d22f35de38d56217489338a5319de2f6cdd82fb8a67d9533a5f97969e2397010323f53598c19203c0e63b422211cf2b296d2db4ca67877ab9d7ee
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,12 @@
|
|
1
|
+
## 0.9.0 (2019-07-24)
|
2
|
+
- Added an optional `ActiveSupport::LogSubscriber` class for easy logging,
|
3
|
+
can be enabled via `Gecko.enable_logging`.
|
4
|
+
- Added an optional compatibility shim for the Liquid templating language,
|
5
|
+
can be enabled via `Gecko.install_liquid_shim`.
|
6
|
+
|
1
7
|
## 0.8.0 (2019-07-01)
|
2
|
-
- Add `discount_amount` attribute and `discounted_price` helper to `OrderLineItem`'s
|
3
|
-
- Drop support for Ruby 2.3
|
8
|
+
- Add `discount_amount` attribute and `discounted_price` helper to `OrderLineItem`'s.
|
9
|
+
- Drop support for EOL Ruby 2.3 as well.
|
4
10
|
|
5
11
|
## 0.7.1 (2019-03-19)
|
6
12
|
- Add `Gecko::Record::Note` model.
|
@@ -8,7 +14,7 @@
|
|
8
14
|
|
9
15
|
## 0.7.0 (2019-02-19)
|
10
16
|
- Add new `country_code` attribute to Address model.
|
11
|
-
- Stop testing on Ruby 2.1 and 2.2
|
17
|
+
- Stop testing on Ruby 2.1 and 2.2.
|
12
18
|
|
13
19
|
## 0.6.0 (2018-11-13)
|
14
20
|
- Add `Gecko::Record::Webhook` model.
|
@@ -26,51 +32,51 @@
|
|
26
32
|
- Add minimum `oauth2` gem dependency
|
27
33
|
|
28
34
|
## 0.2.5 (2018-01-15)
|
29
|
-
- Add `User#account_name
|
35
|
+
- Add `User#account_name`.
|
30
36
|
|
31
37
|
## 0.2.4 (2017-08-28)
|
32
|
-
- Add `Company#tags
|
38
|
+
- Add `Company#tags`.
|
33
39
|
|
34
40
|
## 0.2.3 (2017-08-14)
|
35
|
-
- Add support for API idempotency `@client.Record.save(idempotency_key: 'ABCDEF123456')
|
36
|
-
- Marked a couple of fields as readonly that weren't correctly marked so
|
41
|
+
- Add support for API idempotency `@client.Record.save(idempotency_key: 'ABCDEF123456')`.
|
42
|
+
- Marked a couple of fields as readonly that weren't correctly marked so.
|
37
43
|
|
38
44
|
## 0.2.2 (2016-06-06)
|
39
|
-
- Add `@client.Record.peek_all` to return all items currently in identity map
|
45
|
+
- Add `@client.Record.peek_all` to return all items currently in identity map.
|
40
46
|
|
41
47
|
## 0.2.1 (2016-06-06) (Yanked)
|
42
48
|
## 0.2.0 (2016-06-06)
|
43
|
-
- Support `writeable_on :create` for attributes
|
44
|
-
- Allow passing query parameters to `Adapter#count
|
45
|
-
- Add `@client.Record.first` and `@client.Record.forty_two` as helpers
|
46
|
-
- Store the last API response at `@client.Record.last_response
|
47
|
-
- Make sure to set Content-Type to `application/json
|
48
|
-
- Clean up some deprecated fields leading up to API release (See [https://developer.tradegecko.com](https://developer.tradegecko.com) for up-to-date attribute list)
|
49
|
+
- Support `writeable_on :create` for attributes.
|
50
|
+
- Allow passing query parameters to `Adapter#count`.
|
51
|
+
- Add `@client.Record.first` and `@client.Record.forty_two` as helpers.
|
52
|
+
- Store the last API response at `@client.Record.last_response`.
|
53
|
+
- Make sure to set Content-Type to `application/json`.
|
54
|
+
- Clean up some deprecated fields leading up to API release (See [https://developer.tradegecko.com](https://developer.tradegecko.com) for up-to-date attribute list).
|
49
55
|
|
50
56
|
## 0.1.0 (2015-11-25)
|
51
|
-
- Move default headers to the adapter base class to make it easier to merge them when overriding
|
52
|
-
- Clean up old attributes
|
57
|
+
- Move default headers to the adapter base class to make it easier to merge them when overriding.
|
58
|
+
- Clean up old attributes.
|
53
59
|
|
54
60
|
## 0.0.10 (2015-10-21)
|
55
|
-
- Add `first_name`/`last_name` to addresses
|
61
|
+
- Add `first_name`/`last_name` to addresses.
|
56
62
|
|
57
63
|
## 0.0.9 (2015-10-02)
|
58
|
-
- Add tags to order
|
64
|
+
- Add tags to order.
|
59
65
|
|
60
66
|
## 0.0.8 (2015-09-10)
|
61
|
-
- Fetch `VariantLocation#committed_stock` as committed
|
62
|
-
- Make image uploading work
|
67
|
+
- Fetch `VariantLocation#committed_stock` as committed.
|
68
|
+
- Make image uploading work.
|
63
69
|
|
64
70
|
## 0.0.7 (2015-03-17)
|
65
|
-
- Fix issue with `Order#tax_override
|
66
|
-
- Support sideloaded records without a hack
|
71
|
+
- Fix issue with `Order#tax_override`.
|
72
|
+
- Support sideloaded records without a hack.
|
67
73
|
|
68
74
|
## 0.0.6 (2015-03-17)
|
69
|
-
- Add `Gecko::Record::PaymentTerm
|
75
|
+
- Add `Gecko::Record::PaymentTerm`.
|
70
76
|
|
71
77
|
## 0.0.5 (2015-03-04)
|
72
|
-
- Add size to base adapter
|
73
|
-
- Update serialization_helper to support serializing arrays correctly
|
78
|
+
- Add `size` to base adapter.
|
79
|
+
- Update serialization_helper to support serializing arrays correctly.
|
74
80
|
|
75
81
|
## 0.0.4 (2015-01-09)
|
76
82
|
- Renamed gem so we can publish it on RubyGems.org
|
data/README.md
CHANGED
@@ -189,6 +189,9 @@ ActiveSupport::Notifications.subscribe('request.gecko') do |name, start, finish,
|
|
189
189
|
end
|
190
190
|
```
|
191
191
|
|
192
|
+
The gem comes with a default `LogSubscriber` that outputs API requests in an ActiveRecord style.
|
193
|
+
This is disabled by default and can be included by calling `Gecko.enable_logging`.
|
194
|
+
|
192
195
|
## Checking API limits
|
193
196
|
|
194
197
|
The Gecko gem stores a copy of the last API response per adapter.
|
@@ -204,6 +207,10 @@ client.Product.last_response.headers['X-Rate-Limit-Reset']
|
|
204
207
|
#=> '1412079600'
|
205
208
|
```
|
206
209
|
|
210
|
+
## Liquid Compatibility
|
211
|
+
A compatibility shim for the Liquid templating language is distributed, but not loaded by default.
|
212
|
+
This can be enabled via `Gecko.install_liquid_shim`
|
213
|
+
|
207
214
|
## TODO
|
208
215
|
- Deleting records
|
209
216
|
- Complete record collection
|
data/lib/gecko.rb
CHANGED
@@ -32,3 +32,13 @@ require 'gecko/record/purchase_order_line_item'
|
|
32
32
|
require 'gecko/record/tax_type'
|
33
33
|
require 'gecko/record/payment_term'
|
34
34
|
require 'gecko/record/webhook'
|
35
|
+
|
36
|
+
module Gecko
|
37
|
+
def self.enable_logging
|
38
|
+
require 'gecko/ext/log_subscriber'
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.install_liquid_shim
|
42
|
+
require 'gecko/ext/liquid_compat'
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Including this file enhances every Gecko::Record object to support the Liquid::Drop API.
|
4
|
+
#
|
5
|
+
# @example
|
6
|
+
# template = Liquid::Template.parse("{{variant.sku}}")
|
7
|
+
# rendered = template.render('variant' => client.Variant.find(123))
|
8
|
+
module Gecko
|
9
|
+
# Monkey-patches the base record class with a `to_liquid` method
|
10
|
+
module LiquidCompatibility
|
11
|
+
# The Liquid templating library automatically uses a `to_liquid` method if found.
|
12
|
+
def to_liquid
|
13
|
+
liquid_decorator.new(self)
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
# If you'd like to add custom behviour per-record-type,
|
19
|
+
# override this method and return a subclass.
|
20
|
+
#
|
21
|
+
# @example
|
22
|
+
#
|
23
|
+
# module MyLiquidCompat
|
24
|
+
# def liquid_decorator
|
25
|
+
# "#{self.class.demodulized_name}Decorator".safe_constantize || BaseDecorator
|
26
|
+
# end
|
27
|
+
# end
|
28
|
+
#
|
29
|
+
# Gecko::Record::Base.include(MyLiquidCompat)
|
30
|
+
def liquid_decorator
|
31
|
+
Gecko::BaseDecorator
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
Gecko::Record::Base.include(LiquidCompatibility)
|
36
|
+
Gecko::Helpers::CollectionProxy.delegate(:to_liquid, to: :@target)
|
37
|
+
|
38
|
+
class BaseDecorator < Liquid::Drop
|
39
|
+
def initialize(delegate)
|
40
|
+
raise 'Turtles all the way down' if delegate.is_a?(BaseDecorator)
|
41
|
+
|
42
|
+
@delegate = delegate
|
43
|
+
end
|
44
|
+
|
45
|
+
def method_missing(method_name, *args, &block)
|
46
|
+
if @delegate.respond_to?(method_name)
|
47
|
+
@delegate.public_send(method_name, *args, &block)
|
48
|
+
else
|
49
|
+
super
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def respond_to_missing?(method_name, include_private = false)
|
54
|
+
@delegate.respond_to?(method_name) || super
|
55
|
+
end
|
56
|
+
|
57
|
+
## Override Liquid::Drop#invoke_drop to also check method arity
|
58
|
+
def invoke_drop(method_or_key)
|
59
|
+
if self.invokable_methods.include?(method_or_key.to_s) && self.method_arity(method_or_key.to_sym) <= 0
|
60
|
+
self.public_send(method_or_key)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
## Override Liquid::Drop#invokable_methods to add extra checks
|
65
|
+
def invokable_methods
|
66
|
+
@invokable_methods ||= begin
|
67
|
+
blacklist = Gecko::Record::Base.public_instance_methods + Liquid::Drop.public_instance_methods
|
68
|
+
blacklist -= [:to_liquid, :id, :created_at, :updated_at]
|
69
|
+
whitelist = self.public_methods + @delegate.public_methods
|
70
|
+
available_methods = (whitelist - blacklist).map(&:to_s)
|
71
|
+
available_methods.reject! { |method_name| method_name.ends_with?("=") }
|
72
|
+
Set.new(available_methods)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
protected
|
77
|
+
|
78
|
+
def method_arity(method_name)
|
79
|
+
if self.methods.include?(method_name)
|
80
|
+
self.method(method_name).arity
|
81
|
+
else
|
82
|
+
@delegate.method(method_name).arity
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def client
|
87
|
+
@delegate.instance_variable_get(:@client)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'request_store'
|
4
|
+
|
5
|
+
# Requiring this file, or calling `Gecko.enable_logging` will hook into the provided
|
6
|
+
# ActiveSupport::Notification hooks on requests and log ActiveRecord-style messages
|
7
|
+
# on API requests.
|
8
|
+
class GeckoLogSubscriber < ActiveSupport::LogSubscriber
|
9
|
+
ENV_KEY = :"gecko-logger"
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
super
|
13
|
+
@odd = false
|
14
|
+
end
|
15
|
+
|
16
|
+
def request(event)
|
17
|
+
RequestStore.store[ENV_KEY] = []
|
18
|
+
payload = event.payload
|
19
|
+
|
20
|
+
request_path = payload[:request_path]
|
21
|
+
|
22
|
+
if payload[:params] && payload[:verb] == :get
|
23
|
+
request_path = request_path + "?" + payload[:params].to_param
|
24
|
+
RequestStore.store[ENV_KEY] << request_path
|
25
|
+
end
|
26
|
+
|
27
|
+
name = "#{payload[:model_class]} Load (#{event.duration.round(1)}ms)"
|
28
|
+
query = "#{payload[:verb].to_s.upcase} /#{request_path}"
|
29
|
+
|
30
|
+
if odd?
|
31
|
+
name = color(name, CYAN, true)
|
32
|
+
else
|
33
|
+
name = color(name, MAGENTA, true)
|
34
|
+
end
|
35
|
+
|
36
|
+
query = color(query, nil, true)
|
37
|
+
|
38
|
+
debug(" #{name} #{query}")
|
39
|
+
end
|
40
|
+
|
41
|
+
def odd?
|
42
|
+
@odd = !@odd
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
GeckoLogSubscriber.attach_to :gecko
|
data/lib/gecko/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gecko-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bradley Priest
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-07-
|
11
|
+
date: 2019-07-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -214,6 +214,8 @@ files:
|
|
214
214
|
- lib/gecko-ruby.rb
|
215
215
|
- lib/gecko.rb
|
216
216
|
- lib/gecko/client.rb
|
217
|
+
- lib/gecko/ext/liquid_compat.rb
|
218
|
+
- lib/gecko/ext/log_subscriber.rb
|
217
219
|
- lib/gecko/helpers/association_helper.rb
|
218
220
|
- lib/gecko/helpers/inspection_helper.rb
|
219
221
|
- lib/gecko/helpers/record_helper.rb
|