simple_segment 0.3.0 → 1.0.0.pre

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
- 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.