wc-essentials 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 0dd4d39d4c354a2e5f17a597a8a3314dcdac40903d37f60f646750fd5a7a7c41
4
+ data.tar.gz: 4c7fbc1e7c2175138bbc2ebc5d2634c917b44817885bcbdcf6b6ba1e4deac169
5
+ SHA512:
6
+ metadata.gz: 4bfe39ee38cd378815ac78a253f0d901c6d4c6676c11907f95cc7693d3765d38dceec390567292235bbe79a7f9862e7fd41f2065ee3de2b741e15332a04efddf
7
+ data.tar.gz: 16ccae333ee7921a662eb525106e933b398830af04612967400803f9b9cc78bbd42a7b08a41d57588a582096a3d6f2de8f0aecdf79549fc8f50c262da44577c9
@@ -0,0 +1,21 @@
1
+ FROM workcompass/wc-rails:1.1.0
2
+ LABEL maintainer="Dev Team at WorkCompass <dev@workcompass.com>"
3
+ ENV REFRESHED_ON 2021-08-08
4
+
5
+ # Default value to allow debug server to serve content over GitHub Codespace's port forwarding service
6
+ # The value is a comma-separated list of allowed domains
7
+ ENV RAILS_DEVELOPMENT_HOSTS=".githubpreview.dev"
8
+
9
+ # [Choice] Node.js version: lts/*, 16, 14, 12, 10
10
+ # ARG NODE_VERSION="lts/*"
11
+ # RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"
12
+
13
+ # [Optional] Uncomment this section to install additional OS packages.
14
+ # RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
15
+ # && apt-get -y install --no-install-recommends <your-package-list-here>
16
+
17
+ # [Optional] Uncomment this line to install additional gems.
18
+ # RUN gem install <your-gem-names-here>
19
+
20
+ # [Optional] Uncomment this line to install global node packages.
21
+ # RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g <your-package-here>" 2>&1
@@ -0,0 +1,32 @@
1
+ // For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
2
+ // https://github.com/microsoft/vscode-dev-containers/tree/v0.224.3/containers/ruby-rails
3
+ {
4
+ "name": "wc-essentials",
5
+ "build": {
6
+ "dockerfile": "Dockerfile"
7
+ },
8
+
9
+ // Set *default* container specific settings.json values on container create.
10
+ "settings": {},
11
+
12
+ // Add the IDs of extensions you want installed when the container is created.
13
+ "extensions": [
14
+ "rebornix.Ruby",
15
+ "ms-vscode.test-adapter-converter",
16
+ "connorshea.vscode-ruby-test-adapter",
17
+ "misogi.ruby-rubocop",
18
+ "eamodio.gitlens",
19
+ "ms-vsliveshare.vsliveshare"
20
+ ],
21
+
22
+ // Use 'forwardPorts' to make a list of ports inside the container available locally.
23
+ // "forwardPorts": [],
24
+
25
+ // Use 'onCreateCommand' to run commands once the container is created.
26
+ "onCreateCommand": "bundle install",
27
+ // Use 'postCreateCommand' to run commands after the container is created.
28
+ "postCreateCommand": "chmod +x ./.devcontainer/postCreateCommands.sh && ./.devcontainer/postCreateCommands.sh"
29
+
30
+ // Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
31
+ // "remoteUser": "vscode"
32
+ }
@@ -0,0 +1,13 @@
1
+ #!/bin/bash
2
+
3
+ echo ===================================================
4
+ git --version
5
+
6
+ echo gem $(gem --version)
7
+ ruby -v
8
+ rails -v
9
+
10
+ bundle -v
11
+ rake -V
12
+ rspec -v
13
+ echo ===================================================
@@ -0,0 +1,99 @@
1
+ name: Coverage
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+
8
+ pull_request:
9
+ types:
10
+ - ready_for_review
11
+ - auto_merge_enabled
12
+
13
+ jobs:
14
+ test-base:
15
+ # Containers must run in Linux based operating systems
16
+ runs-on: ubuntu-latest
17
+ # Docker Hub image that `container-job` executes in
18
+ container: workcompass/wc-rails-ci:1.1.0
19
+
20
+ steps:
21
+ # Downloads a copy of the code in your repository before running CI tests
22
+ - name: Check out repository code
23
+ uses: actions/checkout@v3
24
+
25
+ - name: Install gems
26
+ run: bundle install
27
+
28
+ - name: Run rspec test base
29
+ env:
30
+ RAILS_ENV: test
31
+ SIMPLECOV: true
32
+ run: bundle exec rspec spec/wc/essentials_spec.rb
33
+
34
+ - name: Upload to AWS
35
+ env:
36
+ AWS_ACCESS_KEY_ID: ${{ secrets.COVERAGE_AWS_ACCESS_KEY_ID }}
37
+ AWS_SECRET_ACCESS_KEY: ${{ secrets.COVERAGE_AWS_SECRET_ACCESS_KEY }}
38
+ AWS_DEFAULT_REGION: eu-west-1
39
+ run: |
40
+ aws s3 cp coverage/.resultset.json s3://wc-cov-codeclimate/${{ github.repository }}/${{ github.ref }}/codeclimate.base.json
41
+
42
+ test-essentials:
43
+ # Containers must run in Linux based operating systems
44
+ runs-on: ubuntu-latest
45
+ # Docker Hub image that `container-job` executes in
46
+ container: workcompass/wc-rails-ci:1.1.0
47
+
48
+ steps:
49
+ # Downloads a copy of the code in your repository before running CI tests
50
+ - name: Check out repository code
51
+ uses: actions/checkout@v3
52
+
53
+ - name: Install gems
54
+ run: bundle install
55
+
56
+ - name: Run rspec test base
57
+ env:
58
+ RAILS_ENV: test
59
+ SIMPLECOV: true
60
+ run: bundle exec rspec spec/wc/essentials/
61
+
62
+ - name: Upload to AWS
63
+ env:
64
+ AWS_ACCESS_KEY_ID: ${{ secrets.COVERAGE_AWS_ACCESS_KEY_ID }}
65
+ AWS_SECRET_ACCESS_KEY: ${{ secrets.COVERAGE_AWS_SECRET_ACCESS_KEY }}
66
+ AWS_DEFAULT_REGION: eu-west-1
67
+ run: |
68
+ aws s3 cp coverage/.resultset.json s3://wc-cov-codeclimate/${{ github.repository }}/${{ github.ref }}/codeclimate.essentials.json
69
+
70
+ codeclimate-coverage:
71
+ needs:
72
+ - test-base
73
+ - test-essentials
74
+
75
+ # Containers must run in Linux based operating systems
76
+ runs-on: ubuntu-latest
77
+ # Docker Hub image that `container-job` executes in
78
+ container: workcompass/wc-rails-ci:1.1.0
79
+
80
+ steps:
81
+ # Downloads a copy of the code in your repository before running CI tests
82
+ - name: Check out repository code
83
+ uses: actions/checkout@v3
84
+
85
+ - name: Download coverage reports
86
+ shell: bash
87
+ env:
88
+ AWS_ACCESS_KEY_ID: ${{ secrets.COVERAGE_AWS_ACCESS_KEY_ID }}
89
+ AWS_SECRET_ACCESS_KEY: ${{ secrets.COVERAGE_AWS_SECRET_ACCESS_KEY }}
90
+ AWS_DEFAULT_REGION: eu-west-1
91
+ run: /usr/local/bin/aws s3 cp s3://wc-cov-codeclimate/${{ github.repository }}/${{ github.ref }} cov/ --recursive
92
+
93
+ - name: Combine & Publish code coverage
94
+ uses: paambaati/codeclimate-action@v3.2.0
95
+ env:
96
+ CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
97
+ with:
98
+ coverageLocations: |
99
+ ${{ github.workspace }}/cov/codeclimate.*.json:simplecov
@@ -0,0 +1,25 @@
1
+ name: Publish Gem
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - '*'
7
+
8
+ jobs:
9
+ build:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ # Downloads a copy of the code in your repository before running CI tests
13
+ - name: Check out repository code
14
+ uses: actions/checkout@v3
15
+
16
+ - name: Publish to RubyGems
17
+ env:
18
+ GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_API_KEY}}"
19
+ run: |
20
+ mkdir -p $HOME/.gem
21
+ touch $HOME/.gem/credentials
22
+ chmod 0600 $HOME/.gem/credentials
23
+ printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
24
+ gem build *.gemspec
25
+ gem push *.gem
@@ -0,0 +1,34 @@
1
+ name: Test Base
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - '*' # matches every branch that doesn't contain a '/'
7
+ - '*/*' # matches every branch containing a single '/'
8
+ - '**' # matches every branch
9
+ - '!master' # includes master
10
+ paths:
11
+ - 'lib/wc/essentials.rb'
12
+ - 'lib/wc/essentials/version.rb'
13
+ - 'spec/wc/essentials_spec.rb'
14
+
15
+ jobs:
16
+ # Label of the container job
17
+ test-base:
18
+ # Containers must run in Linux based operating systems
19
+ runs-on: ubuntu-latest
20
+ # Docker Hub image that `container-job` executes in
21
+ container: workcompass/wc-rails-ci:1.1.0
22
+
23
+ steps:
24
+ # Downloads a copy of the code in your repository before running CI tests
25
+ - name: Check out repository code
26
+ uses: actions/checkout@v3
27
+
28
+ - name: Install gems
29
+ run: bundle install
30
+
31
+ - name: Run rspec test wc-essentials
32
+ run: >
33
+ bundle exec rspec
34
+ spec/wc/essentials_spec.rb
@@ -0,0 +1,33 @@
1
+ name: Test
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - '*' # matches every branch that doesn't contain a '/'
7
+ - '*/*' # matches every branch containing a single '/'
8
+ - '**' # matches every branch
9
+ - '!master' # includes master
10
+ paths:
11
+ - 'lib/wc/essentials/**/*'
12
+ - 'spec/wc/essentials/**/*'
13
+
14
+ jobs:
15
+ # Label of the container job
16
+ test-essentials:
17
+ # Containers must run in Linux based operating systems
18
+ runs-on: ubuntu-latest
19
+ # Docker Hub image that `container-job` executes in
20
+ container: workcompass/wc-rails-ci:1.1.0
21
+
22
+ steps:
23
+ # Downloads a copy of the code in your repository before running CI tests
24
+ - name: Check out repository code
25
+ uses: actions/checkout@v3
26
+
27
+ - name: Install gems
28
+ run: bundle install
29
+
30
+ - name: Run rspec test wc-essentials
31
+ run: >
32
+ bundle exec rspec
33
+ spec/wc/essentials/
data/.gitignore ADDED
@@ -0,0 +1,15 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /dist/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+
11
+ # rspec failure tracking
12
+ .rspec_status
13
+
14
+ # Release
15
+ *.gem
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
data/.rubocop.yml ADDED
@@ -0,0 +1,71 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.5
3
+
4
+ Layout/LineLength:
5
+ Enabled: true
6
+ Max: 90
7
+ Exclude:
8
+ - bin/**/*
9
+ - spec/**/*
10
+
11
+ Lint/AmbiguousBlockAssociation:
12
+ Enabled: true
13
+ Exclude:
14
+ - spec/**/*
15
+
16
+ Lint/RaiseException:
17
+ Enabled: true
18
+
19
+ Lint/StructNewOverride:
20
+ Enabled: true
21
+
22
+ Metrics/BlockLength:
23
+ Enabled: true
24
+ Exclude:
25
+ - spec/**/*
26
+ - wc-essentials.gemspec
27
+
28
+ Metrics/MethodLength:
29
+ Enabled: true
30
+ Max: 17
31
+
32
+ Naming/VariableNumber:
33
+ Enabled: true
34
+ Exclude:
35
+ - spec/**/*
36
+
37
+ Style/BlockDelimiters:
38
+ Enabled: true
39
+ Exclude:
40
+ - spec/**/*
41
+
42
+ Style/Documentation:
43
+ Enabled: false
44
+
45
+ Style/HashEachMethods:
46
+ Enabled: true
47
+
48
+ Style/HashTransformKeys:
49
+ Enabled: true
50
+
51
+ Style/HashTransformValues:
52
+ Enabled: true
53
+
54
+ Style/Lambda:
55
+ Enabled: false
56
+
57
+ Style/SymbolArray:
58
+ Enabled: false
59
+
60
+ # Use a trailing comma to keep diffs clean when elements are inserted or removed
61
+ Style/TrailingCommaInArguments:
62
+ EnforcedStyleForMultiline: no_comma
63
+
64
+ Style/TrailingCommaInArrayLiteral:
65
+ EnforcedStyleForMultiline: comma
66
+
67
+ Style/TrailingCommaInHashLiteral:
68
+ EnforcedStyleForMultiline: comma
69
+
70
+ Style/WordArray:
71
+ Enabled: false
data/API.md ADDED
@@ -0,0 +1,50 @@
1
+ # WC
2
+
3
+ ## CountTracker
4
+
5
+ ### Description
6
+ Allows to track how many times an item is called.
7
+
8
+ ### Usage
9
+
10
+ #### Sample
11
+ ```
12
+ tracker = WC::CountTracker.new
13
+ tracker.increase(key)
14
+ tracker.count(key) # => 1
15
+ ```
16
+
17
+ #### Chaining
18
+ ```
19
+ tracker = WC::CountTracker.new
20
+ tracker.increase(key).increase(key)
21
+ tracker.count(key) # => 2
22
+ ```
23
+
24
+ #### Get above
25
+ ```
26
+ tracker = WC::CountTracker.new(
27
+ {
28
+ one: 1,
29
+ two: 2,
30
+ three: 3,
31
+ other_three: 3,
32
+ }
33
+ )
34
+ tracker.increase(key).increase(key)
35
+ tracker.above(2) # => { three: 3, other_three: 3 }
36
+ ```
37
+
38
+ #### Get above (keys)
39
+ ```
40
+ tracker = WC::CountTracker.new(
41
+ {
42
+ one: 1,
43
+ two: 2,
44
+ three: 3,
45
+ other_three: 3,
46
+ }
47
+ )
48
+ tracker.increase(key).increase(key)
49
+ tracker.above(2).keys # => [:three, :other_three]
50
+ ```
data/CHANGELOG.md ADDED
@@ -0,0 +1,16 @@
1
+ # Changelog
2
+ All notable changes to this project will be documented in this file.
3
+
4
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
5
+
6
+ ## [Unreleased]
7
+
8
+ ## [0.1.0] - 2023-03-13
9
+
10
+ ### Added
11
+
12
+ - Include `class_helpers`, `class_registers` & `count_tracker` from `cognito` project.
13
+ - Convert any rails dependency to native ruby.
14
+
15
+ [unreleased]: https://github.com/WorkCompass/wc-essentials/compare/0.1.0...HEAD
16
+ [0.1.0]: https://github.com/WorkCompass/wc-essentials/releases/tag/0.1.0
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ git_source(:github) { |repo_name| "https://github.com/WorkCompass/wc-essentials" }
6
+
7
+ # Specify your gem's dependencies in wc-work4ce.gemspec
8
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,72 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ wc-essentials (0.1.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ ast (2.4.2)
10
+ debase (0.2.4.1)
11
+ debase-ruby_core_source (>= 0.10.2)
12
+ debase-ruby_core_source (0.10.17)
13
+ diff-lcs (1.5.0)
14
+ docile (1.3.5)
15
+ jaro_winkler (1.5.4)
16
+ json (2.6.2)
17
+ parallel (1.19.2)
18
+ parser (3.1.3.0)
19
+ ast (~> 2.4.1)
20
+ json
21
+ rainbow (3.1.1)
22
+ rake (13.0.6)
23
+ rexml (3.2.5)
24
+ rspec (3.12.0)
25
+ rspec-core (~> 3.12.0)
26
+ rspec-expectations (~> 3.12.0)
27
+ rspec-mocks (~> 3.12.0)
28
+ rspec-core (3.12.0)
29
+ rspec-support (~> 3.12.0)
30
+ rspec-expectations (3.12.0)
31
+ diff-lcs (>= 1.2.0, < 2.0)
32
+ rspec-support (~> 3.12.0)
33
+ rspec-mocks (3.12.0)
34
+ diff-lcs (>= 1.2.0, < 2.0)
35
+ rspec-support (~> 3.12.0)
36
+ rspec-support (3.12.0)
37
+ rubocop (0.81.0)
38
+ jaro_winkler (~> 1.5.1)
39
+ parallel (~> 1.10)
40
+ parser (>= 2.7.0.1)
41
+ rainbow (>= 2.2.2, < 4.0)
42
+ rexml
43
+ ruby-progressbar (~> 1.7)
44
+ unicode-display_width (>= 1.4.0, < 2.0)
45
+ rubocop-rspec (1.38.1)
46
+ rubocop (>= 0.68.1)
47
+ ruby-debug-ide (0.7.3)
48
+ rake (>= 0.8.1)
49
+ ruby-progressbar (1.11.0)
50
+ simplecov (0.17.1)
51
+ docile (~> 1.1)
52
+ json (>= 1.8, < 3)
53
+ simplecov-html (~> 0.10.0)
54
+ simplecov-html (0.10.2)
55
+ unicode-display_width (1.8.0)
56
+
57
+ PLATFORMS
58
+ ruby
59
+
60
+ DEPENDENCIES
61
+ bundler (~> 1.17)
62
+ debase (~> 0.2)
63
+ rake (~> 13.0)
64
+ rspec (~> 3.0)
65
+ rubocop (~> 0.81)
66
+ rubocop-rspec (~> 1.38)
67
+ ruby-debug-ide (~> 0.7)
68
+ simplecov (~> 0.17)
69
+ wc-essentials!
70
+
71
+ BUNDLED WITH
72
+ 1.17.3
data/LICENSE.md ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 WorkCompass
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,20 @@
1
+ # WC::Essentials
2
+
3
+ Gem to provide essential and commonly used helpers to all WorkCompass projects.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'wc-essentials'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install wc-essentials
20
+
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ task default: :spec
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'wc/essentials'
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,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WC
4
+ module Essentials
5
+ # Helpers for classes
6
+ module ClassHelpers
7
+ # Get the class variable name
8
+ # @param {class} klass
9
+ # @param {symbol} name
10
+ # @returns {string}
11
+ def self.klass_var_name(klass, name)
12
+ "@@#{
13
+ klass.name.split('::')
14
+ .join('_')
15
+ .downcase
16
+ }_#{name}"
17
+ end
18
+
19
+ # Assign class variable and also merge parent
20
+ # class variable.
21
+ # Usefull if required to have class variable
22
+ # only bind to the class in the case of inheritence
23
+ # @param {class} klass
24
+ # @param {symbol} name
25
+ # @param {any} value
26
+ def self.assign_class_variable(klass, name, value)
27
+ klass.ancestors.each do |ancestor|
28
+ value = concat_var(ancestor, name, value)
29
+ end
30
+
31
+ k_var_name = klass_var_name(klass, name)
32
+ klass.class_variable_set(k_var_name, value)
33
+ end
34
+
35
+ # Concat values from value provided
36
+ # with value assigned to the class variable
37
+ # @param {class} klass
38
+ # @param {symbol} name
39
+ # @param {any} value
40
+ # @returns {any} The value merged
41
+ def self.concat_var(klass, name, value)
42
+ var_name = klass_var_name(klass, name)
43
+ existing = var_value(
44
+ klass,
45
+ var_name,
46
+ value.is_a?(Array) ? [] : {}
47
+ )
48
+
49
+ (value.is_a?(Array) ? (existing + value) : value.merge(existing))
50
+ end
51
+
52
+ # Return the value of class variable
53
+ # @param {class} klass
54
+ # @param {symbol} name
55
+ # @param {any} default
56
+ # @returns {any}
57
+ # - default value if nothing found
58
+ def self.var_value(klass, name, default = [])
59
+ return default unless defined?(klass.class_variable_get(name))
60
+
61
+ klass.class_variable_get(name)
62
+ rescue StandardError
63
+ default
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './class_helpers'
4
+
5
+ module WC
6
+ module Essentials
7
+ # Helpers for registration
8
+ module ClassRegisters
9
+ extend self
10
+
11
+ ######################################
12
+ # Class Methods
13
+ ######################################
14
+
15
+ # Class variable getter
16
+ # @param {symbol} name
17
+ # @param {any} default
18
+ # @returns {any}
19
+ def var(name, default = [])
20
+ var_name = WC::Essentials::ClassHelpers.klass_var_name(self, name)
21
+ class_variable_get(var_name)
22
+ rescue StandardError
23
+ default
24
+ end
25
+
26
+ # Register CSV fields and if required
27
+ # @param {Hash}
28
+ def fields(fields = {})
29
+ WC::Essentials::ClassHelpers.assign_class_variable(self, :fields, fields)
30
+ end
31
+
32
+ # Register CSV fields that represent identities
33
+ # @param {Hash} identities Key/value where value represent boolean allow duplication
34
+ def identities(identities = {})
35
+ WC::Essentials::ClassHelpers.assign_class_variable(self, :identities, identities)
36
+ end
37
+
38
+ # Register validators to be run for validation
39
+ # @params {symbol}
40
+ def validators(*validators)
41
+ WC::Essentials::ClassHelpers.assign_class_variable(self, :validators, validators)
42
+ end
43
+
44
+ # Register collectors to be run once main
45
+ # validation. Registered collectors here
46
+ # will not run if halted early
47
+ # @params {symbol}
48
+ def after_validation(*collectors)
49
+ WC::Essentials::ClassHelpers.assign_class_variable(self, :collectors, collectors)
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WC
4
+ module Essentials
5
+ # Tracker for number
6
+ # of a key
7
+ class CountTracker
8
+ def initialize(data = {})
9
+ @tracking = data
10
+ end
11
+
12
+ # Increase the count for the
13
+ # key provided
14
+ # @param {any} key
15
+ # @returns self
16
+ def increase(key)
17
+ @tracking ||= {}
18
+
19
+ @tracking[key] = 0 unless @tracking.key?(key)
20
+ @tracking[key] += 1
21
+ self
22
+ end
23
+
24
+ # Return count for specified key
25
+ # @param {any} key
26
+ # @returns {int}
27
+ def count(key)
28
+ return unless @tracking.key?(key)
29
+
30
+ @tracking[key]
31
+ end
32
+
33
+ # Return keys for
34
+ # item the number provider
35
+ # equivalent to greater than
36
+ # @param {int} min
37
+ # @returns {hash}
38
+ def above(min)
39
+ @tracking.select { |_key, total| total > min }
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WC
4
+ module Essentials
5
+ VERSION = '0.1.0'
6
+ end
7
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'wc/essentials/version'
4
+ require 'wc/essentials/class_helpers'
5
+ require 'wc/essentials/class_registers'
6
+ require 'wc/essentials/count_tracker'
7
+
8
+ module WC
9
+ module Essentials
10
+ class << self
11
+ # Provide developer to setup
12
+ # def configure
13
+ # yield self
14
+ # end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'wc/essentials/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'wc-essentials'
9
+ spec.version = WC::Essentials::VERSION
10
+ spec.authors = ['WorkCompass Dev Team']
11
+ spec.email = ['dev@workcompass.com']
12
+
13
+ spec.summary = 'Reusable helpers for all WorkCompass web applications.'
14
+ spec.description = 'Gem to provide essential and commonly used helpers to all WorkCompass projects.'
15
+ spec.homepage = 'https://workcompass.com'
16
+ spec.license = 'MIT'
17
+
18
+ # Prevent pushing this gem to RubyGems.org. To allow pushes
19
+ # either set the 'allowed_push_host' to allow pushing to a
20
+ # single host or delete this section to allow pushing to any host.
21
+ # if spec.respond_to?(:metadata)
22
+ # spec.metadata['homepage_uri'] = spec.homepage
23
+ # spec.metadata['source_code_uri'] = 'https://github.com/WorkCompass/wc-essentials'
24
+ # else
25
+ # raise 'RubyGems 2.0 or newer is required to protect against ' \
26
+ # 'public gem pushes.'
27
+ # end
28
+
29
+ # Specify which files should be added to the gem when it is released.
30
+ # The `git ls-files -z` loads the files in the RubyGem that have
31
+ # been added into git.
32
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
33
+ `git ls-files -z`.split("\x0").reject do |f|
34
+ f.match(%r{^(test|spec|features)/})
35
+ end
36
+ end
37
+ spec.bindir = 'exe'
38
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
39
+ spec.require_paths = ['lib']
40
+
41
+ # Dev dependencies
42
+ spec.add_development_dependency 'bundler', '~> 1.17'
43
+ spec.add_development_dependency 'rake', '~> 13.0'
44
+ spec.add_development_dependency 'rspec', '~> 3.0'
45
+
46
+ # Quality control
47
+ spec.add_development_dependency 'rubocop', '~> 0.81'
48
+ spec.add_development_dependency 'rubocop-rspec', '~> 1.38'
49
+ spec.add_development_dependency 'simplecov', '~> 0.17'
50
+
51
+ # Debugger for IDE
52
+ spec.add_development_dependency 'debase', '~> 0.2'
53
+ spec.add_development_dependency 'ruby-debug-ide', '~> 0.7'
54
+ end
metadata ADDED
@@ -0,0 +1,181 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: wc-essentials
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - WorkCompass Dev Team
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2023-03-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.17'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.17'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '13.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '13.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.81'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.81'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop-rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.38'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.38'
83
+ - !ruby/object:Gem::Dependency
84
+ name: simplecov
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.17'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.17'
97
+ - !ruby/object:Gem::Dependency
98
+ name: debase
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.2'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.2'
111
+ - !ruby/object:Gem::Dependency
112
+ name: ruby-debug-ide
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.7'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.7'
125
+ description: Gem to provide essential and commonly used helpers to all WorkCompass
126
+ projects.
127
+ email:
128
+ - dev@workcompass.com
129
+ executables: []
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - ".devcontainer/Dockerfile"
134
+ - ".devcontainer/devcontainer.json"
135
+ - ".devcontainer/postCreateCommands.sh"
136
+ - ".github/workflows/coverage.yml"
137
+ - ".github/workflows/publish-gem.yml"
138
+ - ".github/workflows/test-base.yml"
139
+ - ".github/workflows/test-essentials.yml"
140
+ - ".gitignore"
141
+ - ".rspec"
142
+ - ".rubocop.yml"
143
+ - API.md
144
+ - CHANGELOG.md
145
+ - Gemfile
146
+ - Gemfile.lock
147
+ - LICENSE.md
148
+ - README.md
149
+ - Rakefile
150
+ - bin/console
151
+ - bin/setup
152
+ - lib/wc/essentials.rb
153
+ - lib/wc/essentials/class_helpers.rb
154
+ - lib/wc/essentials/class_registers.rb
155
+ - lib/wc/essentials/count_tracker.rb
156
+ - lib/wc/essentials/version.rb
157
+ - wc-essentials.gemspec
158
+ homepage: https://workcompass.com
159
+ licenses:
160
+ - MIT
161
+ metadata: {}
162
+ post_install_message:
163
+ rdoc_options: []
164
+ require_paths:
165
+ - lib
166
+ required_ruby_version: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
171
+ required_rubygems_version: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ requirements: []
177
+ rubygems_version: 3.3.5
178
+ signing_key:
179
+ specification_version: 4
180
+ summary: Reusable helpers for all WorkCompass web applications.
181
+ test_files: []