simple_segment 0.3.0 → 1.0.0.pre

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
- SHA1:
3
- metadata.gz: dd645e7d35b8baaf841db66b9ca3910d2be0a84a
4
- data.tar.gz: 18b9521aefd0d44f9749a59d64100f1e566a55ce
2
+ SHA256:
3
+ metadata.gz: 27c373f624b3e1192b8ebb92fbd5ead37924a4578e5179dd831c9226e4f57583
4
+ data.tar.gz: b2537161f1f05a92ed3c39c47d65c62cb535217ebedc3d1201ed75a8aa928e56
5
5
  SHA512:
6
- metadata.gz: 2847552e5f74d6f5e8ab044003e8f08837fe39334c6cf85c79c2646cabf1beaa3bae3aa3fbd8a0702de2e123f2ad577bdfaf1495fcc5c6801a4312b87cb439ab
7
- data.tar.gz: 0e4aafdc0abb865a87b879c04bac266b25dec5fc42b22d827268c91d78f0517581e6c1dded789bb3843b26744a45dffdb906bef1b69d83c3354b235a67fe54dc
6
+ metadata.gz: b53313b90d9db6a87799b57f4cfee2fba4fb645e9b2b1aea3db19e996795266d6a558f14802c9bf86a6f13fa2655f0b9760267bab4189736746bd2684e93ed10
7
+ data.tar.gz: e2b9c0b2d5bde7ff41de7e78af42b9c50621f0c095c9d8563cabfba3f0d5bf703c80e46b6fae3101cb4f686ebaa58c82ab77149792c3f87408df5b3d267c88db
data/.hound.yml CHANGED
@@ -1,2 +1,3 @@
1
- ruby:
1
+ rubocop:
2
2
  config_file: .rubocop.yml
3
+ version: 0.75.0
data/.rubocop.yml CHANGED
@@ -3,6 +3,8 @@ Metrics/BlockLength:
3
3
  - '**/*_spec.rb'
4
4
 
5
5
  Metrics/LineLength:
6
+ Max: 100
7
+ IgnoreCopDirectives: true
6
8
  Exclude:
7
9
  - 'simple_segment.gemspec'
8
10
 
data/.travis.yml CHANGED
@@ -1,6 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.1.8
4
- - 2.2.4
5
- - 2.3.0
6
- before_install: gem install bundler -v 1.11.2
3
+ - 2.4
4
+ - 2.5
5
+ - 2.6
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in simple_segment.gemspec
data/README.md CHANGED
@@ -95,6 +95,22 @@ analytics = SimpleSegment::Client.new(
95
95
  )
96
96
  ```
97
97
 
98
+ ### Set HTTP Options
99
+
100
+ You can set options that are passed to `Net::HTTP.start`.
101
+
102
+ ```ruby
103
+ analytics = SimpleSegment::Client.new(
104
+ write_key: 'YOUR_WRITE_KEY',
105
+ http_options: {
106
+ open_timeout: 42,
107
+ read_timeout: 42,
108
+ close_on_empty_response: true,
109
+ # ...
110
+ }
111
+ )
112
+ ```
113
+
98
114
  ## Development
99
115
 
100
116
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
  require 'rspec/core/rake_task'
3
5
 
data/bin/console CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'bundler/setup'
4
5
  require 'simple_segment'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'net/http'
2
4
  require 'json'
3
5
  require 'time'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SimpleSegment
2
4
  class Batch
3
5
  include SimpleSegment::Utils
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'simple_segment/utils'
2
4
  require 'simple_segment/configuration'
3
5
  require 'simple_segment/operations'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'simple_segment/logging'
2
4
 
3
5
  module SimpleSegment
@@ -5,7 +7,7 @@ module SimpleSegment
5
7
  include SimpleSegment::Utils
6
8
  include SimpleSegment::Logging
7
9
 
8
- attr_reader :write_key, :on_error, :stub, :logger
10
+ attr_reader :write_key, :on_error, :stub, :logger, :http_options
9
11
 
10
12
  def initialize(settings = {})
11
13
  symbolized_settings = symbolize_keys(settings)
@@ -13,6 +15,8 @@ module SimpleSegment
13
15
  @on_error = symbolized_settings[:on_error] || proc {}
14
16
  @stub = symbolized_settings[:stub]
15
17
  @logger = default_logger(symbolized_settings[:logger])
18
+ @http_options = { use_ssl: true }
19
+ .merge(symbolized_settings[:http_options] || {})
16
20
  raise ArgumentError, 'Missing required option :write_key' \
17
21
  unless @write_key
18
22
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'logger'
2
4
  module SimpleSegment
3
5
  module Logging
@@ -6,11 +8,7 @@ module SimpleSegment
6
8
  end
7
9
 
8
10
  def default_logger(logger_option)
9
- if logger_option
10
- logger_option
11
- else
12
- Logger.new STDOUT
13
- end
11
+ logger_option || Logger.new(STDOUT)
14
12
  end
15
13
  end
16
14
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'simple_segment/request'
2
4
  require 'simple_segment/operations/operation'
3
5
  require 'simple_segment/operations/identify'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SimpleSegment
2
4
  module Operations
3
5
  class Alias < Operation
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SimpleSegment
2
4
  module Operations
3
5
  class Group < Operation
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SimpleSegment
2
4
  module Operations
3
5
  class Identify < Operation
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SimpleSegment
2
4
  module Operations
3
5
  class Operation
@@ -10,10 +12,9 @@ module SimpleSegment
10
12
  }
11
13
  }.freeze
12
14
 
13
- attr_reader :options, :request
14
-
15
15
  def initialize(client, options = {})
16
16
  @options = options
17
+ @context = DEFAULT_CONTEXT.merge(options[:context].to_h)
17
18
  @request = Request.new(client)
18
19
  end
19
20
 
@@ -23,6 +24,8 @@ module SimpleSegment
23
24
 
24
25
  private
25
26
 
27
+ attr_reader :options, :request, :context
28
+
26
29
  def base_payload
27
30
  check_identity!
28
31
  current_time = Time.now
@@ -30,7 +33,7 @@ module SimpleSegment
30
33
  {
31
34
  userId: options[:user_id],
32
35
  anonymousId: options[:anonymous_id],
33
- context: DEFAULT_CONTEXT.merge(options[:context].to_h),
36
+ context: context,
34
37
  integrations: options[:integrations],
35
38
  timestamp: timestamp(options.fetch(:timestamp, current_time)),
36
39
  sentAt: current_time.iso8601
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SimpleSegment
2
4
  module Operations
3
5
  class Page < Operation
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SimpleSegment
2
4
  module Operations
3
5
  class Track < Operation
@@ -1,21 +1,24 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SimpleSegment
2
4
  class Request
3
- BASE_URL = 'https://api.segment.io'.freeze
5
+ BASE_URL = 'https://api.segment.io'
4
6
  DEFAULT_HEADERS = {
5
7
  'Content-Type' => 'application/json',
6
8
  'accept' => 'application/json'
7
9
  }.freeze
8
10
 
9
- attr_reader :write_key, :error_handler, :stub, :logger
11
+ attr_reader :write_key, :error_handler, :stub, :logger, :http_options
10
12
 
11
13
  def initialize(client)
12
14
  @write_key = client.config.write_key
13
15
  @error_handler = client.config.on_error
14
16
  @stub = client.config.stub
15
17
  @logger = client.config.logger
18
+ @http_options = client.config.http_options
16
19
  end
17
20
 
18
- def post(path, payload, headers: DEFAULT_HEADERS)
21
+ def post(path, payload, headers: DEFAULT_HEADERS) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
19
22
  response = nil
20
23
  status_code = nil
21
24
  response_body = nil
@@ -29,7 +32,7 @@ module SimpleSegment
29
32
 
30
33
  { status: 200, error: nil }
31
34
  else
32
- Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
35
+ Net::HTTP.start(uri.host, uri.port, http_options) do |http|
33
36
  request = Net::HTTP::Post.new(path, headers)
34
37
  request.basic_auth write_key, nil
35
38
  http.request(request, payload).tap do |res|
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SimpleSegment
2
4
  module Utils
3
5
  def self.included(klass)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SimpleSegment
2
- VERSION = '0.3.0'.freeze
4
+ VERSION = '1.0.0.pre'
3
5
  end
@@ -1,5 +1,6 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'simple_segment/version'
5
6
 
@@ -20,10 +21,10 @@ Gem::Specification.new do |spec|
20
21
  spec.require_paths = ['lib']
21
22
 
22
23
  spec.add_development_dependency 'bundler', '~> 1.11'
24
+ spec.add_development_dependency 'pry'
23
25
  spec.add_development_dependency 'rake', '~> 10.0'
24
26
  spec.add_development_dependency 'rspec', '~> 3.0'
25
- spec.add_development_dependency 'webmock', '~> 1.24'
27
+ spec.add_development_dependency 'rubocop', '0.75.0'
26
28
  spec.add_development_dependency 'timecop', '~> 0.8.0'
27
- spec.add_development_dependency 'rubocop', '~> 0.47.0'
28
- spec.add_development_dependency 'pry'
29
+ spec.add_development_dependency 'webmock', '~> 3.7'
29
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_segment
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 1.0.0.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mikhail Topolskiy
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-03-14 00:00:00.000000000 Z
11
+ date: 2019-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.11'
27
+ - !ruby/object:Gem::Dependency
28
+ name: pry
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -53,19 +67,19 @@ dependencies:
53
67
  - !ruby/object:Gem::Version
54
68
  version: '3.0'
55
69
  - !ruby/object:Gem::Dependency
56
- name: webmock
70
+ name: rubocop
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - "~>"
73
+ - - '='
60
74
  - !ruby/object:Gem::Version
61
- version: '1.24'
75
+ version: 0.75.0
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - "~>"
80
+ - - '='
67
81
  - !ruby/object:Gem::Version
68
- version: '1.24'
82
+ version: 0.75.0
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: timecop
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -81,33 +95,19 @@ dependencies:
81
95
  - !ruby/object:Gem::Version
82
96
  version: 0.8.0
83
97
  - !ruby/object:Gem::Dependency
84
- name: rubocop
98
+ name: webmock
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: 0.47.0
103
+ version: '3.7'
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
108
  - - "~>"
95
109
  - !ruby/object:Gem::Version
96
- version: 0.47.0
97
- - !ruby/object:Gem::Dependency
98
- name: pry
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'
110
+ version: '3.7'
111
111
  description: SimpleSegment allows for manual control of when and how the events are
112
112
  sent to Segment.
113
113
  email:
@@ -159,12 +159,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
159
159
  version: '0'
160
160
  required_rubygems_version: !ruby/object:Gem::Requirement
161
161
  requirements:
162
- - - ">="
162
+ - - ">"
163
163
  - !ruby/object:Gem::Version
164
- version: '0'
164
+ version: 1.3.1
165
165
  requirements: []
166
- rubyforge_project:
167
- rubygems_version: 2.6.14
166
+ rubygems_version: 3.0.3
168
167
  signing_key:
169
168
  specification_version: 4
170
169
  summary: A simple synchronous API client for segment.io.