vindi-hermes 0.0.1 → 0.0.2
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/.gitignore +1 -0
- data/.tool-versions +1 -0
- data/Gemfile +12 -1
- data/Gemfile.lock +25 -2
- data/README.md +10 -13
- data/bin/console +4 -4
- data/lib/vindi.rb +4 -1
- data/lib/vindi/core_extensions/her_save_only_changed_attrs.rb +73 -0
- data/lib/vindi/core_extensions/her_with_query_filter.rb +16 -14
- data/lib/vindi/models/model.rb +5 -31
- data/lib/vindi/version.rb +1 -1
- data/vindi-hermes.gemspec +0 -3
- metadata +5 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0f54cd4844598eda33e4bb1aa7d8a7a9a6dd9b5997e1442510642dc656e4ed70
|
4
|
+
data.tar.gz: 4a043d2c49f7633650693bcc16b0b400677ed9890ea014e3f6bfbe187d74b6aa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f82e4c48114f55a6bb2cdeb319e400c0a0d3238df5455bf00e4fda5e60615afd4889a9d65b57aa0014f998d248190bd83e67e5aa420f669df12677910f3581d3
|
7
|
+
data.tar.gz: 400a9f6d5254697234b6c69350e3824b8ee58d1b3bd432de652aff9a4705feffdabcfc15a949672262743d79153ac50a12d3b55966529886321c6d4423f39f15
|
data/.gitignore
CHANGED
data/.tool-versions
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby 2.7.3
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
vindi-hermes (0.0.
|
4
|
+
vindi-hermes (0.0.2)
|
5
5
|
faraday (~> 1.4)
|
6
6
|
faraday_middleware (~> 1.0)
|
7
7
|
her (~> 1.1)
|
@@ -17,8 +17,14 @@ GEM
|
|
17
17
|
minitest (>= 5.1)
|
18
18
|
tzinfo (~> 2.0)
|
19
19
|
zeitwerk (~> 2.3)
|
20
|
+
addressable (2.7.0)
|
21
|
+
public_suffix (>= 2.0.2, < 5.0)
|
20
22
|
ast (2.4.2)
|
23
|
+
byebug (11.1.3)
|
24
|
+
coderay (1.1.3)
|
21
25
|
concurrent-ruby (1.1.8)
|
26
|
+
crack (0.4.5)
|
27
|
+
rexml
|
22
28
|
diff-lcs (1.4.4)
|
23
29
|
faraday (1.4.2)
|
24
30
|
faraday-em_http (~> 1.0)
|
@@ -35,6 +41,7 @@ GEM
|
|
35
41
|
faraday-net_http_persistent (1.1.0)
|
36
42
|
faraday_middleware (1.0.0)
|
37
43
|
faraday (~> 1.0)
|
44
|
+
hashdiff (1.0.1)
|
38
45
|
her (1.1.1)
|
39
46
|
activemodel (>= 4.2.1)
|
40
47
|
faraday (>= 0.8)
|
@@ -44,12 +51,20 @@ GEM
|
|
44
51
|
rainbow (>= 2.0.0)
|
45
52
|
i18n (1.8.10)
|
46
53
|
concurrent-ruby (~> 1.0)
|
54
|
+
method_source (1.0.0)
|
47
55
|
minitest (5.14.4)
|
48
56
|
multi_json (1.15.0)
|
49
57
|
multipart-post (2.1.1)
|
50
58
|
parallel (1.20.1)
|
51
59
|
parser (3.0.1.1)
|
52
60
|
ast (~> 2.4.1)
|
61
|
+
pry (0.13.1)
|
62
|
+
coderay (~> 1.1)
|
63
|
+
method_source (~> 1.0)
|
64
|
+
pry-byebug (3.9.0)
|
65
|
+
byebug (~> 11.0)
|
66
|
+
pry (~> 0.13.0)
|
67
|
+
public_suffix (4.0.6)
|
53
68
|
rack (2.2.3)
|
54
69
|
rainbow (3.0.0)
|
55
70
|
rake (13.0.3)
|
@@ -84,6 +99,11 @@ GEM
|
|
84
99
|
tzinfo (2.0.4)
|
85
100
|
concurrent-ruby (~> 1.0)
|
86
101
|
unicode-display_width (2.0.0)
|
102
|
+
vcr (6.0.0)
|
103
|
+
webmock (3.12.2)
|
104
|
+
addressable (>= 2.3.6)
|
105
|
+
crack (>= 0.3.2)
|
106
|
+
hashdiff (>= 0.4.0, < 2.0.0)
|
87
107
|
zeitwerk (2.4.2)
|
88
108
|
|
89
109
|
PLATFORMS
|
@@ -91,10 +111,13 @@ PLATFORMS
|
|
91
111
|
|
92
112
|
DEPENDENCIES
|
93
113
|
httplog
|
114
|
+
pry-byebug
|
94
115
|
rake (~> 13.0)
|
95
|
-
rspec
|
116
|
+
rspec
|
96
117
|
rubocop
|
118
|
+
vcr
|
97
119
|
vindi-hermes!
|
120
|
+
webmock
|
98
121
|
|
99
122
|
BUNDLED WITH
|
100
123
|
2.2.17
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# Vindi Hermes
|
2
2
|
|
3
3
|
ActiveRecord-like way to interact with Vindi API
|
4
4
|
|
@@ -13,18 +13,15 @@ ActiveRecord-like way to interact with Vindi API
|
|
13
13
|
*
|
14
14
|
[Vindi - Official Gem](https://github.com/vindi/vindi-ruby)
|
15
15
|
|
16
|
-
> You may ask: Why create another if there is already one that's official?
|
17
|
-
> *And I'll tell you, **little grasshopper**: Because
|
18
|
-
>
|
19
|
-
> And you also may ask: Why the hell is the doc in english when all those interested are from the big banana republic?
|
20
|
-
> *And my answer to you would be: You ask a lot of questions, huh?*
|
16
|
+
> You may ask: Why create another gem if there is already one that's official?
|
17
|
+
> *And I'll tell you, **little grasshopper**: Because MIT licenses are better than GPLv3.*
|
21
18
|
|
22
19
|
## Installation
|
23
20
|
|
24
21
|
Add this line to your application's Gemfile:
|
25
22
|
|
26
23
|
```ruby
|
27
|
-
gem
|
24
|
+
gem "vindi-hermes"
|
28
25
|
```
|
29
26
|
|
30
27
|
And then execute:
|
@@ -43,9 +40,9 @@ Or install it yourself as:
|
|
43
40
|
# config/initializers/vindi.rb
|
44
41
|
Vindi.config do |c|
|
45
42
|
c.sandbox = true # default is false
|
46
|
-
c.api_key =
|
47
|
-
c.webhook_name =
|
48
|
-
c.webhook_password =
|
43
|
+
c.api_key = "YOUR API KEY"
|
44
|
+
c.webhook_name = "BASIC AUTH NAME"
|
45
|
+
c.webhook_password = "BASIC AUTH PASSWORD"
|
49
46
|
end
|
50
47
|
```
|
51
48
|
|
@@ -163,9 +160,9 @@ On your project
|
|
163
160
|
```ruby
|
164
161
|
# config/initializers/vindi.rb
|
165
162
|
Vindi.config do |c|
|
166
|
-
c.api_key =
|
167
|
-
c.webhook_name =
|
168
|
-
c.webhook_password =
|
163
|
+
c.api_key = "123456"
|
164
|
+
c.webhook_name = "vindi"
|
165
|
+
c.webhook_password = "123456"
|
169
166
|
end
|
170
167
|
|
171
168
|
# routes.rb
|
data/bin/console
CHANGED
@@ -8,8 +8,8 @@ require "vindi"
|
|
8
8
|
# with your gem easier. You can also use a different console, if you like.
|
9
9
|
|
10
10
|
# (If you use this, don't forget to add pry to your Gemfile!)
|
11
|
-
|
12
|
-
|
11
|
+
require "pry"
|
12
|
+
Pry.start
|
13
13
|
|
14
|
-
require "irb"
|
15
|
-
IRB.start(__FILE__)
|
14
|
+
# require "irb"
|
15
|
+
# IRB.start(__FILE__)
|
data/lib/vindi.rb
CHANGED
@@ -6,11 +6,14 @@ require "her"
|
|
6
6
|
|
7
7
|
require_relative "vindi/version"
|
8
8
|
require_relative "vindi/rate_limit"
|
9
|
+
|
9
10
|
require_relative "vindi/middleware/rate_limit_validation"
|
10
11
|
require_relative "vindi/middleware/response_parser"
|
12
|
+
|
11
13
|
require_relative "vindi/core_extensions/her_with_query_filter"
|
14
|
+
require_relative "vindi/core_extensions/her_save_only_changed_attrs"
|
12
15
|
|
13
|
-
module Vindi
|
16
|
+
module Vindi # :nodoc:
|
14
17
|
class Error < StandardError; end
|
15
18
|
|
16
19
|
RESOURCE_MODELS = Dir[File.expand_path("vindi/models/**/*.rb", File.dirname(__FILE__))].freeze
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module CoreExtensions
|
4
|
+
# WARNING: monkey patch (https://github.com/remi/her/blob/master/lib/her/model/relation.rb#L34)
|
5
|
+
module HerSaveOnlyChangedAttrs
|
6
|
+
# Validate record before save and after the request
|
7
|
+
# put the errors in the right places.
|
8
|
+
#
|
9
|
+
# @example A subscription without a customer
|
10
|
+
#
|
11
|
+
# @subscription = Vindi::Subscription.new.tap do |s|
|
12
|
+
# s.plan_id = plan.id
|
13
|
+
# s.payment_method_code = "credit_card"
|
14
|
+
# s.save
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# @subscription.errors.full_messages # ["Customer can't be blank"]
|
18
|
+
#
|
19
|
+
# @example A subscription with invalid plan
|
20
|
+
#
|
21
|
+
# @subscription = Vindi::Subscription.new.tap do |s|
|
22
|
+
# s.customer_id = customer.id
|
23
|
+
# s.plan_id = 1
|
24
|
+
# s.payment_method_code = "credit_card"
|
25
|
+
# s.save
|
26
|
+
# end
|
27
|
+
#
|
28
|
+
# @subscription.errors.full_messages # ["Plan nao encontrado"]
|
29
|
+
#
|
30
|
+
def save
|
31
|
+
if new?
|
32
|
+
super
|
33
|
+
else
|
34
|
+
save_current_changes
|
35
|
+
end
|
36
|
+
|
37
|
+
response_errors.any? && errors.clear && response_errors.each do |re|
|
38
|
+
errors.add re[:attribute], re[:type], message: re[:message]
|
39
|
+
end
|
40
|
+
|
41
|
+
return false if errors.any?
|
42
|
+
|
43
|
+
self
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def save_current_changes
|
49
|
+
return self unless changed.any?
|
50
|
+
|
51
|
+
callback = new? ? :create : :update
|
52
|
+
method = self.class.method_for(callback)
|
53
|
+
|
54
|
+
run_callbacks :save do
|
55
|
+
run_callbacks callback do
|
56
|
+
self.class.request(filtered_changed_attributes.merge(_method: method, _path: request_path)) do |parsed_data, response|
|
57
|
+
load_from_parsed_data(parsed_data)
|
58
|
+
return false if !response.success? || @response_errors.any?
|
59
|
+
changes_applied
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
self
|
65
|
+
end
|
66
|
+
|
67
|
+
def filtered_changed_attributes
|
68
|
+
changes.transform_values(&:last)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
Her::Model::ORM.prepend CoreExtensions::HerSaveOnlyChangedAttrs
|
@@ -19,25 +19,27 @@ module CoreExtensions
|
|
19
19
|
return self if params.blank? && !@_fetch.nil?
|
20
20
|
|
21
21
|
clone.tap do |r|
|
22
|
-
|
23
|
-
|
22
|
+
r.params = r.params.merge(params)
|
23
|
+
|
24
|
+
# Default params, as order and page number, will always be used.
|
25
|
+
default_params = extract_default_params r.params
|
26
|
+
|
27
|
+
# Query filters is joined into a single param called :query.
|
28
|
+
query = [r.params.delete(:query), params_to_query(r.params)].compact.join " "
|
29
|
+
|
30
|
+
r.params = { query: query }.merge(default_params)
|
24
31
|
|
25
|
-
r.params = r.params.merge default_params.merge(query: query)
|
26
32
|
r.clear_fetch_cache!
|
27
33
|
end
|
28
34
|
end
|
29
35
|
|
30
36
|
private
|
31
37
|
|
32
|
-
def
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
page = new_ones.delete(:page) || old_ones.delete(:page) || 1
|
38
|
-
per_page = new_ones.delete(:per_page) || old_ones.delete(:per_page) || 25
|
39
|
-
sort_by = new_ones.delete(:sort_by) || old_ones.delete(:sort_by) || :created_at
|
40
|
-
sort_order = new_ones.delete(:sort_order) || old_ones.delete(:sort_order) || :desc
|
38
|
+
def extract_default_params(params)
|
39
|
+
page = params.delete(:page) || 1
|
40
|
+
per_page = params.delete(:per_page) || 25
|
41
|
+
sort_by = params.delete(:sort_by) || :created_at
|
42
|
+
sort_order = params.delete(:sort_order) || :desc
|
41
43
|
|
42
44
|
{
|
43
45
|
page: page,
|
@@ -47,8 +49,8 @@ module CoreExtensions
|
|
47
49
|
}.delete_if { |_, v| v.nil? }
|
48
50
|
end
|
49
51
|
|
50
|
-
def params_to_query(params
|
51
|
-
params.
|
52
|
+
def params_to_query(params)
|
53
|
+
params.map do |key, value|
|
52
54
|
case key
|
53
55
|
when :contains then value.map { |k, v| "#{k}:#{v}" }.last
|
54
56
|
when :gt then value.map { |k, v| "#{k}>#{v}" }.last
|
data/lib/vindi/models/model.rb
CHANGED
@@ -31,40 +31,14 @@ module Vindi
|
|
31
31
|
|
32
32
|
before_validation
|
33
33
|
|
34
|
-
#
|
35
|
-
# put the errors in the right places.
|
34
|
+
# Archive a record.
|
36
35
|
#
|
37
|
-
# @example
|
36
|
+
# @example Archive a customer
|
38
37
|
#
|
39
|
-
#
|
40
|
-
# s.plan_id = plan.id
|
41
|
-
# s.payment_method_code = "credit_card"
|
42
|
-
# s.save
|
43
|
-
# end
|
38
|
+
# Vindi::Customer.find_by(email: "sarumanthewhite@middlearth.io").archive!
|
44
39
|
#
|
45
|
-
|
46
|
-
|
47
|
-
# @example A subscription with invalid plan
|
48
|
-
#
|
49
|
-
# @subscription = Vindi::Subscription.new.tap do |s|
|
50
|
-
# s.customer_id = customer.id
|
51
|
-
# s.plan_id = 1
|
52
|
-
# s.payment_method_code = "credit_card"
|
53
|
-
# s.save
|
54
|
-
# end
|
55
|
-
#
|
56
|
-
# @subscription.errors.full_messages # ["Plan nao encontrado"]
|
57
|
-
#
|
58
|
-
def save
|
59
|
-
super
|
60
|
-
|
61
|
-
response_errors.any? && errors.clear && response_errors.each do |re|
|
62
|
-
errors.add re[:attribute], re[:type], message: re[:message]
|
63
|
-
end
|
64
|
-
|
65
|
-
return false if errors.any?
|
66
|
-
|
67
|
-
self
|
40
|
+
def archive!
|
41
|
+
destroy
|
68
42
|
end
|
69
43
|
|
70
44
|
# @private
|
data/lib/vindi/version.rb
CHANGED
data/vindi-hermes.gemspec
CHANGED
@@ -26,7 +26,4 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_dependency "faraday", "~> 1.4"
|
27
27
|
spec.add_dependency "faraday_middleware", "~> 1.0"
|
28
28
|
spec.add_dependency "her", "~> 1.1"
|
29
|
-
|
30
|
-
spec.add_development_dependency "httplog"
|
31
|
-
spec.add_development_dependency "rspec", "~> 3.2"
|
32
29
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vindi-hermes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wedson Lima
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-06-
|
11
|
+
date: 2021-06-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -52,34 +52,6 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.1'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: httplog
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: rspec
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '3.2'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '3.2'
|
83
55
|
description: ActiveRecord-like way to interact with Vindi API
|
84
56
|
email:
|
85
57
|
- wedson.sousa.lima@gmail.com
|
@@ -89,6 +61,7 @@ extra_rdoc_files: []
|
|
89
61
|
files:
|
90
62
|
- ".gitignore"
|
91
63
|
- ".rubocop.yml"
|
64
|
+
- ".tool-versions"
|
92
65
|
- CHANGELOG.md
|
93
66
|
- CODE_OF_CONDUCT.md
|
94
67
|
- Gemfile
|
@@ -99,6 +72,7 @@ files:
|
|
99
72
|
- bin/console
|
100
73
|
- bin/setup
|
101
74
|
- lib/vindi.rb
|
75
|
+
- lib/vindi/core_extensions/her_save_only_changed_attrs.rb
|
102
76
|
- lib/vindi/core_extensions/her_with_query_filter.rb
|
103
77
|
- lib/vindi/middleware/rate_limit_validation.rb
|
104
78
|
- lib/vindi/middleware/response_parser.rb
|
@@ -143,7 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
143
117
|
- !ruby/object:Gem::Version
|
144
118
|
version: '0'
|
145
119
|
requirements: []
|
146
|
-
rubygems_version: 3.
|
120
|
+
rubygems_version: 3.1.6
|
147
121
|
signing_key:
|
148
122
|
specification_version: 4
|
149
123
|
summary: Vindi API - Let the god of trade help you
|