flex_commerce_api 0.7 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 30004ed9299f30f35981aab7dfebe49fb3665449c02f827c86d1e678e66d8776
4
- data.tar.gz: ea5dcde40fca7ded2737675da0f0208ab2846b7fe4266769cf56b49275104a3a
3
+ metadata.gz: 3ca38dba4a1fd2e2fc35b89ae3f66a7c22ba83ce2300bfcc5ccca0eb56febdcd
4
+ data.tar.gz: 551f7ba8158e64c66d2c076fabbdb99279a3441fdc27ff5ac6799c041808b378
5
5
  SHA512:
6
- metadata.gz: 5fb1d9ddc76030328010fa15f3985d9594650e603b399ecde71832d25fc2dcf7365305f30e09a38ee68baca6a4986ee779bd9d3965e40ae1316af9a150cc169f
7
- data.tar.gz: ffcd68fc795a6221fd17b391f1859ebf4a142d0842c71f134d40077ac6c77154a2ad1be8e771e1336310298f6008bfb7952830fd34b911c773d11258dd543a51
6
+ metadata.gz: e148bcc1259523c421add780130a28a3d445696c086e4b894f56a4432d480c512b08da6aa4e575d06f040f05000db776301759a993dc8920aff2be069cf83922
7
+ data.tar.gz: be0b5a2e09f14d3638ab5d7ff75da1953f5c5fdf19c57c44ef5af67aaaffb1be0f81ecfe98225df8b81a1fba6185d71aee7b16d62e7d0e6c86f796ce8a122de3
@@ -0,0 +1,45 @@
1
+ version: '2.1'
2
+
3
+ jobs:
4
+ build-ruby-27:
5
+ docker:
6
+ - image: circleci/ruby:2.7.0
7
+ steps:
8
+ - checkout
9
+ - restore_cache:
10
+ keys:
11
+ - rubygems-27-cache-{{ .Branch }}-{{ checksum "Gemfile" }}-{{ checksum "flex-commerce-api.gemspec" }}
12
+ - rubygems-27-cache-{{ .Branch }}
13
+ - rubygems-27-cache
14
+ - run: bundle install --path vendor/bundle
15
+ - save_cache:
16
+ key: rubygems-27-cache-{{ .Branch }}-{{ checksum "Gemfile" }}-{{ checksum "flex-commerce-api.gemspec" }}
17
+ paths:
18
+ - vendor/bundle
19
+ - run: bundle exec rspec
20
+
21
+ build-ruby-25:
22
+ docker:
23
+ - image: circleci/ruby:2.5.3
24
+ steps:
25
+ - checkout
26
+ - restore_cache:
27
+ keys:
28
+ - rubygems-25-cache-{{ .Branch }}-{{ checksum "Gemfile" }}-{{ checksum "flex-commerce-api.gemspec" }}
29
+ - rubygems-25-cache-{{ .Branch }}
30
+ - rubygems-25-cache
31
+ - run: gem install bundler -v "~> 1.17"
32
+ - run: bundle install --path vendor/bundle
33
+ - save_cache:
34
+ key: rubygems-25-cache-{{ .Branch }}-{{ checksum "Gemfile" }}-{{ checksum "flex-commerce-api.gemspec" }}
35
+ paths:
36
+ - vendor/bundle
37
+ - run: bundle exec rspec
38
+
39
+
40
+ workflows:
41
+ version: 2
42
+ build:
43
+ jobs:
44
+ - build-ruby-27
45
+ - build-ruby-25
@@ -0,0 +1,31 @@
1
+ name: Ruby Gem
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+ paths:
8
+ - "lib/flex_commerce_api/version.rb"
9
+
10
+ jobs:
11
+ build:
12
+ name: Build + Publish
13
+ runs-on: ubuntu-latest
14
+
15
+ steps:
16
+ - uses: actions/checkout@v2
17
+ - name: Set up Ruby 2.7
18
+ uses: actions/setup-ruby@v1
19
+ with:
20
+ version: 2.7.x
21
+
22
+ - name: Publish to RubyGems
23
+ run: |
24
+ mkdir -p $HOME/.gem
25
+ touch $HOME/.gem/credentials
26
+ chmod 0600 $HOME/.gem/credentials
27
+ printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
28
+ gem build *.gemspec
29
+ gem push *.gem
30
+ env:
31
+ GEM_HOST_API_KEY: ${{secrets.RUBYGEMS_AUTH_TOKEN}}
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.3.0
1
+ 2.7.0
data/README.md CHANGED
@@ -12,15 +12,19 @@ gem 'flex-commerce-api'
12
12
 
13
13
  And then execute:
14
14
 
15
- $ bundle
15
+ ```
16
+ $ bundle
17
+ ```
16
18
 
17
19
  Or install it yourself as:
18
20
 
19
- $ gem install flex-commerce-api
21
+ ```
22
+ $ gem install flex-commerce-api
23
+ ```
20
24
 
21
25
  ## Usage
22
26
 
23
- The gem provides many models in the FlexCommerce namespace. The example below is a rails controller
27
+ The gem provides many models in the FlexCommerce namespace. The example below is a rails controller
24
28
  accessing a list of products.
25
29
 
26
30
  ```ruby
@@ -31,15 +35,46 @@ class ProductsController < ApplicationController
31
35
  @products = FlexCommerce::Product.paginate(params[:page])
32
36
  end
33
37
  end
34
-
35
38
  ```
36
39
 
37
40
  To any rails developer this will look familiar.
38
41
 
39
42
  However, we do not force you to use rails. We appreciate that there are many frameworks out there
40
43
  and whilst rails is an excellent tool, for smaller projects you may want to look at others such
41
- as sinatra etc...
44
+ as Sinatra etc...
45
+
46
+ ### Client IP address tracing in Rails apps
47
+
48
+ Add the request store gem to your Gemfile and install
49
+
50
+ ```ruby
51
+ gem "request-store"
52
+ ```
53
+
54
+ ```sh
55
+ bundle install
56
+ ```
42
57
 
58
+ ```ruby
59
+ # application_controller.rb
60
+ class ApplicationController
61
+ before_action :set_request_ip
62
+
63
+ private
64
+
65
+ def set_request_ip
66
+ RequestStore[:request_ip] = request.remote_ip
67
+ end
68
+ end
69
+ ```
70
+
71
+ Configure the API client to pick up set value
72
+
73
+ ```ruby
74
+ FlexCommerceApi.config do |config|
75
+ config.forwarded_for = ->{ RequestStore[:request_ip] }
76
+ end
77
+ ```
43
78
 
44
79
  ## Development
45
80
 
@@ -1,4 +1,3 @@
1
- # coding: utf-8
2
1
  lib = File.expand_path("../lib", __FILE__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require "flex_commerce_api/version"
@@ -19,7 +18,7 @@ Gem::Specification.new do |spec|
19
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
19
  spec.require_paths = ["lib"]
21
20
 
22
- spec.add_development_dependency "bundler", "~> 1.9"
21
+ spec.add_development_dependency "bundler", ">= 1.17"
23
22
  spec.add_development_dependency "rake", "~> 10.0"
24
23
  spec.add_development_dependency "rspec", "~> 3.3"
25
24
  spec.add_development_dependency "webmock", "~> 1.21"
@@ -10,6 +10,7 @@ require "flex_commerce_api/json_api_client_extension/status_middleware"
10
10
  require "flex_commerce_api/json_api_client_extension/json_format_middleware"
11
11
  require "flex_commerce_api/json_api_client_extension/previewed_request_middleware"
12
12
  require "flex_commerce_api/json_api_client_extension/capture_surrogate_keys_middleware"
13
+ require "flex_commerce_api/json_api_client_extension/forwarded_for_middleware"
13
14
  require "flex_commerce_api/json_api_client_extension/has_many_association_proxy"
14
15
  require "flex_commerce_api/json_api_client_extension/builder"
15
16
  require "flex_commerce_api/json_api_client_extension/flexible_connection"
@@ -27,14 +27,31 @@ module FlexCommerceApi
27
27
  # section of the admin panel
28
28
  # @!attribute order_test_mode
29
29
  # The order test mode.This config determines if orders are processed as test or real orders
30
- attr_accessor :flex_root_url, :flex_api_key, :flex_account, :logger, :adapter, :order_test_mode, :http_cache, :open_timeout, :timeout, :paypal_login, :paypal_password, :paypal_signature, :order_test_mode, :paypal_connection_errors_no_of_retries
30
+
31
+ attr_accessor(
32
+ :flex_root_url,
33
+ :flex_api_key,
34
+ :flex_account,
35
+ :logger,
36
+ :adapter,
37
+ :http_cache,
38
+ :open_timeout,
39
+ :timeout,
40
+ :paypal_login,
41
+ :paypal_password,
42
+ :paypal_signature,
43
+ :order_test_mode,
44
+ :paypal_connection_errors_no_of_retries,
45
+ :forwarded_for
46
+ )
47
+
31
48
  attr_reader :api_version
32
49
 
33
50
  def initialize
34
51
  self.order_test_mode = false
35
52
  self.http_cache = {}
36
- self.open_timeout = ENV.fetch('SHIFT_OPEN_TIMEOUT', 2).to_i
37
- self.timeout = ENV.fetch('SHIFT_TIMEOUT', 15).to_i
53
+ self.open_timeout = ENV.fetch("SHIFT_OPEN_TIMEOUT", 2).to_i
54
+ self.timeout = ENV.fetch("SHIFT_TIMEOUT", 15).to_i
38
55
  end
39
56
 
40
57
  # The api base URL
@@ -50,6 +67,5 @@ module FlexCommerceApi
50
67
  def reconfigure_all!
51
68
  FlexCommerceApi::BaseResource.reconfigure_all if FlexCommerceApi.const_defined? "ApiBase"
52
69
  end
53
-
54
70
  end
55
71
  end
@@ -0,0 +1,17 @@
1
+ module FlexCommerceApi
2
+ module JsonApiClientExtension
3
+ # Looks for a lambda defined on the config, calls and assigns it to the
4
+ # outgoing request headers
5
+ class ForwardedForMiddleware < Faraday::Middleware
6
+ def call(env)
7
+ forwarded_for = FlexCommerceApi.config.forwarded_for
8
+
9
+ if forwarded_for.respond_to?(:call)
10
+ env[:request_headers]["X-Forwarded-For"] = forwarded_for.call
11
+ end
12
+
13
+ @app.call(env)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,3 +1,3 @@
1
1
  module FlexCommerceApi
2
- VERSION = '0.7'
2
+ VERSION = "0.8.1"
3
3
  end
data/lib/json_struct.rb CHANGED
@@ -1,14 +1,13 @@
1
- require 'ostruct'
1
+ require "ostruct"
2
2
  require "json"
3
3
 
4
4
  class JsonStruct < OpenStruct
5
- def initialize(hash=nil)
6
-
5
+ def initialize(hash = nil)
7
6
  @table = {}
8
7
  @hash_table = {}
9
8
 
10
9
  if hash
11
- recurse = Proc.new do |item|
10
+ recurse = proc { |item|
12
11
  values = []
13
12
 
14
13
  item.each do |val|
@@ -25,18 +24,16 @@ class JsonStruct < OpenStruct
25
24
  item.push(*values)
26
25
 
27
26
  item
28
- end
29
-
30
- hash.each do |k,v|
27
+ }
31
28
 
29
+ hash.each do |k, v|
32
30
  if v.is_a?(Array)
33
31
  recurse.call(v)
34
32
  end
35
33
 
36
34
  @table[k.to_sym] = (v.is_a?(Hash) ? self.class.new(v) : v)
37
35
  @hash_table[k.to_sym] = v
38
- new_ostruct_member(k)
39
-
36
+ new_ostruct_member!(k)
40
37
  end
41
38
  end
42
39
  end
@@ -45,8 +42,8 @@ class JsonStruct < OpenStruct
45
42
  op = {}
46
43
 
47
44
  @table.each_pair do |key, value|
48
- if value.is_a?(Array)
49
- op[key] = value.map do |item|
45
+ op[key] = if value.is_a?(Array)
46
+ value.map do |item|
50
47
  if item.is_a?(self.class)
51
48
  item.to_h
52
49
  else
@@ -54,20 +51,19 @@ class JsonStruct < OpenStruct
54
51
  end
55
52
  end
56
53
  elsif value.is_a?(self.class)
57
- op[key] = value.to_h
54
+ value.to_h
58
55
  else
59
- op[key] = value
56
+ value
60
57
  end
61
58
  end
62
59
  op
63
60
  end
64
61
 
65
62
  def as_json(*args)
66
- to_h
63
+ to_h
67
64
  end
68
65
 
69
66
  def to_json
70
67
  JSON.dump(to_h)
71
68
  end
72
-
73
- end
69
+ end
@@ -1,14 +1,13 @@
1
- require 'bigdecimal'
1
+ require "bigdecimal"
2
2
 
3
3
  # @module FlexCommerce::PaypalExpress
4
4
  module FlexCommerce
5
5
  module PaypalExpress
6
6
  # @class CartShippingMethod
7
- #
7
+ #
8
8
  # Used to decorate shipping methods based on Promotions
9
9
  class CartShippingMethod < SimpleDelegator
10
-
11
- ZERO = BigDecimal.new(0)
10
+ ZERO = BigDecimal(0)
12
11
 
13
12
  def initialize(shipping_method, free)
14
13
  super(shipping_method)
@@ -32,7 +31,6 @@ module FlexCommerce
32
31
  private
33
32
 
34
33
  attr_accessor :free
35
-
36
34
  end
37
35
  end
38
36
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flex_commerce_api
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.7'
4
+ version: 0.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gary Taylor
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-09-06 00:00:00.000000000 Z
11
+ date: 2020-03-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.9'
19
+ version: '1.17'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.9'
26
+ version: '1.17'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -275,7 +275,9 @@ executables: []
275
275
  extensions: []
276
276
  extra_rdoc_files: []
277
277
  files:
278
+ - ".circleci/config.yml"
278
279
  - ".env.example"
280
+ - ".github/workflows/gempush.yml"
279
281
  - ".gitignore"
280
282
  - ".rspec"
281
283
  - ".rubocop.yml"
@@ -386,6 +388,7 @@ files:
386
388
  - lib/flex_commerce_api/json_api_client_extension/builder.rb
387
389
  - lib/flex_commerce_api/json_api_client_extension/capture_surrogate_keys_middleware.rb
388
390
  - lib/flex_commerce_api/json_api_client_extension/flexible_connection.rb
391
+ - lib/flex_commerce_api/json_api_client_extension/forwarded_for_middleware.rb
389
392
  - lib/flex_commerce_api/json_api_client_extension/has_many_association_proxy.rb
390
393
  - lib/flex_commerce_api/json_api_client_extension/included_data.rb
391
394
  - lib/flex_commerce_api/json_api_client_extension/json_format_middleware.rb
@@ -462,8 +465,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
462
465
  - !ruby/object:Gem::Version
463
466
  version: '0'
464
467
  requirements: []
465
- rubyforge_project:
466
- rubygems_version: 2.7.7
468
+ rubygems_version: 3.1.2
467
469
  signing_key:
468
470
  specification_version: 4
469
471
  summary: Access the flex-commerce API