satorix-common 1.1.5

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 9b9ccf26bc69123cd3eb6ac5d31fcff948856ebc2f2f8dbd41dc8bb381f6d99f
4
+ data.tar.gz: de54faed6d36638dc44a0b89d9b9a08566c604210b42daab6cfaea046a4b131e
5
+ SHA512:
6
+ metadata.gz: 4c5beb573b3b58aed5cee2755e1e6d5bfa2be2e2c0a5364358173f903d921cc5e86a7b969a27ad68bab1d4be309104a79cdbad773ef1ba165803f04403274102
7
+ data.tar.gz: 8384f64de67396d560f99ab6ee66995b6ff44cd56ae5b0d1d599f9b46cd9d505dc444e07c9002874372dbbaaae1a32a14a1ce37decc8747e75b0563ed4b97501
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ # rspec failure tracking
11
+ .rspec_status
12
+
13
+ # Rubymine
14
+ .idea
data/.gitlab-ci.yml ADDED
@@ -0,0 +1,26 @@
1
+ image: 'satorix/base'
2
+
3
+ cache:
4
+ key: "$CI_PROJECT_ID"
5
+ paths:
6
+ - 'tmp/satorix/cache' # To cache buildpack gems between runs.
7
+
8
+
9
+ .satorix: &satorix
10
+ script:
11
+ - gem install satorix --source https://gems.iexposure.com --no-document
12
+ - satorix
13
+
14
+
15
+ rspec:
16
+ <<: *satorix
17
+
18
+
19
+ # This is a custom job, defined at satorix/CI/deploy/rubygems.rb
20
+ deploy_to_rubygems:
21
+ stage: deploy
22
+ only:
23
+ - tags
24
+ except:
25
+ - schedules
26
+ <<: *satorix
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-2.6.5
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ ruby File.open("#{ File.dirname(__FILE__) }/.ruby-version", &:gets).strip[/ruby-(.+)/i, 1]
2
+
3
+ source 'https://gems.iexposure.com'
4
+
5
+ # Specify your gem's dependencies in satorix-common.gemspec
6
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,22 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ satorix-common (1.1.5)
5
+ rake
6
+
7
+ GEM
8
+ remote: https://gems.iexposure.com/
9
+ specs:
10
+ rake (13.0.1)
11
+
12
+ PLATFORMS
13
+ ruby
14
+
15
+ DEPENDENCIES
16
+ satorix-common!
17
+
18
+ RUBY VERSION
19
+ ruby 2.6.5p114
20
+
21
+ BUNDLED WITH
22
+ 1.17.3
data/Procfile ADDED
@@ -0,0 +1 @@
1
+ # This is an empty file, to silence an buildpack warning during testing.
data/README.md ADDED
@@ -0,0 +1,50 @@
1
+ # Satorix::Common
2
+
3
+ By [Internet Exposure](https://www.iexposure.com/)
4
+
5
+ [![build](http://gitlab.iexposure.com/satorix/satorix-commmon/badges/master/build.svg)](http://gitlab.iexposure.com/satorix/satorix-commmon/pipelines)
6
+ [![coverage](http://gitlab.iexposure.com/satorix/satorix-commmon/badges/master/coverage.svg)](http://gitlab.iexposure.com/satorix/satorix-commmon/pipelines)
7
+
8
+
9
+ This gem contains code shared between two or more separate Satorix applications.
10
+
11
+ ## Installation
12
+
13
+ Add this line to your application's Gemfile:
14
+
15
+ ```ruby
16
+ gem 'satorix-common'
17
+ ```
18
+
19
+ And then execute:
20
+
21
+ $ bundle
22
+
23
+ Or install it yourself as:
24
+
25
+ $ gem install satorix-common
26
+
27
+ ## Usage
28
+
29
+ Include the gem in a relevant project to access shared logic.
30
+
31
+ ## Development
32
+
33
+ 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.
34
+
35
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
36
+
37
+ ## CI/CD
38
+
39
+ Satorix is used to provide continuous integration and continuous deployment for this application.
40
+
41
+ CI is run against every push.
42
+
43
+ CD is used to automatically build and deploy the gem for the master branch.
44
+ To initiate the deploy, first ensure you have advanced the version number appropriately. Then, create a new version tag
45
+ on the master branch. The tag should follow the format of v# (If we were releasing version 1.0.3, the tag should be v1.0.3).
46
+
47
+
48
+ ## Contributing
49
+
50
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/satorix-common.
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require 'bundler/gem_tasks'
2
+ begin
3
+ require 'rspec/core/rake_task'
4
+
5
+ RSpec::Core::RakeTask.new(:spec)
6
+
7
+ task :default => :spec
8
+ rescue LoadError
9
+ # no rspec available
10
+ end
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "satorix/common"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,180 @@
1
+ module Satorix
2
+ module Common
3
+ module Console
4
+
5
+ require 'benchmark'
6
+ require 'English' # http://ruby-doc.org/stdlib-2.0.0/libdoc/English/rdoc/English.html
7
+ require 'shellwords'
8
+
9
+ extend self
10
+
11
+
12
+ def colorize(text, color = nil)
13
+ "\033[#{ colors[color] }m#{ text }\033[0m"
14
+ end
15
+
16
+
17
+ def colors
18
+ Hash.new(39).merge(red: '0;31', light_red: '1;31',
19
+ green: '0;32', light_green: '1;32',
20
+ yellow: '0;33', light_yellow: '1;33',
21
+ blue: '0;34', light_blue: '1;34',
22
+ magenta: '0;35', light_magenta: '1;35',
23
+ cyan: '0;36', light_cyan: '1;36',
24
+ white: '0;37', light_white: '1;37')
25
+ end
26
+
27
+
28
+ def humanize_time(seconds)
29
+ return 'less than 1 second' if seconds < 1
30
+ [[60, :second], [60, :minute], [24, :hour], [1000, :day]].map do |count, name|
31
+ if seconds > 0
32
+ seconds, n = seconds.divmod(count)
33
+ n = n.to_i
34
+ "#{ n } #{ name }#{ 's' if n > 1 }" if n > 0
35
+ end
36
+ end.compact.reverse.join(' ')
37
+ end
38
+
39
+
40
+ def log(text, color = nil)
41
+ puts color ? colorize(text, color) : text
42
+ end
43
+
44
+
45
+ def log_command(text)
46
+ log text, :cyan
47
+ end
48
+
49
+
50
+ def log_duration(text)
51
+ log text, :light_cyan
52
+ end
53
+
54
+
55
+ def log_header(text)
56
+ log("\n#{ text }", :light_green)
57
+ end
58
+
59
+
60
+ def log_error(text)
61
+ log text, :light_red
62
+ end
63
+
64
+
65
+ def log_error_and_abort(text)
66
+ log_error text
67
+ abort text
68
+ end
69
+
70
+
71
+ def log_bench(message)
72
+ log_header message
73
+ result = nil
74
+ log_duration "Time elapsed: #{ humanize_time Benchmark.realtime { result = yield } }."
75
+ result
76
+ end
77
+
78
+
79
+ # The preferred way to use this method is by passing an array containing the command.
80
+ # This will ensure that items are properly escaped.
81
+ # It is also possible to use nested arrays. See tests for example use cases.
82
+ #
83
+ # If you want to see how your string command translates into an arry, you can use shellsplit method.
84
+ #
85
+ # For example:
86
+ # 'ruby -v'.shellsplit
87
+ # => ["ruby", "-v"]
88
+ #
89
+ # If, for some reason, you need to supply a string that is already escaped or should not be escaped, it is
90
+ # possible to supply a string argument instead of an array. If you do this, you will need to supply
91
+ # an additional parameter of string_verified_safe, to ensure that the operation is deliberate.
92
+ def run_command(command, filtered_text: [], quiet: false, string_verified_safe: false)
93
+ # This method is used *EVERYWHERE*.
94
+ # Seemingly small changes can have far-ranging and extreme consequences.
95
+ # Modify only with extreme caution.
96
+ #
97
+ # Note: Many applications (like echo and the Flynn CLI) append a newline to their output.
98
+ # If you are using the command result, it may be desirable to chomp the trailing
99
+ # newline. It is left to the implementing call to handle this, as it proved
100
+ # cumbersome to handle in this method in a way that worked perfectly in all cases.
101
+ raise('Potentially unsafe or problematic command. Please refer to the method documentation for more information.') if command.is_a?(String) && !string_verified_safe
102
+
103
+ command = normalized_command(command)
104
+ logged_command = logged_command(command, filtered_text)
105
+ log_command(logged_command) unless quiet
106
+
107
+ ''.tap do |output|
108
+ IO.popen(bash(command)) do |io|
109
+ until io.eof?
110
+ line = io.gets
111
+ puts line unless quiet || line.empty?
112
+ $stdout.flush
113
+ output.concat line
114
+ end
115
+ end
116
+
117
+ handle_run_command_error(logged_command, quiet) unless $CHILD_STATUS.success?
118
+ end
119
+ end
120
+
121
+
122
+ # http://stackoverflow.com/questions/1197224/source-shell-script-into-environment-within-a-ruby-script
123
+ # TODO : reduce / consolidate?
124
+ # Find variables changed as a result of sourcing the given file, and update in ENV.
125
+ def source_env_from(file)
126
+ bash_source(file).each { |k, v| ENV[k] = v }
127
+ end
128
+
129
+
130
+ private
131
+
132
+
133
+ def bash(command)
134
+ ['bash -c', escaped_command(command), '2>&1'].join(' ')
135
+ end
136
+
137
+
138
+ def logged_command(command, filtered_text)
139
+ filtered_text = [filtered_text].flatten.delete_if { |text| text.nil? || text.strip.empty? }
140
+ unescaped_command = command.shellsplit.join(' ')
141
+ unescaped_command.gsub(Regexp.union(filtered_text.sort_by(&:length).reverse), '[MASKED]')
142
+ end
143
+
144
+
145
+ def escaped_command(command)
146
+ command.shellescape
147
+ end
148
+
149
+
150
+ def normalized_command(command)
151
+ command.is_a?(Array) ? command.flatten.shelljoin : command
152
+ end
153
+
154
+
155
+ def handle_run_command_error(logged_command, quiet)
156
+ error_message = "\nAn error has occurred while running the following command:\n#{ logged_command }\n"
157
+ quiet ? abort : log_error_and_abort(error_message)
158
+ end
159
+
160
+
161
+ # http://stackoverflow.com/questions/1197224/source-shell-script-into-environment-within-a-ruby-script
162
+ # TODO : reduce / consolidate?
163
+ # Read in the bash environment, after an optional command. Returns Array of key/value pairs.
164
+ def bash_env(cmd = nil)
165
+ env_cmd = bash("#{ cmd + ';' if cmd } printenv")
166
+ env = `#{ env_cmd }`
167
+ env.split(/\n/).map { |l| l.split(/=/, 2) }
168
+ end
169
+
170
+
171
+ # http://stackoverflow.com/questions/1197224/source-shell-script-into-environment-within-a-ruby-script
172
+ # TODO : reduce / consolidate?
173
+ # Source a given file, and compare environment before and after. Returns Hash of any keys that have changed.
174
+ def bash_source(file)
175
+ Hash[bash_env("source #{ File.realpath file }") - bash_env]
176
+ end
177
+
178
+ end
179
+ end
180
+ end
@@ -0,0 +1,149 @@
1
+ module Satorix
2
+ module Common
3
+ module Pricing
4
+
5
+ class MissingApplicationConfigurationSettings < StandardError
6
+ end
7
+
8
+ class MissingPricingConfigurationElement < StandardError
9
+ end
10
+
11
+ class InvalidNegativeTotalPrice < StandardError
12
+ end
13
+
14
+
15
+ class << self
16
+
17
+
18
+ def package_defaults(package)
19
+ default_defaults.merge overrides_for(package)
20
+ end
21
+
22
+
23
+ def packages
24
+ overrides.keys
25
+ end
26
+
27
+
28
+ def pricing
29
+ # Different Rails versions use different types for keys.
30
+ pricing = ::Rails.application.secrets.satorix['pricing_in_cents'] ||
31
+ ::Rails.application.secrets.satorix[:pricing_in_cents]
32
+
33
+ raise(MissingApplicationConfigurationSettings, 'No pricing information configured.') if pricing.nil? || pricing.empty?
34
+
35
+ pricing = Hash[pricing.map { |key, value| [key.to_sym, value] }]
36
+
37
+ pricing
38
+ end
39
+
40
+
41
+ def pricing_for(attribute)
42
+ price = pricing[secrets_key_for_attribute(attribute)]
43
+
44
+ raise(MissingApplicationConfigurationSettings, "No pricing information configured for the '#{ attribute }' atttribute.") if price.nil?
45
+
46
+ price
47
+ end
48
+
49
+
50
+ def starting_price_for(package)
51
+ settings = package_defaults(package)
52
+ total_price settings
53
+ end
54
+
55
+
56
+ def secrets_key_for_attribute(attribute)
57
+ {
58
+ base_cost: :base_cost,
59
+ runners: :per_runner,
60
+ gitlab_storage: :per_gb_of_gitlab_storage,
61
+ staging_hosts: :per_staging_cluster_host,
62
+ staging_storage: :per_staging_gb_of_storage_per_host,
63
+ production_hosts: :per_production_cluster_host,
64
+ production_storage: :per_production_gb_of_storage_per_host,
65
+ premium_support: :support_package_premium,
66
+ free_support: :support_package_free
67
+ }[attribute]
68
+ end
69
+
70
+
71
+ def total_price(configuration)
72
+ raise(MissingPricingConfigurationElement) if configuration.keys.to_set != default_defaults.keys.to_set
73
+
74
+ cost = pricing[:base_cost]
75
+ configuration.each do |attribute, quantity|
76
+ price = pricing[secrets_key_for_attribute(attribute)]
77
+ cost += price * quantity * scaling_modifier(attribute, configuration)
78
+ end
79
+
80
+ raise(InvalidNegativeTotalPrice) if cost.negative?
81
+
82
+ cost
83
+ end
84
+
85
+
86
+ def scaling_modifier(attribute, configuration)
87
+ modifying_attribute = scaled_attributes[attribute]
88
+ modifying_attribute ? configuration[modifying_attribute] : 1
89
+ end
90
+
91
+
92
+ def scaled_attributes
93
+ # The key is the scaled attribute, the value is the attribute that modfies the scaled attribute.
94
+ { staging_storage: :staging_hosts,
95
+ production_storage: :production_hosts }
96
+ end
97
+
98
+
99
+ private
100
+
101
+
102
+ def overrides
103
+ { 'starter' => starter_defaults,
104
+ 'cluster' => cluster_defaults,
105
+ 'custom' => custom_defaults }
106
+ end
107
+
108
+
109
+ def overrides_for(package)
110
+ overrides[package] || starter_defaults # default to starter options, for invalid selections
111
+ end
112
+
113
+
114
+ def default_defaults
115
+ { runners: 1,
116
+ gitlab_storage: 100,
117
+ staging_hosts: 1,
118
+ staging_storage: 50,
119
+ production_hosts: 3,
120
+ production_storage: 100,
121
+ free_support: 1,
122
+ premium_support: 0 }
123
+ end
124
+
125
+
126
+ def starter_defaults
127
+ { production_hosts: 1 }
128
+ end
129
+
130
+
131
+ def cluster_defaults
132
+ { runners: 2,
133
+ free_support: 0,
134
+ premium_support: 1 }
135
+ end
136
+
137
+
138
+ def custom_defaults
139
+ { free_support: 0,
140
+ premium_support: 1 }
141
+ end
142
+
143
+
144
+ end
145
+
146
+
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,5 @@
1
+ module Satorix
2
+ module Common
3
+ VERSION = '1.1.5'
4
+ end
5
+ end
@@ -0,0 +1,13 @@
1
+ require 'satorix/common/console'
2
+ require 'satorix/common/pricing'
3
+ require 'satorix/common/version'
4
+
5
+
6
+ module Satorix
7
+ module Common
8
+ class Error < StandardError;
9
+ end
10
+
11
+
12
+ end
13
+ end
@@ -0,0 +1,77 @@
1
+ module Satorix
2
+ module CI
3
+ module Deploy
4
+ module Rubygems
5
+
6
+ require 'fileutils'
7
+
8
+ include Satorix::Shared::Console
9
+
10
+ extend self
11
+
12
+
13
+ def go
14
+ log_bench('Generating rubygems.org configuration_file...') { generate_rubygems_configuration_file }
15
+ log_bench('Preparing gem build directory...') { prepare_gem_build_directory }
16
+ log_bench('Building gem...') { build_gem }
17
+ built_gems.each { |gem| log_bench("Publishing #{ File.basename gem }...") { publish_gem gem } }
18
+ end
19
+
20
+
21
+ private
22
+
23
+
24
+ def build_gem
25
+ Dir.chdir(Satorix.app_dir) do
26
+ run_command(%w[bundle exec rake build])
27
+ end
28
+ end
29
+
30
+
31
+ def built_gems
32
+ Dir.glob(File.join(gem_build_directory, '*.gem')).select { |e| File.file? e }
33
+ end
34
+
35
+
36
+ def gem_build_directory
37
+ File.join(Satorix.app_dir, 'pkg')
38
+ end
39
+
40
+
41
+ def generate_rubygems_configuration_file
42
+ path = File.join(Dir.home, '.gem')
43
+ FileUtils.mkdir_p(path) unless File.exist?(path)
44
+
45
+ file = File.join(path, 'credentials')
46
+ File.open(file, 'w') { |f| f.write rubygems_configuration_file_contents }
47
+ FileUtils.chmod 0600, file
48
+ end
49
+
50
+
51
+ def prepare_gem_build_directory
52
+ run_command(['rm', '-rf', gem_build_directory])
53
+ FileUtils.mkdir_p gem_build_directory
54
+ end
55
+
56
+
57
+ def publish_gem(gem)
58
+ run_command(['gem', 'push', gem, '--config-file', File.join(Dir.home, '.gem', 'credentials')])
59
+ rescue RuntimeError
60
+ # To prevent the display of an ugly stacktrace.
61
+ abort "\nGem was not published!"
62
+ end
63
+
64
+
65
+ def rubygems_api_key
66
+ ENV['SATORIX_CI_RUBYGEMS_API_KEY']
67
+ end
68
+
69
+
70
+ def rubygems_configuration_file_contents
71
+ "---\n:rubygems_api_key: #{ rubygems_api_key }"
72
+ end
73
+
74
+ end
75
+ end
76
+ end
77
+ end
data/satorix/custom.rb ADDED
@@ -0,0 +1,21 @@
1
+ module Satorix
2
+ module Custom
3
+
4
+
5
+ require_relative 'CI/deploy/rubygems.rb'
6
+
7
+
8
+ extend self
9
+
10
+
11
+ def available_jobs
12
+ {
13
+ deploy: {
14
+ deploy_to_rubygems: Satorix::CI::Deploy::Rubygems
15
+ }
16
+ }
17
+ end
18
+
19
+
20
+ end
21
+ end
@@ -0,0 +1,40 @@
1
+ lib = File.expand_path("../lib", __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require "satorix/common/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "satorix-common"
7
+ spec.version = Satorix::Common::VERSION
8
+ spec.authors = ['Internet Exposure']
9
+ spec.email = ['info@iexposure.com']
10
+
11
+ spec.summary = %q{Common library for Satorix}
12
+ spec.description = %q{This gem contains code shared between two or more separate Satorix applications.}
13
+ spec.homepage = "http://gitlab.iexposure.com/satorix/satorix-common"
14
+
15
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
16
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
17
+ if spec.respond_to?(:metadata)
18
+ spec.metadata['allowed_push_host'] = 'https://rubygems.org'
19
+
20
+ spec.metadata["homepage_uri"] = spec.homepage
21
+ # spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
22
+ # spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
23
+ else
24
+ raise "RubyGems 2.0 or newer is required to protect against " \
25
+ "public gem pushes."
26
+ end
27
+
28
+ # Specify which files should be added to the gem when it is released.
29
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
30
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
31
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
32
+ end
33
+ spec.bindir = "exe"
34
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
35
+ spec.require_paths = ["lib"]
36
+
37
+ spec.add_dependency 'rake'
38
+
39
+ end
40
+
metadata ADDED
@@ -0,0 +1,76 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: satorix-common
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.5
5
+ platform: ruby
6
+ authors:
7
+ - Internet Exposure
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2021-11-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: This gem contains code shared between two or more separate Satorix applications.
28
+ email:
29
+ - info@iexposure.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".gitignore"
35
+ - ".gitlab-ci.yml"
36
+ - ".rspec"
37
+ - ".ruby-version"
38
+ - Gemfile
39
+ - Gemfile.lock
40
+ - Procfile
41
+ - README.md
42
+ - Rakefile
43
+ - bin/console
44
+ - bin/setup
45
+ - lib/satorix/common.rb
46
+ - lib/satorix/common/console.rb
47
+ - lib/satorix/common/pricing.rb
48
+ - lib/satorix/common/version.rb
49
+ - satorix-common.gemspec
50
+ - satorix/CI/deploy/rubygems.rb
51
+ - satorix/custom.rb
52
+ homepage: http://gitlab.iexposure.com/satorix/satorix-common
53
+ licenses: []
54
+ metadata:
55
+ allowed_push_host: https://rubygems.org
56
+ homepage_uri: http://gitlab.iexposure.com/satorix/satorix-common
57
+ post_install_message:
58
+ rdoc_options: []
59
+ require_paths:
60
+ - lib
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ requirements: []
72
+ rubygems_version: 3.0.3
73
+ signing_key:
74
+ specification_version: 4
75
+ summary: Common library for Satorix
76
+ test_files: []