webflow-ruby 0.2.0 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 795515e4a0541b3666b88ebfc14b0c9d0320bd24
4
- data.tar.gz: bd901ecbbeefa64aeb9923c85ed1544f0acd6288
3
+ metadata.gz: 2df995b45bc57f7941d8fae264b58e29593d69d3
4
+ data.tar.gz: 25abadb527e7ae8360da648bf5f55ed174f67b9d
5
5
  SHA512:
6
- metadata.gz: 0ce4d22046993fd651aac252a325255663cb7b7b70f845e1609063b6f0a18778d0c2a6126859c5eca7c03ab59f85ee1f2f9b44156c9d3e520a548237562e092c
7
- data.tar.gz: aab0bd815df76b7c154448bd77236f3e61861417697a9e2dfe040f4865fc0454b86855d73dd32d2e9af20f40cf30be2d2873bf7530c189d4a3c2446a3a78abf6
6
+ metadata.gz: a72d46c3803b36dc9484a15b2bad0a6b2304d036c74ccc00a90e5b680a7306afe21ca9fc7da4f7adeb2fe293501763ba349c0fd436b572d6f6592fce3a70539b
7
+ data.tar.gz: 8193ed9ec0fba4bd6ca28f67e9d5860b7ed73ec9c982ef5b155da0929b96fa901fa1d0d4c6382c0b4aa2a3887db4531c56759147b71860b031d4b8e61906ac81
data/Gemfile CHANGED
@@ -2,5 +2,3 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in webflow.gemspec
4
4
  gemspec
5
-
6
- gem 'byebug'
@@ -5,9 +5,19 @@ require 'oj'
5
5
  module Webflow
6
6
  class Client
7
7
  HOST = 'https://api.webflow.com'
8
+ OJ_OPTIONS = {mode: :strict, nilnil: true}
8
9
 
9
10
  def initialize(token)
10
11
  @token = token
12
+ @rate_limit = {}
13
+ end
14
+
15
+ def rate_limit
16
+ @rate_limit
17
+ end
18
+
19
+ def info
20
+ get("/info")
11
21
  end
12
22
 
13
23
  def info
@@ -57,19 +67,25 @@ module Webflow
57
67
  private
58
68
 
59
69
  def get(path, params: nil)
60
- http(path, method: :get, headers: headers, params: params)
70
+ request(path, method: :get, params: params)
61
71
  end
62
72
 
63
73
  def post(path, data)
64
- http(path, method: :post, headers: headers, body: data)
74
+ request(path, method: :post, body: data)
65
75
  end
66
76
 
67
77
  def put(path, data)
68
- http(path, method: :put, headers: headers, body: data)
78
+ request(path, method: :put, body: data)
69
79
  end
70
80
 
71
81
  def delete(path)
72
- http(path, method: :delete, headers: headers)
82
+ request(path, method: :delete)
83
+ end
84
+
85
+ def request(path, method: :get, params: nil, body: nil)
86
+ body = Oj.dump(body, OJ_OPTIONS) if body
87
+ json = http(path, method: method, params: params, headers: request_headers, body: body)
88
+ Oj.load(json, OJ_OPTIONS)
73
89
  end
74
90
 
75
91
  def http(path, method: :get, params: nil, headers: nil, body: nil)
@@ -79,17 +95,43 @@ module Webflow
79
95
  method: method,
80
96
  params: params,
81
97
  headers: headers,
82
- body: (Oj.dump(body) if body),
98
+ body: body,
83
99
  )
84
- body = request.run.body
85
- Oj.load(body)
100
+ response = request.run
101
+
102
+ track_rate_limit(response.headers)
103
+
104
+ response.body
105
+ end
106
+
107
+ def track_rate_limit(headers)
108
+ rate_limit = headers.select { |key, value| key =~ /X-Ratelimit/ }
109
+ @rate_limit = rate_limit unless rate_limit.empty?
110
+ # byebug
86
111
  end
87
112
 
88
- def headers
113
+ def request_headers
89
114
  {
90
115
  'Authorization' => "Bearer #{@token}",
91
116
  'Content-Type' => 'application/json',
92
- 'accept-version' => '1.0.0',
117
+ 'Accept-Version' => '1.0.0',
118
+ }
119
+ end
120
+
121
+ def error_codes
122
+ # https://developers.webflow.com/#errors
123
+ {
124
+ [400, SyntaxError] => 'Request body was incorrectly formatted. Likely invalid JSON being sent up.',
125
+ [400, InvalidAPIVersion] => 'Requested an invalid API version',
126
+ [400, UnsupportedVersion] => 'Requested an API version that in unsupported by the requested route',
127
+ [400, NotImplemented] => 'This feature is not currently implemented',
128
+ [400, ValidationError] => 'Validation failure (see problems field in the response)',
129
+ [400, Conflict] => 'Request has a conflict with existing data.',
130
+ [401, Unauthorized] => 'Provided access token is invalid or does not have access to requested resource',
131
+ [404, NotFound] => 'Requested resource not found',
132
+ [429, RateLimit] => 'The rate limit of the provided access_token has been reached. Please have your application respect the X-RateLimit-Remaining header we include on API responses.',
133
+ [500, ServerError] => 'We had a problem with our server. Try again later.',
134
+ [400, UnknownError] => 'An error occurred which is not enumerated here, but is not a server error.',
93
135
  }
94
136
  end
95
137
  end
@@ -1,4 +1,2 @@
1
1
  require 'webflow/version'
2
2
  require 'webflow/client'
3
-
4
- Oj.default_options = { mode: :strict, nilnil: true }
@@ -1,3 +1,3 @@
1
1
  module Webflow
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -28,4 +28,7 @@ Gem::Specification.new do |spec|
28
28
  spec.add_development_dependency "bundler", "~> 1.13"
29
29
  spec.add_development_dependency "rake", "~> 10.0"
30
30
  spec.add_development_dependency "minitest", "~> 5.0"
31
+ spec.add_development_dependency "byebug"
32
+ spec.add_development_dependency "vcr"
33
+ spec.add_development_dependency "webmock"
31
34
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webflow-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - phoet
@@ -94,6 +94,48 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '5.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: byebug
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: vcr
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: webmock
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
97
139
  description: Webflow API bindings for Ruby
98
140
  email:
99
141
  - phoetmail@googlemail.com